Ruby スタートガイド

このチュートリアルは、初めてクラウドでアプリを構築する方々を対象にしています。エンジニアやウェブ デベロッパーなどが、Google Cloud に適用できるアプリ開発の重要なコンセプトを学習する場合に役立ちます。

目標

費用

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

このドキュメントの手順は、リソース使用量が Google Cloud の無料枠ティアの制限内に収まるように設計されています。 料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure 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.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Firestore データベースをネイティブ モードで作成するには、次の手順に従ってください。
    1. Google Cloud コンソールで、[Firestore Viewer] ページに移動します。
      Firestore Viewer に移動
    2. [Cloud Firestore モードの選択] 画面で、[ネイティブ モードを選択] をクリックします。
    3. Firestore データベースのロケーションを選択します。このロケーション設定は、Cloud プロジェクトのデフォルトの Google Cloud リソースのロケーションです。このロケーションは、ロケーション設定を必要とする Cloud プロジェクト内の Google Cloud サービス(特にデフォルトの Cloud Storage バケットおよび App Engine アプリ)で使用されます。
    4. [データベースを作成] をクリックします。
  7. Enable the App Engine Admin, Cloud Storage, Cloud Logging, and Error Reporting APIs.

    Enable the APIs

  8. サンプル リポジトリのクローンを作成して、Cloud Shell でサンプル アプリケーションを開きます。
    Cloud Shell に移動

    Cloud Shell を使用すると、ブラウザからコマンドラインで直接 Google Cloud リソースにアクセスできます。

  9. サンプルコードをダウンロードしてアプリのディレクトリに変更するには、[続行] をクリックします。
  10. Cloud Shell で、gcloud ツールを設定して新しい Google Cloud プロジェクトを使用します。

    # Configure gcloud for your project
    gcloud config set project PROJECT_ID
    

    PROJECT_ID は、Google Cloud コンソールを使用して作成した Google Cloud プロジェクト ID に置き換えます。

    Google Cloud CLI は、コマンドラインから Google Cloud リソースを操作する基本的な方法です。このチュートリアルでは、gcloud ツールを使用してアプリをデプロイおよびモニタリングします。

アプリを実行する

  1. bundler を使用してアプリの依存関係をインストールします。

    bundle install
    

  2. rails サーバーを実行します。
    GOOGLE_CLOUD_PROJECT=PROJECT_ID bundle exec rails server -p 8080
    
    PROJECT_ID は、作成した Google Cloud プロジェクト ID に置き換えます。
  3. Cloud Shell で、[ウェブでプレビュー] をクリックし、[ポート 8080 でプレビュー] を選択します。新しいウィンドウが開き、実行中のアプリが表示されます。

App Engine にアプリをデプロイする

Google Cloud には、コードを実行する際に使用できるオプションがいくつか用意されています。この例では、App Engine を使用してスケーラブルなアプリを Google Cloud にデプロイします。App Engine では、開発環境の構成もサーバーの管理も不要なため、コーディングに集中できます。また、トラフィック量が急増した場合も App Engine が自動的にスケーリングしてサポートします。

app.yaml ファイルは App Engine にデプロイするメインの構成ファイルです。

runtime: ruby25
entrypoint: bundle exec rackup -p $PORT
instance_class: F2
  1. ターミナル ウィンドウで、gcloud CLI を使用して App Engine にアプリをデプロイします。

    # on the command-line
    gcloud app deploy
    

  2. ウェブブラウザに次のアドレスを入力します。

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

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

    Bookshelf アプリのホームページ

App Engine へのデプロイの詳細については、Ruby 2.5 ランタイム環境をご覧ください。

Firestore でデータを保存する

App Engine インスタンスに情報を保存することはできません。これは、インスタンスの再起動時に情報が失われ、新しいインスタンスの作成時にはすでに存在しないためです。そこで、すべてのインスタンスが読み取りおよび書き込みするデータベースを使用します。

Google Cloud にはデータを保存する際に使用できるオプションがいくつか用意されています。この例では、Firestore を使用して各書籍のデータを保存します。Firestore はフルマネージドでサーバーレスの NoSQL ドキュメント データベースで、データを保存および照会できます。Firestore はアプリのニーズを満たすために自動でスケールし、使用しない場合はゼロにスケールします。最初の書籍を追加しましょう。

  1. ウェブブラウザに次のアドレスを入力します。

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

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

  2. デプロイしたアプリ用の書籍を作成するには、[Add book] をクリックします。

    Bookshelf アプリに書籍を追加する
  3. [Title] 項目に「Moby Dick」と入力します。
  4. [Author] 項目に「Herman Melville」と入力します。
  5. [保存] をクリックします。Bookshelf アプリにエントリが追加されました。

    Moby Dick の Bookshelf アプリのエントリ
  6. Google Cloud コンソールで Firestore ページを更新するには、[更新] をクリックします。データが Firestore に表示されます。Bookshelf アプリでは、各書籍が一意の ID とともに Firestore ドキュメントとして、すべて Firestore コレクション内に保存されます。このチュートリアルでは、コレクションを書籍集(books)と呼びます。Firestore ドキュメントの例。

Firestore は Firestore クライアント ライブラリを使用して書籍集を保存します。Firestore ドキュメントを取得する例を次に示します。

require "google/cloud/firestore"
firestore = Google::Cloud::Firestore.new project_id: project_id
@collection = firestore.col "books"
book_snapshot = collection.doc(id).get
Book.from_snapspot book_snapshot if book_snapshot.data

Firestore の使用の詳細については、Firestore にデータを追加するをご覧ください。

Cloud Storage にアップロードしたファイルを保存する

書籍を追加したので、書籍の表紙の画像を追加します。ファイルをインスタンスに保存することはできず、データベースは画像ファイルに適していません。そこで Cloud Storage を使用します。

Cloud Storage は Google Cloud 向けのメインの blob ストアです。Cloud Storage を使用して、Google Cloud で共有するアプリのアセットをホストできます。Cloud Storage を使用するには、データを保存する基本的なコンテナである Cloud Storage バケットを作成する必要があります。

  1. Google Cloud コンソールで、[Cloud Storage ブラウザ] ページに移動します。

    Cloud Storage ブラウザページに移動

  2. [バケットを作成] をクリックします。
  3. [バケットの作成] ダイアログで、Google Cloud のプロジェクト ID を文字列 _bucket に付け加えてバケットの名前を入力して、名前を YOUR_PROJECT_ID_bucket のようにします。この名前はバケット名の要件を満たしている必要があります。他のすべての項目はデフォルト値のままにします。
  4. [作成] をクリックします。
  5. バケットの作成後、ユーザーが閲覧できるようにオブジェクトを一般公開する必要があります。オブジェクトを一般公開するには、データの一般公開をご覧ください。
  6. [Edit book] をクリックして、書籍の表紙としてアップロードする画像を選択します。たとえば、このパブリック ドメインの画像を使用します。
    Moby Dick の書籍の表紙
  7. [Save] をクリックします。Bookshelf アプリのエントリがあるホームページにリダイレクトされます。
    Moby Dick の Bookshelf アプリのエントリ

Bookshelf アプリは、Cloud Storage クライアント ライブラリを使用して、アップロードされたファイルを Cloud Storage に送信します。

require "google/cloud/storage"
bucket_id = "#{project_id}_bucket"
storage = Google::Cloud::Storage.new project_id: config["project_id"],
                                     credentials: config["keyfile"]
bucket = storage.bucket bucket_id

Cloud Storage の使用の詳細については、入門ガイドのリストをご覧ください。

Google Cloud のオペレーション スイートを使用してアプリをモニタリングする

アプリをデプロイし、書籍を作成して修正しました。ユーザーのためにこのようなイベントをモニタリングするには、アプリケーション パフォーマンス管理を使用します。

Cloud Logging でログをモニタリングする

Google Cloud Console

  1. ブラウザで、アプリの /logs URL にアクセスします。

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

    これにより、Cloud Logging にカスタムのエントリが送信されます。エンティティには、NOTICEログの重大度と、「Hey, you triggered a custom log entry. Good job!」というメッセージが含まれます。

  2. アプリをリアルタイムでモニタリングできるログビューアに移動します。これは、問題が発生した場合に、最初に確認すべき場所です。
    Cloud Logging ログビューア
  3. [リソース] プルダウン リストで、GAE Application を選択します。
  4. [ログ] プルダウン リストで、[すべてのログ] を選択します。

    カスタムのログエントリ用の行があります。

    ログビューアのエントリ

gcloud

  1. ターミナル ウィンドウで、Google Cloud CLI を使用して新しいログエントリをリッスンし、アプリのログをモニタリングします。

    gcloud app logs tail

  2. ブラウザで、アプリの /logs URL にアクセスします。

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

    これにより、Cloud Logging にカスタムのエントリが送信されます。エンティティには、NOTICEログの重大度と、「Hey, you triggered a custom log entry. Good job!」というメッセージが含まれます。

    gcloud コマンドの出力には、新しいログエントリが表示されます。

    Waiting for new log entries...
    2019-03-27 22:17:01 default[20190327t151430]  "Hey, you triggered a custom log entry. Good job!"
    

Error Reporting でエラーをモニタリングする

  1. Google Cloud コンソールで、[Error Reporting] ページに移動します。
    [Error Reporting] ページに移動
    Error Reporting では、アプリ内のエラーと例外が強調表示され、そのアラートを設定できます。
  2. ブラウザで、アプリの /errors URL にアクセスします。
    https://PROJECT_ID.REGION_ID.r.appspot.com/errors

    これにより、新しいテストの例外が生成され、Google Cloud のオペレーション スイートに送信されます。

  3. Google Cloud コンソールで [Error Reporting] ページに戻り、しばらくすると新しいエラーが表示されます。[自動再読み込み] をクリックすると、ページを手動で更新する必要がなくなります。

    Error Reporting のエラー メッセージ。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトを削除する

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

次のステップ