BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース AWS LambdaがRuby 3.2ランタイムのサポートを開始

AWS LambdaがRuby 3.2ランタイムのサポートを開始

原文リンク(2023-06-16)

AWSは、AWS Lambda最新バージョンのランタイムへのサポートを開始する。先日、同社はRuby 3.2ランタイムのサポートを発表した。

Ruby 3.2では、匿名引数渡しの進化、endlessメソッドの追加、正規表現の改良新しいDataクラスの導入、TimeとMatchDataのパターンマッチ機能の強化、パターンマッチ内での「find pattern」サポートの搭載など、さまざまな機能強化とアップグレードが行われている。

AWSのシニアソリューションアーキテクトであるPraveen Koorse氏は、AWS Computeのブログ記事で、Ruby 3.2は無名引数の取り扱いを強化し、コードにおける引数の利用を単純化、効率化すると述べている。このアップデート以前、無名引数をメソッドに渡すには委譲パターンや Module#ruby2_keywords を使用し *argsや&block に委譲していた。しかし、この方法は直感的でなく、特に複数の引数を扱う場合には明確さに欠けるものであった。

現在、メソッド宣言に無名の位置引数やキーワード引数が含まれている場合、それらは引数として次のメソッドに渡すことができる。無名ブロック転送(anonymous block)の利点は、restやキーワードrestの引数転送にも同じように適用される。

def keywords(**) # キーワード引数を受け付ける
 foo(**) # 次のメソッドに渡す

end

def positional(*) # 位置引数を受け付ける

 bar(*) # 次のメソッドに渡す

end

def positional_keywords(*, **) # 同じく
 foobar(*, **)

end

また、Ruby 3では「endlessメソッド」という新機能が導入され、def method() = statement という、たった1つの構文でだけでメソッドを定義できるようになった。この構文では、明示的なendキーワードが不要になり、簡潔なワンライナーとしてメソッドを定義することが可能。これにより、基本的なユーティリティ・メソッドの作成が容易になり、よりクリーンなコードの作成、コードの可読性の向上、保守性の向上に寄与する。

def dbg_args(a, b=1, c:, d: 6, &block) = puts("Args passed: #{[a, b, c, d, block.call]}")

dbg_args(0, c: 5) { 7 }

# 出力: Args passed: [0, 1, 5, 6, 7]


def square(x) = x**2

square(100)

# => 10000

Lambda関数のデプロイにRuby 3.2を利用する場合、開発者は次のステップを踏むことができる。また、AWS CLIAWS Serverless Application Model(AWSSAM)、AWS CloudFormationを活用して、Ruby 3.2でコーディングされたサーバーレスアプリケーションのデプロイと管理ができる。さらに、開発者は、AWSが提供するRuby 3.2ベースイメージの、コンテナイメージを使用してRuby 3.2機能を構築およびデプロイすることも可能である。

BoltOps Cloud Infrastructure Consultancyの創設者であるTung Nguyen氏は、次のようにツイートしている。

AWS Lambda Ruby 3.2上でJets v4デモアプリをデプロイしました。成功です!もうCustom Runtime Lambda Layerを使う必要はありません。

また、Ruby 3.2対応のAWS Lambdaに関するRedditスレッドの回答者は、次のように述べている。

コンテナを使おう。そして、AWSが何をサポートしているか心配するのはやめよう。

さらに別の者はこう回答している。

そして、自分のランタイムを管理することもできますよ?

AWS Lambda以外の競合のFunction as a Service(FaaS)提供は、Azure Functionsのように、どのRubyランタイムバージョンもサポートしない。ユーザーは、Azure Functionsのワークアラウンドを通じてRuby(古いランタイム)を活用することができる。一方、Google Cloud FunctionsはRubyランタイムをサポートしており、その中には同社が使用を推奨している3.2も含まれる。

最後に、Ruby 3.2はRubyの最新の長期サポート(LTS)リリースである。AWSは、Ruby 3.2のマネージドランタイムとAWSが提供するRuby 3.2のベースイメージに対して、アップデートやセキュリティパッチが利用可能になると、自動的に反映される予定だ。

Ruby 3.2での関数の書き方について詳細は、デベロッパーガイドで参照できる。

作者について

この記事に星をつける

おすすめ度
スタイル

BT