パイプラインのパフォーマンスチューニング
ボトルネックを特定し、高度な手法を適用して GitHub Actions のワークフロー実行速度とリソース消費を最適化します。
「パイプラインのパフォーマンスチューニング」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
パイプラインを高速化する
Pipeline Performance Tuningへようこそ。現代の開発では、迅速なフィードバックと効率的なリソース利用のために、高速なCI/CDパイプラインが不可欠です。
パイプラインが遅いと、時間と費用が無駄になります。このレッスンでは、ボトルネックを特定し、GitHub Actionsのワークフローを大幅に高速化する高度なテクニックを学びます。
ワークフローのボトルネックを見つける
最適化する前に、*何を*最適化すべきかを把握する必要があります。GitHub Actionsには、時間のかかっているステップやジョブを特定するための優れたツールが用意されています。
- GitHubのUI:ワークフローの実行ログを確認します。タイムライン表示では、各ジョブやステップにかかった時間を明確に確認できます。
- ジョブの概要:通常よりも長い時間がかかっているステップを探します。
- アクションログ:詳細なログから、最も時間を消費している具体的なコマンドやプロセスを特定できます。
一貫して最も時間がかかっているステップに注目してください。
独立したジョブを並列化する
ワークフローの各部分が互いに依存していない場合は、同時に実行しましょう。これは、全体の実行時間を短縮するシンプルで効果的な方法です。
ワークフローに複数のトップレベルジョブを定義します。ジョブ間にneedsの依存関係を指定しない限り、GitHub Actionsはデフォルトでそれらを並列実行します。
name: Parallel Jobs Example
on: [push]
jobs:
build-frontend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build Frontend
run: echo "Building frontend..."
build-backend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build Backend
run: echo "Building backend..."
Checkout Actionを最適化する
actions/checkoutアクションは、リポジトリのコードを取得します。大規模なリポジトリや長い履歴を持つリポジトリでは、これに時間がかかることがあります。次の方法で最適化できます。
- 浅いクローン:
fetch-depth: 1を使用して最新のコミットだけを取得します。多くのCI/CDタスクで大幅に時間を短縮できます。 - スパースチェックアウト:ファイルの一部だけが必要な場合は、スパースチェックアウトを検討します。ただし、設定がより複雑になることがあります。
完全な履歴をダウンロードするため、絶対に必要な場合を除きfetch-depth: 0は避けてください。
name: Optimized Checkout
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1 # Only fetch the latest commit
- name: Run Build
run: echo "Code checked out and building..."
ビルド成果物のサイズを削減する
ワークフローでコンパイル済みバイナリやテストレポートなどの成果物をアップロードまたはダウンロードする場合、そのサイズがパフォーマンスに直接影響します。
高速化するには、次の方法を使います。
- 必要なファイルだけを含める:不要な一時ビルドディレクトリやログをアップロードしないでください。
- 成果物を圧縮する:可能であれば、大きな成果物をアップロード前に圧縮します。
actions/upload-artifactアクションは自動的に圧縮しますが、元のファイルを最小限に抑えてください。
効率化のためのパスフィルタリング
コードを変更するたびに、すべてのジョブを実行する必要はありません。パスフィルタリングを使用して、関連するファイルが変更された場合だけジョブを実行します。
これは、規模の大きなリポジトリで特に役立ちます。たとえば、ドキュメントの変更によってバックエンド全体のビルドが実行されるのを防げます。
ワークフローのonトリガー内でpathsまたはpaths-ignoreを指定します。
name: Path Filter Example
on:
push:
paths:
- 'frontend/**'
- 'shared/**'
jobs:
build-frontend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build Frontend
run: echo "Frontend files changed, building..."
高速なRunnerとリソース割り当て
ワークフローを実行する仮想マシン(Runner)には、さまざまなサイズと種類があります。CPU負荷の高いタスクでは、より高性能なRunnerを使うことで実行時間を大幅に短縮できます。
- より大規模なGitHubホストRunner:GitHubでは、負荷の高いワークロード向けに、より大規模なRunner(例:
ubuntu-latest-xlarge)を提供しています。 - セルフホストRunner:特定のハードウェア要件がある場合や、内部リソースへのネットワーク遅延を最小限に抑えたい場合は、セルフホストRunnerを要件に合わせて最適化できます。
高度なキャッシュ戦略
依存関係(npmパッケージやMaven成果物など)のキャッシュは不可欠です。次のヒントを使って、基本的なキャッシュよりも一歩進んだ最適化を行いましょう。
- きめ細かなキャッシュキー:より具体的なキャッシュキーを使用して、不要なキャッシュミスを避けます。たとえば、特定のロックファイルのハッシュとOSを含めます。
- 複数のキャッシュ:すべてを1つの大きなキャッシュに入れないでください。依存関係の種類(node_modulesやpipパッケージなど)ごとにキャッシュを分けると、キャッシュヒット率を改善できます。
- 復元キー:
restore-keysを使用すると、プライマリキーでキャッシュミスが発生した場合に複数のキャッシュキーを試行でき、部分的にヒットする可能性が高まります。
name: Advanced Caching
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Cache Node Modules
uses: actions/cache@v4
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: | # Try less specific keys if primary misses
${{ runner.os }}-node-
- name: Install Dependencies
run: npm ci
このワークフローを最適化する
フロントエンドとバックエンドのコードを両方ビルドするワークフローを考えてみましょう。現在は順番に実行され、チェックアウトでは完全な履歴を取得しています。パフォーマンスを大幅に改善する変更はどれとどれでしょうか。
name: Inefficient Workflow
on: [push]
jobs:
build-all:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Frontend Deps
run: npm install
- name: Build Frontend
run: npm run build
- name: Install Backend Deps
run: pip install -r requirements.txt
- name: Build Backend
run: python setup.py build
振り返り:高速化のための調整
GitHub Actionsのワークフローを最適化する強力なテクニックを学びました。
- ボトルネックの特定:GitHubのUIとログを使用します。
- ジョブの並列化:独立したタスクを同時実行します。
- チェックアウトの最適化:浅いクローンを使用します。
- 成果物の削減:アップロードとダウンロードのサイズを小さく保ちます。
- パスフィルタリング:関連するファイルが変更された場合だけジョブを実行します。
- 高速なRunner:適切なRunnerリソースを選択します。
- 高度なキャッシュ:きめ細かなキーと複数のキャッシュを使用します。
これらの戦略を適用することで、パイプラインをより高速かつ効率的にし、貴重な時間とリソースを節約できます。
よくある質問
「パイプラインのパフォーマンスチューニング」レッスンは無料ですか?
はい。「パイプラインのパフォーマンスチューニング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「パイプラインのパフォーマンスチューニング」で何を学びますか?
ボトルネックを特定し、高度な手法を適用して GitHub Actions のワークフロー実行速度とリソース消費を最適化します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「パイプラインのパフォーマンスチューニング」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- DORA メトリクスと CI/CD の健全性
- パイプラインのパフォーマンスチューニング
- DevOps 自動化の今後のトレンド
- CI/CDコストとRunner効率の最適化