LINE API 実践ガイド読んだよ

# はじめに
みなさん LINE API は使っていますでしょうか？
自分はスプラトゥーンのブキ抽選をする時など、便利なので身内の間で使っていました。
最近はミニアプリが流行っていたり、LINE Frontend Framework (LIFF) でアプリを作りたくなったので、学んでいます。

学びの一環として LINE API の勉強会に参加した際に "LINE API 実践ガイドを抽選で3名様に差し上げます！" のような企画がありました。
この本は LINE API でできることをハンズオン形式で学べるようになっていて、その中の一つとして LIFF も取り上げられています。
LIFF の部分読みたいなぁ と軽い気持ちで応募したら当選しました。(選んでくれてありがとうございます！)
ということで、~~ぜひ感想を書いてくださいって言われたことだし~~ レビューっぽく書いていきます。

### この記事の対象者
* LINE API を使いたくて、"LINE API 実践ガイド" を買うか迷っている方
* "LINE API 実践ガイド" を読み始める方
* "LINE API 実践ガイド" の著者の方々

### LINE API の魅力
LINE API を使うことで、ミニアプリを開発できます。
中国では数年前から WeChat を皮切りにミニアプリが流行っていて、これは日本でも大きなトレンドとなることが予想されます。
PayPay などもミニアプリを作れるようですが、元々のコミュニケーションツールの特性も相まって、現状日本でミニアプリを作るなら LINE が一強かなと思っています。

LINE ミニアプリはインストールやログインが不要だったり、簡単にシェアできる点でメリットが大きいので、サービスを展開するプラットフォームの一つとして学んでおくといいと思います。

# "LINE API 実践ガイド" の特徴
全体を通して、LINE API の使い方について学ぶことができます。
章ごとに Messaging API や LIFF などの単位でハンズオンが用意されています。
なので、どの章から読み始めてもよく、各章は 80ページ ぐらいなので、比較的読みやすいです。

読んでみての感想ですが、この本のメインターゲットは「開発者として初心者で、LINE API に注目している人」と感じました。
上記に当てはまる方は購入して実践することをオススメします。

### この本の良い点
* すべてハンズオン形式で書かれている。設定すべき項目のスクショが載っているので、細かく意味を考えずとも、動くものが実装できる。
* Github にソースが上がっているので、一部短縮することができる。
* GCP / Azure / Netlify など LINE 以外の部分でサービスに触ることができ、理解が広まる。

### この本の改善点
* ハンズオンに特化しているので、エラーになった場合などの対処法はググって調べる必要がある。
* Azure などは初めて触ったので、このあたりで問題が起こると辛い。(実際に詰んで諦めた章もあります)
* 一部 Github に上がっていないコードがあるので、ある程度の写経が必要になって面倒。
* ハンズオン系なので当たり前ですが、「わかる」ようにはなっても「できる」ようにはならない。次のステップとして、この本に書かれていることを参考にしつつアウトプットする必要がある。
* 例えば TypeScript の説明に重きをおいているハンズオンがあったりなど、 LINE API だけを学びたい人にとっては蛇足になる内容が所々ある。

# それぞれの章のレビュー
各章を以下の項目で 5段階 で評価します。

| 項目 | 説明 |
|:-:|:-:|
| LINE 理解度 | この本を読む以上、LINE Platform への理解が広がるべきだと思います。<br>LINE Platform 以外の説明に注力して肝心の LINE Platform の説明が少ない場合は点数が低いです。 |
| 簡潔さ | どれだけ読みやすいか、スイスイ進んだかを表します。<br>Github にコードがなくて写経が必要になる場合は点数が下がります。 |
| 分かりやすさ | 用語の説明をしているか、スクリーンショットが適切に設けられていて進めやすいかを表します。 |
| 汎用性 | ハンズオンを終えた後、いざ自分でシステムを作るとなったときにどれだけ役立つかを表します。 |

いずれも **個人の感想** です。参考程度に見てください。

## 1章 初めての LINE API

#### ハンズオン内容
CLOVA を使った結婚式予約 Bot

#### 概要
Clova, LINE Bot, LIFF, LINE Pay など、LINE Platform の機能を一通り体験する内容になっています。
LIFF で使う Web アプリをデプロイする過程で、 GCP の Cloud Run も学べます。
最初にしては割と複雑なアプリケーションですが、スクリーンショットが多くて分かりやすいので、サクサク進みます。
そんなに多く開発していないのにしっかりとしたアプリが作れるので、LINE Platform の上で開発するメリットを体感できるハンズオンになっていると思います。

#### 改善点
自分は Alexa アプリを開発していたのでなんとなく分かりましたが、音声アプリが初めての人は「インテントってなに？」など、単語でつまづく可能性があります。
スロットなどの説明には、実際の発話を例にして、何がスロットとして抽出されるかのような説明があると分かりやすいと思いました。

LINE Pay の動作がうまくいきませんでした。こういった場合にどうやってデバッグするかなど、ハマりやすいポイントの解説があると助かると思いました。

| 項目 | 評価 |
|:-:|:-:|
| LINE 理解度 | ★★★★★ |
| 簡潔さ | ★★★★☆ |
| 分かりやすさ | ★★★★☆ |
| 汎用性 | ★★★★☆ |

## 2章 LINE ログイン

#### ハンズオン内容
LINE ログインを使ってプロフィールを表示させる

#### 概要
LINE ログインの基本的な操作が体験できます。
LINE Login API を使って、 Web アプリから LINE のログインとプロフィールの取得をします。
Web アプリは AWS の S3 にデプロイし、LINE API のアクセスに Lambda と API Gateway を使っています。

使うサービスの説明や、LINE ログインの構造を細かく説明して非常にいい章だと思います。

とはいえ、実際は LIFF API のログイン機能を使うことになるはずなので、個人的には LINE ログイン API を単体で使うことはないと思っています。

| 項目 | 評価 |
|:-:|:-:|
| LINE 理解度 | ★★★★☆ |
| 簡潔さ | ★★★★★ |
| 分かりやすさ | ★★★★★ |
| 汎用性 | ★★★★☆ |

## 3章 LINE Bot

#### ハンズオン内容
ローコードツールを使った LINE Bot 作成

#### 概要
Microsoft Bot Framework Composer を使って様々な LINE Bot を作ります。
「画像を送ったらその画像がなにを表しているかをメッセージで返してくれる」など、実際に使えそうな Bot の作成ができます。
Bot のレスポンスとして テキスト・画像・ダイアログ・スタンプ と幅広くハンズオンができるため、カバーできる範囲は多いです。
セクションごとにできることを増やしていく形で、読みやすいです。

#### 注意点
この章は Windows 向けに書かれているため、 Mac を使っている自分は序盤でつまづいて先に進むことができませんでした。(1日ぐらい粘りましたが、解決できませんでした。)
Mac だからなのか、環境のセットアップにかなりの時間がかかるので、ハンズオン前に事前にインストールしておくといいと思います。

| 項目 | 評価 |
|:-:|:-:|
| LINE 理解度 | ★★★★☆ |
| 簡潔さ | ★★★★☆ |
| 分かりやすさ | ★★★★☆ |
| 汎用性 | ★★★★★ |

## 4章 LIFF
4章は2段構成になっています。

### 4章-1 LIFF を使った本格的な TODO アプリ

#### 概要
データの保存までされる本格的な TODO アプリを作ることができます。
フロントエンドとして Blazor WebAssembly、 バックエンドとして Azure Function を使います。
GitHub Page での静的サイトを公開するやり方も学ぶことができます。
WebAssembly や Azure の範囲の説明が多いため、LIFF のことを最短で学びたいのであれば 4章-2 を読んだ方がいいと思います。

#### 注意点
こちらは明示的には書かれていないのですが、Windows 前提で書かれています。
3章の件もあり、Mac はやめて古い Windows を引っ張り出してなんとか実践してみたのですが、動きませんでした。
PC のスペックが低くて重かったり、Azure に慣れていないこともあり、問題の解決は断念しました。(レビュー記事と言いつつ動かないばっかりですいません)

| 項目 | 評価 |
|:-:|:-:|
| LINE 理解度 | ★★☆☆☆ |
| 簡潔さ | ★★★☆☆ |
| 分かりやすさ | ★★★★☆ |
| 汎用性 | ★★☆☆☆ |

### 4章-2 LIFF を使った簡易的な TODO アプリ

#### 概要
こちらも TODO アプリですが、 lowdb を使ってローカルのファイルを DB として使ったり、 ngrok を使ってローカル環境を公開したりと、簡易的なつくりになっています。
ここでは LIFF を Web アプリの表示と UserID の取得に使っていて、簡素で分かりやすかったです。

ただこのハンズオンのコードは Github には上がっておらず、ひたすらコードを書くのは結構辛かったです。

| 項目 | 評価 |
|:-:|:-:|
| LINE 理解度 | ★★★★☆ |
| 簡潔さ | ★★★★☆ |
| 分かりやすさ | ★★★★☆ |
| 汎用性 | ★★★★☆ |

#### 4章総評
ハンズオンを通じて実際に公開できるレベルのアプリを作る経験をしたいのであれば 4章-1 を読むのもいいと思います。
自分は LIFF でできることを知るところがメインの目的なので、4章-2 は簡素で理解しやすく感じました。


## 5章 LINE CLOVA
5章も2段構成になっています。

### 5章-1 Azure Functions を使った CLOVA スキル開発

#### 概要
基礎的な音声スキルと、LINE に入力した内容を CLOVA から返すといった音声スキルをハンズオンを通して実践できます。
Azure Functions を使って CLOVA スキルのバックエンドを構築しています。
言語は C# と Node.js で同じものを作る流れになっています。
スキルが一定時間で終了してしまうことを避ける方法やログの出力の仕方を解説していて、非常に丁寧な印象を受けました。

自分は CLOVA を持っておらず興味がそこまでないこと、音声スキルを作るなら Alexa だと思っていることもあり、この章は流し読みしました。

| 項目 | 評価 |
|:-:|:-:|
| LINE 理解度 | ★★★★★ |
| 簡潔さ | ★★★★☆ |
| 分かりやすさ | ★★★★★ |
| 汎用性 | ★★★★☆ |

### 5章-2 TypeScript, VS Code を使った CLOVA スキル開発

#### 概要
Node.js で作った CLOVA アプリに TypeScript を導入するやり方を紹介しています。
この章は CLOVA というよりも TypeScript の説明なので、TypeScript について知っている人は読む必要はないと思います。
もちろん CLOVA のバックエンドを Node.js で書こうと考えていて TypeScript に詳しくない方は読むといいと思います。

| 項目 | 評価 |
|:-:|:-:|
| LINE 理解度 | ★☆☆☆☆ |
| 簡潔さ | ★★★☆☆ |
| 分かりやすさ | ★★★★☆ |
| 汎用性 | ★★☆☆☆ |


## 6章 LINE Beacon

#### ハンズオン内容
M5Atom を使って、近くにいるユーザーにおみくじを届ける

#### 概要
M5Atom というデバイスから LINE Beacon に連携して、近くにスマホを検出したらそのスマホに LINE でおみくじを届けます。
API は GitHub と Netlify を連携してデプロイします。
M5Atom → LINE Beacon → LINE Messaging API → Netlify → LINE Bot の流れでメッセージが届く機構のようです。
自分は IoT に慣れていなかったので、いきなり Arduino IDE が出てきたのでググったり、 M5Atom と繋ぐなどの基礎的なことでつまづきました。
Arduino IDE で書き込む内容が結構長く、写経だったので辛かったです。後ほどググっている時に見つけたのですが、おそらく同じ作者が書いているサイトで似たコードを見つけたので、[こちら](https://www.katacoda.com/gaomar/scenarios/m5stickc-beacon-handson-playground)からコピーすると楽だと思います。

そして、結局この章の内容も動きませんでした。おそらく写経がうまくいかなかったからだと思うので、後ほどやり直してみます。

| 項目 | 評価 |
|:-:|:-:|
| LINE 理解度 | ★★★★☆ |
| 簡潔さ | ★★★☆☆ |
| 分かりやすさ | ★★★★☆ |
| 汎用性 | ★★★☆☆ |


## 7章 ハードウェア連携
~~6章もハードウェア連携ではなかったのかという疑問~~
7章は2段構成になっています。

### 7章-1 センサーを使って LINE に通知

#### 概要
M5Stack とセンサーを使って、センサーが物体を検知したら LINE に通知を届けるハンズオンです。
UIFlow というビジュアルプログラミングで開発します。

### 注意点
6章、7章は全般的にデバイスを購入する必要があるのですが、届くまでに1週間程度かかります。
この章で使っているセンサー(PIR UNIT)が売り切れていて時間がかかったので、早めに注文しておいた方がいいです。

Mac で開発していたのですが、M5Burner で設定画面に何も表示されない問題が発生しました。
→ アプリケーションフォルダに M5Burner アプリを移動したらうまくいきました。

| 項目 | 評価 |
|:-:|:-:|
| LINE 理解度 | ★★★☆☆ |
| 簡潔さ | ★★★★☆ |
| 分かりやすさ | ★★★★★ |
| 汎用性 | ★★☆☆☆ |


### 7章-2 LINE Pay に対応したドリンクバー

#### 概要
obniz Board とエアーポンプを使ってドリンクバーを構築し、LINE API と連携します。
LIFF → Google App Engine → LINE Pay, obniz Board の流れで処理が走ります。
ドリンクバーの注文履歴を Firestore に保存したり、LIFF ではアニメーションに対応したりと、しっかりとした LINE アプリを作れる印象です。
こちらのハンズオンはハードウェア連携というより、LINE Pay を学ぶようなイメージでした。

個人的に LINE Pay は使う予定はないですし、エアーポンプを持っていてもしょうがないなと思ったので、この章は流し読みしました。

| 項目 | 評価 |
|:-:|:-:|
| LINE 理解度 | ★★★☆☆ |
| 簡潔さ | ★★★★☆ |
| 分かりやすさ | ★★★★★ |
| 汎用性 | ★★★★☆ |


# まとめ
この本を通して、LINE Platform を中心に多くのサービスに触れることができます。
内容としては、プログラミングをガッツリ作る章や、ローコードツールを使って作る章など、開発手法としてもバラエティに富んでいます。
その裏返しにはなりますが、何か明確に作りたいアプリのイメージがあって読む場合には物足りなく感じるかもしれません。

かく言う自分は、LIFF を知りたくて読んだのもあり、1章・4章以外は読まなくても良かったというのが正直な感想です。
1章・4章についても、このハンズオンだけでは作りたいものに到達できないので、結局 LINE 公式のドキュメントを読む必要があるかなと思っています。
とはいえ、ハンズオンを通して触れることで全体像が理解できたし、一度作ったという自信にも繋がるので、結果的には読んで良かったと思っています。

# Dear 出版社の方
軽い気持ちで応募したのですが、当選という形で本をいただきありがとうございました。

以下、読んでいる中で見つけたミスや分かりづらかった点を記載するので、改訂版が出る際には修正していただけるといいと思います。

#### 1章
P008 押て → 押して
P012 キャプチャ内の同義語の例がおかしいと思いました。チャペル → 教会 などが同義語だと思います。
P020 GCP は日本語版のキャプチャにした方が分かりやすいと思います。
P021 「/clove」 → 「/clova」
P032 CHANNEL_SECRET は チャネルの基本設定 ではなく Messaging API設定のタブにあります。
P037 「Flex Message オブジェクト」が何を指しているのか分かりませんでした。
P051 Datasore -> Datastore

#### 3章
P122 環境のセットアップにかなり時間がかかったので、おおよそのかかる時間が書いてあると助かります。

#### 4章
P266 filters の記載位置は methods の外側だと思います。
P268 Github の参照先にファイルがありませんでした。

#### 6章
P379 git に push するとき、手順通りやってもうまくいかず、Github のページに書かれている手順で進めるとうまくいきました。
P380 初めて netlify に登録したからか、手順が少し違いました。
P388 LINE Beason → LINE Beacon

#### 7章
P435 FIREBASE_MEASUREMENT_ID が複数あります。

以上です！