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

App Engine フレキシブル環境で動作する Ruby on Rails アプリの開発は簡単に始めることができます。作成したアプリは Google プロダクトと同じインフラストラクチャで動作し、ユーザー数の規模に合わせてスケーリングできるため、すべてのユーザーに対して確実にサービスを提供できます。

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

このチュートリアルには Ruby 2.3.3 以降が必要です。

始める前に

各ステップを完了したら、そのステップのチェックボックスをオンにしてください。

  1. check_box_outline_blank check_box Google Cloud Platform Console でプロジェクトを作成します。
    まだプロジェクトを作成していない場合は、このステップで作成します。プロジェクトにより、deployment、アクセス制御、課金、サービスなど、アプリに関するすべての Google Cloud Platform リソースを管理できます。
    1. GCP Console を開きます。
    2. 上部のプルダウン メニューで、[プロジェクトを作成] を選択します。
    3. [詳細設定を表示] をクリックします。[App Engine の場所] で、日本のロケーションを選択します。
    4. プロジェクトの名前を指定します。
    5. プロジェクト ID をメモしておきます。この ID はプロジェクト名とは異なる場合があります。プロジェクト ID はコマンドや構成で使用します。
  2. check_box_outline_blank check_box プロジェクトの課金を有効にして、無料トライアルに登録します。

    プロジェクトの課金をまだ有効にしていない場合は、課金を有効にして、無料トライアルに登録します。課金を有効にすると、インスタンスの実行やデータの保存など、課金対象のリソースをアプリで使えるようになります。 無料トライアル期間中は、どのサービスも課金されることはありません。

  3. check_box_outline_blank check_box Cloud SDK をインストールします。

    Cloud SDK をまだインストールしていない場合は、今すぐ Cloud SDK をインストールして初期化してください。Cloud SDK には、GCP でリソースの作成や管理に使用できるツールとライブラリが含まれています。

Ruby 用のローカル環境のセットアップ

始める前に、次の手順を行います。

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

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

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

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

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

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

新しいアプリの作成

  1. 新しい Rails サンプルアプリをスキャフォールディングします。

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

    cd appengine_example
    

アプリのローカル実行

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

  1. Bundler を使用して依存関係をインストールします。

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

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

Yay! You’re on Rails!」というメッセージがページに表示されます。

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

シンプルなページの追加

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

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

    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 コマンドライン ツールはデプロイ構成を推測しようとします。ただし、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 アプリを作成します。

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

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

  1. デプロイする前に、Rails アセットをプリコンパイルします。

    RAILS_ENV=production bundle exec rails assets:precompile
    
  2. アセットのコンパイルが完了したら、サンプルをデプロイします。

    gcloud app deploy
    

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

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

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

  2. ブラウザで https://[PROJECT_ID].appspot.com を開きます。

    ここで

    • [PROJECT_ID] は、最初の手順で取得したプロジェクト ID です。

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

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

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

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

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

App Engine ログの読み取り

Rails アプリをデプロイした後、ログを見ることができます。アプリのログを見るには、GCP Console のログビューアを使用するか、gcloud app logs read を使用します。詳しくは、Cloud SDK を使用したログの読み取りをご覧ください。

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

「App Engine で Rails 5 を実行する」チュートリアルが終了したら、Google Cloud Platform で作成したリソースをクリーンアップして、今後料金が発生しないようにします。以下のセクションで、このようなリソースを削除または無効にする方法を説明します。

プロジェクトの削除

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

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

  1. GCP Console で [プロジェクト] ページに移動します。

    プロジェクト ページに移動

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

App Engine のバージョンの削除

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

  1. GCP Console の [App Engine のバージョン] ページに移動します。

    [バージョン] ページに移動

  2. 削除したい、デフォルト以外のアプリのバージョンの横にあるチェックボックスをクリックします。
  3. ページ上部にある [削除] ボタンをクリックし、アプリのバージョンを削除します。

次のステップ

このページは役立ちましたか?評価をお願いいたします。