はじめに
CI/CD を作りやすいプロジェクト構造って、どういうものでしょうか?
この記事では、CI/CDの仕組みそのものやチーム運用ではなく、プロジェクト本体の構造にフォーカスして考えてみます。
結論から言うと:
人間が頻繁に触る場所1と、ほとんど触らない場所を分けよう。
そして、それをプロジェクト初期に設計しておこう。
CI/CD しやすいプロジェクトの特徴
まず大前提として、CI/CD を導入・維持しやすいプロジェクトには次のような特徴があります。
-
機械が解釈できる形でルールが決まっている
- 単純なほど良い
- 例外がないに越したことはない
-
人間の裁量が少ない
- どこに何を置くかが決まっている
- ファイルやディレクトリの命名がルール化されている
-
コンフリクト2が起きにくい
- コンフリクトが起きると、人間の判断が必要になり、CI/CDの流れが止まりやすい
- コンフリクトが起きやすい場所・起きにくい場所を分離できているとより良い
考えていく
プロジェクト内の Hot と Cold な場所
これは僕の造語ですが、プロジェクトには CI/CD 的な観点から見た「Hot」と「Cold」な場所があると考えられます。
これは明確な定義というより、概念的な区分です。
Hot | Cold | |
---|---|---|
定義 | 人間が頻繁に変更を加える場所 | 人間がまったく、あるいはほとんど変更を加えない場所 |
例1 | ビジネスロジックを含むコード | プラグインやライブラリ |
例2 | 画像などのアセット | 画像から生成されたサムネイル |
例3 | i18n 用の spreadsheet | そこから自動生成された i18n ファイル |
コンフリクト | 起こりやすい | 起こりにくい |
ルール違反 | 発生しやすい | 発生しにくい |
自動化 | しにくい | しやすい |
プロジェクトにおける相対的な価値 | 高い | 低い |
このように分けると、一般的に Cold な場所のほうが CI/CD の自動化がしやすい です。
ただし、プロジェクトにおける相対的な価値3は、たいてい 人間が手を加える Hot な場所 が作り出します。
なお、この区分けは「どちらか」ではなく グラデーション です。
Hot な場所でもコンフリクトが起きにくい場所であれば、自動化しやすい可能性がありますし、Cold な場所でもコンフリクトが起きる設計になっている場合もあります4。
Hot〜Cold のヒートマップを作る
前章では「Hot / Cold はグラデーションである」と述べましたが、
もう少し踏み込んで、プロジェクト内の各場所がどの程度自動化しやすいかを可視化してみましょう。
いわば、自動化の観点から見た 「ヒートマップ」 を作るイメージです。
自動化のしやすさ × 原因の明示
特に、自動化しにくい場所については、「なぜ自動化しにくいのか?」 という理由も一緒に洗い出しておくと良いです。
- 複雑で例外の多いルールがある
- 人間による判断や裁量が多い
- コンフリクトが起きやすい
- 外部ツールとの連携に依存している
…など、理由はさまざまです。
こういった理由がわかってくると、「じゃあどこから CI/CD に取り組めばいいか」「どういう方針ならうまくいきそうか」が、自然と見えてきます。
このように、プロジェクトの中にある「温度差」を意識してマッピングしてみると、
自動化の足がかりを掴みやすくなります。
ヒートマップをもとに管理を分離する
ヒートマップを作成したら、それをもとにプロジェクト内での管理方法を分離していきます。
ここでは、プロジェクトやチームの状況に応じていろいろな手段が取れると思います。
- フォルダをわける
- それぞれで適用ルールを変更する
- リポジトリごとに分ける
この後、Cold 側から CI/CD を進めることをお勧めしますが、
具体的な進め方についてはプロジェクトやチームごとに異なるため割愛します。
いつからやるべき?
プロジェクトの最初から CI/CD を意識して取り組んでください。
たとえ 後から CI/CD を導入する 予定であったとしても、最初からやりやすさを意識することが重要です。5
後から修正や再構築を行うのは結構大変です6。
そのうえで、Hot な場所もできるだけCold に近づけることを意識してください。
「自動化しやすそうな場所はどこか?」と考えることで、CI/CD や自動化が後から導入される際、担当者はちょっとだけ幸せになります。
まとめ
CI/CD をスムーズに導入するためには、プロジェクト構造を最初から意識して設計することが大切です。特に、Hot な場所(自動化しにくい場所) と Cold な場所(自動化しやすい場所) を意識することが重要です。
後から修正や再構築を行うのは非常に大変です。スタートかr自動化しやすい構造を意識して、自動化しにくい場所の理由を把握し、できるだけそれらを整理することで、後々の CI/CD 運用が格段に楽になります。