Twilio Serverless Toolkitの最新メジャーバージョンをリリース

May 19, 2021
執筆者
レビュー担当者

Twilio Labs - Serverless Toolkit Release

この記事はTwilio Developer AdvocateのDominik Kundelこちらで公開した記事(英語)を日本語化したものです。

サーバーレスツールキットは、オープンソースCLIツールを集めたものです。Twilio FunctionsやTwilio Assetsを通じてローカル開発、展開、テンプレート、その他の機能を提供し、開発フローの改善を目的としています。今回、Twilioは2019年以来となるメジャーバージョンをリリースしました。このリリースには各種バグ修正、新機能、非互換の変更が含まれています。この記事では、今回のリリースでご利用いただける新機能と、非互換の変更について説明します。

この記事の主な対象読者は、既存サーバーレスツールキットのユーザーです。サーバーレスツールキットについては設定ガイドをご覧ください。

サーバーレスツールキットは、Twilio Labsのオープンソースプロジェクトです。Twilioの一般的なSLAの対象ではありません。サーバーレスツールキットには、Twilio CLIのサーバーレスプラグイン(@twilio-labs/plugin-serverless)と、スタンドアロンコマンドtwilio-runの両方が含まれています。不具合報告や機能要望については、GitHubリポジトリでissueを作成ください。

構成

サーバーレスツールキットの目的は、「設定より規約」モデルを取り入れることであるものの、あらかじめ用意された動作を変更しなければならない場合があります。以前のバージョンでは主に、コマンドのフラグを通じて追加の引数を各CLIコマンドに渡し実行していました。この新バージョンでは、新しく.twilioserverlessrcファイルを使用し、最高クラスの構成サポートを取り入れています。

新しい.twilioserverlessrc構成ファイルは、フラグを通じて構成できるほぼすべてのオプションに対応しているほか、これらの構成値を特定のTwilioプロジェクトや環境、コマンドに適用することができます。

さらには、JSON5(デフォルト)、YAML、JavaScript、またはpackage.jsonファイル内部で指定が可能です。

よくある事例として、展開先の各環境に対して別々の.envファイルを構成するシナリオがあります。

{
  "environments": {
    "dev": { "env": ".env.dev" },
    "stage": { "env": ".env.stage" },
    "*": { "env": ".env.prod" }
  }
}

この場合、twilio serverless:deploy --productionを実行すると.env.prodファイルが使用され、twilio serverless:deploy --environment stage場合は.env.stageファイルが、そしてtwilio serverless:deployには.env.devファイルが使用されるようになります。

詳細については、こちらの資料をご確認ください。

 

Twilio CLIのサポート改善

設計原理に基づき、Twilio CLI以外でもサーバーレスツールキットを独立して使用し続けることができるよう常に最善を尽くしています。一方、Twilioを含む多くのユーザーがサーバーレスツールキットをTwilio CLIの一部として使用していることも理解しています。今回のリリースでは、すべてのユーザーの利便性をさらに改善する対策を講じました。

その対策の中には、ローカルでの開発時以外ではTwilio CLIからの資格情報(プロジェクトの.envファイルに含まれる情報など)を尊重することも含まれます。これは、以前の動作との互換性がない変更です。具体的にはローカル環境における開発において、twilio serverless:startコマンドを実行した際に.envファイルに含まれる資格情報が使用されます。

また、twilio serverless:initを使用した新しいプロジェクトの作成時に.envファイルに無効なACCOUNT_SIDAUTH_TOKENを取り込まなくなりました。有効なACCOUNT_SIDAUTH_TOKENが存在する場合にのみ、フィールドに取り込まれるようになります。

> 日本語記事執筆担当者からの補足: これまではプロファイルに紐づくAPIキーおよびAPIシークレットがそれぞれACCOUNT_SIDAUTH_TOKENに割り当てられ流場合があり、トークン生成に問題が起こっていました。

最後に複数のTwilioアカウントの切り替えや展開がこれまでよりもスムーズになりました。

以上がこのメジャーリリースにおける変更ですが、今後も機械判読可能な出力の互換性向上などの改善を継続して行います。

新しいTwilio Assetsプラグイン

最後にご紹介する主要機能は新しく刷新されたTwilio CLIプラグインです。Twilio Assetsが、Twilio Functionsを含むプロジェクトの一部である場合、既存のサーバーレスツールキットをそのまま利用し、ファイルをアップロードし公開していました。しかしTwilio AssetsはTwilio Functionsの使用有無にかかわらず、パブリックに公開する静的ファイルをホスティングしたい状況でも利用されてきました。例えば、Studioフローで利用するMP3ファイルのホスティングなどです。

このような場合は、次のコマンドを実行すると、全く新しい@twilio-labs/plugin-assets Twilio CLIプラグインをインストールできます。

twilio plugins:install @twilio-labs/plugin-assets

このプラグインをインストールするとtwilio assetsネームスペースに、3つの新しいコマンドが追加されます。Twilio Assetsプラグインでは、ファイルを保存するために「バケット」という考え方を採用しています。実際のところ、バケットとはTwilio Functions/Twilio Assetsのサービスであり、次のコマンドで作成できます。

twilio assets:init

その後、次のコマンドを実行し任意のファイルをバケットに展開できます。

twilio assets:upload NAME_OF_YOUR_FILE

アップロードが完了すると、アップロードしたコンテンツにアクセスできるパブリックURLが表示されます。

このプラグインの詳細については、Phil Nashによるブログ記事で紹介されています。ぜひご確認ください。プラグインの機能に関するご要望がある場合や、問題に気付いた場合は、GitHubリポジトリからご連絡ください。

 

新しいガイド

「ドキュメント」ページに新たなガイドを2つ掲載しました。よくある2つの状況への対応をサポートします。

  1. CI/CD環境でのサーバーレスツールキットの使用方法
  2. Twilioアカウントが複数ある場合のサーバーレスツールキットの使用方法

互換性のない変更

今回のリリースの一部として、後方互換性がない下記の変更を実施する必要がありました。

.twilio-functionsファイルの廃止

これまで、何らかのサーバーレスツールキットコマンドを実行後、.twilio-functionsファイルが必ず(自分で削除した場合にも)、プロジェクト内に表示されていたことにお気付きかもしれません。過去には、このことがトラブルを引き起こしていた可能性があります。その原因は、このファイルに負荷がかかりすぎていたこと、その他に設計上の問題がいくつか含まれていたことです。このファイルは、構成と展開後のメタデータの保存、両方を担い、他のコマンドの利便性を高めていました。さらに、複数のTwilioアカウントへの対応が、結果的に大きな負荷となりました。

こうした理由から、.twilio-functionsファイルを2つの新しいファイルに置き換えました。その1つ、.twilioserverlessrcファイルは、構成ニーズに対応するものです。構成詳細を他のスタッフと共有する必要がある場合、このファイルを使用します。例えば、複数人が1つの同じTwilioアカウントやFunctions Service上で連携している場合、それぞれのService SIDを.twilioserverlessrcファイルに追加します。Twilioで複数の人/アカウントと連携する方法については、こちらのガイドをご確認ください.twilioserverlesssrcファイルは、バージョン管理システムに追加してください。

もう1つのファイルは、.twiliodeployinfoです。このファイルは展開のたびに内容が変わり、通常はリポジトリにコミットすることを意図していません。主としてtwilio serverless:logsの実行にService SIDを指定する必要がなくなるなどの便利な機能を提供します。

Twilio CLIにおける資格情報の取り扱い

twilio serverlessではなくtwilio-runを使用している場合は、何も変わりません。次の項目にお進みください。

twilio serverlessを使用している場合、以下に示すコマンドについて.env資格情報を取得する必要がなくなります。

  • twilio serverless:deploy
  • twilio serverless:promote
  • twilio serverless:logs
  • twilio serverless:list

代わりに、他のtwilioコマンドで使用するものと同じ資格情報を使用します。

Node.jsバージョン10のサポートを廃止

2021年5月1日に、Node.js 10のサポートが正式に廃止されました。それを受けて、今後、Node.js 10でのサーバーレスツールキットはサポートされません。サーバーレスツールキットは、Node.js 14と16上で動作しますが、Twilioで正式にサポートされているのは、Node.js 12(12.22.1以降)のみです。これは展開されたFunctionsにおいてTwilioがサポートしているバージョンと同一であるためです。

さらに、お使いのFunctionsをNode.js 12にまだ展開されていない場合、展開は、プロジェクトを--runtime node12フラグを使用してをNode.js 12に移行した後に行う必要があります。

twilio serverless:deploy --runtime node12

ローカルFunctionsの独立実行

twilio-run startまたはtwilio serverless:startを使用する場合、展開時にFunctionsが実行される環境をできる限りエミュレートします。

この変更により、ローカルでの開発には、大幅な動作変更が出てきます。「サーバーレス」環境をうまくエミュレートするために、Twilioでは、ローカルFunctionsの呼び出しはすべて、別プロセスで実行しています。開発者には、次の2つの影響があります。

  1. 展開されたFunctionsと同様に、callback(...)が呼び出された後の実行は、すべて停止となります。
  2. 展開されたFunctionsとは異なり、Functions実行間でのメモリ/ステートの共有には対応しません。Functionsは、「ホット」な状態であれば、理論上は動作間でステートの共有が可能ですが、そのような動作を詳細にプログラミングすることは推奨しません。

何らかの理由でこの動作に対応できない場合は、次のコードスニペットを.twilioserverlessrcファイルに追加するとよいでしょう。

{
  "forkProcess": false
}
twilio plugins:remove @twilio-labs/plugin-serverless
twilio plugins:install @twilio-labs/plugin-serverless@latest

今後、twilio pluginsの実行には、バージョン2.0.0以降が必要になります。

twilio-runを使用している場合

プロジェクト内で次を実行します。

npm install --save-dev twilio-run@latest

新バージョンが正常にインストールされたことを確認する場合、次のコマンドを実行します。

npx twilio-run --version

表示される新バージョンは3.0.0以降になります。

既存プロジェクトのアップグレード

既存のプロジェクトや.twilio-functionsファイルがある場合、移行スクリプトを使用してアップグレードできます。

npx -p twilio-run twilio-upgrade-config

質問やフィードバック

今回の変更をぜひご活用ください。質問、不具合、機能に関する要望などについてはgithub.com/twilio-labs/serverless-toolkitからIssueをオープンしてください。プロジェクトへの投稿を歓迎します。

Dominik Kundel & Phil Nash