新卒同期が好きすぎて引かれるレベルの多機能LINEBotを作った話

# はじめに
[ゆるゆる新卒1年生 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/yuruyuru-freshman)、25日目です！
新卒１年目エンジニアの@yutaroudと申します。
今回は、同期内LINEに導入したLINEBotの話をします。

まず最初に言っておきたいのは**同期内のコミュニケーションに問題があったわけではありません笑。**
ただ、同期内で話のきっかけとなる何かがあることで、少しでも新しい繋がりができれば良いなと思ったことが作った理由です。

そして、私が同期のことが好きすぎてエンジニアとしてもっと盛り上げたいと思ってしまったことが一番の理由です笑。
(同期内LINEには、エンジニア以外にもビジネス職など合わせて約100人ほどのバラエティに富んだ職種の方達がいます。)

## LINEBotの機能
このLINEBotには機能がたくさんあります。
新卒研修の間、家で毎週新しい機能を開発していました！
一つ一つ紹介していきますが、ざっと以下の機能があります。

* 予定のリマインド
* 近くのグルメおすすめ機能
* 好きな言葉を言わせられる機能
* 画像検索機能
* シャッフルランチ管理機能
* 天気予報機能
* Google検索機能
* お絵かき機能
* 育成機能
* 動画検索機能
* 匿名発言機能
* 誕生日お知らせ機能

今改めて見ると・・・機能多すぎでしょ笑💦
それでは一つ一つ紹介していきます。

### 予定のリマインド
最初の頃は、皆共通して気をつけないといけないことや忘れないようにしないといけないことがありますよね！
誰か毎回指摘してくれる人がいたのですが、大変だよなぁと思い、一番最初に生まれたのがこの機能でした。

リマインドについては正確にはGoogle Apps Script(以下GAS)の機能で、
[トリガー](https://script.google.com/home/triggers)という機能を利用しているだけです。
LINEの[Messaging API](https://developers.line.biz/ja/reference/messaging-api/)のPUSH機能を発火させるスクリプトを用意して、後はトリガーを設定するだけです。
Messaging APIの使い方の記事は色々あると思いますので、そちらをご覧ください。
GASでは下記のような形で時間を指定してトリガーを設定できます。
![スクリーンショット 2019-12-24 7.26.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/f23fbdba-4baa-3e02-5b7f-6c12af6ea656.png)

### 好きな言葉を言わせられる機能
この機能はめちゃくちゃ好評でした。おそらく一番使われたといっても良い。
GoogleフォームでBotが反応する言葉を集め、それに対する回答をBotに言わせるというシンプルな仕組みです。
集めた回答はスプレッドシートで管理し、スプレッドシートと連携してGASを動かすことによって、この機能を実現しました。
![スクリーンショット 2019-12-24 7.30.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/e70801af-226b-879d-1c6e-c67b4c19c7ac.png)

スプレッドシートと連携したら、下記のようなJavaScriptを書いて、Botに該当のメッセージがないか
検索させ、一致するものがあれば返すというような形にしています。

```JavaScript
function wanttosay(userMessage,reply_token){
  var spreadsheet = SpreadsheetApp.openById('IDを入れる');
  var sheet = spreadsheet.getSheetByName('シート1');
  var columnBVals = sheet.getRange('A:A').getValues(); 
  var LastRow = columnBVals.filter(String).length;  //空白を除き、配列の数を取得

  for(var i=2;i<=LastRow;i++){
    var keyword = sheet.getRange(i,1).getValue();
    var reactionWord = sheet.getRange(i,2).getValue();

    if(userMessage == keyword){
      LineMessage(reactionWord,reply_token); //メッセージをPUSHする関数
      break;
    }
  }
}
```

<img width="300px" alt="LINEBot 好きな言葉" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/3d7f7db1-f21c-0dea-1a30-45a52e85f634.jpeg">

**拡張子が画像の場合は画像表示にも対応しております。**

### 近くのグルメおすすめ機能
ハングリーの前か後ろに食べたいものをつけると、近くの食べたい料理のお店をいくつか紹介してくれる機能です！
こちら機能は[ぐるなびAPI](https://api.gnavi.co.jp/api/)を使用して作成しております。
また、LINEの[Flexメッセージ](https://developers.line.biz/ja/docs/messaging-api/using-flex-messages/)を使用して作成して表示を行っています。
<img width="300px" alt="近くのグルメおすすめ機能" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/b99c293d-57bb-1731-c75c-29ca71cd6022.jpeg">


### 画像検索機能
ホープという言葉の前に、検索したい画像の名前をつけるとその名前で画像検索を行える機能です！
こちらは[Flickr API](https://www.flickr.com/services/api/)を駆使して作成しております。
<img width="300px" alt="画像検索機能" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/13d15c03-d2e4-f5fc-9d9c-17565f12ab29.jpeg">

### シャッフルランチ管理機能
同期が全部で100人近くいるため、同期をもっと知りたいよね！ということでシャッフルランチを企画しました。
最初は企画したシャッフルランチを毎週手動で行っていたのですが、流石に面倒だよね・・ということになり、
Botで自動的にリマインドしてやってくれたらいいよねということで実装しました！
キャンセル機能もついています！
<img width="300px" alt="シャッフルランチ管理機能" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/1c6127bd-d29f-b041-dbe4-cdbe96906347.jpeg">

### 天気予報機能
単に、天気、プリーズというと名古屋市の天気を教えてくれる機能です。
<img width="300px" alt="天気予報機能" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/33c20c5a-d731-26f9-4623-22e138ceb3ed.jpeg">

### Google検索機能
単に、Googleのパラメータに検索キーワードを追加することで検索するだけの機能です。
<img width="300px" alt="Google検索機能" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/2607c21f-e111-f9cd-b11f-360996d508c6.jpeg">

### 動画検索機能
[Youtube Data API](https://developers.google.com/youtube/v3/getting-started?hl=ja)というのを使用しており、検索されたワードで動画を検索しているという機能です！
<img width="300px" alt="動画検索機能" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/69986321-c803-dd86-0580-93b52faff87b.jpeg">

### 匿名発言機能
こちらはPushメッセージを利用しており、Botに個人チャットで投稿すると、グループラインの全体に発言が飛ぶようになっている機能です！
普段発言しない人から面白い投稿が期待できるのではないかと思い作ったのですが、
なんとPushメッセージの送信可能量に限界があり、全然使えないものとなってしまいました。
(1000件が限度で、1ユーザーに対して1件使われるため、全体LINEが100人近くいたため10回で終わる)

こちらが無制限ならかなり有効な施策として機能したことでしょう・・・。
<img width="300px" alt="匿名発言機能" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/48cef3ff-ca3d-9f52-4ebe-431a1ad79651.jpeg">

### お絵かき機能
[LIFF](https://developers.line.biz/ja/docs/liff/overview/)という機能を駆使して作成したものです。
ただ、こちらの機能は既に作られた方のものを流用しているため、URLを明記しておきます。

参考:[Messaging APIの新機能LIFFの使い方を解説します。
](https://engineering.linecorp.com/ja/blog/liff-our-latest-product-for-third-party-developers/)
<img width="300px" alt="お絵かき機能" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/de5d71a9-1628-d8b3-2039-fcc9e3cc9b8f.jpeg">

### 誕生日お知らせ機能
同期の誕生日をデータとして持ち、毎日GASのトリガーで、誕生日の人が存在しないかをチェックしています。
誕生日の時はLINEがとても盛り上がります！！
<img width="300px" alt="誕生日お知せ機能" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/7bba53cc-adcb-4cca-7e20-370070671ecc.jpeg">

### 育成機能
最後に企画した機能として、同期内でみんなでワイワイできる仕組みがあったら面白いよなあと思い
育成機能を作成しました。（ほとんど使われず終わりました・・・）
名前を最初に登録し、ランキング機能で毎日育成をするとどんどんポイントが溜まっていくという仕組みにしました。
餌やりをしてポイントが増える機能しかないのですが、将来的にはもっといろんなゲームを追加して
ポイントが増えるような形にする予定でした・・・・（研修が途中で終わってしまったため断念)
<img width="300px" alt="育成機能" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/730395aa-b912-4ff3-ceac-89c624052896.jpeg">

## 使用割合
実際、これだけの機能を使ってどれくらい使われていたのか、お見せします！！

一番多い時ではありますが、1日に2000件(数が多く見えるが、100で割って20回)ほど使われていることがありました！

<img width="300px" alt="統計" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/8b3119a1-f5dc-5abd-55f3-a00ef8518581.png">

## まとめ
この中で成功したなあと思う機能は
お絵かき機能、誕生日お知らせ機能、好きな言葉を言わせられる機能の三つです。

お絵かき機能の理由としては、弊社の新卒の中にはデザイナーも多く、他職種の得意分野を活かしたコミュニケーションが生まれたからです！
LINEの中で文章以外に、ちょっとしたグラフィカルなコミュニケーションが生まれることで新しい価値観の交換が行われたのではないかと思います！

誕生日お知らせ機能の理由としては、今でもちょっとした同期内のコミュニケーションとして使われており、
誕生日おめでと〜！というお祝いする文化が自然とできているのはとても素敵なことかなと思います！

そして、最後に好きな言葉を言わせられる機能です。
この機能をリリースしてから、Botが使われる機会が大幅に増えました！
全部で90ほどの投稿が集まり、同期の口癖だったりちょっとしたネタ投稿が増え、LINEのコミュニケーションがいい感じに加速しました！



# おわりに
結果として、Botを作ったことで、同期内のコミュニケーションは間違いなく活発になったのかなと思います。
たくさん機能を作り、今となってはあまり利用されていない機能がほとんどですが、いろいろ勉強になったのでそれも良しとしましょう！

[ゆるゆる新卒1年生 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/yuruyuru-freshman)、25日目いかがでしたか？

最後まで、ご覧いただきありがとうございました！

それでは皆さん、良い年末年始をお過ごしください〜！