GitHub Actions完全攻略ガイド|CI/CD初心者でも分かる自動化入門
はじめに
GitHub Actionsは、GitHubが提供する強力なCI/CD(継続的インテグレーション・継続的デプロイメント)プラットフォームです。Microsoft、Netflix、Shopifyなど多くの企業が開発プロセスの自動化にGitHub Actionsを活用しています。本記事では、GitHub Actionsの基礎から実践的な活用法まで、初心者にも分かりやすく解説します。
GitHub Actionsとは?
GitHub Actionsは、GitHubリポジトリ内でソフトウェア開発ワークフローを自動化できるサービスです。コードのプッシュ、プルリクエスト作成、スケジュール実行など、様々なイベントをトリガーとして自動処理を実行できます。
GitHub Actionsの特徴
主なメリット
- GitHubと完全統合された環境
- 豊富な事前構築済みアクション
- 無料枠での利用が可能
- マルチプラットフォーム対応(Linux、Windows、macOS)
主な用途
- 自動テスト実行
- アプリケーションのビルド・デプロイ
- コード品質チェック
- セキュリティスキャン
基本概念の理解
重要な用語
- Workflow(ワークフロー): 自動化処理の一連の流れ
- Job(ジョブ): ワークフロー内の作業単位
- Step(ステップ): ジョブ内の個別タスク
- Action(アクション): 再利用可能な処理単位
- Runner(ランナー): ワークフローを実行する環境
ディレクトリ構造
.github/
workflows/
ci.yml
deploy.yml
最初のワークフロー作成
Hello Worldワークフロー
name: Hello World
on: [push]
jobs:
hello:
runs-on: ubuntu-latest
steps:
- run: echo "Hello, GitHub Actions!"
基本的なCI ワークフロー
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '18'
- run: npm test
よく使われるトリガー(on)
プッシュ・プルリクエスト
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
スケジュール実行
on:
schedule:
- cron: '0 9 * * 1' # 毎週月曜日9時
手動実行
on:
workflow_dispatch:
inputs:
environment:
description: 'デプロイ環境'
required: true
default: 'staging'
実践的なワークフロー例
Node.js アプリケーションのCI/CD
name: Node.js CI/CD
on:
push:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'
- run: npm ci
- run: npm run build
- run: npm test
Python アプリケーションのテスト
name: Python Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.8, 3.9, '3.10']
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- run: pip install -r requirements.txt
- run: pytest
Docker イメージのビルド・プッシュ
name: Docker Build
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: docker/build-push-action@v5
with:
push: true
tags: myapp:latest
環境変数とシークレット
環境変数の設定
jobs:
deploy:
runs-on: ubuntu-latest
env:
NODE_ENV: production
steps:
- run: echo "Environment: $NODE_ENV"
シークレットの使用
steps:
- name: Deploy to AWS
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
run: aws s3 sync ./build s3://my-bucket
マトリックス戦略
複数環境でのテスト
jobs:
test:
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
node-version: [16, 18, 20]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- run: npm test
アーティファクトとキャッシュ
ビルド成果物の保存
steps:
- run: npm run build
- uses: actions/upload-artifact@v4
with:
name: build-files
path: dist/
依存関係のキャッシュ
steps:
- uses: actions/cache@v3
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
- run: npm ci
デプロイメント自動化
AWS S3 へのデプロイ
name: Deploy to S3
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm run build
- uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-1
- run: aws s3 sync ./build s3://my-website
Heroku へのデプロイ
steps:
- uses: actions/checkout@v4
- uses: akhileshns/heroku-deploy@v3.12.14
with:
heroku_api_key: ${{ secrets.HEROKU_API_KEY }}
heroku_app_name: "my-app"
heroku_email: "user@example.com"
セキュリティとコード品質
セキュリティスキャン
name: Security Scan
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: github/codeql-action/init@v3
with:
languages: javascript
- uses: github/codeql-action/analyze@v3
リント・フォーマットチェック
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- run: npm ci
- run: npm run lint
- run: npm run format:check
条件分岐とフィルタリング
ブランチ別の処理
jobs:
deploy:
if: github.ref == 'refs/heads/main'
steps:
- run: echo "メインブランチのみデプロイ"
ファイル変更の検出
steps:
- uses: actions/checkout@v4
- uses: dorny/paths-filter@v2
id: changes
with:
filters: |
frontend:
- 'frontend/**'
- if: steps.changes.outputs.frontend == 'true'
run: echo "フロントエンドが変更されました"
高度な活用テクニック
再利用可能なワークフロー
# .github/workflows/reusable.yml
on:
workflow_call:
inputs:
environment:
required: true
type: string
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- run: echo "Deploying to ${{ inputs.environment }}"
カスタムアクションの作成
# action.yml
name: 'Custom Action'
description: 'カスタム処理を実行'
inputs:
message:
description: '表示メッセージ'
required: true
runs:
using: 'composite'
steps:
- run: echo "${{ inputs.message }}"
shell: bash
パフォーマンス最適化
並列実行の活用
jobs:
test:
runs-on: ubuntu-latest
build:
runs-on: ubuntu-latest
deploy:
needs: [test, build]
runs-on: ubuntu-latest
効率的なキャッシュ戦略
steps:
- uses: actions/cache@v3
with:
path: |
~/.npm
node_modules
key: ${{ runner.os }}-npm-${{ hashFiles('package-lock.json') }}
restore-keys: ${{ runner.os }}-npm-
トラブルシューティング
よくあるエラーと対策
# デバッグ情報の出力
steps:
- name: Debug Info
run: |
echo "Runner OS: ${{ runner.os }}"
echo "GitHub Event: ${{ github.event_name }}"
echo "Branch: ${{ github.ref }}"
ワークフロー実行の詳細確認
steps:
- run: |
echo "::debug::デバッグメッセージ"
echo "::warning::警告メッセージ"
echo "::error::エラーメッセージ"
ベストプラクティス
セキュリティ対策
- シークレットの適切な管理
- 最小権限の原則を適用
- サードパーティアクションのバージョン固定
- 機密情報のログ出力防止
パフォーマンス向上
# 不要なファイルの除外
- uses: actions/checkout@v4
with:
sparse-checkout: |
src/
package.json
保守性の向上
# 環境別設定の外部化
jobs:
deploy:
strategy:
matrix:
include:
- environment: staging
url: https://staging.example.com
- environment: production
url: https://example.com
料金と制限事項
無料枠の制限
- パブリックリポジトリ: 無制限
- プライベートリポジトリ: 月2,000分まで無料
- ストレージ: 500MB まで無料
実行時間の最適化
# タイムアウト設定
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 10
学習リソースと次のステップ
おすすめの学習順序
- 基本的なワークフローの作成
- CI/CDパイプラインの構築
- マトリックス戦略の活用
- カスタムアクションの開発
- セキュリティとパフォーマンスの最適化
実践プロジェクト案
- 個人プロジェクトのCI/CD構築
- マルチ環境デプロイメント
- 自動テストとコード品質チェック
- セキュリティスキャンの導入
参考リソース
- GitHub Actions公式ドキュメント
- GitHub Marketplace(アクション検索)
- コミュニティ作成のワークフロー例
- GitHub Actions のサンプルリポジトリ
まとめ
GitHub Actionsは、現代のソフトウェア開発において欠かせないCI/CDツールです。シンプルなYAML設定で強力な自動化を実現でき、開発効率を大幅に向上させることができます。
基本的なワークフローから始めて、段階的に高度な機能を取り入れることで、プロフェッショナルな開発プロセスを構築できます。セキュリティとパフォーマンスを意識しながら、チームの開発スタイルに合わせてカスタマイズしていくことが重要です。
今日からあなたも GitHub Actions を活用して、開発プロセスの自動化に取り組んでみませんか?継続的な改善により、より効率的で信頼性の高い開発環境を構築することができるでしょう。
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座


