こちらの記事で紹介したNowで今回はLINE Clovaのスキルをデプロイしていこうと思います。
デプロイするもの
GitHub - line/clova-extension-sample-dice
サンプルスキルでもあるsample-diceをNowでデプロイしてみましょう
「サイコロを振って」と言うと1〜6でランダムな数を返してくれるスキルです。
基本情報の登録や対話モデルの作成などの情報はこちらを参考に
簡単なExtensionを作成する - Clova Developer Center β
今回は、 上記でいうExtensionサーバーにNowを利用するということになります。
Nowでのデプロイ
Nowのインストール
とりあえず、インストールしてなかったら
or
npmを使用してインストール
npm i -g now
package.jsonにスタートスクリプトを追加
package.jsonにスキルのスタートコマンドを記述します。
"scripts": {
"start": "node app.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
aliasの設定
nowではデプロイするたびに、[https://アプリ名-ランダムな文字列.now.sh]というURLが与えられます。
LINEClovaのスキルは、WebhookURLを登録する必要があるので、デプロイされるたびにURLが変わると面倒なのでaliasを設定します。
こちらもpackage.jsonに追加してください。
"now": {
"alias": "〇〇〇〇"
},
〇〇〇〇には自分の好きな文字を入れてください
この状態でデプロイしたあと
now alias
コマンドを実行すると、[https://〇〇〇〇.now.sh]というURLでアクセスすることができるようになります。
ということで、ダッシュボードにalias実行後のURLを先に載せちゃってください

Extension IDの設定
認証に使用するExtension IDを設定しなければいけません。
sample-diceでは、config.jsで定義されています。
module.exports = {
SERVER_PORT: process.env.SERVER_PORT || 3000,
DOMAIN: 'https://clova-common.line-scdn.net/dice',
ExtensionId: 'com.example.dice'
}
Nowのフリープランではコードが見えてしまうので
Extension IDなど秘密の情報は環境変数ぶち込みます
そのためにはSecretsというものを使います。
https://zeit.co/docs/getting-started/secrets
ターミナル上で
now secret add extension-id YOUR_EXTENTION_ID
YOUR_EXTENTION_IDには自分でダッシュボードで設定した情報を入れてください。
そして、Secretsの情報が、どの環境変数に紐づいているのかをpackage.jsonに記述します。
aliasを追加するときに作ったnowの所に追加してください。
"now": {
"alias": "〇〇〇〇",
"env": {
"EXTENTION_ID": "@extension-id"
}
そして、config.jsのExtension IDの箇所を環境変数から読むようにします。
module.exports = {
SERVER_PORT: process.env.SERVER_PORT || 3000,
DOMAIN: 'https://clova-common.line-scdn.net/dice',
ExtensionId: process.env.EXTENTION_ID
}
これでデプロイの際にExtension IDに環境変数の情報が入ります。
デプロイ
あとはnowをして
now

Successが出たら完了!
aliasの反映
このままだと、https://〇〇〇〇.now.shではアクセスできないので、aliasの内容を反映させます。
now alias
このコマンドを実行したら
こちらも、Success!と出れば成功です。
テスト
チュートリアルの通りに対話モデルなどを作成していると、対話モデルのテストツールを使うと、正しい応答が返ってくると思います。

以上で完成です!
最後に
実際に自分もNowを使って、Clovaのスキルを2つほど配信していますが、簡単にデプロイできてなかなか便利です。
HEROKUなどと違って、スリープをさせなくする方法もあるので、次回はその記事を書こうかなと思います。