LINEDC Showcase: LINE API の歩き方

この記事は LINE Developer Community 主催のイベントである、[LINEDC Showcase:LINEとAWSで作るDevelopers.IO Cafeのレシピ](https://linedevelopercommunity.connpass.com/event/164463/) で話す内容の補足資料です。後で見やすいにスライド対応はしていません。

# どこのドキュメントを読めばよいか

基本は公式の 2 箇所です。まず概要を把握して、必要に応じて API 詳細を見ましょう。

- サービスの概要は、[ドキュメント](https://developers.line.biz/ja/docs/) 参照
- API 詳細は [API リファレンス](https://developers.line.biz/ja/reference/) 参照

# 概要 : LINE で何ができるのか

LINE プラットフォームで開発を行う場合、始め方は二通りあります。

- 実現したいアイデアが既にあって実装したい
- まだアイデアはないが、何ができるか知りたい

いずれの場合もまずは LINE プラットフォームで何ができるかを知ることをお勧めします。それによりアイデアがより広がったり、無駄な実装を避けることができます。

2020 年 2 月 12 日時点で、一般の開発者が開発が行える主な LINE のサービスは以下の通りです。

**スマートフォン向け LINE アプリ用**
- [LINE ボット (Messaging API)](https://developers.line.biz/ja/services/messaging-api/)
- [LIFF アプリ](https://developers.line.biz/ja/docs/liff/overview/)
- [LINE Notify](https://notify-bot.line.me/ja/)

**スマートフォンおよび Web、ネイティブアプリなどに組み込み**
- [LINE ログイン](https://developers.line.biz/ja/services/line-login/) 
- [LINE Pay](https://pay.line.me/portal/jp/main)

**スマートスピーカー用**
- [Clova スキル](https://clova-developers.line.biz/#/)

この他にも LINE Ads や LINE Things、LINE ビーコンや Social、法人向けのサービスなどもありますが、まずは上記サービスを抑えておくとよいでしょう。

**また、今後「ミニアプリ」なる機能が出るらしいので、アンテナを張っておいてください。**

## LINE ボット

もはや説明不要なレベルで認知されているチャットボットサービスです。基本的に以下のことができます。

- ユーザーからのメッセージに応答
- ユーザーからのアクションに応答
- ボットからユーザーにプッシュ通知

![](https://developers.line.biz/media/services/messaging-api-thumb2.png)

ボットは 1 対 1 のチャット、グループおよびトークルームに対応しています。

以下に主な機能を紹介しますが、詳細はドキュメントを読んでください。

### メッセージに応答

ユーザーは色々なメッセージをボットに送ってきます。これらのメッセージに対して適切に応答するよう開発できます。

- テキスト
- 絵文字、スタンプ
- 画像、動画
- 位置情報、等

### アクションに応答

ユーザーが明示的に送ってくるメッセージ以外にも、ボットから送ったボタンをクリックしたり、メニューをクリックするなどのアクションを行った際も、応答するように開発できます。

### プッシュ通知

チャットボットは、ユーザーのメッセージやアクションに対して**返信**することが基本ですが、一定時間を過ぎてから返信したり、お知らせのようにボット側から情報を発信する場合は、**プッシュ通知**という機能を使います。

プッシュ通知はユーザーにメッセージを送れる便利な機能である一方、課金対象でもあるため、利用シーンを慎重に検討する必要があります。料金のプランは今後も変わる可能性がありますが、現時点のものは以下のサイトで確認できます。

料金プラン: https://www.linebiz.com/lp/line-official-account/plan/

### メッセージの種類

ボットから応答したりプッシュするメッセージは、多くの種類をサポートしている点は LINE の魅力です。

- テキスト、音声、動画、スタンプ、絵文字などの通常のメッセージ
- ボタンやカルーセルを使えるテンプレートメッセージ
- テンプレートメッセージよりリッチなフレックスメッセージ

**テンプレート: カルーセル**
<img width="300" src="https://developers.line.biz/media/messaging-api/messages/carousel.png"/>
**フレックスメッセージ**
<img width="600" src="https://developers.line.biz/media/messaging-api/using-flex-messages/bubbleSamples-Update1.png"/>

### リッチメニュー

チャットボットの課題として、ユーザーがボットに何を話しかけると良いか分からない問題があります。
**リッチメニュー**を使うとこの問題がスマートに解決できます。
<img width="300" src="https://developers.line.biz/media/messaging-api/rich-menu/bot-demo-rich-menu.jpg"/>

リッチメニューは非常に柔軟な機能を提供します。

- 全ユーザーに表示される既定のメニューを設定できる
- ユーザー単位でリアルタイムに動的に変更できる
- メニューの高さを 2 段階から選択できる
- メニュー上のタップエリアを最大 20 個指定できる
- LINE ボットアカウント毎に最大 1000 ものメニューを登録できる

### URL スキーム

聞きなれない言葉かもしれませんが、ユーザーがワンタップでカメラを起動したり、位置情報を起動することができます。LINE に不慣れなユーザーに対して、高度な操作を要求する場合に非常に便利です。

慣れていないと、位置情報送るなどの操作も、意外とできないものです

<img width="300" src="https://developers.line.biz/media/messaging-api/using-line-url-scheme/camera-screen.png"><img width="300" src="https://developers.line.biz/media/messaging-api/using-line-url-scheme/camera-roll.png"><img width="300" src="https://developers.line.biz/media/messaging-api/using-line-url-scheme/location.png">

## LIFF アプリ

LIFF (LINE Front-end Framework) は LINE アプリ内で起動するブラウザや、サファリやクローム、マイクロソフトエッジなどの外部ブラウザで動作する仕組みで、以下のことができます。

- LINE ログインを行う
- LINE ユーザーの情報を取得可能
- LINE アプリ内で開いた場合、メッセージの送信が可能
- QR コードリーダーを起動したり、指定した URL を開く

元々 LINE ボットの機能追加として公開された機能でしたが、現在は独立したサービスとして機能します。LINE ID を使ったサインイン (LINE ログイン) が簡単に実装でき、またプロファイルを取得できるのは便利です。

また引き続きボットの一部として動作し、LINE ボットでは足りない、あと少しの機能を補完することも簡単にできます。

これまで HTML/JavaScript/CSS で開発した経験がある方には強力な武器となるでしょう。

<img width="300" src="https://engineering.linecorp.com/image/2018/6/4/1528107859129.png">

## LINE Notify

任意の Web サービスと連携して、イベント駆動で通知を行う仕組みを提供します。例えば GitHub と連携してみたり、IFTTT と連携することも簡単です。

1 時間で呼び出せる上限が 1000 回であったり、個人で登録するようなサービスであるため、主に開発者向けのサービスだと思いますが、使いどころがハマればとても便利です。プッシュ通知として商業利用する場合は、[LINE 公式アカウント](https://www.linebiz.com/lp/line-official-account/)を検討する必要があります。

具体的な内容は手順は以下の記事も参考にしてみてください。

[dotstudio: LINE NotifyとGitHubを連携してSlackから移行してみました。](https://dotstud.io/blog/line-notify-chat-bot/)

## LINE ログイン

昨今多くのサービスでは Yahoo ログイン、Facebook ログイン、Google ログイン、Microsoft アカウントなど、多くの認証連携が行われますが、LINE もその例外ではなく、LINE ログインを提供しています。

既に紹介した LIFF を使う事もできますが、iOS/Android のネイティブアプリなどにも対応するため、ユーザー認証をしたい場合は LINE ログインを試してください。当然 LINE 開発者コンソールなどのログインも LINE ログインです。

![](https://developers.line.biz/media/services/line-login-main-contents.png)

## LINE Pay

キャッシュレス競争の渦中にある LINE Pay ですが、開発者が LINE Pay を使った決済を簡単に実装することができます。現在バージョン 3 が公開され、オンライン決済だけでなく、QR コードを使ったオフライン決済も対応しています。

LINE ボットと組み合わせたり、独自の Web サービスに組み込んだりと柔軟に使えます。

福岡市で導入された事例は有名で、似たようなことが自分たちでもできると思うとわくわくです。
[公共施設へLINE Pay導入 - 福岡市の公共施設へ唯一導入されたQRコード決済サービス「LINE Pay」](https://linefukuoka.co.jp/ja/project/smartcityproject/casestudy/public-facility/)

## Clova スキル

「ねぇクローバー」でおなじみのスマートスピーカーに独自スキルを追加できます。既に多くのアプリがストアに公開されており、ハッカソンなどでも活躍する場が増えています。

Clova の開発は以下の機能が既にサポートされています。

- 自然言語解析
    - 発話者の意図の読み取り
    - キーワードの抜きだし
- ストアへの公開審査
- 複数のクローバープラットフォームへの対応
- 多言語対応(発話)

こちらも LINE ボットとの連携に強みがあり、Clova 単体のスキルだけでなく、シームレスな LINE 連携がユーザー体験を押し上げるため魅力です。

# まずは開発者登録

何をするにも開発者登録です。かならず LINE アカウントが必要となるため、自分のアカウントを使うか、専用のアカウントを用意しましょう。大半の人は自分のアカウントをそのまま使っています。

[LINE 開発者サイト](https://developers.line.biz/ja/): このサイトより画面に従って登録してください。

# API リファレンスを眺める

どのサービスも、多くは以下の 3 パターンです。

- LINE プラットフォームから、自分の Web API が呼び出される (Webhook)
- LINE プラットフォームの API を呼び出して処理を行う
- LIFF やフレックスメッセージなど UI 要素がある場合、画面をデザインする

API リファレンスは一見、膨大な情報の羅列に見えますが、概要と対応するように記述があるため、やりたいことを探すことも、出来ることを探すことも、容易に行えます。開発しないといけないものは独自の Web API であることが多いです。

## 自分の Web API が呼び出される

LINE ボットに対してユーザーがメッセージを送信した場合や、クローバーに対してユーザーが発話した場合など、処理が必要な場合に LINE プラットフォームより情報が送られてきます。基本的な処理のフローは同じです。

- データの送信元を検証する
- データの中身を解析する
- 中身に応じて処理を行う

## LINE の Web API を呼び出す

行う処理が決まれば、以下の手順で API を呼び出します。

- API 呼び出しに必要な認証などを行い、アクセストークンを取得する
- 取得したアクセストークンと必要なデータを渡して API を呼び出す
- 処理結果に応じて必要な対応をする

API 呼び出しは常に成功するとは限りません。応答結果によって処理を行う必要があります。

## Web サービスのホスト

最後に多くの場合、開発した Web API をクラウドなど外部にホストする必要があります。
私のお勧めは当然、多くの言語を柔軟にサポートする [Microsoft Azure](https://azure.microsoft.com/ja-jp/free) ですが、Heroku や GCP、AWS など使い慣れたものを使ってください。

私もここ Qiita に多くの記事を投稿しているので、参考までにどうぞ。

[kenakamu の LINE Bot 系記事](https://qiita.com/search?q=user%3Akenakamu+tag%3Alinebot)

# どこから始めるか

コードを書きたい場合、多くのサービスはサンプルアプリが存在します。また各種言語の SDK が存在します。
C# は残念ながら公式がありませんが、コミュニティで作成しているので是非お試しください。

[GitHub: LINE 公式レポジトリ](https://github.com/line)
[GitHub: LINE Developer Community レポジトリ](https://github.com/line-developer-community)

また Qiita やはてぶにも多くの「やってみた」系記事があるので試してください。

情報収集がしたい場合は、コミュニティに参加してください。

[Connpass: LINE Developer Community](https://linedevelopercommunity.connpass.com/)
[Facebook: LINE Developer Community](https://www.facebook.com/groups/linedevelopercommunity/)

質問がある場合は [Q&A フォーラム](https://www.line-community.me/questions) へどうぞ。

# まとめ

LINE プラットフォームは様々な事ができるため、はじめはその内容に圧倒されるかもしれませんが、一つ一つ理解していけば、攻略は必ずできます。是非アイデアを形にするプラットフォームとして検討してみてください。