この用語をシェア
GitHub Actionsとは
GitHub ActionsはGitHubが提供するCI/CD(継続的統合・継続的デリバリー)プラットフォームです。GitHubリポジトリに直接統合されており、コードの変更に応じて自動的にテスト、ビルド、デプロイなどのワークフローを実行できます。2019年に正式リリースされて以来、多くの開発者・組織に採用されています。
主な特徴
- GitHubネイティブ:GitHubリポジトリと完全に統合されたCI/CDサービス
- イベント駆動:プッシュ、プルリクエスト、イシューなど様々なGitHubイベントをトリガーに実行
- 多言語・多環境対応:Linux、Windows、macOSで実行可能
- 豊富なマーケットプレイス:再利用可能なアクションが数千種類利用可能
- 並列実行:複数のジョブを同時に実行して時間短縮
基本概念
ワークフロー(Workflow)
ワークフローは自動化されたプロセス全体を定義するものです。YAMLファイルで記述し、`.github/workflows/`ディレクトリに配置します。1つのリポジトリに複数のワークフローを設定できます。
ジョブ(Job)
ジョブはワークフロー内の実行単位です。デフォルトで並列に実行されますが、依存関係を設定して順次実行も可能です。各ジョブは独立した仮想環境(ランナー)で実行されます。
ステップ(Step)
ステップはジョブ内の個別のタスクです。シェルコマンドの実行やアクションの使用を定義します。ステップは順次実行され、前のステップが失敗すると後続のステップは実行されません。
アクション(Action)
アクションは再利用可能なコードの単位です。GitHubマーケットプレイスで公開されているものを使用したり、独自に作成したりできます。
ランナー(Runner)
ランナーはワークフローを実行するサーバーです。GitHub提供のホスト型ランナーと、自分で管理するセルフホスト型ランナーがあります。
YAMLファイルの基本構造
基本的な設定例
name: CI/CD Pipeline
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
- name: Build
run: npm run build
主要なセクション
- name:ワークフローの名前
- on:実行トリガーの定義
- jobs:実行するジョブの定義
- runs-on:実行環境の指定
- steps:実行するステップの定義
- uses:既存アクションの使用
- run:シェルコマンドの実行
主要な使用例
1. 自動テスト
コードがプッシュされた際に自動的にテストを実行し、品質を保証します。単体テスト、統合テスト、エンドツーエンドテストなど様々なテストを自動化できます。
2. 自動ビルドとデプロイ
アプリケーションの自動ビルドから本番環境へのデプロイまでを自動化できます。AWS、Azure、GCPなど主要なクラウドプラットフォームとの統合も可能です。
3. 自動リリース
タグが作成された際に自動的にリリースノートを生成し、バイナリファイルをアップロードするなど、リリース作業を自動化できます。
4. コード品質チェック
ESLint、Prettier、SonarQubeなどのツールを使用して、コード品質の自動チェックを実行できます。
5. セキュリティスキャン
依存関係の脆弱性スキャンやコードの静的解析を自動で実行し、セキュリティリスクを早期発見できます。
GitHub Actions マーケットプレイス
人気のアクション
- actions/checkout:リポジトリのチェックアウト
- actions/setup-node:Node.js環境のセットアップ
- actions/setup-python:Python環境のセットアップ
- docker/build-push-action:Dockerイメージのビルドとプッシュ
- aws-actions/configure-aws-credentials:AWS認証の設定
カスタムアクションの作成
独自のアクションを作成して、組織内で再利用したり、マーケットプレイスで公開したりできます。JavaScript、Docker、複合アクションの3つの方式で作成可能です。
並列実行と依存関係
並列実行
デフォルトでは、同じワークフロー内の異なるジョブは並列で実行されます。これにより実行時間を大幅に短縮できます。
依存関係の設定
jobs:
test:
runs-on: ubuntu-latest
# テスト処理
build:
runs-on: ubuntu-latest
needs: test # testジョブの完了を待つ
# ビルド処理
deploy:
runs-on: ubuntu-latest
needs: [test, build] # 複数のジョブ完了を待つ
# デプロイ処理
実行環境とランナー
GitHub提供のランナー
- ubuntu-latest:Ubuntu Linux環境
- windows-latest:Windows Server環境
- macos-latest:macOS環境
- ubuntu-20.04:特定バージョンの指定も可能
セルフホストランナー
独自のサーバーやクラウドインスタンスでランナーを動作させることができます。特殊な環境や高性能なハードウェアが必要な場合に有効です。
シークレットと環境変数
シークレット管理
APIキー、パスワード、証明書などの機密情報は、GitHubのシークレット機能で安全に管理できます。リポジトリレベル、組織レベルでの設定が可能です。
環境変数の使用
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
NODE_ENV: production
steps:
- name: Deploy
run: |
echo "Deploying to $NODE_ENV environment"
# デプロイコマンド
料金体系
無料プラン
- パブリックリポジトリ:無制限で利用可能
- プライベートリポジトリ:月間2,000分まで無料
- ストレージ:500MB無料
有料プラン
- Team($4/月/ユーザー):月間3,000分、2GBストレージ
- Enterprise($21/月/ユーザー):月間50,000分、50GBストレージ
従量課金
無料枠を超過した場合の料金:
- Linux:$0.008/分
- Windows:$0.016/分
- macOS:$0.08/分
ベストプラクティス
効率的なワークフロー設計
- キャッシュの活用:依存関係のキャッシュで実行時間を短縮
- 条件付き実行:必要な場合のみジョブを実行
- マトリックス戦略:複数バージョンでの並列テスト
- 成果物の保存:ビルド成果物の保存と共有
セキュリティ対策
- シークレット管理:機密情報の適切な管理
- 権限の最小化:必要最小限の権限のみ付与
- サードパーティアクションの検証:信頼できるアクションの使用
- ブランチ保護:重要なブランチの保護設定
メンテナンス
- 定期的な更新:アクションのバージョン更新
- ログの監視:実行ログの定期的な確認
- パフォーマンス最適化:実行時間の継続的な改善
- ドキュメント化:ワークフローの詳細な文書化
競合ツールとの比較
Jenkins
オンプレミス環境で人気のCI/CDツール。高度なカスタマイズが可能ですが、設定と運用が複雑です。GitHub Actionsはクラウドネイティブで設定が簡単です。
GitLab CI/CD
GitLabに統合されたCI/CDサービス。GitHub ActionsとコンセプトISSIMILARですが、GitLabエコシステム内での利用が前提です。
CircleCI
高性能なCI/CDプラットフォーム。複雑な並列実行や高度なキャッシュ機能に優れますが、料金が高めです。
AWS CodePipeline
AWSネイティブのCI/CDサービス。AWS環境との統合は優秀ですが、他のクラウドプラットフォームとの連携は限定的です。
トラブルシューティング
よくある問題
- YAML構文エラー:インデントや構文の確認
- 権限エラー:リポジトリやシークレットの権限設定
- タイムアウト:実行時間制限(6時間)への対応
- 並列実行制限:同時実行数の上限に注意
デバッグ方法
- ログの詳細化:デバッグモードでの実行
- ステップ分割:問題箇所の特定のための分割
- ローカル実行:act等のツールでローカルテスト
今後の展望
GitHub Actionsは継続的に機能追加と改善が行われています。より高性能なランナー、改善されたキャッシュ機能、強化されたセキュリティ機能などが予定されており、CI/CDプラットフォームとしての地位をさらに確固たるものにしていく見込みです。