はじめに
「ソフトウェア 開発者 採用ガイド(Joel on Hiring)」
という書籍の自分まとめへの引用です。
詳細
詳細は以下のnoteに記載しています。
「ソフトウェア 開発者 採用ガイド(Joel on Hiring)」
という書籍の自分まとめへの引用です。
詳細は以下のnoteに記載しています。
JIRAとSlackを連携させて、Jiraをより便利に使おうというメモです
- Jira Cloud for Slackとは
- Jira - Slack integrationのながれ
- SlackにJira Cloudアプリを追加する
- Jiraにてintegrationを作成する
- Jiraにてintegration設定する
- Jiraでticket発行してみる
まんまではありますが、Jiratとslackの連携をするアプリです。
以下のようなことができます
- Jiraでのissueオペレーション
- ticket発行・更新時にslackに通知する
- assignee追加・更新時にslackに通知する
- Slackでのオペレーション
- slash commandsでチケットを発行する
- slack上でassigneeを変更する
それぞれの場所を確認してみます
jiraではprojectごとにintegrationを設定します。
projectページのProject settings
から設定を開きます
設定ページで左サイドバーの下のほうにあるSlack integration
を開きます
このページで設定しますが、
SlackとのConnectionをしないとそもそも選ぶものもなく、
Add
ができません
workspaceにwebでアクセスしConfigure apps
を開きます。
appsの検索でjira
と打てばjira cloud
が出てきます。
integrationの設定を行います。
公式サイトにも記載してますのでご参考ください
* Jira Cloud for Slack
integrationの流れは主に以下の流れで行います
- SlackにJira Cloudアプリを追加する
- Jiraにてintegrationを作成する
- Jiraにてintegration設定する
公式にも記載のある以下のを開きます
https://jira-slack-integration.prod.atl-paas.net/api/slack/login
利用想定のworkspaceが選択された状態を確認し、Allow
を押します。
Log in
を押します
G Suiteなどを利用していればSNS 認証でログインしてください
ログインが成功するとslackに通知が来ます
Dialogは左: jiraのProject
、右: slackのchannel
となっています。
選択してconnect
を押します。
これにて成功です!!
Projectページ > Project settings > Slack integration
を開きます。
今度はTeamsにslackのworkspace
が選択できるようになっています。
workspaceとchannelを選択してadd
するとChannel Subscriptionsにintegrationが追加されます。
Channel SubscriptionsのEditから細かい設定が行えます。
Jiraでticketを発行すると設定したchannleに以下のように投稿されます
また、Slack上の…
からAssignを変更したりも可能です
Jiraとslackの連携は昔はもっと大変なイメージがありました。
いまはとても簡単になってます!\(^o^)/
とあるrepositoryにsubmoduleを複数使っていて、
git submodule update
をしたかったのですが
以下の2つで困ったのでメモ
fatal: Authentication failed
してしまう
- 起こったこと
- 対応したこと
冒頭に記載したまんまですが、
- 毎回パスワードを聞かれる
- ID/pass入力で
fatal: Authentication failed
してしまう
が起こっていました。
このときの状態は以下のようになっていました。
$ vim .gitmodules -- vi -- [submodule "template/a"] path = template/a url = https://github.com/hoge/template-a.git [submodule "template/b"] path = template/b url = https://github.com/hoge/template-b.git [submodule "template/c"] path = template/c url = https://github.com/hoge/template-c.git --------
3回ID/passが聞かれた上にfailedしました。
$ git submodule update Cloning into '/Users/tweeeety/github/any-repos/template/a'... Username for 'https://github.com': tweeeety Password for 'https://tweeeety@github.com': remote: Invalid username or password. fatal: Authentication failed for 'https://github.com/hoge/template-a.git/' fatal: clone of 'https://github.com/hoge/template-a.git' into submodule path '/users/tweeeety/github/mercari/any-repos/template/a' failed failed to clone 'template/a'. Retry scheduled Cloning into '/Users/tweeeety/github/mercari/any-repos/template/a'... ~ 省略 ~
対応としては.gitmodules
のurl指定をhttps指定からssh指定に変えました。
こんな感じですね
$ git diff .gitmodules --- a/.gitmodules +++ b/.gitmodules [submodule "template/a"] path = template/a - url = https://github.com/hoge/template-a.git + url = git@github.com:hoge/template-a.git [submodule "template/b"] path = template/b - url = https://github.com/hoge/template-b.git + url = git@github.com:hoge/template-b.git [submodule "template/c"] path = template/c - url = https://github.com/hoge/template-c.git + url = git@github.com:hoge/template-c.git
.git/config
内のsubmoduleの向き先は
この時点では変わらないので以下を実行します
$ git submodule sync
で、実行してみるとうまくいきましたとさ
$ git submodule update Cloning into '/Users/tweeeety/github/any-repos/template/a'... Cloning into '/Users/tweeeety/github/any-repos/template/b'... Cloning into '/Users/tweeeety/github/any-repos/template/c'... Submodule path 'template/a': checked out 'xxxxxxxxxxae935311265746382d1b54b4e2ab0f' Submodule path 'template/b': checked out 'xxxxxxxxxx2b91a43b8a318f491348aa62b5306f' Submodule path 'template/c': checked out 'xxxxxxxxxxa378276a71869ef3a63cdb3bb7b2c9'
httpsだとなんでダメなんや...
というところはあやふやにしてしまいましたが、
一旦次行きたいのでメモのみで!!\(^o^)/
Golang環境は、職場でも数年利用していました。 Macが新しくなった + 日に日に新しくなっているのでこれを機にlocal環境を作りなおしてみるメモです。
- 今回の構成
- goenvでgoいれる
- direnvでlocal設定する
- go modでpackage管理する
- 実行してみる
場所はどこでも良いのですが、
以下にsampleをおくと仮定して進めます。
$ cd $HOME/sample $ pwd $HOME/sample
goenvは、go言語のバージョンを管理するものです。
rbenvやnodebrewを使ってる人には名前を見たらすぐわかりますね!
$ go version go version go1.12.4 darwin/amd64 $ brew install goenv $ goenv versions * system (set by /Users/tweeeety/.goenv/version)
$ vim ~/.bashrc -- 追記 -- # for goenv export GOENV_ROOT="$HOME/.goenv" export PATH="$GOENV_ROOT/bin:$PATH" eval "$(goenv init -)" ----------
$ goenv install --list Available versions: 1.2.2 1.3.0 ~ 省略 ~ 1.11.3 1.11.4 1.12beta1 $ goenv install 1.11.4 Downloading go1.11.4.darwin-amd64.tar.gz... -> https://dl.google.com/go/go1.11.4.darwin-amd64.tar.gz Installing Go Darwin 64bit 1.11.4... Installed Go Darwin 64bit 1.11.4 to /Users/tweeeety/.goenv/versions/1.11.4 # $HOME/sample配下を1.11.4にする $ goenv local 1.11.4 $ ls -al total 8 drwxr-xr-x 3 tweeeety tweeeety 96 6 23 02:47 . drwxr-xr-x 6 tweeeety tweeeety 192 6 23 02:46 .. -rw-r--r-- 1 tweeeety tweeeety 7 6 23 02:47 .go-version $ cat .go-version 1.11.4
direnvのinstallは以下をご参考ください
$ pwd $HOME/sample $ direnv edit . -- vi追記 -- export GO111MODULE=on export GOPATH=$PWD/go ------------ # 念の為 $ direnv allow
package管理には
これまでglide
やらdep
やらがいましたが、
これからはGo Modules
らしいので使ってみます。
go 1.12からはデフォルトだけど、
go 1.11ではexport GO111MODULE=on
とすることで使用できるようです。
今回は、上記のdirenv
にて、
特定のdirに対してはexportするように設定したものですね。
go mod init hello
を打つと、
go.mod
というファイルができます。
$ go mod init hello go: creating new go.mod: module hello
rsc.io/quote
は、 Go Modulesの説明のために作られたパッケージのようなのでそれを使います。
package main import ( "fmt" "rsc.io/quote" ) func main() { fmt.Println(quote.Hello()) }
go build
を打つと利用しているpackageをinstallまでしてくれます。
$ go build go: finding rsc.io/quote v1.5.2 go: downloading rsc.io/quote v1.5.2 go: extracting rsc.io/quote v1.5.2 go: finding rsc.io/sampler v1.3.0 go: finding golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c go: downloading rsc.io/sampler v1.3.0 go: extracting rsc.io/sampler v1.3.0 go: downloading golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c go: extracting golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c $ cat go.mod module hello go 1.12 require rsc.io/quote v1.5.2
また、この時点で以下のような構成になっています
$ pws $HOME/sample $ tree . -L 4 . ├── go │ └── pkg │ └── mod │ ├── cache │ ├── golang.org │ └── rsc.io ├── go.mod ├── go.sum ├── hello └── hello.go 6 directories, 4 files
$ go run hello こんにちは世界。
無事、実行できました!
Go Modules
便利\(^o^)/
nodeのネタではあるんですが、
pythonでエラーというパターン
悲しみ...
nodeでsleepが使いたかっただけです。
つまり以下が実行したかっただけです
$ npm install sleep --save-dev
$ npm install sleep --save-dev > sleep@6.1.0 install /Users/tweeeety/sample/node_modules/sleep > node-gyp rebuild gyp ERR! configure error gyp ERR! stack Error: Command failed: /Users/tweeeety/.pyenv/shims/python -c import sys; print "%s.%s.%s" % sys.version_info[:3]; ~ 省略 ~
原因はpython3系なことが原因のようです。
ちょっと前にわけあって
たしかにpyenvでpython3にしていた...
$ python --version Python 3.7.2 $ pyenv versions system * 3.7.2 (set by /Users/tweeeety/.pyenv/version)
ここまで書いていると言わずもがなですが、
pyenvでsystem pythonに戻してからnpm installしなおします
$ pyenv global system $ pyenv versions * system (set by /Users/tweeeety/.pyenv/version) 3.7.2 $ npm install sleep --save-dev > sleep@6.1.0 install /Users/tweeeety/sample/node_modules/sleep > node-gyp rebuild CXX(target) Release/obj.target/node_sleep/module_init.o CXX(target) Release/obj.target/node_sleep/sleep_cpp11.o CXX(target) Release/obj.target/node_sleep/sleep_posix.o CXX(target) Release/obj.target/node_sleep/sleep_win.o SOLINK_MODULE(target) Release/node_sleep.node npm WARN search_repository@1.0.0 No description npm WARN search_repository@1.0.0 No repository field. + sleep@6.1.0 added 1 package from 1 contributor and audited 65 packages in 4.001s found 0 vulnerabilities
pythonでnpmがエラーになるみたいな感じだと
最初はめっちゃわかりにくい...
pyenv localの方で設定すれば良かった説もありますが><
perlを触っていて、
gzipなデータを読み込みたかったのでそのメモです
APIのresponseデータなど、内部データとしてgzipデータを読み込みたかったのです。
gzipのファイルを読むという記事はぐぐれば結構あるのですが、
内部データっていうところがミソですね。
Compress::Raw::Zlib
というcpanモジュールで簡単にできました。
$gzip_data
がgzipなデータだったとするとこんな感じです。
use Compress::Raw::Zlib; my ($d, $status) = new Compress::Raw::Zlib::Inflate( -WindowBits => WANT_GZIP, ); my $output; $status = $d->inflate($gzip_data, $output);
参考にサンプルコードを載せました
Compress::Raw::Zlibなかなか便利です \(^o^)/
コマンドラインやシェルスクリプトにて、
ディレクトリ名だけを取得したいときありますよね。
すごい簡単なのですが忘れがちなのでメモ
basename $(pwd)
以上ですw
$ pwd /Users/tweeeety $ basename $(pwd) tweeeety
わすれがちーー\(^o^)/