Ruby での依存関係の指定

Ruby で作成された Cloud Functions は、bundler を使用して依存関係にアクセスします。依存関係は、関数のデプロイ時または関数とともにローカルにパッケージ化されているときにダウンロードできます。

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

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

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

Gemfile の例を次を示します。

source "https://rubygems.org"

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

functions_framework gem とその他の依存関係は、次のコマンドを実行してインストールします。

bundle install

bundler は、依存関係を分析する際に Gemfile.lock を生成し、インストールする各 gem の一致するバージョンをフリーズします。これにより、たとえば、ローカルテストで使用されているものと同じ依存関係のバージョンで関数がデプロイされます。Gemfile.lock の正確な形式は bundler 専用であり、手動で編集することはできません。

前に bundler を使用して依存関係をインストールし、ローカルでテストを実行している場合は、おそらく Gemfile.lock ファイルはすでに存在しています。ロックファイルがない場合は、次のコマンドを実行して生成できます。

bundle lock

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

依存関係と関数は、一緒にパッケージ化してデプロイすることもできます。この方法は、依存関係が 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 リファレンスをご覧ください。