DIGGLE開発者ブログ

予実管理クラウドDIGGLEのプロダクトチームが、技術や製品開発について発信します

DIGGLEを支えるbotのお仕事

こんにちは。DIGGLEのCTO 水上です。最近、生物分類技能検定の4級に合格しました。

さて、DIGGLEも今年からテックブログをはじめました。今回、第一弾として、DIGGLEを支えるslack botのお仕事についてご紹介します。

当然、普段は本プロダクトの機能追加や改修で手一杯であるわけですが、とはいえ単純作業に時間を使いたくもありません。サクッと実装したbotに単純作業を委ねられれば、生産性を高めることができます。

もちろんニーズのあるものや工数削減になるようなタスクでないと、大抵は使われない運命にあります。今回は、現在も良く使われているbotのタスクを紹介していきます。

まずは、kawauso君のご紹介

DIGGLEには、通称kawauso君というbotがいます。内実は、herokuに立てたhubotサーバとなっています。よくあるやつですね。

f:id:norainu234:20220124184808p:plain

kawausoのお仕事その1【リリース編】

リリースと言っても、実際のデプロイはGitHub Actionsがやっています。DIGGLEのデプロイは、GitHubに環境ごとのブランチ( productionstaging )が存在して、それらのブランチに対してマージが行われることをトリガーに、GitHub Actionsがデプロイを行う仕組みになっています。

そのため基本的には、リリース時は リリースしたいブランチ環境 のプルリクエスト(リリースPR)を作成してマージすることによって、リリースを開始できます。

slack経由でのリリースPR作成

リリース時はPR作成してマージするだけで良いとは言うものの、そのリリースが含むリリース内容をmasterとproductionの差分から自動的に抽出してくれると、何が出るのか分かりやすいです。 github-pr-release というライブラリを使うと、PR作成と、リリース対象のリストアップまですべてやってくるような、hubotのコマンドを簡単に実装できます。

f:id:norainu234:20220125125711p:plain
kawausoへのリリースブランチ作成依頼

f:id:norainu234:20220124214709p:plain
作成されたPR. リリースされるPRの内容が自動で入ります

顧客デモ中などにおけるリリースのブロック

CSやセールスがデモ等、重要な打ち合わせの際には、UIが変わってしまったり、変なトラブルが発生すると困ることがあります。DIGGLEでは、こうしたリリースを避けるべき時間帯に、開発以外のチームが開発側にリリースを避けるようにお願いする場合は、ReleaseBlockというGoogleCalendarに予定を作る運用になっています。

このカレンダーの予定がある場合には、上記のリリースPR作成を試みても、kawausoは受け付けないようになっています。これによって、依頼があるにも関わらず誤ってリリースしてしまうといったミスを防ぐことができます。もちろんこれは、あくまでslack経由でのリリースを防止できるだけの機能なので、クリティカルなバグ修正が必要な場合は、GitHub上で直接PRを作成すれば運用上は問題ありません。

f:id:norainu234:20220125125910p:plain
ブロック中にリリースしようとするとkawausoに怒られます

kawausoのお仕事その2【レビュー周り】

レビュワーのランダムなアサイン

レビュワー指名が偏ってしまうと、誰かに過剰な負荷がかかってしまうリスクがあります。またリポジトリの規模にもよりますが、今のDIGGLEぐらいのチームにおいては、仕様や実装理解の属人性を減らすことは重要です。そこで、レビュワーをbotにランダムにアサインさせる仕組みがあります。

kawauso君はGitHub上の「レビュー待ち」ラベルが貼られたタイミングを契機に、Webhook経由でランダムにレビュー依頼をしてくれます。レビュワー候補はGitHubのteamで管理しているため、新たにメンバーが入社した場合、レビュワーとして入って問題ないと思ったタイミングでteamに追加することでランダムにアサインする候補に入ります。

また、DIGGLEでは利用しているOSSライブラリのバージョンアップを自動でPRにしてくれるdepfuというサービスを利用しており、このバージョンアップPRが作成された場合にも、自動的にレビュワーが割り当てられるようになっています。

f:id:norainu234:20220124231209p:plain
レビュー待ちラベルをつけるとkawausoがアサインしてくれる

レビュー依頼されているPRのslack上での確認

自分に依頼されたPRの確認というのは、GitHub上でのフィルタでも見えるのですが、依頼から何時間経過したのかなど詳細が見えづらく、やや使いにくい部分があります。そこで、slack上で対話的に確認できるようになっています。下記のように、レビュー依頼から何時間経ったのかが出るので、優先するべきレビューを把握することが出来るようになっています。 (この機能は、非常によく使われています)

f:id:norainu234:20220124231634p:plain
kawauso check reviewsでレビュー待ち一覧を出してくれる

まとめ

以上、DIGGLEでよく使われているbotタスクを紹介しました。

これらの実装は公開するレベルには至っておりませんが、もしニーズがあれば @mizukami234 までDMください。

We're hiring!

時にはbotも駆使しつつ、生産性を高めながら開発を進める開発メンバーを募集しています!少しでも興味があれば、ぜひ下記採用サイトからエントリーください。

open.talentio.com