Beeeat’s log

Beeeat’s log

プログラミングで出くわした知識やツール、日常生活、働き方その他色々なことをメモしていくブログ

Slack通知 と GitHub の Releases・Tags を自動生成するツールを作っています

この記事は,Slack Advent Calendar 2019 18日目の記事です.

現在,slack-ruby-client と octokit.rb を使って,Slack通知 と GitHub の Releases・Tags の自動生成を一気に実行するツールを作っています.今回はそのツールについて紹介します.

github-slack-release-notification

github.com

slack-ruby-client と octokit.rb を利用して,Slack APIGitHub API を実行し,Slack通知や GitHub の Releases と Tags が自動生成するようにしました.

Slack通知では Block Kit を使って最新のプルリクエストの情報を表示するようにしています.今の所,名前がそのまんまのため,どこかのタイミングで名前を再検討するかもしれないです.

使い方

git cloneをしてからプロジェクト直下に.envを作成し,以下の定数を設定していきます.

GITHUB_PERSONAL_ACCESS_TOKEN=GitHub の個人アクセストークン(repo)
GITHUB_REPOSITORY=Githubのユーザ名/リポジトリ名
SLACK_API_TOKEN=Bots の Slack API トークン
PRODUCT_PAGE=プロダクトのWebページのURL
RELEASE_POST_CHANNELS="random,general"
ERROR_POST_CHANNELS="random,general"
SUCCESS_EMOJI=":kirakira:"
FAIL_EMOJI=":guttari:"

○○_EMOJIには,Slack の好きな絵文字を設定できます.Slack のチャンネルは複数選択が可能です. SLACK_API_TOKENは Bots の API トークンを利用しました. f:id:bake0937:20191218224040p:plain

プロジェクト直下でapp.rbを実行します

github-slack-release-notification - [master] » ruby app.rb

Slack を見ると通知が来ています.(検証用のスクショとは言え,このPR内容はちょっと恥ずかしい...)

f:id:bake0937:20191218221715p:plain

設定した GItHub リポジトリを見てみると,Releases・Tags も作られています. f:id:bake0937:20191218222006p:plain

作ろうと思ったきっかけ

普段は Ruby on Rails (以下,Rails)でのWebサービス開発を通して Ruby を書いているのですが,もっと Ruby 力を高めたいと思っていました.すると,Rails というフレームワークから離れた Ruby のコードを最近はあまり書いていないことにふと気がつきました.

そこで,今年の7月に ootemachi.rb で Rubotyを触ってみたという内容でLTをしてみたのですが,LT が終わって数分後に「ん?今度は Ruboty という Botフレームワークに乗っているのでは?」と気づいてしまいました.

enechange-meetup.connpass.com

そんな中,この勉強会の会場が Slack Japan のオフィスで,私のLTの前に@seratchさんの「Ruby で始める Slack App 開発」というセッションの内容を思い出していると「slack-ruby-client と Ruby で何か作れば,フレームワークに縛られずに何か役立つ楽しいツールが作れるかもしれない」と思いつきました.

そして,その頃は業務でデプロイ時に Slack通知 をする Capistarano のプラグインReleases・Tags を自動生成する Capistarano のプラグインの導入を終えていたタイミングで「この2つの機能を Slack と GitHubAPI を組み合わせて表現したら面白くなりそう」と思って作ってみた感じです.

ここまで作ってみての感想

一言で言うと「オブジェクト指向を自分で納得しながら Ruby を書くことができた」です.Ruby を始めたての頃,入門書でクラスについての章で車クラスや車輪クラスを作ってオブジェクト指向を学んだ記憶があったのですが,「これが開発業務にどのように結びつくのか?」ともやもやしていました(正直これは大学時代に Java を勉強していた頃から感じていた...).

勿論,普段の開発でもオブジェクト指向は活用していますが,あくまで「フレームワークのルールに沿ったオブジェクト指向」なので「オブジェクト指向をやっている感」をあまり強く感じていませんでした.あまり上手く説明できていませんが,他に「Active Record にだいぶ助けられているのでは?」と思っているのも関係あるかもしれないです.

しかし,今回のツール作成を通して,「1つのファイルに処理をひたすら書く」→「冗長になってきたのでメソッド化」→「それでも長くなってきたので,メインの処理やAPIを操作する役割毎にクラスを作る」というオブジェクト指向の流れを自分で納得しながら自然に進めることができました.

また,Rails のようなディレクトリ構成も決まっていないため,どのような構成にするかも自分で決められるため.設計の本を読みながら色々試行錯誤ができます.また, 現在のコードが再設計やリファクタリングしがいがある状態なので Ruby の勉強するモチベーションがだいぶ上がりました.

今後

再設計(.envで設定する値も多いし...)やテストコードの導入など,やること沢山ありそうです.最終的には CI での自動デプロイ後に AWS Lambda で実行できるようにしたいと考えています.

まとめと所感

Slack通知 と GitHub の Releases・Tags を自動生成するツールを作っています.今までオリジナルの Webサービス を好んで作っていて,Ruby でツールを作成するのが久しかったですが,Slack や GitHub の Web API を組み合わせると,とても面白くなることを実感しました.業務でのちょっとした不便を解消するアイデアが出てきているので,ドンドン作っていこうと思います.

また,Ruby に限らず JavaScriptgolang など他の言語でのツール開発にもチャレンジしていこうと思います.