LINE Messaging APIを使ったサービスをGoogle App Engineで構築するのに必要な下準備

# 前提

個人レベルでWebサービスを提供する。
今回はどのようにすれば始められるのかを確認するためなので、テスト用途として登録する。
無料で実現できる範囲までとする。
Macbook OS X Elcapitanを使用。
Pythonで開発することを想定。バージョンは2.7。

```bash
$ gcloud --version
Google Cloud SDK 121.0.0
app-engine-python 1.9.38
bq 2.0.24
bq-nix 2.0.24
core 2016.08.05
core-nix 2016.08.05
gcloud 
gsutil 4.20
gsutil-nix 4.20
```

# LINE Messaging APIの始め方

## 会社/事業者の登録

LINEに会社/事業者を登録する。
https://business.line.me/ja/services/bot

まず、「Developer Trialを始める」を選択する。
このプランは50人までしか登録できないが、それ以外の制約が無いプランなので、今回のようなテスト目的にちょうど良い。

会社/事業者を選択には、会社や事業者では無いので個人名で登録する。

- アカウント名には「呼鈴TEST-DEV」
- 業種には「個人」「個人（IT・コンピュータ）」

<img width="80%" alt="スクリーンショット 2017-01-02 12.14.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/89176/501eed4f-6976-eb2e-ecf9-49cd8440c5b6.png">

以下、順に選択して進める。

- 確認する
- 申し込む
- LINE@MANAGERへ

## アカウントの作成

LINE@MANAGERでアカウントを作成する。
https://admin-official.line.me

Bot設定から、

- 「APIを利用する」を選択。
- Webhook送信は「利用する」を選択。

以下は、必要に応じて設定する。
今回は、Webhookを使って以下も対応させるので、「利用しない」に設定した。

- 自動応答メッセージは「利用しない」
- 友達追加時あいさつは「利用しない」

最後に「保存」を選択。

以上で、LINE Messaging APIが使えるようになる。

## アカウントの設定


https://developers.line.me/ba/

Channel Secret
32文字のコード。
右側の「SHOW」を選択して表示可能。
※今回は使用しないです。

Webhook URL
以下のURLを設定する。
https://yobirin-test-dev.appspot.com/line-receive
HTTPSであるのはLINEの仕様のため。
yobirin-test-dev.appspot.comはApp Engineが割り当てるURL。
line-receiveは、後でApp Engineで設定するWeb API。

Channel Access Token
172文字のコード。
右側の「ISSUE」を選択して発行。


## ご参考：LINE API Reference

https://devdocs.line.me/ja/#webhook-event-object

※今回は直接Web APIを使うので使用しませんでしたが。。

# GAEの始め方

Google App Engineを始める。
https://console.cloud.google.com/

- Google Cloud Platformの右にある下向き三角から「プロジェクトを作成」を選択。プロジェクト名には「yobirin-test-dev」

<img width="422" alt="スクリーンショット 2017-01-02 12.26.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/89176/4b3c6b1b-d845-7031-f681-9c15090a1d2c.png">

- サイドメニューから「App Engine」を選択。
- 初めてのアプリへようこそ、の言語を選択から「Python」を選択。

<img width="344" alt="スクリーンショット 2017-01-02 13.20.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/89176/bbcc01ce-4657-f444-7075-f3ee18eacde2.png">

- アプリのサービスを提供するロケーションは適当に選択。今回は「asia-northeast1」を選択。

「App Engine サービスを準備しています...」で1分ほど待たされ「さっそく始めましょう」が出れば完了。

※チュートリアルを実施するとgcloudの基本的な使い方が分かるので良いと思います。


## gcloudをインストール

gcloudのインストールおよび設定には以下のページの「Cloud SDKのインストール」と「アカウントへの紐付け」の章が参考になります。
GCEの手順ですが、GAEでも同じです。最後のSSHが不要ですのでご注意ください。
http://qiita.com/kosuke_nishaya/items/3d9a95f559d0c22d8134

## プロジェクトへの紐付け

ソースコードをプロジェクトを紐付けます。

ソースコードを配置するディレクトリを作成し、そこにソースを配置する。
今回はIFTTT-LINEのコードを使わせて頂くことにします。

```
git clone https://github.com/MypaceEngine/ifttt-line.git
mv ifttt-line yobirin-test-dev
cd yobirin-test-dev
```

LINEのChannel Access Tokenが空白なので設定する。

```
vi const.py
```


プロジェクトへの紐付けを開始するためのコマンドを実行

```
gcloud init

Pick configuration to use:
 [2] Create a new configuration
Please enter your numeric choice:  2

Enter configuration name: yobirin-test-dev 

Choose the account you would like use to perform operations for this 
configuration:
 [1] butadahitsuji@gmail.com
 [2] Log in with a new account
Please enter your numeric choice:  1

Pick cloud project to use: 
 [4] [yobirin-test-dev]
Please enter your numeric choice:  4
```

これで準備完了。

## ソースコードのデプロイ

```
gcloud app deploy -v 1
Do you want to continue (Y/n)?  y
```

-vはバージョン指定。デプロイした環境は、バージョン管理によって残せます。
ただし15世代までしか残せないので、通常は-v 1のようにデプロイ先バージョンを
固定化して、常に上書きしておくと、古いバージョンを削除する手間を減らせます。

ERRORが出てこなければ大丈夫です。
Updating service に結構時間が掛かります。

```
butada$ gcloud app deploy -v 1
WARNING: Automatic app detection is currently in Beta
You are about to deploy the following services:
 - yobirin-test-dev/default/1 (from [/Users/butada/Programming/dashbutton_hackathon/ifttt-line/app.yaml])
     Deployed URL: [https://yobirin-test-dev.appspot.com]

Do you want to continue (Y/n)?  y

Beginning deployment of service [default]...
File upload done.
Updating service [default]...done.
Deployed service [default]

You can read logs from the command line by running:
  $ gcloud app logs read
To view your application in the web browser run:
  $ gcloud app browse
```

# さいごに

以上で、LINE Messaging APIを使ったサービスをGoogle App Engineで構築するのに必要な下準備が完了です。
LINEアカウント（呼鈴TEST-DEV）をLINEアプリの友達追加から登録すれば、Webhookが呼ばれます。その際にReplyIdが引数として渡されるので、それを使ってReplyすることもできますし(Replyは発言に対して1回のみの制約あり)、その際にLineIdも引数として渡されるので、それを使ってPushすることもできます。

# 参考

LINE API Reference
https://devdocs.line.me/ja/#webhook-event-object

Google Cloud Platformをローカルから利用するための準備
http://qiita.com/kosuke_nishaya/items/3d9a95f559d0c22d8134

Google Cloud Platform - ログ
https://console.cloud.google.com/logs/viewer

Google Cloud Platform - データストア
https://console.cloud.google.com/datastore