Nowで始める、ナウでヤングなLINEClova生活（Node.js編）

[こちら](https://qiita.com/tetrapod117/items/a7079b9cc2d2c9ac4f14)の記事で紹介したNowで今回はLINE Clovaのスキルをデプロイしていこうと思います。

# デプロイするもの
[GitHub - line/clova-extension-sample-dice](https://github.com/line/clova-extension-sample-dice)
サンプルスキルでもあるsample-diceをNowでデプロイしてみましょう

「サイコロを振って」と言うと１〜６でランダムな数を返してくれるスキルです。

基本情報の登録や対話モデルの作成などの情報はこちらを参考に
[簡単なExtensionを作成する - Clova Developer Center β](https://clova-developers.line.me/guide/CEK/Tutorials/Build_Simple_Extension.md)

今回は、 上記でいうExtensionサーバーにNowを利用するということになります。

# Nowでのデプロイ

## Nowのインストール
とりあえず、インストールしてなかったら

https://zeit.co/download

or

npmを使用してインストール

```sh
npm i -g now
```

## package.jsonにスタートスクリプトを追加


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に追加してください。

```json:package.json
"now": {
    "alias": "〇〇〇〇"
  },
```
〇〇〇〇には自分の好きな文字を入れてください
この状態でデプロイしたあと

```sh

now alias
```

コマンドを実行すると、[https://〇〇〇〇.now.sh]というURLでアクセスすることができるようになります。


ということで、ダッシュボードにalias実行後のURLを先に載せちゃってください

<img width="1135" alt="Clova_Developer_Center_β.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/150295/8d2cc49a-c797-6e61-7d00-88df606db184.jpeg">

## Extension IDの設定

認証に使用するExtension IDを設定しなければいけません。
sample-diceでは、config.jsで定義されています。

```javascript
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

ターミナル上で

```sh
now secret add extension-id YOUR_EXTENTION_ID
```
YOUR_EXTENTION_IDには自分でダッシュボードで設定した情報を入れてください。

そして、Secretsの情報が、どの環境変数に紐づいているのかをpackage.jsonに記述します。
aliasを追加するときに作ったnowの所に追加してください。


```json:package.json
 "now": {
    "alias": "〇〇〇〇",
    "env": {
      "EXTENTION_ID": "@extension-id"
    }
```

そして、config.jsのExtension IDの箇所を環境変数から読むようにします。

```javascript
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をして

```sh
now
```

<img width="883" alt="1__pi_SR5-PI____folo__bash_.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/150295/a31ca573-9b3e-921d-60df-0f9618cd2cb0.jpeg">


Successが出たら完了！

## aliasの反映
このままだと、https://〇〇〇〇.now.shではアクセスできないので、aliasの内容を反映させます。

```
now alias
```

このコマンドを実行したら

aliasに設定した内容のURLに紐づいてくれます。
<img width="722" alt="1__pi_SR5-PI____folo__bash_.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/150295/766d96bf-70f5-65d9-d67d-486c9b4cf84e.jpeg">

こちらも、Success!と出れば成功です。

# テスト
チュートリアルの通りに対話モデルなどを作成していると、対話モデルのテストツールを使うと、正しい応答が返ってくると思います。

<img width="776" alt="Clova_Developer_Center_β_-_Interaction_Model_Builder.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/150295/9de49fa8-bf44-e51f-6c5f-d770993d73db.jpeg">

以上で完成です！

# 最後に
実際に自分もNowを使って、Clovaのスキルを２つほど配信していますが、簡単にデプロイできてなかなか便利です。

HEROKUなどと違って、スリープをさせなくする方法もあるので、次回はその記事を書こうかなと思います。