tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【書籍】ソフトウェア 開発者 採用ガイド - を読んだメモ

はじめに

「ソフトウェア 開発者 採用ガイド(Joel on Hiring)」
という書籍の自分まとめへの引用です。

ソフトウェア開発者採用ガイド
Joel Spolsky
翔泳社
売り上げランキング: 389,465

詳細

詳細は以下のnoteに記載しています。

【JIRA】Jira Cloudでslackを連携させるメモ

はじめに

JIRAとSlackを連携させて、Jiraをより便利に使おうというメモです

アジェンダ

  1. Jira Cloud for Slackとは
  2. Jira - Slack integrationのながれ
  3. SlackにJira Cloudアプリを追加する
  4. Jiraにてintegrationを作成する
  5. Jiraにてintegration設定する
  6. Jiraでticket発行してみる

1. Jira Cloud for Slackとは

まんまではありますが、Jiratとslackの連携をするアプリです。

なにができるか

以下のようなことができます

  • Jiraでのissueオペレーション
    • ticket発行・更新時にslackに通知する
    • assignee追加・更新時にslackに通知する
  • Slackでのオペレーション
    • slash commandsでチケットを発行する
    • slack上でassigneeを変更する

どこにあるか

それぞれの場所を確認してみます

jira

jiraではprojectごとにintegrationを設定します。
projectページのProject settingsから設定を開きます
f:id:tweeeety:20191107184753p:plain

設定ページで左サイドバーの下のほうにあるSlack integrationを開きます f:id:tweeeety:20191107184837p:plain

このページで設定しますが、
SlackとのConnectionをしないとそもそも選ぶものもなく、
Addができません f:id:tweeeety:20191107184854p:plain

slack

workspaceにwebでアクセスしConfigure appsを開きます。
appsの検索でjiraと打てばjira cloudが出てきます。
f:id:tweeeety:20191107184915p:plain

2. Jira - Slack integrationのながれ

integrationの設定を行います。
公式サイトにも記載してますのでご参考ください
* Jira Cloud for Slack

integrationの流れは主に以下の流れで行います

  • SlackにJira Cloudアプリを追加する
  • Jiraにてintegrationを作成する
  • Jiraにてintegration設定する

3. SlackにJira Cloudアプリを追加する

公式にも記載のある以下のを開きます

https://jira-slack-integration.prod.atl-paas.net/api/slack/login

利用想定のworkspaceが選択された状態を確認し、Allowを押します。
f:id:tweeeety:20191107184953p:plain

Log inを押します f:id:tweeeety:20191107185012p:plain

G Suiteなどを利用していればSNS 認証でログインしてください f:id:tweeeety:20191107185026p:plain

ログインが成功するとslackに通知が来ます f:id:tweeeety:20191107185040p:plain

Dialogは左: jiraのProject右: slackのchannelとなっています。
選択してconnectを押します。
f:id:tweeeety:20191107185106p:plain

これにて成功です!! f:id:tweeeety:20191107185118p:plain

4. Jiraにてintegrationを作成する

Projectページ > Project settings > Slack integration を開きます。

今度はTeamsにslackのworkspaceが選択できるようになっています。
f:id:tweeeety:20191107185134p:plain

workspaceとchannelを選択してaddするとChannel Subscriptionsにintegrationが追加されます。 f:id:tweeeety:20191107185203p:plain

5. Jiraにてintegration設定する

Channel SubscriptionsのEditから細かい設定が行えます。
f:id:tweeeety:20191107185218p:plain

6. Jiraでticket発行してみる

Jiraでticketを発行すると設定したchannleに以下のように投稿されます f:id:tweeeety:20191107185230p:plain

また、Slack上の からAssignを変更したりも可能です f:id:tweeeety:20191107185238p:plain

おわり

Jiraとslackの連携は昔はもっと大変なイメージがありました。

いまはとても簡単になってます!\(^o^)/

【git】submodule updateでfailed & 毎回パスワード聞かれる問題

はじめに

とあるrepositoryにsubmoduleを複数使っていて、
git submodule updateをしたかったのですが
以下の2つで困ったのでメモ

  • 毎回パスワードを聞かれる
  • ID/pass入力でfatal: Authentication failedしてしまう

アジェンダ

  1. 起こったこと
  2. 対応したこと

1. 起こったこと

冒頭に記載したまんまですが、

  • 毎回パスワードを聞かれる
  • 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'...

~ 省略 ~

2. 対応したこと

対応としては.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^)/

【go】goenvとdirenvとGo Modulesとで新しいgo環境をつくる

はじめに

Golang環境は、職場でも数年利用していました。 Macが新しくなった + 日に日に新しくなっているのでこれを機にlocal環境を作りなおしてみるメモです。

アジェンダ

  1. 今回の構成
  2. goenvでgoいれる
  3. direnvでlocal設定する
  4. go modでpackage管理する
  5. 実行してみる

1. 今回の構成

場所はどこでも良いのですが、
以下にsampleをおくと仮定して進めます。

$ cd $HOME/sample

$ pwd
$HOME/sample

2. goenvでgoいれる

goenvは、go言語のバージョンを管理するものです。
rbenvやnodebrewを使ってる人には名前を見たらすぐわかりますね!

goenvのinstall

$ go version
go version go1.12.4 darwin/amd64

$ brew install goenv

$ goenv versions
* system (set by /Users/tweeeety/.goenv/version)

goenvの設定

$ vim ~/.bashrc
-- 追記 --
# for goenv
export GOENV_ROOT="$HOME/.goenv"
export PATH="$GOENV_ROOT/bin:$PATH"
eval "$(goenv init -)"
----------

goenvでgoの任意のversionをインストール

$ 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

2. direnvでlocal設定する

direnvのinstall

direnvのinstallは以下をご参考ください

direnvの設定

$ pwd
$HOME/sample

$ direnv edit .
-- vi追記 --
export GO111MODULE=on
export GOPATH=$PWD/go
------------

# 念の為
$ direnv allow

3. go modでpackage管理する

package管理には
これまでglideやらdepやらがいましたが、
これからはGo Modulesらしいので使ってみます。

go mod initでgo.modを作る

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

hello.goを作る

rsc.io/quoteは、 Go Modulesの説明のために作られたパッケージのようなのでそれを使います。

package main

import (
    "fmt"

    "rsc.io/quote"
)

func main() {
    fmt.Println(quote.Hello())
}

go buildでpackageのinstallも行う

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

4. 実行してみる

$ go run hello
こんにちは世界。

無事、実行できました!

おわり

Go Modules便利\(^o^)/

【node】pyenvでpython3使ってたらnpm install sleep --save-devで`gyp ERR! configure error`と怒られたメモ

はじめに

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を読み込むメモ - Compress::Raw::Zlib

はじめに

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^)/

【bash】コマンドラインやシェルスクリプトでディレクトリ名を取得する

はじめに

コマンドラインやシェルスクリプトにて、
ディレクトリ名だけを取得したいときありますよね。

すごい簡単なのですが忘れがちなのでメモ

どうやるか

basename $(pwd)

以上ですw

$ pwd
/Users/tweeeety

$ basename $(pwd)
tweeeety

おわり

わすれがちーー\(^o^)/