アプリケーション開発

Google Cloud Functions に Ruby のサポートを導入

#appdev

※この投稿は米国時間 2021 年 1 月 13 日に、Google Cloud blog に投稿されたものの抄訳です。

Cloud Functions は、Google Cloud の Function as a Service(FaaS)として提供される軽量コンピューティング プラットフォームです。サーバーやランタイム環境の管理を必要とせずに、イベントに応答する単一目的のスタンドアロン関数を作成できます。Cloud Functions は、サーバーレス アプリケーション、モバイルや IoT のバックエンド、リアルタイムのデータ処理システム、動画、画像、感情分析、さらには chatbot や仮想アシスタントのようなものにも最適です。

本日、この Cloud Functions に、汎用プログラミング言語として広く利用されている Ruby のサポートを導入いたします。これにより、Functions Framework for Ruby を使って慣用的な Ruby 関数の記述と、ビジネス クリティカルなアプリケーションや統合レイヤの構築が可能になります。また、現在プレビュー版の Cloud Functions for Ruby によって、プライベート VPC ネットワーク内のリソースへのアクセスを備えた Ruby 2.6 または Ruby 2.7 のフルマネージド環境で関数をデプロイできます。Ruby 関数は負荷に応じて自動的にスケールされます。さらに、HTTP イベントに応答するための HTTP 関数や、Pub/SubCloud StorageFirestore などのさまざまなクラウド サービスや Google Cloud サービスから提供されたイベントを処理する CloudEvent 関数も記述できます。

Functions Framework for Ruby.jpg

可搬性のある Ruby 関数を記述するためのオープンソースの Functions as a Service フレームワークである Functions Framework for Ruby を使って関数を開発できます。Functions Framework を使用すると、関数の開発、テスト、実行はローカルで行い、その関数を Cloud Functions や別の Ruby 環境にデプロイできます。

Ruby 関数の記述

Functions Framework for Ruby は、HTTP 関数と CloudEvent 関数をサポートしています。HTTP のクラウド関数を慣用的な Ruby で記述するのはとても簡単です。以下に、Webhook / HTTP 用のシンプルな HTTP 関数のユースケースをご紹介します。

  require "functions_framework"
 
FunctionsFramework.http "hello_http" do |request|
  "Hello, world!\n"
end

Ruby ランタイムの CloudEvent 関数は、業界標準の CNCF CloudEvents にも対応します。これらのイベントは、Pub/Sub、Cloud Storage、Firestore などのさまざまな Google Cloud サービスから発生します。

Pub/Sub で動作する簡単な CloudEvent 関数を以下にご紹介します。

  require "functions_framework"
require "base64"
 
FunctionsFramework.cloud_event "hello_pubsub" do |event|
  name = Base64.decode64 event.data["message"]["data"] rescue "World"
  logger.info "Hello, #{name}!"
end

Ruby Functions Framework は、一般的に利用されている Ruby 開発プロセスやツールとも親和性があります。関数の記述に加え、そのテストも Minitest や RSpec などの Ruby テスト用フレームワークで隔離して行うことができ、ウェブサーバーを立ち上げたり、シミュレートしたりする必要はありません。RSpec におけるテストの簡単な例を以下にご紹介します。

  require "rspec"
require "functions_framework/testing"
 
describe "functions_helloworld_get" do
  include FunctionsFramework::Testing
 
  it "generates the correct response body" do
    load_temporary "hello/app.rb" do
      request = make_get_request "http://example.com:8080/"
      response = call_http "hello_http", request
      expect(response.status).to eq 200
      expect(response.body.join).to eq "Hello Ruby!\n"
    end
  end
end

Cloud Functions for Ruby をぜひお試しください

Cloud Functions for Ruby はすぐにお試しいただけます。クイックスタート ガイドで関数の記述方法を確認したら、ぜひ Google Cloud 無料トライアルで実践してみてください。もう少し技術的に掘り下げたいとお考えの方は、Ruby Functions Framework ドキュメントをご確認ください。また、オープンソースの Functions Framework for Ruby にご興味があれば、お気軽にプロジェクトをご覧ください。プロジェクトに貢献していただくことも可能です。これからどんな Ruby 関数が生まれるのか楽しみです。

-Developer Relations シニア エンジニア Daniel Azuma