インフラエンジニアがWEBサービスを（一銭も払わず）勢いだけで作ってみた。

## はじめに
インフラエンジニアである私が「こんなサービス作りたい」っていう思い付きから
（本当に）勢いだけでWEBサービスを完成させた足跡をここに共有します。
私のように、勢いだけで動き出した同志のお役に立てれば幸いです。

## 作りたかったサービス
ライングループ内で投稿される画像を自動でアルバム化してくれるLINEアプリ。

「アルバム化すればええやん！」ってツッコミには「めんどいねん」と返しておきます。
グループ内で醸し出される絶妙な流れを残したまま自動でアルバム化してほしいんです。
「グループ内の画像をそのまま見返せばええやん！」ってツッコミには、「すぐに保管期限切れるねん」と返しておきます。やっぱ自動で保存してほしいです。

じゃあ、どこに保存するか？
Google Driveでしょ。Googleアカウント持っていない人はまずいないので、各自のGoogleドライブに保存してほしいです。

## 実現可能性の確認
アイデアが固まったら、アイデアを技術要素ごとにブレークダウンしました。

1. インフラ
2. ミドルウェア
3. プログラミング言語
4. LINEとアプリの連携
5. Googleとアプリの連携


1、2については、HerokuというPaaSを利用することでミドルウェア・パッケージ管理等の
運用の手間を省くことにしました。
3については、WEBサーバの運用業務で関わったことがあるPHPを利用することにしました。
ここまでは本業に近いので迷いはありませんでしたが、問題はここからでした。

4、5については、未知の領域でしたので兎に角技術文書を読み漁りました。
結果、OAuth2認証を利用することで
各サービスとの連携が可能だと分かり、自分に対してゴーサインを出しました。

## 使ったもの(メモ)
以下に、サービスの実現にあたり使用した技術要素をメモします。
参考になった記事もリンクを記載します。

・Heroku
salesforceが運営するPaaS。プログラムを配置するだけで、インフラを意識することなくWEBサービスを運営できる。アドオンを追加することで、便利な機能を必要な分だけ付加できる。
Freeプランでも認証アカウント毎に1000時間（＝41.6日間）/月 稼働させることができ、アドオンにも無料枠があるので利用した。

（参考にした情報）
Heroku コマンド・設定 メモメモ
https://qiita.com/pugiemonn/items/0e69b7a29a384b356e65

・Heroku Postgres
Herokuアプリ専用のPostgreSQLを利用できるアドオン。

（無料プラン）
行数：1 万
同時接続数：20
1 か月あたりのダウンタイム：最大 4 時間
Heroku CLI 経由のアクセス
PGBackups：2 つまで保持
Dataclips
ロールバック：0 秒

（参考にした情報）
Herokuでデータベース(PostgreSQL)に接続する方法
https://qiita.com/shikatani/items/c7af30b98c2d0419d7af

・MemCachier
セッションストレージをSaaSとして利用できるアドオン。

（無料プラン）
Connection Limit：10
Proxy Servers：1
Bucket Size：25MB

（参考にした情報）
Heroku + PHP でセッション情報を memcached に保存する
https://qiita.com/shin1x1/items/df2ddb3cc7bfd3f58e67

・SendGrid
メールサーバをSaaSとして利用できるアドオン。

（無料プラン）
Emails per Month：Up To 12000（12,000通/月まで無料）

（参考にした情報）
sendgrid-phpで添付画像を付けてメール送信する方法
https://naughtldy.hatenablog.jp/entry/2017/04/07/080000

・Papertrail
ログ管理・監視のアドオン。任意のワードを検知したらメール通知することも可能。

（参考にした情報）
Herokuにログ管理ツール「papertrail」を導入&利用してみる
http://vdeep.net/heroku-papertrail


・PHP

・OAuth2クライアント（league/oauth2-client）
Google、Facebook等の認証先に依存することなく、OAuth2連携のコードを
画一的に書けるOAuth2専用クライアント。

（参考にした情報）
PHPで簡単にOAuth認証を実装するサンプル（例：GitHubログイン）
https://qiita.com/ikuwow/items/bd96f0dcaeab65edb642


・LINE Messaging API
LINE@をボットとして利用するためのAPI。

（参考にした情報）
line/line-bot-sdk-php
https://github.com/line/line-bot-sdk-php


・Google Drive API
ファイルをGoogle Driveへ読み書きできるAPI。OAuth2連携をユーザーにしてもらい、アクセストークンを取得すれば、ユーザーのGoogle Driveも操作可能。

（参考にした情報）
PHPでGoogeDriveAPIを使ってみる（１）
http://challenge.no1s.biz/programming/php/392


・Logaster
サービス名からそれっぽいロゴを生成してくれるサービス。
デザインセンスないし、そこまでこだわりはないけど、それっぽいものが欲しいという困ったちゃんにお勧めです。

（参考にした情報）
Logasterで数分間でオンラインでロゴを作成する方法
https://webtan.impress.co.jp/u/2018/04/11/28950


## サービスの概念図
![image.png](https://qiita-image-store.s3.amazonaws.com/0/218139/4d0c4a60-0bd5-4b4a-0688-96e690ac2e3d.png)

UIはLIINEに任せるため、ユーザーはLINEボットとメッセージ、画像をやり取りする構図になります。
LINEからHerokuへPostリクエストとしてユーザーが送信した情報が送られてきます。
PHPのアプリでリクエストを解析し、アクションを決めます。

例えば、LINEボットを通してGoogleアカウントとの連携をユーザーが求めてきたら、GoogleのOAuth認証画面のURLへ誘導します。ユーザーがOAuth認証に成功したら、Herokuへリダイレクトし、Google Driveへのアクセストークンを取得してPostgreSQLへ保管します。

LINEボットを通してユーザーから画像が送られてきた場合、既にアクセストークンを取得している場合に限り、ユーザーのGoogle Driveへ自動保存します。

## 出来たもの
![1_Primary_logo_on_transparent_213x67.png](https://qiita-image-store.s3.amazonaws.com/0/218139/64ac2424-9e32-35cb-afcf-a287ecf484de.png)

DriveUP　
https://driveup.herokuapp.com/jn/index.php

DriveUPはLINEグループで投稿する画像をあなたのGoogle Driveへ
自動で保存するLINEアプリです。

お友だちのアカウントと同じようにDriveUPを「友だち追加」して、LINEグループへ「参加」させるだけで、投稿される画像をあなたのGoogle Driveへ保存します。

<div class="banner-btn"><a href="https://line.me/R/ti/p/%40vko4483i"><img height="36" border="0" alt="友だち追加" src="https://scdn.line-apps.com/n/line_add_friends/btn/ja.png"></a></div>

## 感想
偉大な先人たちの知恵を借りて、なんとか（一銭も払わず）形にできました。
やっぱりアイデアを形にするって脳みそグルグル回転して気持ちが良かったです。
何より、使ってくれた友人がフィードバックをくれた時、幸せでした。（ありがとう）
（未熟なものばかりですが）アイデアは頭からこぼれ落ちそうなくらいあるので、
こぼれ落ちる前に形に残すことを続けていこうと思います。形にしたもののブラッシュアップも忘れずに！

最後まで読んでいただきまして、ありがとうございました。