作ってそこそこ便利だったボットとかまとめ

FOLIO Advent Calendar 2019 - Qiita 10日目代打です。

9日目はlotzさんの 挿入ソートと選択ソートは双対 - Qiitaでした。 recursion schemesの応用って融合変換くらいしか知らなかったんですが身近なアルゴリズムの性質を表現できるのは面白いですね。 自分で学ぶことで見通しよく効率化のアイディアを出せたりad-hocに見えていたアルゴリズムに横のつながりが見えてきて理解が深まりそうです。

最近ブログ書かなさすぎて書き方を忘れていた まっちゃら (@matsu_chara) | Twitterです(´・_・`)

今回は今まで作ってきたボットや社内用サービスをまとめようと思います。 やや内輪ネタっぽいですが、こういうのあると便利かもしれないというアイデアのきっかけになればと思います。 似たようなのあるけどうちはもっと便利だぜ!っていうのあったらぜひ教えて下さい。

社内ブックマーク gol

新しく入社したメンバーに、consulのurlはこれで、prometheusはこれで、ああサービス画面はこっちで。 と教えることはよくあると思いますが、それぞれのリンクを覚えるのは結構大変だったりします。

ドキュメント管理ツールにブックマーク集みたいなページを追加しても慣れてる人は使わないからメンテされない。なんてこともよく起こります。

golはそれらの問題を解決するブックマーク共有&検索サービスです。
まあ実際はただの管理画面付きkvsなんですが、結構便利だったりします。

例えば画像のように、consulと検索するだけで各環境のconsulがすぐに出てきたり

f:id:matsu_chara:20191214160516p:plain:w450

chrome拡張(これは同僚が作ってくれました!)を使うとgolのページに行かなくてもcommand + gとかでさっと検索できます。

検索キーワードをかなり雑に指定してもヒットするようになっていて、 space区切りで適当に「cons stg」と入れれば「consul_stg」だろうが「stg-consul」だろうがヒットしてくれるのが割と気に入っています。 こういう規約とか覚えるの面倒ですしね。

f:id:matsu_chara:20191214160846p:plain:w450

ちなみにgoを書き始めて初めて作ったものなので実装はあれな感じになっています。 許して

slack_user_avatar_emojis

GitHub - matsu-chara/slack_user_avatar_emojis: register slack user avatars to emoji

slackの全ユーザーのiconを取得して、slackのemojiとして登録するものです。 本文に含めてもいいですし、emoji reactionにしても良しで社内の文化作り的にも良いです。 emojiだと名字よりもちょっとほんわかしますしね。

アイコン変更イベントを取ってきて自動で更新し続けてくれるデーモンにしようと思って100年くらいたってるので誰かお願いします(他力本願)

というかこのemoji、公式で実装されて欲しいですね。

ちなみにトークン設定とかが結構必要なので動かすのは結構ダルめです(´・_・`)

reacjira

emoji reactionをつけると特定のチャンネルに通知してくれるreacji-channelerにインスパイアされた、 emoji reactionをつけると特定のjira projectにチケットを切ってくれるボットです。

reaction + jira で reacjiraってわけですね。

アイコンはいらすとやで見つけたかわいいクジラです。(ダジャレ・・・)

↓の感じで、 :○○_story: みたいなemojiをつけてやるとチケットが作成されスレッドとして投稿されます。

f:id:matsu_chara:20191214162615p:plain:w450

この際、チケットの中身として↓の画像のようにdescription欄にslackのスレッドのリンクがデフォルトで記載されます。

f:id:matsu_chara:20191214162623p:plain:w450

reacjiraを使うと依頼を受けた際にすぐチケットを作成できて以下のようなメリットが生まれます。

  • 頼んだ人: どのチケットを見れば進捗が分かるのか分かりやすい
  • 頼まれた人: 詳細を書くのを忘れてしまっても、slackリンクがあるのでどういう文脈で作られたチケットなのか最悪分かる*1

一説によるとzappierとかでできるらしいという話があったりなかったりするんですが、 自作botだとjiraのあらゆるフィールドをいじったり、結構強引なルールを設定したりできるので便利です。

ちなみにjiraの公式integrationとかが進化してくると要らなくなる存在になりそうです(´・_・`) *2

jobdiff

これはかなり社内限定で便利なやつで、jenkins-job-dsl*3のjenkins反映済みcommit ~ 最新masterまでのcompareリンクを生成してくれるというただそれだけのものです。*4

f:id:matsu_chara:20191214163855p:plain:w450

正直bot化するものでもないんですが、jenkins見る => compareリンク作るみたいなのは手間だったので一発で生成してくれるようにしました。

jenkins叩くコードがすでに手元にあったので5秒くらいで完成したし、botデプロイ環境+token登録環境が割と整備されてるので思いついてサクッと作ってすぐデプロイみたいなことがしやすいんでこういう、微妙〜〜〜に不便ってのも解決できていいですね。(環境整備してくれているチームに感謝)

ところでjenkins-job-dslリポジトリが大きくなりすぎて、job-seedに時間がかかりすぎたりいろいろな問題があるので 脱jenkinsも含めて最高のジョブ基盤を作ろうとしています。

それができたらjobdiff君は消え去ることになります。(宿命)

consul bot

これも社内限定で便利なやつで、サービスディスカバリとして利用しているconsulから情報をとってきて、各環境の各サービスのバージョンを一覧として取ってきたり、ip+portを取ってきたりするやつです。

version stg,prod ac のように書くと「stg,prod環境」にある 「acから始まるサービス」のバージョン情報を取得します。*5

サービス名は省略してもいいしフルネームでも大丈夫です。

f:id:matsu_chara:20191217124557p:plain:w450

デプロイしたあとにちゃんと切り替わってるよね?といった確認に使ったり、トラブルシュートする際に参照したりしています。

consulは今の所困っていないんですがServicMeshとか入ってきた時にうちのconsulが生き残るかは不明です。頑張って(´・_・`)

まとめ

作ったけどボツになったやつとかも結構ある(公式機能で対応されてボツとか、使いにくかったりとか)んですが、 社内でも使ってもらえてるのを見るとちょっと嬉しいです。(新しく入ってきた方が早速使ってたりすると特に)

これからも地味だけどあるのが当たり前みたいな便利さを目指して頑張っていきます。

*1:もちろん書いたほうがいいんですが

*2:っていうか元から要らない感はあるんですがreacjiraっていう名前思いついたら作るしかなくない???

*3:groovyでjenkins jobを定義できるやつ。jenkins Pipelineとは異なるもの。

*4:なんでそんなものが必要なのか?みたいな背景書いたけど、社内でしか伝わらなさそうなので消しました。

*5:バージョンはconsulにregisterにするときにgit tagをconsul Noteに入れることで取得できるようにしています。