【アップデート】LambdaのランタイムにNode.js 14が利用可能になりました

LambdaのランタイムにNode.js 14.xが来ました
2021.02.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

CX事業本部@大阪の岩田です。以下のAWSブログで案内されている通りLambdaのランタイムとしてNode.js 14.xが利用可能になりました。Node.js 14はNode.jsの最新のLTSリリースであり、2023年4月までセキュリティ&バグフィックスがサポートされます。

Node.js14ではV8エンジンが8.1にアップデートされており、様々な新機能が利用可能です。

マネコンを確認してみる

さっそくマネコンを確認してみます。この通りNode.js 14.xが選択可能になっていることが分かります。

process.versionを確認

以下のコードを実行しprocess.versionの出力を確認してみました。

exports.handler = async (event) => {
    
    console.log(process.version);
    
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

結果

現在はv14.15.4が利用可能なようです。

Optional Chainingを試してみる

Node.js14では Optional Chainingが利用可能です。MDNでは Optional Chainingについて以下のように解説されています。

オプショナルチェイニングoptional chaining演算子 ?. は、接続されたオブジェクトチェーンの深くに位置するプロパティの値を、チェーン内の各参照が正しいかどうかを明示的に確認せずに読み込むことを可能にします。 ?. 演算子の機能は . チェーン演算子と似ていますが、参照が nullish (null または undefined) の場合にエラーとなるのではなく、式が短絡され undefined が返されるところが異なります。 関数呼び出しで使用すると、与えられた関数が存在しない場合、 undefined を返します。

Optional chaining (?.)

この機能を利用すると従来オブジェクトのプロパティにアクセスする前に、面倒なundefinednullチェックを実施していたコードをガッツリ省略可能です。

試しに以下のコードを実行してみます

exports.handler = async (event) => {
    
    const aws = {
        lambda: {
            runtiime: {
                node14: {}
            } 
        } 
    }
    console.log(aws?.ec2?.instance);
    
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

出力されたログです

特にエラーなくundefinedが出力されました。試しにランタイムをNode.12に変更して再実行してみましょう。

今度はSyntaxエラーになりました。試しに?..に変更して再実行してみます。

今度はCannot read property 'instance' of undefinedのエラーとなりました。いちいちundefinedを参照していないかチェックを入れることを考えると...とても面倒ですね。

まとめ

上記AWSブログでも言及されていますが、Node.js 10は2021年4月30日にサポートが終了します。2021年3月30日以降はNode.js 10のLambda Functionの作成が不可能になり、Lambda Functionの更新についても2021年5月28日以降は実施不可能になります。LambdaのランタイムにNode.js10や12.xを利用している場合、これを機に移行を検討してみてはいかがでしょうか?