LINE Botを作成するときに便利だったサービスを紹介する

はじめまして、エンジニアの@Adacchi3です。

皆さんはLINE Botを作ったことはありますか？
今回、質問応答システムとして、特定の人物名を入力することで、その人物の情報を検索することができるLINE Botを作ってみました。
<img width="340" alt="Screenshot_20191202-232142.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206630/eabebd1f-6046-e27f-b02c-e4b0ff8acc82.png">

このLINE Bot作成するにあたって、便利だったサービスを紹介していきます。

プログラムはRuby on Railsで実装し、Herokuで動かしています。
ソースコードはgithubで公開していますので、そちらをご確認ください。
https://github.com/Adacchi3/line-bot-idol-profile

では、便利だったサービスを紹介していきます！

## LINE Official Account Manager
LINEには、メッセージを送ることや友だちを追加する、グループに参加するといったイベントがあります。LINE Botでは、そういったイベントに対してメッセージを送信することができます。

1つ1つプログラムで実装するのも良いですが、[LINE Official Account Manager](https://manager.line.biz/)を使うことで、容易に実装することができます。

LINE Official Account Managerでは、メッセージの配信や利用状況の分析はもちろんのこと、あいさつメッセージや応答メッセージを管理することができます！

あいさつメッセージは、友だち追加されたときに送信するメッセージのことを指します。下記の図では、実際にどのようにメッセージが表示されるのかを確認しながら、あいさつメッセージを登録することができました。
<img width="1265" alt="スクリーンショット 2019-12-02 23.14.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206630/f49860da-771b-661f-14d8-ec17fe891bb4.png">

応答メッセージは、メッセージを受信した際に配信するメッセージのことです。キーワードを設定することで、意図にあったメッセージを返信することもできます。

メッセージの応答がシンプルである場合には、とても便利な機能です:thumbsup:

## Flex Message Simulator
LINEには、[Flex Message](https://developers.line.biz/ja/docs/messaging-api/using-flex-messages/)というメッセージの種類があります。1つのメッセージに画像を入れたり、ボタンを付けたり、複数のメッセージを横に並べたりといった、レイアウトを自由にカスタマイズできるメッセージになります。

[Flex Message Simulator](https://developers.line.biz/console/fx/)では、実際にコーディングしながら、どのように表示されるのかをプレビューで確認することができます。
さらに、豊富なサンプルメッセージが用意されており、容易におしゃれでカッコいいメッセージを作成することができます:thumbsup:

![スクリーンショット 2019-12-03 1.51.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206630/eba87bdb-20b0-5eec-7a4b-0a591d277596.png)


# Linked Open Data
いざ、LINE Botで質問応答システムを作成しよう！と考えた際、回答となるデータがなくて困ったりしていませんか？
データを用意するためにウェブサイトをスクレイピングして、パースして…といった方法をせずとも、Linked Open Dataを利用する方法があります。

[Linked Open Data](https://www.w3.org/DesignIssues/LinkedData.html)はWeb上でデータを公開・共有する方法の1つで、データ同士をリンクして表現されており、誰も自由に利用することができる構造化データです。
例えば、[DBpedia Japanese](http://ja.dbpedia.org/)や[wikidata](https://www.wikidata.org/wiki/Wikidata:Introduction/ja)といった百科事典のようなものから、今回利用している[im@sparql](https://sparql.crssnky.xyz/imas/)のようなLinked Open Dataもあります。
Linked Open Dataの中には[SPARQL](https://www.w3.org/TR/rdf-sparql-query/)というクエリ言語を用いて検索・利用可能なエンドポイントを提供していることがあり、いろいろなサービスで利用することができます。

SPARQLはSQLライクな記法で記述することができ、グラフパターンマッチングでデータを取得します。
今回作成したLINE Botでは、im@sparqlのエンドポイントに以下のようなクエリを発行し、特定の人物名にリンクして記述されている年齢や誕生日といった情報を取得しています。

```sparql
PREFIX imas: <https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#>
PREFIX schema: <http://schema.org/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT DISTINCT *
WHERE {
  ?s schema:name '大崎甘奈'@ja .
  OPTIONAL { ?s imas:cv ?cv . FILTER( lang(?cv) = 'ja' ) }
  OPTIONAL { ?s schema:description ?description . }
  OPTIONAL { ?s foaf:age ?age . }
  OPTIONAL { ?s schema:height ?height . }
  OPTIONAL { ?s schema:weight ?weight . }
  OPTIONAL { ?s schema:birthDate ?birthDate . }
}LIMIT 1
```
SPARQL1.1では、[Federated Query](https://www.w3.org/TR/sparql11-federated-query/)といった横断的な検索ができます。いろいろなLinked Open Dataを組み合わせ利用することができるため、アイデア次第では興味深いサービスを作ることができるかもしれません！

Linked Open Dataを利用することで、自前でデータを準備しなくても、質問応答システムをすばやく実装することができるのでおすすめです:thumbsup:

## まとめ
LINE Botを作成するときに利用した便利だったサービスを紹介しました。
公式ドキュメントが充実しており、作ってみた記事も多数あるので、ぜひこの機会にLINE Botを作ってみてはいかがでしょうか？

### 参考資料
- https://developers.line.biz/ja/reference/messaging-api/
- https://github.com/line/line-bot-sdk-ruby