飛ばねぇ馬はただの馬。

Life is too short for bad code.

ruboty-githubプラグインをつくっている話

これはなに

ruboty-githubというRubotyプラグインを作っているのでご紹介。

r7kamura/ruboty-githubをForkしたもの。

Rubotyとは

Ruby + Bot = Ruboty.

Rubotyとは、Ruby製のbotフレームワークです。 SlackやChatWorkでの会話、redisやGoogle Spreaadsheetでのデータ保持、各種APIへの接続をすることができます。 また、Ruboty用プラグイン(RubyGem)を追加することで好きな機能を追加することができます。

Rubotyが反応してレスポンスを返すまで

f:id:pranc1ngpegasus:20210828205544p:plain

  1. 外部サービスで発生したイベントがAdapterに入る
  2. イベントはMessageとしてHandlerへ
  3. 正規表現でMessegeに対応するActionsをマッチしてActionsへ
  4. APIをコールしたりBrainsを使ってデータを保持したりしてReply messageを作成
  5. HandlerはActionsの返り値をMessageに返す
  6. MessageがAdapterにレスポンス

ruboty-githubとは

RubotyからGitHub APIをコールしていろいろやるプラグインです。

なぜ作っているのか

着想

  • 人間は忘れる生き物
  • 人間は間違える生き物
  • 同じことを何度もやるのは苦痛

どうするか

  • 人間がやることをラップして簡単に
  • 人間がやらなくていいことは自動化

できること

  • Branch
    • 作成
  • Pull Request
    • 作成
    • マージ
  • Issue
    • 作成
    • Close
  • Release
    • 作成
    • リリース一覧を取得
    • 最新のリリースバージョンを取得
    • 最新のリリースとmasterの差分を取得
  • Commit
    • Commit間の差分を取得

たとえば

リリースを作成

f:id:pranc1ngpegasus:20210828205632g:plain

リリース一覧の取得

f:id:pranc1ngpegasus:20210828205813g:plain

最新のリリースバーションを取得

f:id:pranc1ngpegasus:20210828205927g:plain

工夫したところ

  • GitHub organization名を省略できるように
  • リリースタグのprefixを指定してvalidationをかけるように
  • リリース作成時に差分に含まれるPull Requestをdescriptionに記載できるように

まとめ

DevOpsにチャットツールを使うChatOpsを強化することで人的ミスを減らし、継続的なアプリケーション開発/運用に貢献していきたいです。