見出し画像

プルリクエストの進捗を Asana タスクに可視化する

こんにちは!
サーバーサイドエンジニアの濱口です。

ユビレジではタスク管理に Asana を利用しています。今回は Asana と GitHub を連携し、プルリクエストの進捗を可視化する方法についてまとめました。

手順

手順はざっくり以下の2ステップです。

  1. 連携したい Asana プロジェクトに GitHub アプリを追加して連携する

  2. GitHub のプルリクエストの情報を Asana に同期するための GitHub Actions を追加する

1に関してはありがたいことに Asana によって用意されている公式ガイドの手順を実行するだけで設定を完了することができます。
2に関してもざっくりとした手順が記されています。さらにガイド内で言及されている GitHub Action のそれぞれのリポジトリの README を読み進めることで GitHub Actions の設定の追加まで大体完了することができます。

GitHub Actions まで設定を完了すると、以下のようにプルリクエストのステータスやレビューステータス、description の添付ファイルの同期が自動で行われるようになりました。

Asana タスクへのプルリクエストやレビューのステータスの同期

めでたしめでたし、かと思いきや実際に運用してみると、考慮しないといけないポイントがいくつか出てきました。

考慮しないといけないポイント

1. Asana に紐づかないプルリクエストのワークフローがエラーになる

README に用意されているクイックスタートに沿って GitHub Actions の設定を追加すると Asana に紐づかないプルリクエストのワークフローがエラーになってしまいます。
とはいえ全てのプルリクエストを Asana タスクに紐づける運用は現実的ではありません。例えば Dependabot などを利用してライブラリのアップデートをしている場合だと、bot が作成したプルリクエストをすべて Asana タスクに紐づけるのは大変ですし、そもそも Asana タスクに紐づける必要性はかなり低いかと思います。
というわけで GitHub Actions を以下のように修正することで回避しました。

on:
  pull_request:
    types: [opened, closed, reopened]

jobs:
  create-comment-in-asana-task-job:
    runs-on: ubuntu-latest
    name: Create a PR status comment in Asana Task
    steps:
      - name: Create a comment
+       continue-on-error: true
        uses: Asana/comment-on-task-github-action@latest
        id: createComment
        with:
          asana-secret: ${{ secrets.ASANA_SECRET }}
          comment-text: "{{PR_NAME}} is {{PR_STATE}}: {{PR_URL}}"
      - name: Get status
+       if: success()
        run: echo "Status is ${{ steps.createComment.outputs.status }}"

continue_on_error: true を追加し、ステップが失敗してもジョブが失敗にならないようにしています。加えて前回のステップが成功した時のみ Get status を実行するように制御しました。これでジョブの失敗自体は避けつつ、後続の処理を実行させない状態を実現できました。

2. 削除した Asana タスクに紐づけたままだとワークフローがエラーになる

削除した Asana タスクにプルリクエストを紐づけた状態で GitHub 側でレビューが行われると、タスクが見つからずジョブが失敗するという現状です。
このエラーも先述の Action への対応で回避できるのですが、他方で Asana タスクを削除する場合にはプルリクエストの紐付けも解除するという運用が良いのではという話もしています。

3. タスクへの同期コメントは Asana Secret を作成したアカウントによって行われる

今回だと濱口により Asana Secret が作成されているので、同期コメントが濱口のアカウントにより行われてしまうようでした。

全然関係ないタスクへのコメント

上記のプルリクエストに対して approve したのは別の人ですが、濱口のアカウントによりコメントされてしまいます。こうなると濱口がプルリクエストに approve しているかのようにも見えますし、突然関係ない人からのコメントがタスクに投稿されて戸惑う人も出てきそうでした。また(Asana の仕様上)あらゆるタスクに濱口がコラボレーターとして登録されてしまい、全然関係ないタスクの通知まで飛んでしまうという状況になってしまいます。
そういうわけで、今回はシステム連携用のアカウントを作成し Asana Secret を作成し直すことで回避しました。

システム連携によるコメント

とはいえ、この回避策だとシステム連携用アカウントのライセンスを追加しないといけないので課金が発生します。さらに欲を言うとタスクの担当者や、プルリクエストへのコメント作成者によるコメントにできるとより良さそうですね。

4. プルリクエストを紐づけた Asana タスクにサブタスクを追加すると、レビューによる同期コメントが二重に投稿される

これに関しては現時点で良い回避策が見つかっていないので、プルリクエストを紐づけた Asana タスクを最小単位のタスクとするという運用でカバーしています。言い換えると、プルリクエストを紐づけた Asana タスクにはサブタスクを作成しないということですね。

まとめ

Asana の GitHub 連携でプルリクエストの進捗を Asana タスクに同期されるようにしてみました。
今回は簡易的な同期のみの実現で、痒いところには手が届かないというのが正直な感想でした。引き続き運用してみて、改善できそうなところはさらに改善して良くしていきたいと思います。

この記事が気に入ったらサポートをしてみませんか?