この記事は ZOZO Advent Calendar 2024 シリーズ 6の9日目の記事です。
私の所属する計測プラットフォーム開発本部(以下、開発本部)内の有志で「自動テストのお悩み解決タイム」を実施しました。私はこの会でGitHub Actionsに関してSREチームで実践していることをメンバーに共有しました。この記事ではメンバーに共有するに当たって考えたことや工夫したことを紹介します。
会の背景
開発本部内でCIとして単体テストやlinterを実施することを強化する動きが出てきており、各チームのCIに対する知見や悩みを共有することになりました。その中でSREチームが実践していることを演習してほしい声が上がり、SREチームに所属する私に白羽の矢が立ったという訳です。この話を持ちかけたメンバーからは、スケジュールを抑えるので内容はお任せする、と伝えられたので自分なりに内容を考えることにしました。
会のゴールと方針
さて、今回時間を設けるに当たって「SREチームの実例を紹介し、参加メンバーに悩みを解決するヒントを得てもらう」というゴールを自分自身に設定しました。このゴールを踏まえて方針を2つ決めました。1つ目はある程度具体性がありつつも汎用的なトピックを扱うこと、2つ目は座学要素と演習要素(今回はデモ)を取り入れることです。1つ目に関しては、参加メンバーはそれぞれ担当する領域が異なる(例:フロントエンド、バックエンド、SRE、iOS、Android)ため領域固有の話というよりかはどの領域でも起こり得るだろう話の方が頭に入りやすいためです。また、寄せられた悩み自体も汎用的なものだったので自然とこの方針になりました。2つ目に関しては、SREチームの事例紹介だけだとそのまま適用できないこともあるため、座学で基礎を押さえつつ演習でイメージを膨らませて各メンバーが所属するチームで応用できることを狙いとしました。
このように会の目的と方針を決めましたが、しっかりやろうとすると準備だけで大変なのでタイムボックスを切りながらできるところまで準備するように心がけました。
会の中身をざっくり紹介
ここからは私がGitHub Actionsに関して共有した内容をざっくり紹介します。方針に従って分かりやすさ重視で内容を考えました。
悩みポイント
- 1) 複数のリポジトリで同じようなGitHub Actionsの設定をしている
- 単体テストや静的解析、ビルドの処理などを使い回すことが多い
- 2) 新しいワークフローを追加するにあたり、PR出して、マージして、検証してのループが辛い
- 修正作業時やレビュー前にワークフローを実行して確認したいが、マージしないと確認しづらいこともある
GitHub Actionsの概念整理
- 上記悩みを解消する際に知っておくと捗りそうな概念を説明する
- 釈迦に説法かもしれないが、共通理解を作るためにおさらいしておく
- GitHub Actions を理解する - GitHub Docs
- こちらの内容を理解しておけばOK
- 後から紹介する概念はこれを応用したものになる
実例紹介
- 悩み1に対して、複合アクションや再利用可能なワークフローの導入
- 重複の回避 - GitHub Docs
- 複合アクションと再利用可能なワークフローは似ている部分もあるので図を用いて概念を説明する
- SREが管理するリポジトリ内での利用箇所を示す
- 悩み2に対して、sandboxリポジトリを利用した動作検証
- 自由に操作できるプライベートリポジトリを用意している
- ブランチルールは意図的に設定していないものがある
- 例えば、レビュー無しでPRマージ可、mainブランチに直接push可
デモ
- お題の設定
- mainブランチにpushされたらトリガーされるワークフローの作成
- 単体テスト、成果物のアップロード、別ブランチへのPR作成
- デモ用にGoでシンプルなプログラムを用意し、上記の処理をワークフローで扱うことにした
- テストとビルドを伴うものかつ実行コマンドが他のチームメンバーから見ても分かりやすいと考えた
感想
最後に「自動テストのお悩み解決タイム」を実施してみてのいくつかの感想を書こうと思います。まず、参加メンバーから応用的な質問をもらえたことで今回共有した話がある程度理解されていると認識できました。具体的には、複合アクションや再利用可能なワークフローを同じエンタープライズの別組織から呼べるか、という質問でした。その場では答えられませんでしたが後で調査して設定可能な旨を回答しました。*1
また、参加メンバーからはチームに持ち帰るものを得られたというコメントをもらえたので、実施して良かったですし設定していたゴールに近づけたと思います。今回共有した内容は基礎的なものでしたが、GitHub Actionsを始めとしたCI/CDは処理の共通化や高速化など改善できる余地がある領域だと思います。私の経験ではそれぞれのチームで同じ課題を持っていたり、あるチームでは上手く解決していたりするケースが生まれがちなので、今後もこのような機会で知見や情報を共有できると良いなと考えています。