App Engine フレキシブル環境で Rails 7 を実行する

App Engine フレキシブル環境で動作する Ruby on Rails アプリの開発を始めます。作成したアプリはすべての Google プロダクトの基盤となる同じインフラストラクチャで動作するため、数人でも何百万人でも、すべてのユーザーに対応できるように確実にスケーリングできます。

このチュートリアルは、Rails ウェブ開発の知識があることを前提としています。新しい Rails アプリのデプロイについて手順を追って説明します。

このチュートリアルでは、 Ruby 3.0 以降をサポートし、必要とします。

始める前に

  1. アカウントにログインします。 Google Cloud を初めて使用する場合は、 アカウントを作成して、実際のシナリオで Google プロダクトのパフォーマンスを評価してください。 Google Cloud新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Google Cloud CLI をインストールします。

  7. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  8. gcloud CLI を初期化するには、次のコマンドを実行します:

    gcloud init

Rails 用のローカル環境の設定

Rails の開発用にローカル環境を設定するには、次の操作を行う必要があります。

  1. Ruby バージョン 3.0 以降をインストールします。

  2. Rails 7 gem をインストールします。

  3. Bundler gem をインストールします。

インストール済みの Ruby、Rails、Google Cloud CLI に付属する Cloud Shellを使用することもできます。

Rails とその依存関係のインストールの詳細については、 公式 Rails スタートガイド をご覧ください。

事前準備が完了したら、Rails アプリを作成してデプロイできます。以降のセクションでは、アプリの構成、実行、デプロイの手順を順番に説明します。

新しいアプリの作成

  1. 新しい Rails サンプルアプリを作成します。

    rails new appengine_example
    
  2. サンプルコードのあるディレクトリに移動します。

    cd appengine_example
    

アプリのローカル実行

ローカルのパソコン上で新しい Rails アプリを実行するには:

  1. ローカルのウェブサーバーを起動します。

     bundle exec rails server
    
  2. ブラウザで http://localhost:3000/ にアクセスします。

    サンプルアプリに、Rails のロゴと Rails と Ruby のバージョンが表示されます。

シンプルなページの追加

ここで、生成した Rails アプリにスタートページを追加します。

  1. 新しいページのスキャフォールディングを生成するには、WelcomeController という名前で新しい Rails コントローラを作成し、index アクションを指定します。

    bundle exec rails generate controller Welcome index
    
  2. ファイル app/views/welcome/index.html.erb を開いて、次のボイラープレート HTML を確認します。

    <h1>Welcome#index</h1>
    <p>Find me in app/views/welcome/index.html.erb</p>
  3. 好きなようにファイルを変更します。たとえば、次の内容を使用できます。

    <h1>Welcome</h1>
    <p>This is a home page for a new Rails App on Google Cloud Platform!</p>
  4. Rails のルート アクションとして index コントローラ アクションを設定します。 その後、ユーザーが Rails アプリにアクセスするたびに、作成したスタートページが表示されます。

  5. ファイル config/routes.rb を開いて、生成された内容を確認します。

    Rails.application.routes.draw do
      get 'welcome/index'
    
      # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
    end
  6. このファイルを変更するには、root 'welcome#index' を追加します。

    Rails.application.routes.draw do
      get 'welcome/index'
    
      # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
      root 'welcome#index'
    end
  7. ファイルを保存して閉じます。前述の説明のとおりに Rails アプリをテストします。

アプリを App Engine フレキシブル環境にデプロイする

App Engine フレキシブル環境では、app.yaml というファイルが使用されます。アプリのデプロイ構成を記述します。 このファイルが存在しない場合は、gcloud CLI によりデプロイ構成が推測されます。ただし、Rails は本番環境で秘密鍵を必要とするので、このファイルを提供することをおすすめします。

App Engine にデプロイするサンプルアプリを構成するには、サンプル アプリ ディレクトリのルートに app.yaml という名前の新しいファイルを作成し、次を追加します。

entrypoint: bundle exec rackup --port $PORT
env: flex
runtime: ruby

Rails 秘密鍵の構成

Rails アプリを本番環境にデプロイする場合、環境変数 SECRET_KEY_BASE に、ユーザー セッション データの保護に使用される秘密鍵を設定します。この環境変数は config/secrets.yml ファイルから読み取られます。

  1. 新しい秘密鍵を生成します。

    bundle exec rails secret
    
  2. 生成された秘密鍵をコピーします。この秘密鍵は次のステップで使用します。

  3. 前の手順で作成した app.yaml ファイルを開き、env_variables セクションを追加します。env_variables は、App Engine フレキシブル環境の production 環境の環境変数を設定します。app.yaml は下の例のようになります。[SECRET_KEY] はコピーした秘密鍵に置き換えます。

    entrypoint: bundle exec rackup --port $PORT
    env: flex
    runtime: ruby
    
    env_variables:
      SECRET_KEY_BASE: [SECRET_KEY]

App Engine フレキシブル環境アプリのセットアップ

アプリを初めてデプロイする場合は、App Engine フレキシブル環境アプリを作成し、Rails アプリを実行するリージョンを選択できるようにする必要があります。詳細については、リージョンとゾーンをご覧ください。

  1. App Engine アプリを作成します。デフォルトでは、次のコマンドで 2 つのインスタンスが作成されます。

    gcloud app create
    
  2. Ruby アプリの App Engine フレキシブル環境をサポートするリージョンを選択します。

App Engine フレキシブル環境へのデプロイ

次のコマンドを実行して、サンプルアプリをデプロイします。

gcloud app deploy

更新が完了したことを通知するメッセージが表示されるまで待ちます。これには数分かかることがあります。

デプロイされた Rails アプリへのアクセス

  1. プロジェクト ID を取得するには、gcloud info を実行します。

  2. ブラウザに次の URL を入力します。

    https://PROJECT_ID.REGION_ID.r.appspot.com

    次のように置き換えます。

    • PROJECT_ID: 実際の Google Cloud プロジェクト ID
    • REGION_ID: App Engine がアプリに割り当てるコード

次の内容が表示されます。

実行中の新しい Rails アプリのスクリーンショット

今回は、App Engine フレキシブル環境で実行される Rails アプリによってリクエストが処理されます。

このコマンドは、app.yaml で説明されているようにアプリをデプロイし、新しくデプロイされたバージョンをデフォルト バージョンとして設定します。これにより、すべての新しいトラフィックがこのバージョンによって処理されます。アプリをデプロイすると、アプリが提供されているかどうかをプラットフォームがチェックする間に、メッセージが繰り返し表示される場合があります。これは正常な動作です。アプリの更新が完了したことを通知するメッセージが表示されるまで待ちます。

アプリを更新する場合は、最初にデプロイしたときと同じコマンドを使って更新バージョンをデプロイできます。デプロイを行うと、アプリの新しいバージョンが作成され、デフォルトのバージョンに設定されます。古いバージョンはそのまま残り、関連付けられた VM インスタンスも同様に残ります。 すべてのアプリ バージョンと VM インスタンスが課金対象のリソースとなるのでご注意ください。

App Engine ログの読み取り

Rails アプリをデプロイした後、ログを見ることができます。コンソールの Google Cloud ログ エクスプローラまたは gcloud app logs read を使用して、アプリのログを確認できます。詳しくは、 gcloud CLI を使用したログの読み取りをご覧ください。

リソースのクリーンアップ

チュートリアルが終了したら、作成したリソースをクリーンアップして、割り当ての使用を停止し、課金されないようにできます。次のセクションで、リソースを削除または無効にする方法を説明します。

プロジェクトの削除

課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

プロジェクトを削除するには:

  1. コンソールで [**リソースの管理**] ページに移動します。 Google Cloud

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、 [Shut down] をクリックしてプロジェクトを削除します。

App Engine のバージョンの削除

アプリのバージョンを削除するには:

  1. コンソールで、App Engine の [**バージョン**] ページに移動します。 Google Cloud

    [バージョン] に移動

  2. デフォルト以外で削除するアプリのバージョンのチェックボックスをオンにします。 削除します。
  3. アプリのバージョンを削除するには、 [Delete] をクリックします。

次のステップ