はじめまして。
株式会社 RevComm でバックエンドエンジニアをしている近藤です。主に MiiTel Analytics や外部連携の開発に携わっています。
MiiTel Analytics とは、電話やビデオ会議のデータ可視化や MiiTel を構成するマイクロサービスに API を提供するプロダクトです。 執筆時点で 20 名弱ほどのエンジニアメンバーで構成されている、RevComm 内では比較的大きなチームです。 CI / CD ツールとしては GitHub Actions と AWS CodeDeploy を利用しています。 またこれらのツールを
- ビルド・テスト・リリースフェーズを自動化
- ルールの普及
の2つの目的で活用しています。
ここでいうルールの普及とは、開発におけるツールの運用や気をつけるべきことを開発メンバー全体に周知・徹底することです。 前述の通り MiiTel Analytics チームは比較的大きく、さらに拡大し続けています。 このような状況で、例えば GitHub Issue 管理方法、pull request の出し方などのルールを普及させるのは難しいです。そこで、CI / CD ツールを利用してこの課題を解決しようとしています。
この記事では
- GitHub Issue 管理
- GitHub pull request 管理
- 開発知識の共有
という 3 つの具体的なケースについて、GitHub Actions の定義ファイルも合わせて紹介します。
GitHub Issue 管理
Analytics チームでは GitHub projects を利用しています。いわゆるカンバンというものです。
大きく Todo, In Progress, Done というカテゴリがあり、Todo に関してはさらにプロジェクトごとに分割されています。
「Issue を作ったら対応する Todo に入れてください」とアナウンスしても、なかなか徹底されないのは想像できますね。そこで以下のような GitHub Actions を用意しています。
- 概要
- Issue を新規作成したらラベルを見て Todo に追加する
※ ラベルは手動もしくは、Issue テンプレート機能のメタ情報にて追加できます
- Issue を新規作成したらラベルを見て Todo に追加する
- 利用 Actions
- GitHub Project Automation+
https://github.com/marketplace/actions/github-project-automation
- GitHub Project Automation+
コード
name: Manage Issues for Project on: issues: types: [labeled] jobs: automate-project-columns: runs-on: ubuntu-latest steps: - name: to feature1 # NOTE: もしラベルが 'feature1' だったらプロジェクトの Todo - feature1 カラムに追加 if: github.event.label.name == 'feature1' uses: alex-page/github-project-automation-plus@v0.8.1 with: project: miitel-analytics column: Todo - feature1 # NOTE: personal access token repo-token: ${{ secrets.GITHUB_TOKEN }} - name: to feature2 # NOTE: もしラベルが feature2' だったらプロジェクトの Todo - feature2 カラムに追加 if: github.event.label.name == 'feature2' uses: alex-page/github-project-automation-plus@v0.8.1 with: project: miitel-analytics column: Todo - feature2 # NOTE: personal access token repo-token: ${{ secrets.GITHUB_TOKEN }}
GitHub pull request 管理
次に、コードを書き終えて pull request を作成した時は
- 自分を Assignee にする
- プロジェクトの In Progress に pull request を追加する
というのがルールになっています。
こちらも pull request を出せた達成感から忘れてしまいそうなルールです。そこで、以下のような GitHub Actions を用意しています。
- 概要
- pull request を作成した人を Assignee として追加する
- pull request を Project の InProgress (PR) カラム に追加する
- 利用 Actions
- Auto Assign Action
https://github.com/marketplace/actions/auto-assign-action - GitHub Project Automation+
https://github.com/marketplace/actions/github-project-automation
- Auto Assign Action
コード
pull request を作成した人を Assignee として追加する
name: Auto Author Assign on: pull_request: branches: - main types: - opened - ready_for_review jobs: auto-author-assign: runs-on: ubuntu-latest steps: - name: add reviewers uses: kentaro-m/auto-assign-action@v1.1.2 with: # NOTE: Auto Assign Action 専用の config ファイルを利用 # refs: https://github.com/marketplace/actions/auto-assign-action#single-reviewers-list configuration-path: '.github/config_auto_assign.yml' # NOTE: personal access token repo-token: ${{ secrets.GITHUB_TOKEN }}
pull request を Project の InProgress (PR) カラムに追加する
name: Pull Request Opened on: pull_request: branches: - main types: - opened - reopened jobs: automate-project-columns: runs-on: ubuntu-latest steps: - name: to miitel-analytics uses: alex-page/github-project-automation-plus@v0.7.1 with: project: miitel-analytics column: InProgress (PR) # NOTE: personal access token repo-token: ${{ secrets.GITHUB_TOKEN }}
開発知識の共有
pull request を出した後には、コードレビューがあります。 そこで、開発知識の共有ができる GitHub Actions を用意しています。 MiiTel Analytics はマイクロサービス化されています。しかし、別のプロジェクトに依存してしまっている箇所があり、あるファイルを変更した際には別のプロジェクトのコードも修正する必要があります。 こうしたチームの中だけの暗黙の知識を、漏れなく共有することができます。
- 概要
- file A に変更があった際に、「project B の target.txt も書き換えてください」というコメントを追加する
- 利用 Actions
- Create or Update Comment
https://github.com/marketplace/actions/create-or-update-comment
- Create or Update Comment
コード
name: Detect File Changes on: pull_request: branches: [main] paths: - '**/apps/specific/file/fileA.py' jobs: comment: runs-on: ubuntu-latest steps: - name: Create comments id: create-comments run: | echo "この Pull Request は fileA.py の変更を含んでいます。" >> comments echo "project B の target.txt も書き換えてください" >> comments comments=$(cat comments) comments="${comments//$'\n'/%0A}" echo "::set-output name=values::$comments" - name: Post multi-line comments uses: peter-evans/create-or-update-comment@v1 with: token: ${{ secrets.GITHUB_TOKEN }} issue-number: ${{ github.event.pull_request.number }} body: ${{ steps.create-comments.outputs.values }}
まとめ
いかがでしたでしょうか。 Analytics チームでの、「複雑な作業の自動化」「ルールの普及」を目的とした CI / CD ツール 活用例について紹介しました。 特に「ルールの普及」については GitHub Actions を利用することで、簡単に自動化することができます。開発体験の向上だけでなく、コミュニケーションコストの削減に役立ちます。 記事中のコード例などが、みなさんのチームの課題解決のアイディアの元となれば幸いです。
一緒に働きませんか?
RevComm では、「少ない人数で最大の開発効率を」という意識のもと CI / CD ツールの活用が行われています。 アプリケーションの開発に加えてチームでの開発効率を最大化させることに興味のある方、この記事で RevComm の開発に興味を持ってくださった方、ぜひ採用ページをご覧ください!