【実務・中級編】GitHub Actionsの再利用可能なワークフロー(Reusable Workflows)でCI/CDコードをDRYにする – バージョン管理・CI/CD活用バイブル

GitHub Actions「再利用可能ワークフロー」でCI/CDをコードの資産に変える:DRY原則の究極形

こんにちは。テックリードとして日々数多のCI/CDパイプラインを眺めていますが、正直に言おう。「各リポジトリにコピー&ペーストされた数千行のYAML」ほど、組織の成長を阻害する負債はない。

開発者がビジネスロジックではなく「YAMLの修正」に追われる状況は、DevOpsの敗北だ。今日は、GitHub Actionsの「再利用可能なワークフロー(Reusable Workflows)」を使い倒し、組織全体のパイプラインを「メンテナンスフリー」にするための実戦的戦術を授ける。

—

1. なぜ「コピー&ペースト」が死を招くのか

リポジトリごとにCI定義を持つと、言語のバージョンアップやセキュリティスキャンの追加といった「全社的な変更」が発生した際、あなたは数十のリポジトリにPRを投げ続けることになる。これは退屈な作業という以上に、「設定の不整合」による重大なインシデントの温床だ。

再利用可能なワークフローは、単なるコードの共通化ではない。「CI/CDをインフラストラクチャとしてコード化(IaC)し、組織の標準規格として配布する」ための戦略的基盤である。

—

2. 構築の鉄則:標準化のためのディレクトリ構造

まずは、CI定義を集約する専用リポジトリ(例: `org-workflow-templates`)を作成せよ。ディレクトリ構成は以下のように「責務」で分けるのが鉄則だ。

.github/workflows/
├── build-node.yml # Node.js標準ビルド
├── docker-publish.yml # コンテナビルド&Pushの共通規格
└── security-scan.yml # 全プロジェクト強制の静的解析

実践的な「再利用可能ワークフロー」の構成例

`build-node.yml` の中身を覗いてみよう。`inputs`で柔軟性を担保しつつ、`secrets`の取り扱いを標準化する。

.github/workflows/build-node.yml
name: Reusable Node.js Build

on:
workflow_call:
inputs:
node-version:
description: ‘Node.js version’
default: ’20.x’
type: string
secrets:
NPM_TOKEN:
required: false

jobs:
build:
runs-on: ubuntu-latest
steps:

  • uses: actions/checkout@v4
  • uses: actions/setup-node@v4

with:
node-version: ${{ inputs.node-version }}
registry-url: ‘https://registry.npmjs.org’

  • run: npm ci
  • run: npm run build

env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

—

3. チーム開発を加速させる「呼び出し側」の洗練

使う側のリポジトリは、驚くほどシンプルになる。これが開発者の生産性を最大化する。

.github/workflows/ci.yml (各アプリリポジトリ)
jobs:
call-workflow:
uses: my-org/org-workflow-templates/.github/workflows/build-node.yml@main
with:
node-version: ’20.x’
secrets:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

ここで差がつく!プロのテクニック:

  • バージョニングの徹底: `@main` を使ってはいけない。本番環境では `@v1` や `@v1.2.0` のようなGitタグを指定し、破壊的変更が予期せぬタイミングで走るのを防ぐこと。
  • マトリックス戦略: `strategy.matrix` と組み合わせて、複数のOSやランタイムバージョンに対して一括でテストを実行させろ。

—

4. 現場で震えるほど役立つ「ハック&ツール」

絶対入れるべきGitHub用ブラウザ拡張

  • [Octotree](https://www.octotree.io/): リポジトリのディレクトリ構造を左サイドバーに表示。大規模なCIテンプレートを修正する際、これがないと迷子になる。
  • [GitHub Actions Extension for VS Code](https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-github-actions): エディタ内でワークフローの実行状況を確認できる。わざわざブラウザを開く時間は無駄だ。

隠れたキーボードショートカット

  • `t` キー: ファイル検索。テンプレートリポジトリ内の巨大なYAMLを探すとき、これを知らないエンジニアは損をしている。
  • `w` キー: ワークフロー実行ページへ直行。CIが落ちた瞬間に叩け。

—

5. 組織への浸透:チーム運用のルール

1. 「CIの変更」をPRで強制する: 再利用ワークフローに変更を入れるときは、必ず影響を受ける(依存している)リポジトリのCIがパスすることを確認するスクリプトをCIに含めろ。
2. テンプレートの「強制」と「許容」: 全社ルールは必須化しつつ、個別のプロジェクト固有のステップは `jobs` の前後に `composite actions` を差し込めるような柔軟なインターフェース(`pre-build` や `post-build` のスクリプト注入など)を設ける。
3. ドキュメントはREADMEに書くな: ワークフローの `on.workflow_call` 内に `description` をしっかり記述せよ。GitHubのUI上で各Inputの意味がツールチップとして表示され、開発体験(DX)が劇的に向上する。

—

最後に:なぜこれを行うのか

CI/CDをDRYにすることは、単なるコードの整理整頓ではない。「組織のベストプラクティスを、常に最新かつ安全な状態で全チームに即座に配布する」という、DevOpsの究極の目的を達成するための手段だ。

今日から、コピー&ペーストを止めよう。あなたのリポジトリは、もっと洗練された場所になれるはずだ。何か詰まったら、いつでも聞け。現場の知見をさらに叩き込んでやる。

タイトルとURLをコピーしました