Twilio Serverless Toolkitの最新メジャーバージョンをリリース
読む所要時間: 14 分
サーバーレスツールキットは、オープンソースCLIツールを集めたものです。Twilio FunctionsやTwilio Assetsを通じてローカル開発、展開、テンプレート、その他の機能を提供し、開発フローの改善を目的としています。今回、Twilioは2019年以来となるメジャーバージョンをリリースしました。このリリースには各種バグ修正、新機能、非互換の変更が含まれています。この記事では、今回のリリースでご利用いただける新機能と、非互換の変更について説明します。
この記事の主な対象読者は、既存サーバーレスツールキットのユーザーです。サーバーレスツールキットについては設定ガイドをご覧ください。
構成
サーバーレスツールキットの目的は、「設定より規約」モデルを取り入れることであるものの、あらかじめ用意された動作を変更しなければならない場合があります。以前のバージョンでは主に、コマンドのフラグを通じて追加の引数を各CLIコマンドに渡し実行していました。この新バージョンでは、新しく.twilioserverlessrc
ファイルを使用し、最高クラスの構成サポートを取り入れています。
新しい.twilioserverlessrc
構成ファイルは、フラグを通じて構成できるほぼすべてのオプションに対応しているほか、これらの構成値を特定のTwilioプロジェクトや環境、コマンドに適用することができます。
さらには、JSON5(デフォルト)、YAML、JavaScript、またはpackage.json
ファイル内部で指定が可能です。
よくある事例として、展開先の各環境に対して別々の.env
ファイルを構成するシナリオがあります。
この場合、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_SID
とAUTH_TOKEN
を取り込まなくなりました。有効なACCOUNT_SID
とAUTH_TOKEN
が存在する場合にのみ、フィールドに取り込まれるようになります。
> 日本語記事執筆担当者からの補足: これまではプロファイルに紐づくAPIキーおよびAPIシークレットがそれぞれACCOUNT_SID
とAUTH_TOKEN
に割り当てられ流場合があり、トークン生成に問題が起こっていました。
最後に複数のTwilioアカウントの切り替えや展開がこれまでよりもスムーズになりました。
以上がこのメジャーリリースにおける変更ですが、今後も機械判読可能な出力の互換性向上などの改善を継続して行います。
新しいTwilio Assetsプラグイン
最後にご紹介する主要機能は新しく刷新されたTwilio CLIプラグインです。Twilio Assetsが、Twilio Functionsを含むプロジェクトの一部である場合、既存のサーバーレスツールキットをそのまま利用し、ファイルをアップロードし公開していました。しかしTwilio AssetsはTwilio Functionsの使用有無にかかわらず、パブリックに公開する静的ファイルをホスティングしたい状況でも利用されてきました。例えば、Studioフローで利用するMP3ファイルのホスティングなどです。
このような場合は、次のコマンドを実行すると、全く新しい@twilio-labs/plugin-assets
Twilio CLIプラグインをインストールできます。
このプラグインをインストールするとtwilio assets
ネームスペースに、3つの新しいコマンドが追加されます。Twilio Assetsプラグインでは、ファイルを保存するために「バケット」という考え方を採用しています。実際のところ、バケットとはTwilio Functions/Twilio Assetsのサービスであり、次のコマンドで作成できます。
その後、次のコマンドを実行し任意のファイルをバケットに展開できます。
アップロードが完了すると、アップロードしたコンテンツにアクセスできるパブリックURLが表示されます。
このプラグインの詳細については、Phil Nashによるブログ記事で紹介されています。ぜひご確認ください。プラグインの機能に関するご要望がある場合や、問題に気付いた場合は、GitHubリポジトリからご連絡ください。
新しいガイド
「ドキュメント」ページに新たなガイドを2つ掲載しました。よくある2つの状況への対応をサポートします。
互換性のない変更
今回のリリースの一部として、後方互換性がない下記の変更を実施する必要がありました。
.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に移行した後に行う必要があります。
ローカルFunctionsの独立実行
twilio-run start
またはtwilio serverless:start
を使用する場合、展開時にFunctionsが実行される環境をできる限りエミュレートします。
この変更により、ローカルでの開発には、大幅な動作変更が出てきます。「サーバーレス」環境をうまくエミュレートするために、Twilioでは、ローカルFunctionsの呼び出しはすべて、別プロセスで実行しています。開発者には、次の2つの影響があります。
- 展開されたFunctionsと同様に、
callback(...)
が呼び出された後の実行は、すべて停止となります。 - 展開されたFunctionsとは異なり、Functions実行間でのメモリ/ステートの共有には対応しません。Functionsは、「ホット」な状態であれば、理論上は動作間でステートの共有が可能ですが、そのような動作を詳細にプログラミングすることは推奨しません。
何らかの理由でこの動作に対応できない場合は、次のコードスニペットを.twilioserverlessrc
ファイルに追加するとよいでしょう。
新バージョンが正常にインストールされたことを確認する場合、次のコマンドを実行します。
表示される新バージョンは3.0.0
以降になります。
既存プロジェクトのアップグレード
既存のプロジェクトや.twilio-functions
ファイルがある場合、移行スクリプトを使用してアップグレードできます。
質問やフィードバック
今回の変更をぜひご活用ください。質問、不具合、機能に関する要望などについてはgithub.com/twilio-labs/serverless-toolkitからIssueをオープンしてください。プロジェクトへの投稿を歓迎します。
Dominik Kundel & Phil Nash