こんにちは、Twilioマーケチームのkatsu.tです。
Twilio Functionsを利用している中で、「複数のFunction間で同じ処理を行いたい」と思うときはありませんか?
しかし、各Functionに同じ処理を書くのは冗長的になり、その分メンテナンス性も低下してしまいます。
重複した処理は一つのFunctionにまとめて、別Functionから利用することで、すっきりとしたコーディングを実現できます。
本記事では上記のようなケースで、Functionから別Functionを呼び出す方法についてご紹介いたします。
Twilio Functionsについて
まずTwilio Functionsについて簡単にご紹介いたします。
Twilio FunctionsはNodeのランタイムを兼ね備えているサーバーレス環境です。
Twilio Functionsでは以下を提供しています。
- 安全性
- サーバーレス
- 運用上の負担であるサーバー管理はTwilioが実施いたします。
- 自動スケーリング
- アプリケーションの要求を満たすために、サーバーを自動でスケーリングします。
- Twilioとの親和性
- 使い慣れた言語
Twilio Functionから別のFunctionを呼び出す方法
Functionから別のFunctionを読み込む際には、Nodeで一般的に利用されている”require”を利用します。他Functionのパスを取得し、requireを使ってモジュールを読み込むことで、別のモジュールのメソッドを利用できます。
// Runtime.getFunctions()['Path名'].pathを利用することで、別Functionのパスを取得することが可能です。
let path = Runtime.getFunctions()['util'].path;
let util = require(path);
利用例
ここでは”/util”というPathのFunctionを作成し、今の時刻を取得する、”getNowDate()”メソッドを別のFunctionから呼び出す例をご紹介します。
※Functionへのアクセス権限は、Private、Protected、Publicどれでも大丈夫です。
アクセス権限 |
概要 |
Private |
外部からのアクセスを許可しません。 |
Protected |
Twilioの署名がされているリクエストのみアクセスを許可します。 |
Public |
どんなリクエストでもアクセスを許可します。 |
/util
function getNowDate(){
var date = new Date();
var str = date.getFullYear()
+ '/' + ('0' + (date.getMonth() + 1)).slice(-2)
+ '/' + ('0' + date.getDate()).slice(-2)
+ ' ' + ('0' + date.getHours()).slice(-2)
+ ':' + ('0' + date.getMinutes()).slice(-2)
+ ':' + ('0' + date.getSeconds()).slice(-2)
+ '(UTC)';
return str;
}
module.exports ={
nowDate: getNowDate,
};
呼び出し元Function
exports.handler = function(context, event, callback) {
let path = Runtime.getFunctions()['util'].path;
let util = require(path);
return callback(null, util.nowDate());
};