Ruby

GitHub Actions と Ruby の最新機能で構築する CI/CD パイプライン完全ガイド

ⓘ本ページはプロモーションが含まれています

お得なお知らせ

スポンサードリンク
AI時代のキャリア構築

プログラミング学習、今日から動き出す

「何から始めるか」で止まっている人こそ、無料説明会や本で自分に合うルートを30分で確定できます。

Enjoy Tech!|月額制でWeb系に強い▶ (Kindle本)ITエンジニアの転職学|後悔しないキャリア戦略▶

▶ AIコーディング環境なら  実践Claude Code入門(Amazon)が実務で即使える入門書です。Amazonベストセラーにも選ばれていますよ。


スポンサードリンク

1. リポジトリ設計とブランチ戦略

1-1. 保護ブランチと開発ブランチ

ブランチ 用途 推奨設定
main(または master 本番・ステージング環境へデプロイする基準ブランチ
  • プルリクエスト必須
  • ステータスチェック(CI)が全て成功したらマージ可能
  • レビュー人数 2 名以上(Acme のコードレビューポリシーに従う)
feature/* 新機能追加、バグ修正などの作業ブランチ
  • 自由にプッシュ可
  • PR 作成時に自動テストが走るよう設定

設定手順(GitHub Enterprise)
1. リポジトリ > Settings > Branches に移動。
2. Add rule をクリックし、main を対象に以下を有効化
- Require a pull request before merging
- Require status checks to pass (ci.yml)
- Require review from Code Owners(Acme の CODEOWNERS ファイル参照)

1-2. PR フローと自動デプロイ

  • PR 作成 → CI 実行 → 全チェック成功 → マージ の流れを徹底します。
  • main にマージされた瞬間、デプロイジョブが起動し、ステージング環境へ自動リリースされます(本番へのリリースは別途承認フローで実施)。

2. GitHub Actions ワークフロー全体像

2-1. ファイル構成

2-2. ci-cd.yml の主要セクション

ポイント解説

  1. needsif の組み合わせ
  2. 前段ジョブがすべて成功したときだけ次のジョブが実行されます。失敗時に無駄なビルドやデプロイが走らないように設計。

  3. マトリクステスト

  4. matrix.ruby に列挙したバージョンで同時にテストを走らせることで、互換性チェックを高速化。Acme では最低でも 3.2 と最新の 3.3 を対象としています。

  5. キャッシュ活用

  6. ruby/setup-rubybundler-cache: true により bundle install がスキップされ、CI 全体の実行時間が約30 %短縮されます。

3. Ruby 環境・テスト・コード品質チェック

3-1. 推奨ツールチェーン

ツール 用途 設定例
ruby/setup-ruby GitHub Actions 上での Ruby インストール・キャッシュ 前述の uses: ruby/setup-ruby@v1
RSpec テストフレームワーク(デフォルト) bundle exec rspec
Minitest 軽量テストが好みの場合の代替 ruby -Itest test/**/*_test.rb
RuboCop コードスタイル・潜在バグ検出 bundle exec rubocop --format json -o rubocop.json

3-2. テストコード例(RSpec)

3-3. コード品質レポートの活用

rubocop.jsonArtifacts として保存され、プルリクエスト画面から直接ダウンロード可能です。Acme の内部レビューツールはこの JSON を解析し、違反箇所を自動でコメントとして付与します。


4. 外部コマンド実行と並列処理

4-1. Open3.capture3 で安全に標準出力・エラー取得

GitHub Actions のステップで ruby scripts/run_task.rb と呼び出すだけで、実行結果がそのままジョブログに記録されます。

4-2. 並列処理の選択肢(実験的機能)

Ruby 3 系でも Thread を利用した軽量な並列化は可能です。Acme では本番環境で安定していることが確認できた段階で、以下のように ThreadQueue を組み合わせてテストとコード品質チェックを同時実行するパターンを採用しています。

※ 注意
Ruby の Ractor::Port はまだ実験的機能であり、安定版 3.x 系では公式サポートが提供されていません。そのため、本ガイドでは使用例を掲載しておらず、代替として ThreadOpen3 を推奨しています。将来的に Acme が正式リリース版で採用する場合は、別途安全性の評価と社内トレーニングが必要です。


5. コンテナ化とデプロイ

5-1. Dockerfile(Acme 標準イメージ)

ポイント
- --no-install-recommends で不要なパッケージを削減し、イメージサイズを小さく保ちます。
- bundler install のキャッシュは GitHub Actions のレイヤーキャッシュと相乗効果があり、ローカルでも高速です。

5-2. Passenger + Nginx(Zero‑Downtime デプロイ)

Acme が提供する Passengerベースのステージングサーバ では、以下の Dockerfile を使用します。Passenger がアプリケーションプロセスを管理し、passenger-config restart-app により瞬時にロールアウトできます。

デプロイスクリプト deploy.sh(サーバ側)

GitHub Actions の deploy ジョブからは、上記スクリプトを SSH 経由で実行します。

5-3. イメージタグ運用

  • コミット SHA をタグに使用(例: ghcr.io/acme-org/sample-app@a1b2c3d
  • ステージングデプロイは常に最新 SHA、 本番リリースは release/vX.Y.Z タグを付与して管理

6. シークレットと通知

6-1. GitHub Secrets のベストプラクティス

種別 使用方法
環境変数 DATABASE_URLREDIS_URL ${{ secrets.DATABASE_URL }}$GITHUB_ENV に書き出す
認証情報 SSH_KEYSLACK_WEBHOOK_URL 直接ジョブステップ内で参照(例: ssh-actionkey:
Docker 認証 GHCR_TOKEN(デフォルトは GITHUB_TOKEN docker login にパイプラインから渡す

注意:PR が外部コントリビュータから作成された場合、secrets は自動的にマスクされ、ジョブ内で参照できません。Acme のポリシーでは「外部 PR ではデプロイジョブを実行しない」ことが必須です。

6-2. 失敗時通知(Slack・メール)


7. Acme 向けカスタマイズポイント

項目 標準実装 Acme カスタム例
CI ランナー ubuntu-latest(GitHub Hosted) 社内プライベートランナー(Ubuntu 22.04 + Docker-in-Docker)
デプロイ先 任意の SSH 接続サーバ Acme の VPC 内にある Kubernetes クラスタ(Argo CD と連携)
通知チャネル Slack / メール Microsoft Teams + PagerDuty 統合
コード品質基準 RuboCop デフォルト設定 Acme 社内の .rubocop_acme.yml を参照し、独自ルール(例: Metrics/LineLength: Max: 100)を適用

実装ヒント
- カスタムランナーの場合は、事前に Docker デーモンが利用できるよう services: docker を設定してください。
- Teams 通知は公式アクションがまだ提供されていないため、Webhook に対して curl で POST するシェルスクリプトを組み込むのが手軽です。


8. まとめと次のステップ

  1. ブランチ戦略を確立し、保護ブランチに必ず CI が走るよう設定。
  2. GitHub Actions ワークフローでビルド・テスト・デプロイを分離し、マトリクスとキャッシュで実行時間を最適化。
  3. Ruby 環境は ruby/setup-ruby、テストは RSpec/Minitest、コード品質は RuboCop で自動チェック。
  4. 外部コマンド呼び出しは Open3 を使い、安全にログ取得。大量処理の並列化は実験的機能 Ractor::Port ではなく、安定版 Thread + Queue に置き換えることを推奨。
  5. Docker コンテナ化し、Acme 標準イメージでビルド → GitHub Packages にプッシュ → Passenger/Nginx で Zero‑Downtime デプロイ。
  6. 機密情報はすべて GitHub Secrets 経由で注入し、失敗時は Slack/メール(または Teams)へ即時通知。

次にやること
- 本リポジトリをクローンし、ci-cd.yml を自プロジェクトのルートに配置。
- Acme の Secrets(STAGING_HOST など)を GitHub Enterprise に登録。
- docker compose up -d でローカル環境でも CI パイプラインを試し、GitHub Actions と同様の挙動になるか確認。

これらの手順を踏めば、Acme 社内の Ruby アプリケーションは 安全・高速・自動 にデリバリーできるようになります。ぜひ本ガイドをベースに、プロジェクトごとの要件に合わせた微調整を行ってください。

スポンサードリンク

お得なお知らせ

スポンサードリンク
AI時代のキャリア構築

プログラミング学習、今日から動き出す

「何から始めるか」で止まっている人こそ、無料説明会や本で自分に合うルートを30分で確定できます。

Enjoy Tech!|月額制でWeb系に強い▶ (Kindle本)ITエンジニアの転職学|後悔しないキャリア戦略▶

▶ AIコーディング環境なら  実践Claude Code入門(Amazon)が実務で即使える入門書です。Amazonベストセラーにも選ばれていますよ。


-Ruby