モノレポの CI/CD
変更されたファイルに基づく選択的なジョブ実行など、モノレポの CI/CD パイプラインを最適化する戦略を学びます。
「モノレポの CI/CD」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
モノレポとは
モノレポとは、多数のプロジェクトやアプリケーションのコードを1つのリポジトリにまとめたものです。サービスやライブラリごとに別々のリポジトリを用意する代わりに、すべてを一緒に管理します。
プロジェクトというたくさんの本を、1冊ごとに別の建物へ置くのではなく、1つの建物(リポジトリ)にある大きな図書館にまとめるイメージです。この方法には、特に CI/CD に関してメリットとデメリットがあります。
モノレポにおける CI/CD の課題
モノレポにはコード共有が容易になるなどのメリットがある一方、継続的インテグレーション/継続的デリバリー(CI/CD)パイプラインでは次のような課題が生じることがあります。
- ビルドの遅延: 変更のたびに *すべて* のプロジェクトに対する完全なビルドとテストスイートが実行されると、パイプラインが非常に遅くなります。
- リソースの無駄: 関係のないジョブを不必要に実行すると、ビルド時間とリソースを消費します。
- 開発者の不満: フィードバックに時間がかかると、開発の速度が低下します。
選択的な CI/CD の必要性
効率的なモノレポの CI/CD の鍵は選択性です。パイプラインには、次のことを自動的に判断できる賢さが求められます。
- *何が* 変更されたかを特定する。
- 変更の影響を受けるプロジェクトに対して *のみ* CI/CD ジョブを実行する。
この方法により、時間を節約し、リソースの消費を抑え、開発者により速くフィードバックを提供できます。
パスによるトリガー: `on.paths`
GitHub Actions では、ワークフローのトリガーで paths フィルターを使うことで、選択的な実行を実現できます。変更されたときにワークフローを起動するディレクトリやファイルを指定できます。
指定したパスの外にあるファイルが変更されても、ワークフローは実行されません。これはモノレポに最適です。
on:
push:
branches:
- main
paths:
- 'apps/frontend/**'
- 'libs/shared/**'パスフィルターの実例
次は、apps/backend ディレクトリ内のファイル、または特定の README.md ファイルに変更がプッシュされた場合にのみ実行される、簡単なワークフローです。
これにより、バックエンドサービスに関連するテストやビルドだけが起動されます。
name: Backend CI
on:
push:
branches:
- main
paths:
- 'apps/backend/**'
- 'README.md'
jobs:
build-backend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build backend app
run: echo "Building backend..."パスを無視する: `paths-ignore`
ほとんどの変更ではワークフローを実行しつつ、特定のファイル(ドキュメントやログファイルなど)だけが変更された場合は実行を省略したいことがあります。その場合は paths-ignore フィルターが適しています。
paths と同様に機能しますが、ワークフローを起動しないファイルを指定します。
on:
pull_request:
branches:
- main
paths-ignore:
- 'docs/**'
- '**/*.md'`git diff` による動的な選択的実行
より複雑なロジックが必要な場合は、ワークフローのステップ内で git diff などの Git コマンドを使い、変更を動的に確認できます。これにより、独自の条件を構築できます。
たとえば、特定のフォルダーに変更があったかを確認し、後続のジョブを実行するかどうかを決める出力変数を設定できます。
条件付きジョブ実行の例
このワークフローのステップでは、git diff を使って、現在のコミットとベースブランチの間で apps/api/ 配下のファイルが変更されたかを確認します。変更があった場合は、出力変数 api_changed に 'true' を設定します。
この出力を使って、「deploy API」ジョブを実行するかどうかを制御できます。
jobs:
check-changes:
runs-on: ubuntu-latest
outputs:
api_changed: ${{ steps.diff.outputs.api_changed }}
steps:
- uses: actions/checkout@v4
- name: Check API changes
id: diff
run: |
if git diff --quiet ${{ github.event.before }} ${{ github.sha }} -- apps/api/;
then
echo "api_changed=false" >> $GITHUB_OUTPUT
else
echo "api_changed=true" >> $GITHUB_OUTPUT
fi
deploy-api:
needs: check-changes
if: needs.check-changes.outputs.api_changed == 'true'
runs-on: ubuntu-latest
steps:
- name: Deploy API
run: echo "Deploying API..."CI/CD のためのモノレポ構成
整理されたモノレポ構成は、選択的な CI/CD を大幅に簡単にします。関連するファイルやプロジェクトを明確に定義したディレクトリにまとめると、paths フィルターを効果的に利用できます。
/apps/frontend/apps/backend/libs/shared/docs
明確に分離することで、ワークフローの対象を正確に指定できます。
モノレポ CI/CD クイズ
モノレポの CI/CD を最適化することは、開発速度とリソースの効率的な利用を維持するうえで重要です。大規模で統合されたコードベースの課題に、どの戦略が最も効果的かを考えてみましょう。
復習と次のステップ
このレッスンでは、選択的なジョブ実行を実装して、モノレポにおける CI/CD の課題に対処する方法を学びました。GitHub Actions の paths フィルターと高度な git diff の手法を使うことで、パイプラインを必要な処理だけに実行できます。
これにより、フィードバックが速くなり、コストを削減でき、開発体験も向上します。ワークフローをさらに効率化する方法を探究していきましょう。
よくある質問
「モノレポの CI/CD」レッスンは無料ですか?
はい。「モノレポの CI/CD」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「モノレポの CI/CD」で何を学びますか?
変更されたファイルに基づく選択的なジョブ実行など、モノレポの CI/CD パイプラインを最適化する戦略を学びます。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「モノレポの CI/CD」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- モノレポの CI/CD
- リポジトリ間ワークフロー
- ワークフローの一元管理
- パスフィルタリングと選択的ビルド