レポート

まさにお祭りの3日間! 「ScalaMatsuri 2019」レポート

この記事を読むのに必要な時間:およそ 2.5 分

AWS LambdaでScalaをサクサク動かす

本稿で最後に紹介するのは,田所駿佑氏によるセッション「AWS LambdaでScalaをサクサク動かす」です。セッションタイトルのとおり,Amazon Web Servicesの提供するFaaS「AWS Lambda」において使い慣れたScalaを動かしたいという話なのですが……実はScalaのようなJVM系の言語とLambdaとは,⁠すくなくとも現在のところ)ちょっと相性が悪いのです。

というのも,Lambdaの「関数」の初回実行時(コールドスタート時)には実行環境の初期化処理が必要なのですが,JVMはほかの言語ランタイムに比べ,この起動までの時間がかかりがちであるからです。もちろん一度起動してしまえばそこはJVM,十分な処理速度が出るのですが,ひとつのリクエストをひとつのLambdaコンテナが担当するという原則から,複数同時リクエストなど実行可能なコンテナに空きがない場合にはやはりコールドスタートしなければなりません。

では,これを解決しLambdaでScalaを「サクサク動かす」ためにはどうしたらよいのでしょうか? 同氏は「Scala.jsを利用する」⁠ScalaNativeを利用する」⁠GraalVMを利用する」という3つの方法を紹介しました。

田所駿佑氏

画像

まずはScala.jsの利用です。おおざっぱに言えば,Scalaで書いたコードをJavaScriptのコードに変換し,これをLambdaのNodeランタイムで動かすという形になります。次にScalaNativeの利用です。Scalaで書いたコードから(JVMのクラスファイルではなく)実行可能バイナリを生成することができるため,これをLambdaのCustom Runtimeで実行するという形になります。JVMを介する必要がないため,初期化が比較的高速に行えることになります。最後はGraalVMの利用です。GraalVMはOracleが開発した汎用仮想マシンで,Javaプログラムをコンパイルし実行可能なバイナリを生成するコンポーネントであるSubstrateVMが含まれています。これにより,ScalaNativeを使った方法と同様にCustom Runtimeにて実行できるというわけです。

そして同氏は,これら3種の方法を実際にいくつかの例で試してみた結果,いずれの方法でも大幅に高速化されたことを示しました。

しかし,もちろんそれぞれに欠点がないわけではありません。Scala.jsはコードサイズが小さく,JavaScript用のSDKが使えるためAWSサービスとの連携がしやすい一方で,NodeをScalaから扱うためのボイラープレート的なコードが必要だったり,Nodeの知識が要求されるという問題があります。また,ScalaNativeの場合は使えるライブラリに制限があったり,ビルドが非常に複雑になってしまう問題があります。GraalVMの場合も(ScalaNativeほどではないものの)ビルドが複雑になりがちなほか,パッケージサイズの削減効果がほかの方法より薄いといった難点があるようです。

同氏は実際に趣味のプロダクトにおいて,トレードオフを勘案しつつこれらの複数の方法を使い分けており,Scalaの持つパワフルさや型安全性の恩恵を受けている一方,それでもLambdaでScalaを使うのは現状では簡単なことではないとも述べました。

まだ課題が多くプロダクションへの採用は踏み込みづらい応用分野ではあるものの,起動を高速化するためのJVMの進化などにも触れられており,今後のScalaやJVMの発展にも期待が持てそうだとも感じました。特にGraal / GraalVM については最近注目が集まっているようで,同日のFlavio Brasil氏のセッション(TwitterでのGraalの活用事例の紹介!)や,アンカンファレンスでのAmitpal Singh氏のセッション(Singh氏はGraalVMの本家OracleのGraalVMエヴァンジェリストです!)など,今年のScalaMatsuriでのホットなトピックのひとつであったといえるでしょう。

このように,単なるお試しにとどまらない,懐の深いセッションだったのではないでしょうか。詳しいベンチマーク結果などについては,ぜひスライドを確認してみてください。

本発表のスライド


以上,本稿では3つのセッションを紹介しました。このほかにも,Scala言語そのものに関する深い知識を得られるセッションはもちろん,1日目のワークショップDAY,3日目のアンカンファレンスDAYも盛況であったScalaMatsuri。公式サイトでは,カンファレンスおよびアンカンファレンスのセッションのうち,スライドが公開されているものもありますから,気になる方は訪れてみてください。

(写真提供=ScalaMatsuri準備委員会)