スマホで撮った写真を Line Message API を利用して Google Cloud Functions から Google Photos へアップする

背景

幼い子どもを持つ父親として以下のような課題を抱えており、かねてからなんとかしたいなと考えていました。

  • 妻がスマホで撮る子どもたちの写真を Line で送ってくれるが、バックアップが面倒だった。
  • 手順としては、一旦ダウンロードして Google Photos1 に手動でアップロード2

手間が掛かるなーと悩んでいたところ、以下の記事を見て、各種サービスの API を叩くだけだから、Google Cloud Functions や AWS Lambda、 Azure Functions などを利用すれば解決できるかもしれないと思い試してみました。

結婚式でLINE Message APIを使った写真共有サービスを作った話

概要

色々と調査したところ、こんな感じで実現できました。3

シーケンス図

成果物

Google Cloud Functions にアップしているコードは GitHub にあげています。
https://github.com/kkeisuke/line-to-google-photos

これだけのために Google Cloud SDK をインストールするのは面倒だったので、コンソール画面のインラインエディタにコピペできるようにしています。
uglifyjs で、各種サービスのIDやトークンを結合した index.min.js をビルドしています。

各種サービス

Line Message API

Line Message API はこのドキュメントだけ参照して、管理画面でポチポチしていくだけで使えるところまでの設定が出来ました。ただ、仕様的にはかなり複雑で、用語とか雰囲気でしか理解できてません。。。

プランは妻と二人しか使う予定がないので、Developer Trial にしてますが、フリーとの違いはこれもまたよくわかってません。。。

Google Cloud Functions

選定理由

Google Cloud Functions を選んだのは、「AWS / Azure のアカウントを持ってない」というそれだけの理由です。
あと、Firebase を最初に調べたんですが、プランを見ると制限がきつそうだったので選びませんでした。4

Google Cloud Functions の場合、料金を見ると今回のケースだと負担もなく実現できそうです。5

ドキュメントも充実しており、クイックスタートから始めて迷うことはほぼありませんでした。

Node.js

Node.js のバージョンはこちらに記載されています。普段 Node.js を書かない(言い訳)ので、http://node.green/https://nodejs.org/docs/latest-v6.x/api/all.html を確認しながらだったんですが、実際に動かしたらバージョン的に対応してないとかが怖かったので、TypeScript6 で書いてます。

Google Photos

APIについては以下の記事を参考にしました。

Google Photosの無料容量15GBを有効活用!cURLでGoogle Photosへ画像アップロードするには?

記事の補足として、Picasa Web Albums Data API についてはドキュメントも一応確認しました。

また、Picasa ID の確認方法については以下の記事を参考にしました。

Google Photosに翻弄された話

最後に

Google Photos PC版にはスライドショー機能もあるので、chrome拡張でも作れば、イベント(それこそ結婚式など)でリアルタイムに更新されるスライドショーを投映することもできそうです。

以上です。


  1. 以前から Google Photos をスマホで取った写真のバックアップ先にしていました。 

  2. 子供が勝手にスマホで床や壁、TVを大量に連写するため、Google Photos と同期設定ができません。 

  3. 図は PlantUML Editor にて作成しています。 

  4. Firebase は機会があれば是非使ってみたいです。 

  5. しばらく運用して要確認 

  6. API を順に叩いていくだけなので、async/await が便利でした。