こんにちは。DIGGLEのCTO 水上です。最近、生物分類技能検定の4級に合格しました。
さて、DIGGLEも今年からテックブログをはじめました。今回、第一弾として、DIGGLEを支えるslack botのお仕事についてご紹介します。
当然、普段は本プロダクトの機能追加や改修で手一杯であるわけですが、とはいえ単純作業に時間を使いたくもありません。サクッと実装したbotに単純作業を委ねられれば、生産性を高めることができます。
もちろんニーズのあるものや工数削減になるようなタスクでないと、大抵は使われない運命にあります。今回は、現在も良く使われているbotのタスクを紹介していきます。
まずは、kawauso君のご紹介
DIGGLEには、通称kawauso君というbotがいます。内実は、herokuに立てたhubotサーバとなっています。よくあるやつですね。
kawausoのお仕事その1【リリース編】
リリースと言っても、実際のデプロイはGitHub Actionsがやっています。DIGGLEのデプロイは、GitHubに環境ごとのブランチ( production
や staging
)が存在して、それらのブランチに対してマージが行われることをトリガーに、GitHub Actionsがデプロイを行う仕組みになっています。
そのため基本的には、リリース時は リリースしたいブランチ
→ 環境
のプルリクエスト(リリースPR)を作成してマージすることによって、リリースを開始できます。
slack経由でのリリースPR作成
リリース時はPR作成してマージするだけで良いとは言うものの、そのリリースが含むリリース内容をmasterとproductionの差分から自動的に抽出してくれると、何が出るのか分かりやすいです。 github-pr-release というライブラリを使うと、PR作成と、リリース対象のリストアップまですべてやってくるような、hubotのコマンドを簡単に実装できます。
顧客デモ中などにおけるリリースのブロック
CSやセールスがデモ等、重要な打ち合わせの際には、UIが変わってしまったり、変なトラブルが発生すると困ることがあります。DIGGLEでは、こうしたリリースを避けるべき時間帯に、開発以外のチームが開発側にリリースを避けるようにお願いする場合は、ReleaseBlockというGoogleCalendarに予定を作る運用になっています。
このカレンダーの予定がある場合には、上記のリリースPR作成を試みても、kawausoは受け付けないようになっています。これによって、依頼があるにも関わらず誤ってリリースしてしまうといったミスを防ぐことができます。もちろんこれは、あくまでslack経由でのリリースを防止できるだけの機能なので、クリティカルなバグ修正が必要な場合は、GitHub上で直接PRを作成すれば運用上は問題ありません。
kawausoのお仕事その2【レビュー周り】
レビュワーのランダムなアサイン
レビュワー指名が偏ってしまうと、誰かに過剰な負荷がかかってしまうリスクがあります。またリポジトリの規模にもよりますが、今のDIGGLEぐらいのチームにおいては、仕様や実装理解の属人性を減らすことは重要です。そこで、レビュワーをbotにランダムにアサインさせる仕組みがあります。
kawauso君はGitHub上の「レビュー待ち」ラベルが貼られたタイミングを契機に、Webhook経由でランダムにレビュー依頼をしてくれます。レビュワー候補はGitHubのteamで管理しているため、新たにメンバーが入社した場合、レビュワーとして入って問題ないと思ったタイミングでteamに追加することでランダムにアサインする候補に入ります。
また、DIGGLEでは利用しているOSSライブラリのバージョンアップを自動でPRにしてくれるdepfuというサービスを利用しており、このバージョンアップPRが作成された場合にも、自動的にレビュワーが割り当てられるようになっています。
レビュー依頼されているPRのslack上での確認
自分に依頼されたPRの確認というのは、GitHub上でのフィルタでも見えるのですが、依頼から何時間経過したのかなど詳細が見えづらく、やや使いにくい部分があります。そこで、slack上で対話的に確認できるようになっています。下記のように、レビュー依頼から何時間経ったのかが出るので、優先するべきレビューを把握することが出来るようになっています。 (この機能は、非常によく使われています)
まとめ
以上、DIGGLEでよく使われているbotタスクを紹介しました。
これらの実装は公開するレベルには至っておりませんが、もしニーズがあれば @mizukami234 までDMください。
We're hiring!
時にはbotも駆使しつつ、生産性を高めながら開発を進める開発メンバーを募集しています!少しでも興味があれば、ぜひ下記採用サイトからエントリーください。