Ruby: GitHub Actions でデプロイする

GitHub Actions を使って Ruby コードをデプロイする方法

👋 Stackhero ドキュメントへようこそ!

Stackhero では、すぐに使える Ruby cloud ソリューションをご提供しています。主な特長は以下の通りです:

  • シンプルな git push だけで、数秒でアプリケーションをデプロイできます。
  • 独自ドメイン名をご利用いただけ、HTTPS 証明書の自動設定による高いセキュリティを実現します。
  • 自動バックアップ、ワンクリックアップデート、そしてシンプルで透明性のある予測可能な料金体系で安心してご利用いただけます。
  • プライベートかつ専用インフラによる最適なパフォーマンスと堅牢なセキュリティを確保しています。

時間を節約し、運用をシンプルに:Stackhero の Ruby cloud hosting ソリューションは、わずか5分でお試しいただけます!

GitHub Actions を利用すると、Ruby コードを本番サーバーへデプロイするなどのタスクを自動化できます。手動での作業は一切不要です。

このガイドでは、GitHub Actions を安全かつ信頼性高く設定し、Ruby コードをステージング環境と本番環境の両方へ自動デプロイする方法をご紹介します。この方法により、デプロイの一貫性が保たれ、エラーのリスクも低減できます。

まず、GitHub リポジトリで staging と production の2つのブランチを用意します。これらのブランチにコードを push するたびに、対応する Stackhero インスタンスへ自動的にデプロイされます。

ステージングインスタンスの用意は必須ではありません。このガイドは本番インスタンスのみでも進められますが、ステージングと本番の両方の環境を構築することを強く推奨します。これは業界のベストプラクティスであり、本番ユーザーに影響が及ぶ前に問題を検出できます。

始める前に、GitHub アカウントと Ruby コードが格納されたリポジトリを用意してください。

Stackhero ダッシュボードにアクセスし、ステージング用と本番用の2つの Ruby サービスを作成します。分かりやすくするために、これらのサービス名を「Production」と「Staging」に変更しておくと良いでしょう。

まだ Stackhero アカウントをお持ちでない場合 数分で無料登録でき、その後すぐに Ruby クラウドサービス を数クリックで作成できます。

本番・ステージングサービスの例本番・ステージングサービスの例

GitHub Actions からコードをデプロイできるようにするには、SSH キーを設定する必要があります。これにより、認可されたアクションのみが Stackhero サービスへ接続でき、デプロイのセキュリティが確保されます。

以下のコマンドで新しい SSH キーペアをローカルで生成します:

ssh-keygen -C "" -f /tmp/ssh_key -N ""

次に、作成した公開鍵を取得します:

cat /tmp/ssh_key.pub

Stackhero ダッシュボードで「production」Ruby サービスを選択し、「Configure」ボタンをクリックします。 サービス設定の取得サービス設定の取得

その後、

  1. SSH public keys の下で Add a public key をクリックします。
  2. Description には GitHub Action と入力します。
  3. Key には、先ほど取得した公開鍵の内容を貼り付けます。

サービス設定の取得サービス設定の取得

次に、GitHub のウェブサイトでプロジェクトを開きます。

Settings > Environments へ進み、New environment をクリックします。 GitHub 環境の設定GitHub 環境の設定

環境名を「production」として保存します。 環境の設定環境の設定

No restriction ボタンをクリックし、Selected branches and tags を選択します。 環境制限の設定環境制限の設定

Add deployment branch or tag rule をクリックし、パターンに「production」と入力してルールを追加します。 環境ブランチの設定環境ブランチの設定 環境ブランチの設定環境ブランチの設定

SSH 秘密鍵を安全に保存するため、Environment secrets で Add secret をクリックします。 シークレットの追加シークレットの追加

ローカルで秘密鍵を取得します:

cat /tmp/ssh_key

Name には STACKHERO_SSH_PRIVATE_KEY、Value には秘密鍵の内容を貼り付けます。 SSH 秘密鍵シークレットの設定SSH 秘密鍵シークレットの設定

続いて、Ruby サービスのエンドポイントを環境変数として追加します。Environment variables で Add variable をクリックします。 変数の設定変数の設定

Name には STACKHERO_ENDPOINT、Value には Stackhero ダッシュボードで確認できる Ruby サービスのエンドポイントを入力します。 エンドポイント変数の設定エンドポイント変数の設定

サービスにカスタムドメイン名を設定している場合は、<XXXXXX>.stackhero-network.com の代わりにそのカスタムドメインを必ずご利用ください。

Stackhero および GitHub へのキー登録が完了したら、セキュリティのためローカルのキーを削除してください。

rm /tmp/ssh_key /tmp/ssh_key.pub

ローカルマシンの Git リポジトリ内で、.github/workflows ディレクトリを作成し、その中に deploy-to-stackhero.yml というファイルを作成します。

# ファイル: .github/workflows/deploy-to-stackhero.yml

name: Deploy to Stackhero
run-name: Deploy branch "${{ github.ref_name }}" to Stackhero

on:
  push:
    # git push 時にデプロイアクションをトリガーするブランチのリストです。
    # GitHub の「Settings」/「Environments」でブランチ名に対応する環境を必ず作成してください。
    # その環境に「STACKHERO_SSH_PRIVATE_KEY」シークレットと「STACKHERO_ENDPOINT」変数を追加してください。
    branches: [ "production", "staging" ]

jobs:
  Deploy:
    environment: ${{ github.ref_name }}
    runs-on: ubuntu-latest
    steps:
    - uses: stackhero-io/github-actions-deploy-to-stackhero@v1
      with:
        # 「STACKHERO_SSH_PRIVATE_KEY」シークレットと「STACKHERO_ENDPOINT」変数は、GitHub の「Settings」/「Environments」で該当ブランチの環境に設定してください。
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

ワークフローファイルを作成したら、変更をコミットします。

git add -A .
git commit -m "Add GitHub Actions to deploy to Stackhero"

次に、本番ブランチを作成します。

git checkout -b production

最後に、変更を GitHub へ push します。

git push --set-upstream origin production

この最後の git push で、コードが GitHub の production ブランチにアップロードされます。GitHub Actions が自動的に起動し、Stackhero インスタンスへコードがデプロイされます。

ワークフローの実行状況は、プロジェクトの GitHub ページで Actions をクリックして確認できます。 本番環境へデプロイされた GitHub Actions本番環境へデプロイされた GitHub Actions

これで、GitHub Actions を使った本番環境への継続的デプロイが構築できました。

ステージング環境のセットアップも本番と同様の手順です。必要な箇所で production を staging に置き換えて、上記の手順を繰り返してください。

ステージング環境の設定が完了したら、ステージングブランチを作成します。

git checkout -b staging

ステージングブランチを GitHub へ push します。

git push --set-upstream origin staging

これで、GitHub Actions が自動的にステージングブランチを指定した Stackhero Ruby インスタンスへデプロイします。

デプロイの安全性を高めるために、production および staging ブランチの保護をおすすめします。これにより、直接 push できなくなり、変更は必ずプルリクエスト経由となります。適切な権限を持つチームメンバーが staging へのプルリクエストをレビュー・承認し、問題なければ同様に production へマージできます。

このワークフローを採用することで、セキュリティ(認可されたユーザーのみが staging や production へデプロイ可能)と信頼性(新機能は必ずステージングで検証されてから本番へ反映)が向上します。これにより、スムーズなデプロイと安定した本番環境を維持できます。