フォトコンテストのためのLINE Botを開発しました

# 1. TL;DR
- 自分の披露宴のためにフォトコンテスト用のLINEボットを開発しました。
- `Heroku`, `LINE Messaging API`, `Google Photos APIs`を活用することでサクッと作ることができます。
- **ソースコードはこちらの[Githubレポジトリ](https://github.com/ichiroex/linebot-photocontest)で公開しています。**

# 2. 作ったもの
LINEボットに写真を送信するとGoogleフォトの共有アルバムに自動的に写真がアップロードされ、それらの写真を閲覧できるサービスを作りました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92685/11443411-f91e-8049-2750-c9288f1d9e31.png" width=50%>
※ 写真は一部加工しております。


# 3. フォトコンテストの流れ
1. LINE Botと友だちになる
    - ユーザー（披露宴のゲスト）は、まず開発したLINE Botと友達になります。
    - 今回は、LINE BotのQRコードを載せた用紙を事前に準備し、各ゲストのテーブルに配置しました。
1. LINE Botへ写真を送信する
    - 撮った写真をLINEボットに送信するとGoogle Photosアルバムへ自動的にアップロードします。
1. 投稿された写真を選ぶ
    - システム管理者（新郎・新婦）は、このアルバムを見ることができ、中座などの退場中にアップロードされた写真からお気に入りの写真を選択します。
1. 写真を投稿した人を表彰する。
    - 最後に選んだ写真をパワポ/Keynoteなどのスライドに貼り付け、宴会中に表彰します。

# 4. 仕組み
LINE Botを作るために `Heroku`, `LINE Messaging API`, `Google Photos APIs` を使用しました。

- [Heroku](https://jp.heroku.com/)
    - LINE Botサーバーとして、Herokuを使用しました。LINE Botを利用するユーザー数も限られているので、性能面はHerokuの**無料枠**で十分でした。
    - 各ユーザーの投稿枚数などのログを管理するために、Heroku上から[Postgres](https://jp.heroku.com/postgres)を使用し、**データーベースにログを格納しました。**
- [LINE Messaging API](https://developers.line.biz/ja/services/messaging-api/)
    - LINE Botを開発する上で、必ず必要になります。Developer登録をすることで、誰でも利用できます。
    - Developer Trialプランであれば、**友達数は50人以下という制限はありますが、PUSH通知も送ることができます。**
    - 今回は、LINE Botを利用する人が50人より多いことが想定されたため、新郎ゲスト用・新婦ゲスト用それぞれのLINE Botを用意しました。
- [Google Photos APIs](https://developers.google.com/photos/)
    - LINE Botに投稿された写真を管理するために使用しました。
    - システム管理者（新郎・新婦）が用意したGoogleフォトの共有アルバムと紐付けを行い、LINEに投稿された写真が自動的に共有アルバムへ保存されるようにしています。
    - また、共有アルバムへ写真を追加する際に、**写真のファイル名を各ユーザーのLINEユーザー名にしました。** こうすることで、**誰がどの写真を投稿したか、が一目でわかります。**

![photo-contest-bot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92685/e73b1fb1-5228-581f-1055-f168327e4f25.png)


# 5. 気をつけたこと
フォトコンテストに参加していただくゲストの方に楽しんでもらうために、フォトコンテストを準備する際に気をつけたことがあります。
気をつけたポイントは、以下の３つです。  

- 参加方法のわかりやすさ (5.1章)
- ルールの伝え方 (5.2章)
- 安心して使ってもらう (5.3章)

## 5.1 参加方法のわかりやすさ
- 各ゲストのテーブルにLINE BotのQRコードと参加方法を記載した紙を配置しました。
- 披露宴の司会者に「QRコードを読み込むことでLINE Botと友だちになり、フォトコンテストへ参加できる」という旨を口頭で伝えてもらいました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92685/614af573-93e9-d703-4e38-2c15b2c8b207.png" width=95%>
※ 写真は一部加工しております。

## 5.2 ルールの伝え方
今回のフォトコンテストでは、以下のルールを設けました。

- 1人あたり5枚以下の写真を投稿できる（※）
- 写真の投稿は、披露宴の中座まで受け付ける

そこで、これらのルールを伝えるために以下の2つを行いました。

- LINE Botと友だちになると以下の写真ようにユーザーへメッセージを送ることができます。 このメッセージにルールを記載しました。
- これらに合わせて、披露宴の司会者の方にも口頭でルールを説明してもらいました。

※ 各ユーザーの写真の**投稿枚数はデータベースで管理**し、それらを基に**LINE Bot内で投稿枚数の
制限をかけることができる**ので、6枚以上の写真は投稿できないようしました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92685/71e88599-4da6-265b-8150-8d575d774798.png" width=95%>
※ 写真は一部加工しております。

## 5.3 安心して使ってもらう
Googleフォトの共有アルバムは**アルバムのURLを教えることで誰でも閲覧できます**。
一方で、事前にアルバムのURLを参加者へ伝えてしまうと、関係のない写真を誤って写真をアップロードしてしまった場合に誰でも見れてしまうという危険性もあります。
そこで今回のフォトコンテストでは、**アルバムのURLを参加者へ伝えず**、宴会中は新郎新婦だけがアルバムを閲覧できるようにしました。

# 6. おわりに
今回開発したLINEボットは結婚披露宴で活用しましたが、学園祭やライブ、飲み会などのイベントでも活用できます。
**LINEボットを介すことで、「不特定多数の人とLINEグループを作って、LINEのアルバム機能で写真を共有」といった煩わしさを省くことができます**。
見知らぬ人にLINEアカウントがバレることはないので、女性などは安心ですね！

ぜひ使ってみて下さい(^^)

P.S. 
要望があれば、実装編の記事を書きたいと思います！！:smile:
コメントお待ちしております。

# 7. 参考ページ 
- [[追記あり] Google Photos APIsでアルバム作成と写真のアップロード](https://qiita.com/zaki-lknr/items/97c363c12ede4c1f25d2)
- [Heroku で Flask + SQLAlchemy を使う](http://voluntas.hatenablog.com/entry/20110920/1316529816)
- [Google Photos Library APIで写真をアップロードする](https://int128.hatenablog.com/entry/2018/06/06/234653)
- [【図多め】APIを使ってGoogleサービスを操る](http://tech-blog.rakus.co.jp/entry/20180725/google-apis/google-cloud-platform/quickstart)