読者です 読者をやめる 読者になる 読者になる

俺の報告

RoomClipを運営するエンジニアの日報(多分)です。

GoogleAppScriptで添付ファイルをS3へアップロード - 日報 #136

何でもかんでも自動化というのが世界の要望みたいです。
まぁいんでないすかね、自動化。
概ね賛成です。

僕は自動化に対して意識が低かったのですが、
この姿勢はそろそろ修正しないと駄目ですね。
言い訳は「面倒」と「怖い」です。
「何が起こるか怖いから、ちゃんと見ながらやりたい」
「手動でやるなら、ある程度適当でいい。自動化のために気を遣うシステムにするのは面倒」
この2つの発想の本当の根本的な原因は性格とか忙しさとか、そういうことじゃなくて、
単純に「技術力不足」ということだと思います。

なので、そろそろこの姿勢は正さないといけません。
隣に座る鉄人N氏の力強い実装力に学ぶことは多いです。

ということで、手始めに数値取得のあたりで気になっていたものがあったので、
さっそく自動化しましたが、結果的にこれはよい練習になりました。
なのでここで報告します。

シェルスクリプトのバッチや、
プロセスループならまぁまだ馴染みがありますが、
重要なのは「馴染みのない言語や開発環境でもしっかり自動化まで見越したプログラム」を書いてみる。
ということでしたので、
おあつらえ向きな開発環境、
Google Apps Scriptをいじってみました。

GoogleAnalyticsやAWSのようなごついサービスは必ずと言っていいほどAPIが開放されており、
どこからでもつつける設計になっていますが、
もちろんすべてのサービスがそういうわけではないのです。
例えばADEBisなどは定期レポートシステムこそ存在していますが、CSVファイルを添付して毎日メールしてくるだけです。
これをどうやって自動化システムに組み込むのか、中々悩ましいものでした。

ですが、Gmailに情報がバトンタッチされた時点で世界は開かれるわけです。
IFTTTとかを利用するという発想もありますが、
もっと原理的にこの「Gmailから世界へ!」感を感じてみようと思います。

ということで、
Gmailで受信した特定のメッセージに添付されたファイルを、
S3にアップロードする、
というGoogle Scriptを実装してみました。

まずはGoogle ScriptでS3にファイルを送信できるのか。
http://engetc.com/projects/amazon-s3-api-binding-for-google-apps-script/
ここにありました。
では続いて、Gmailを特定の条件で検索して、その添付ファイルをオブジェクトとして取得できるか?
多少仕様は違いますが、
http://noriaki.hatenablog.com/entry/gmail-attachments-in-google-drive-based-on-google-apps-script
ここにあります。

これで出揃いましたので、即コーディングしてみましょう。

結果、こんな感じに。
流れ的にはこんな感じ。

6時間に1回下記の処理をGmailに対して行う。

  1. gmailを特定のキーワードで検索
  2. 検索結果の全てのメッセージにおいて添付されているファイルを取得
  3. 取得したファイルを特定のS3にアップロード

こうしておけばあとは完全に自由に自分のAWS領域から料理できます。
Gmailは世界への扉でした。   あぁ疲れたから今日はここまで。