Ruby ランタイム

Cloud Run 関数は、オペレーティング システムのバージョンに加えて、アドオン パッケージ、言語サポート、お使いの関数をサポートして呼び出す Ruby Functions Framework ライブラリで構成される環境で実行されます。この環境は言語バージョンで識別され、ランタイム ID として知られています。

関数の準備

関数は、 Google Cloud コンソールから直接準備することも、ローカルマシンで作成してアップロードすることもできます。Ruby 開発用にローカルマシンを準備するには、Ruby 開発環境を設定するをご覧ください。

ランタイムの選択

Cloud Run functions は、サポートされている言語ランタイムとベースイメージのページに記載されている複数のバージョンの Ruby をサポートしています。関数の優先 Ruby ランタイムは、デプロイ時に選択できます。

gcloud

Cloud Run functions を使用して gcloud CLI で HTTP 関数をデプロイするには、Google Cloud CLI を使用してデプロイするをご覧ください。

Console

Google Cloud コンソールを使用している場合は、関数を作成してデプロイするときにランタイムを選択します。詳しい手順については、Google Cloud コンソール クイックスタートをご覧ください。

ソースコードの構造

Cloud Run functions が関数の定義を見つけるには、ソースコードが特定の構造に従っている必要があります。詳細については、Cloud Run 関数を作成するをご覧ください。

依存関係を指定する

Ruby で作成された Cloud Run functions は、bundler を使用して依存関係にアクセスします。

Functions Framework は、すべての関数に必須の依存関係です。Cloud Run functions は、関数の作成時にユーザーの代理でこの依存関係をインストールしますが、明確化のため明示的な依存関係として含めておくことをおすすめします。

関数がプライベート依存関係を利用している場合は、functions-framework をプライベート レジストリにミラーリングすることをおすすめします。ミラーリング対象の functions-framework を依存関係として関数に含めることで、公共のインターネットからパッケージがインストールされないようにします。

各関数は、functions_framework gem とその関数で必要な他の gem を指定する Gemfile を提供する必要があります。Gemfile は、関数コードを含む app.rb ファイルと同じディレクトリに置く必要があります。さらに、関数はすべての一時的な依存関係と正確なバージョンを指定するロックファイルを提供する必要があります。このファイル(Gemfile.lock)も Gemfile と同じディレクトリにあります。

関数をデプロイすると、Cloud Run は bundler を使用して、GemfileGemfile.lock で宣言された依存関係をダウンロードしてインストールします。

Gemfile には、関数に必要なパッケージとオプションのバージョンの制約が列挙されます。詳細については、Gemfile リファレンスをご覧ください。

次に Gemfile の例を示します。

source "https://rubygems.org"

gem "functions_framework", "~> 0.7"
gem "google-cloud-storage", "~> 1.29"

ローカル依存関係をパッケージ化する

依存関係と関数は、一緒にパッケージ化してデプロイすることもできます。この方法は、依存関係が rubygems パッケージ マネージャーを使用して使用できない場合に選択できます。

ローカルで gem をパッケージ化するには、関数のディレクトリ構造内のディレクトリに gem を入れ、そのパスを依存関係の Gemfile エントリに記述します。gem のディレクトリには有効な gemspec ファイルが入っている必要があります。また、コードが関数と一緒にデプロイされるように、関数のディレクトリ階層内に配置されている必要があります。たとえば、次のようなディレクトリ構造を使用するとします。

myfunction/
├── Gemfile
├── Gemfile.lock
├── app.rb
└── my_private_gem/
    ├── lib/
    |   └── my_private_gem.rb
    └── my_private_gem.gemspec

Gemfile エントリは次のようになります。

source "https://rubygems.org"

gem "functions_framework", "~> 0.7"
gem "my_private_gem", path: "./my_private_gem"

ローカルの gem パスの参照については、Gemfile リファレンスをご覧ください。