RevComm Tech Blog

コミュニケーションを再発明し 人が人を想う社会を創る

MiiTel Analytics 開発チームの CI / CD ツール活用を紹介します。

はじめまして。

株式会社 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 を用意しています。

コード

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 として追加する

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 はマイクロサービス化されています。しかし、別のプロジェクトに依存してしまっている箇所があり、あるファイルを変更した際には別のプロジェクトのコードも修正する必要があります。 こうしたチームの中だけの暗黙の知識を、漏れなく共有することができます。

コード

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 の開発に興味を持ってくださった方、ぜひ採用ページをご覧ください!

www.revcomm.co.jp