y.takky てくめも

web技術について勉強会の参加メモだったり、本を読んだメモだったりを載せる予定

PSVRでデレステ (Andorid版の方)をする

※想定外の使用方法のため保証が受けられなくなったりしても責任は負いません。

 

発売初日でPSVRにパソコンを繋げたバカが私 | 家電のいろは

 

この記事を見て、HDMIを接続先を変えればシネマティックモードで映るなら

Andorid -> HDMIで出力できればPSVR出力先に出来るじゃん。

と思ったので、実際にやってみました。

 

MHL対応のAndoridスマホであれば専用のケーブルがあればMicroUSB端子->HDMIに出力を出せる。

 

ちょうど手元に

 

 

 

 があったのでつないでみた。

なお、スマホ

 

butterfly HTV31

butterfly HTV31

 

 

接続は

AndoridスマホのMicroUSB端子 -> MHLケーブル -> PSVRのプロセッサーユニットのPS4側入力

 

に入れる。

 

これだけでAndoridの画像がシネマティックモードでPSVRに表示される。

あとはやることといったら、デレステ立ち上げてMVモードで見るだけ。

 

ふみふみふみふみふみふみ

 

 

最高!

 

ただビューイングレボリューションとは方向性が違い

あくまでデレステの3Dキャラを PSVR画面上で大きく表示させてるだけなので注意。

ビューイングレボリューションもいい。

曲追加はよ。

 

 

 

 

devfest tokyo 2016に行ってきた。

gdg-tokyo.connpass.com

に行ってきたのでメモを。 GCP/機械学習関連について聞いてきた。

セッションタイムスケジュール DevFest Tokyo

アジェンダ詳細 DevFest Tokyo 2016 プログラム詳細

スライドは qiita.com とかにまとまっている。

GCE周りの変更点

Compute Engine

  • subnetがregion単位で切れるようになった
  • APIが変わってる
  • Developer ConsoleにSerial portでつなげるようになった
  • コスト削減とかのためにおすすめができるようになった (再起動する)
  • 起動中のインスタンスマシンサイズが変更できるようになった
  • scope(GCP関連の権限付与) の変更もできるようになった。
  • yumリポジトリとかがgoogle提供のものもできた

GCS

  • https load balancing with google cloud storage
  • 自前のドメインでやるときはSSLできなかったけど、LoadBalanceの後ろにGCSを指定できるようになった

StackDriver

  • 画面が変わった。統合監視ツールっぽい感じに
  • stack driver -agent がV3へ。APIの叩く量が増えた(3倍ぐらい)
  • stack driver logging google-fluentdがで取集
  • Error Reporting ->fluend で叩きつける感じ

CloudSQL 2nd Generaltion

  • 接続速度が向上
  • Endpoint IP か Clous SQL Proxyを使う。
  • Failover Replica と Read Replica

Failoverの仕様 - Failoverの後Failbackする。 そのあとSwitch overしない。 - Masterの障害後 Failover ReplicaとRead Replicaのみになる。 - Masterを復帰後 MasterのBackupを取得 - そのBackupからFailover Replica / Read ReplicaのRestoreで再起動 - Master復帰までProxy経由でもクエリ投げらんない。 (そもそも落ちない大丈夫)

Hasicorp Terraform

  • Terafformがおすすめ。
  • インスタンスの連番とかzoneの自動振り分けとか
  • Cloud DNSとかの設定もできる。

Q&A

CloudSQL グローバルIPからしか繋げないのキツイよね ってのが世界中からきてるから そのうち直りそう

GCPのネットワーク構成について

  • 一から学べるGoogle Cloud Networking リファレンスガイド っていうのがかなり参考になる。

default

defaultにはfirewall rulesとかREGIONごとにsubnetが切られている SRC_RANGESが0.0.0.0/0 でtcp:22なので sshでどこからでもつなげる。

subnetはregion単位 firewall ruleを指定しないとsshとかできない

GCE上は同一DNSサーバを見てるので、 名前解決ができる。

custom subnet network

subnetを自分で作った場合、firewall ruleを定めないと内外部どちらも接続できない。 gcloud コマンドから作ると警告と、firewallのルール例が出る。

GCPの外の世界を意識した場合subnetが有用かもしれない。

BigQueryとCompute Engineで扱う自然言語ビッグデータ

雑談対話システムの作成

App Engineで受ける。ユーザからの発言に対してどのアルゴリズムを使うかとログをStackDriverに投げてBQに入れたりするのに使う Compute Engine -> Chainer Memcache or Data store Compute Engine Tensor Flow Data store 発話Data

アルゴリズム

直近の話題から TensorFlowであらかじめ用意しておいた発話候補に得点つけて返答

発話データ

Datasotreに key(話題となるキーワード) と candidates(発話候補) で入れ込んでおく。 ここの準備が大変

発話元データ

TwitterのデータをBQに入れておく。 keyword と tweetの形で。 これをいい感じに加工してDataStoreに入れ込むのにCompute Engine使ってるけど結構大変。

 前処理

BQでできるものはBQでやる。 NGワードとかメンションとか長すぎるものとか。 Not Contains ~ みたいなクエリを自動生成して叩いた。 100GBくらいまで減らせたので、あとはGCEでやる。

バッチ処理を実行するためのアーキテクチャ

BQから必要なデータを分割してファイル出力。 Preemptible VM 500台で1番で終わらせた。 ファイル処理が終わったかはApp Engineのpull queueで管理

構成

ユーザ -> Appengine -> Pull Queue (Request) ↓  ↑ Lease Instance Group -> Datastore

BQ -> GCS ↑ DL

Compute Engineを立ち上げた時のstart up scriptで pull queueから引っ張ってきたりとか DatastoreにPutしたりとかしてる。

スケールするアーキテクチャ

なぜ前段にApp Engineをかませているのか? スケーラビリティとアベイラビリティの向上 -> Compute Engineが忙しくてもApp Engineでタスクを貯めておくことができる。

発話ロジックの選択を行うことができる -> ロジックがかけるLB

Cacheの作成

スケーラビリティするには。

非同期・並列にする。

App EngineではQueueに入れたあとすぐに Responseを返す。

Pull Queueに入れ込んで、 Queueの中のTask数に応じてスケールする。

Firebase

発話をレスポンスするところができない。 LineとかはLine側のサーバに返せばいいけど、今回はレスポンスを直接プログラムに返す必要がある。

FireBaseを使う。 発話結果をFirebase Realtime DBに突っ込む。 App Engineはkeyだけを返す。 クライアントはkeyの場所をWatchしておいて、そこのメッセージを見る。

学習部分の課題

Tensorflowの学習部分 特に工夫していない。GCEインスタンスを手で立ち上げていた。 ちゃんと考えれば安価に効率よくできそう。

機械学習で並列化できそうなとこ

ハイパーパラメータの設定を並列化する。 途中経過を定期的に保存しておいて他インスタンスでやる Preemptible VMなので気軽に良いスペックを選べる

学習用アーキテクチャ

App EngineでPull Queueに突っ込むのと同時にインスタンスの数を制御して、 Instance 起動時に startup scriptに仕込む

Cloud Machine Learningがよさそう。

ハイパーパラメータの調整機能 ここの学習の並列化 学習済みモデルのデプロイ

Q&A

Chainer と Tensorflowの違いは? アルゴリズムが違うけど単純に組んだ人が違う。

エンジニアとして知っておくと幸せになれる(かもしれない)機械学習とTensorFlowのこと

スライド: https://goo.gl/o8gBB1

TensorFlow User Groupが立ち上がった。

https://goog.gl/NzrHei ↑ User Group

機械学習の勉強方法わからんすよ。

Step別イメージ

step1:ブラックボックスとして使う 機械学習アルゴリズムを使って

step2: 用途別に呼び出す手法を判断できる scikit-learn alogorithm cheat-sheet どれをやればいいかわかるチートシート

step3: 得られた結果の判断とパラメータチューニング

http://playground.tensorflow.org がいい感じ。

多くの人がstep2 -> step3で脱落している。

数学から逃げずに比較的硬派な本を読むべき

機械学習理論入門、実践機械学習システム, Python 機械学習プログラミング

— 深層学習との関連は? 機械学習アルゴリズムが取扱えるデータフォーマットへの変換が大きく影響を与える 深層学習では ロウデータを与えまくると向上する。けどパラメータチューニングするところが多くなって分からなくなる。

ImageNetという画像分類のベンチマーク Inception-V3

TensorFlow

2015/11に公開されたOSS音声認識やスパムフィルタで使われてるらしい。

TensorFlowは深層学習に特化したツールである。というのは勘違いであって、 データフローグラフを利用した数値計算のためのOSSソフトウェアライブラリ

ざっくり言うと 入力から出力までグラフを記述して最後に実行する。 分散処理の実行系。

Tensorflowのパラダイム

  • テンソルの演算グラフを作る
  • 実行単位をセッションとしてまとめる
  • 定数、変数をプレースホルダーとして宣言できて、グラフはCPU/GPUテンカイスル。
  • 分散処理も可能

Pythonをインターフェースとしているフレームワーク機械学習に関しては便利なヘルパーがある。

演算がグラフのノードとなる。 逆ポーランド記法みたいな

プレースホルダー : 学習データが変わって入るよ。という考え方。

セッション: 名前空間みたいなもの。別の環境で同じ関数を実行しているイメージ

多次元の話に拡張 -> テンソルを拡大

ランク 0 -> スカラ 1 -> ベクトル 2 -> 行列 n -> n次元配列

入力を多次元にすると、多次元にできる。

深層学習

入力に対して途中の演算があってアルゴリズムからの出力がある。 アルゴリズムを構成する演算それぞれに、理想的な出力値を返してあげる。 と、フィードバックがたまって人工知能っぽくなる。

データセットはよく使われるアイリスデータセットを使ってる。

tf.contrib.learn

scikit-learnを関数呼び出しの関学でTensorFlowで使えるようなもの。 深層学習以外のアルゴリズムも提供されている。

Keras

tensorflowをBackendとしたもの。

生のTensorFlowrを書くのは辛いのでtf.contrib.learnとかKerasになるかも

Cloud ML

TensorFlownによる学習をクラウド上で実行できる。 ローカルPCでやるのは辛い(スペック的に)

小規模でもGKE

http://www.slideshare.net/lestrrat/

カンファレンスのページの運用は割と技術力が必要 builderscon https://builderscon.io/

kubernetes visualizer

https://github.com/brendandburns/gcp-live-k8s-visualizer

https://github.com/builderscon

ミニマム構成をしている。

小規模構成でも得られるメリット(1)

1 .ノウハウの文章化

  1. Podが最高 Podは複数のコンテナ. pod単位で複製してデプロイできる。

  2. Node Pod内のコンテナは必ず同じNodeに配置される

4.Deploymentsが最高すぎる Deploymentがシステム構成のテンプレート Replica set 実際にデプロイされている構成 Replica set は世代ごとに管理されている

5.kubectl rollout undo とかでrollback できる。

6.kube-lego

Ket’s Encrypt対応 勝手に証明書の確認更新とかがしてくれる。

7.GCPのログが勝手に使える。

イマドキのGAE

google slideでいい感じにしてくれる機能があったりする。

最新の更新情報

App Engine のRelease Notesみればいい。 最新機能追加もなかったように安定したから更新がなくなってきた印象。 SDKは更新なし。repositoryは更新ある(go) 周辺のサービス(Firebase StackDriverなど)

Google app engine Flexible Environment (FE)

旧Managed VM / 自由なライブラリ,ランタイム、環境が利用可能 Dockerコンテナを走らせることができる。

Compute Engineよりは手軽に使えるものだと考えれば結構使えるかも

StackDriver

StackDriver Trace appstatsのサービス版

StackDriver Debugger ブレークポイントを直接置いてデバックできる。

LogVIewer ソースコード連携しとくとそこ見れる。

logger

Pub/Subに投げてCloud Functionsで処理を追加したりできる。

Cloud Endpoint v2

アプリケーション前にプロキシを置くことでAPIの監視、認証周りを実施

GAEは衰退した?

盛り上がりはないけど安定した。 普及気になった?

GCP全体で追うといいかも。

まとめ

いいイベントでした。自分が参加したセッションは席数も割と余裕あったし、キャパ的には余裕そうでした。 Wifiは飛んでなかったけどまあ大学借りてやってるししょうがないよね。

Fitbit Charge HRが故障したからサポートに連絡して交換してもらった。

6月にかったfitbitがラバーバンドが取れかけてきて、ラバーバンドの下のプラスチック部分にも亀裂が入ってきた。

このまま使い続けると防水的な意味で不味そうなのでサポートに連絡してみた。

サポートに連絡

Fitbit Help

のサポートに連絡からEメールサポート -> 製品を選択でCHARGE HR

-> プラットフォームを不明/その他 -> 問題を選択を破損

を選択。

今回は以下の記事は役立ちますか?に当てはまらないのでEメールサポートをクリック

で、必要な情報を記入して写真も一緒に送った。

その後

メールアドレスに代替品を送るので保証書か領収書と本当にあなたのものが壊れているか証明するため 指定した番号を書いた紙と一緒に写真を送ってくれ。と言われたので、代替品送付先住所と一緒に送った。

そうすると1日ぐらいで確認出来たので代替品を送ります。1週間ぐらいで届きます。と連絡が来た。 (国内代理店で買わないとだめ。とはいえ、そうそう国内代理店以外ではうってないので問題ないと思う) Fitbit 製品の小売業者一覧

代替品送付

クロネコヤマトでそのメールが送られてきた3日後ぐらいにきました。 受け取れなかったので土曜日指定に変更して受取。

サポートの良さ。

平日に送ったので大体レスポンスまで1日で返してくれました。 かなりサポートの対応は良かったです。

参考

Fitbit Charge HRのラバーバンドがおかしな事に。サポートが神対応だった!

この記事を見ていけるかなーと思い問い合わせてみました。 破損の状況によりますが、買い換える前に念のため問い合わせてみるといいでしょう。

入社後3.5年たって

入社後3.5年

いつの間にか入社して3.5年も経っていたので、いろいろまとめてみようと思う。

意味のない仕事はない

実案件やっている時にこの仕事意味あるのかな。俺がやる必要あるのかなと思うこともあったけど、 思い返してみればすべては力になっている。

この前の勉強会でもあったけど、引き出しという点でいろいろできたのは良かったかなと思う。 趣味開発は楽しさに逃げて辛いことはやらないけど、実は辛いところこそ身につくところだと思う。

できない。に逃げない

できない。というのは言い訳でしかないし、それで怒られたこともあった。

できないというのはそこで思考停止に陥っていることになるし。 konifar.hatenablog.com

konifar.hatenablog.com

できないって言っていいのは - 法律に違反しそうな場合 法律に違反するのはダメだし、もうその場合は潔く会社やめるか告発するか

  • 使っているサービス(クラウドとか)の制約上できない場合 方針としてあるクラウドサービスを使うことになっていて、それで機能がない場合

  • やらないほうがいい場合 上の記事にある通り。やってやれないことはないけど、費用がかかりすぎちゃってできない場合とか。

プログラミングのみできるエンジニアにならない

すごくプログラムが書けて保守性も高く他のエンジニアに比べて2-3倍書けますよ。って人は別で、普通の人はそのレベルに達することはなかなかできない。 プログラムを書く能力はそれはそれで必要だけど、設計能力とその設計を実装単位でタスクに分類できることだったり、ミドルウェア周りやインフラ周りが強かったりと、プログラミング + αの能力が必要だと感じている。

よくエンジニアマネージャになりたくない問題があると思うけど、ちゃんと技術に精通していてマネジメントできる人材はすごく貴重だと思う。

英語

日本語ドキュメントだけだとどうしても限界があるし、クラウドサービスやOSSも英語のドキュメント見たほうが早いし、 問い合わせとかも英語だし英語を読む・書く能力は最低限必要であることは感じている。

google翻訳とか使うのは別に問題なくてそれで翻訳した内容に違和感あって直せるレベルは必要。 話す能力は英語が必要なところで働いていないからなんとも言えないや。できればいいし、かっこいいけど

情報の発信と整理

インプットはもとより、細かいことでもアウトプットは必要。 あとアウトプットも整理されたものだといい。

今後必要なこと

  • 業務以外でプログラミングしたりする時間を増やしたい。どんな細かくてしょぼいものでもいい。
  • 他の言語。特にスクリプト系じゃなくてコンパイル系の言語

【なつやすみのしゅくだい】go言語でfitbitAPIを叩いて睡眠情報を取得する。

【なつやすみのしゅくだい】

前々からgo言語触りたかったってことと、FitbitAPIを叩いて情報を取得したかったので、夏季休暇期間の暇な時間にgo言語でfitbitAPIを叩いて睡眠情報を取得してみた。

ソースはこちら

github.com

作業のお供

zenpad7で dアニメストアでアニメ見ながら作業するのが捗った。
タブレットスタンドがかなり役立った。 CLANNAD Afterの後半とハナヤマタ前半見終わった。

anime.dmkt-sp.jp

fitbitAPIを使うために諸々登録する

dev.fitbit.com

dev.fitbit.comにユーザ登録をした後アプリケーションの登録を行う。
f:id:ytacky:20160818201858p:plain

画像の通りに必要なところを埋めていく。
Applicatinon NameやDescription, Application Website, Organization, Organization Websiteまでは適当でOK
自分で使うだけだし。
OAuth 2.0 Application Type はClientを選択した。
Using Implicit Grant Flowを使うためにはClientを選択する必要がある。

Using OAuth 2.0 — Fitbit Web API Docs

Callback URLは重要で、ここで登録したアドレス以外がcallbackのURLとして指定されても使うことができない。
今回はgoのビルドインサーバを使うのでlocalhost:8080とした。
Default Access Typeは読み取りだけでいいのでReadとした。

これでSaveすると、OAuth 2.0 Client ID / Client Secretが発行される。
また、 OAuth 2.0: Authorization URI と OAuth 2.0: Access/Refresh Token Request URIも取得できる。 (このURLは共通なので発行される。というより表示される。という書き方が正しいかもしれない)

どんな感じに叩くか確かめたい

Fitbit API Debug Tool

Debug toolが用意されている。
これに自分のClient IDやsecretを入力し指示に従って行くと、一通り認証から必要な情報の取得までできる。
プログラムを組み終わった後この機能に気づいた...

認証ページのURLを生成する

generateOauthURL.goとして作成した。

今回はAuthorization Code Flowで認証するための認証ページのURLを作成した。 examplsにあるように、

https://www.fitbit.com/oauth2/authorize?response_type=code&client_id={client_id}&redirect_uri={redirect_uri}&scope={scopes}

となる。 client_id/redirect_urlは上で生成したものになる。

scopeは

Using OAuth 2.0 — Fitbit Web API Docs

から見たい情報のscopeを選択する。今回は睡眠情報なのでsleepを指定。複数の場合空白で繋げて%エンコードする必要がある。 (%20で複数scopeをつなぐ)

コード上では、HttpParam構造体とAuthUrl構造体を作り、必要な情報はこれを使うようにしている。
また、環境変数は.envとしてアプリケーションのルートディレクトリに作成して、それをgithub.com/joho/godotenvライブラリを使用して読み込んで使用している。

アクセストークンの取得

上記で生成したURLにアクセスすると認証画面が表示され、認証するとredirect_urlに設定したページに飛ばされる。
このリダイレクト先をfitbit.goとして作成している。
今回は簡単に使いたかったのでgoのbuild inサーバを使用している。

リダイレクトされるとクエリパラメータに?code=とaccess token取得用のcodeが付与される。
まずはこのcodeを使用してaccess tokenを取得する。

https://dev.fitbit.com/docs/oauth2/#accessT

endpointのURLはhttps://api.fitbit.com/oauth2/token これに対してPOSTを行う。必要なBody部分としては、
リダイレクトのときについてきたcodeとgrant_type=authorization_code,client_id,redirect_uriが必要。 また、Headerには {client_id}:{client_secret}をBase64 Encodingしたものが必要となる。:をつけた状態の文字列をBase64 Encoding忘れるのがありがちなミスなので注意したいところ。

これでPOSTするとjson形式でaccess_tokenやscope,user_idが返却される。
この値をdecodeしたいので、FitbitJsonという構造体を作り、json.Unmarshalでdecodeした。

これで睡眠情報を取得するためのユーザIDとaccess_tokenが取得できた。

睡眠情報を取得する。

Sleep Logs — Fitbit Web API Docs

睡眠情報に関してAPIは多種あるが、今回は単純に睡眠時のログを取得するAPIを叩く。
APIのエンドポイントは、https://api.fitbit.com/1/user/[user-id]/sleep/date/[date].json となる。user-idはアクセストークンの取得で取得できたものを使用する。
dateはyyyy-MM-dd形式で指定する。
このAPIを叩くときには認証が必要なのでHeaderに Authorization: Bearer [access_token]
を与えてあげる必要がある。
これで睡眠情報が取得できる。

睡眠情報の形式

以下のようにjson形式で返却される。 (ここでは見やすいようにjson_decodeしたものを記載している)
起きた回数や睡眠効率。何時に寝てその時間帯はどんなステータス(寝返りを打っていたのか、目覚めていたのか)
何時間寝ていたのか。など取得できる。

{
    "sleep": [
        {
            "awakeCount": 0, 
            "awakeDuration": 0, 
            "awakeningsCount": 13, 
            "dateOfSleep": "2016-08-xx", 
            "duration": 25260000, 
            "efficiency": 94, 
            "isMainSleep": true, 
            "logId": 12226936629, 
            "minuteData": [
                {
                    "dateTime": "00:49:30", 
                    "value": "1"
                }, 
                {
                    "dateTime": "00:50:30", 
                    "value": "1"
                }, 
               ~~~~~
                {
                    "dateTime": "07:49:30", 
                    "value": "1"
                }
            ], 
            "minutesAfterWakeup": 0, 
            "minutesAsleep": 396, 
            "minutesAwake": 25, 
            "minutesToFallAsleep": 0, 
            "restlessCount": 13, 
            "restlessDuration": 25, 
            "startTime": "2016-08-xxT00:49:30.000", 
            "timeInBed": 421
        }
    ], 
    "summary": {
        "totalMinutesAsleep": 396, 
        "totalSleepRecords": 1, 
        "totalTimeInBed": 421
    }
}

今後

REFRESH TOKENをつかって認証したり、何か別なシステムと連携して捗るようにしたい。

AWS lambdaとAPI GatewayでLine Botを使う

今年のAWS summitではAWS lambdaを使ってマイクロサービスを実現する。という発表が多かった。

 

そういうこともあり、lambdaをちょっと触ってみた。

lambdaを使う時のネタとして、Linebotがちょうどよかったので、Linebotを使ってみた。

 

あとは、ちょうど身内でミニ四駆をやるときに作るミニ四駆のシャーシおみくじを作ってくれとのことで、

AWS lambda + API Gateway + Line Botでシャーシおみくじを作った。

この記事ではLine Botの使い方 というよりは、

AWSアーキテクチャの使い方周りの紹介をする。

 

# Line developersに登録

Line botを作成するためにはLine developersに登録が必要なので登録しておく。

登録して、Channel ID等をメモっておく。

 

# Lambdaの準備

AWSのコンソールにはいってLambda Management Consoleを開く

f:id:ytacky:20160625175648p:plain

Create a Lambda functionからSelect Blue Printの画面に行く。

他になにか作るときはここから雛形を使えるっぽい。

今回は空で作りたいのでSkipを選択

 

Step2:Configure functionで各種設定をする。

とりあえず、 NameとRuntimeを適当に設定する。

RoleはAWSconfig roleあたりで作っておく。

 

そしてNextをクリック

CodeにCodeを作っておく。

今回はgithubにあげといた。

github.com

# API endpointを当てる

Add API endpointからAPI Gatewayを選択してAPI endpointを作る。

f:id:ytacky:20160625181545p:plain

 

ここで注意したいのは、LineBotでは MethodがPOSTでくるので、

API GatewayでもMethodをPostにしておく。

 

API Endpointを作成したらLineDevelopersのCallback URLにそのURLを登録しておく。

注意点としては、LineBotでは443ポートを作るようなので443を指定しておくこと。

 

https://{awsapi.execute-api}.us-west-2.amazonaws.com:443 こんなかんじで

 

# テスト
API EndpointがVeryifyしたら、LinedevelopersにあるQRコードを読むと友達にbotを追加できるので追加する。

上のコードのサンプルでは、

1行目におみくじとして引くシャーシを,区切りで。

2行目にユーザを,区切りで入力する。

 

すると、ユーザに対してそのユーザが使うシャーシが選択される。

 

テストの際は、CloudWatchのログを見るといい。

今回はLineからの送信データをダンプしてるので、誰がどんなテキストで送ってきたかがわかる。

 

IFTTT+SlackでECで買ったものをごちうさのシャロに通知してもらう

Amazonやヨドバシ.comなどを使ってよく買い物をするがわざわざGmailを開かなくても、Slackに通知がされれば便利だなと思いIFTTTで構築したメモ。

なお、EC=お買い物=シャロという勝手なイメージからシャロが通知してくれるようにしている。

前提条件

GmailとSlackとIFTTTに登録済み。

Gmailの設定

ECに登録しているメールアドレスを一つのGmailに集約しておく。 その後ECというラベルを作りフィルタをかけておく。

フィルタは設定->フィルタとブロック中のアドレスの新しいフィルタを作成から

使うのがAmazonとヨドバシとビックカメラとimaginewebぐらいなので以下のような条件でフィルタ。 使うECが多ければよしなにここでフィルタをかけるといい。 ここで作ったフィルタに引っかかったものがSlackに送られるので通知が多いなと思ったらフィルタ条件も変えておくと吉。

f:id:ytacky:20160618172712p:plain

IFTTT設定

すでにあるレシピから作ってもいいけど、今回は一から作成してみる。 Create Recipeから

f:id:ytacky:20160618173118p:plain

thisをgmailで検索してgmailを指定 Connect the Gmail ChannelでGmailにつなげる必要があるのでConnect f:id:ytacky:20160618173538p:plain

Triggerに New email in inbox labeledを指定 f:id:ytacky:20160618173216p:plain

Labelをさっき作ったLabelを指定。今回はEC でCreate Trigger f:id:ytacky:20160618173252p:plain

thatの方はslackを指定 slackもconnectしておく

f:id:ytacky:20160618173642p:plain

ActionはPost to Channelしかないのでそれを指定 f:id:ytacky:20160618173340p:plain

次にActionを指定する

Which channel? は投稿したいchannelを選択

Messageは表示したいmessageを選択する。

Gmailから受け取ったものも表示できる。 例えば{{BodyPlain}}でメール本文が表示できるし、 {{Subject}}でメールタイトルが表示できる。 また、好きなメッセージも入れるのでここをシャロっぽくするととてもいい。

同じようにTitleやTitle URLを選択しておく

最後にThumbnail URLを指定する。 ここは画像が表示されるのでシャロのアイコンとかにしておくといい。 私は公式で配布していたtwitter用のアイコン

www.gochiusa.com

をS3において指定している。

そうすれば出来上がり。 あとはECからのメールが来るのを待つ。

完成イメージ

f:id:ytacky:20160618174658p:plain

こんな感じにシャロが注文したものを通知してくれる。

まとめ

いまは各サービスの繋ぎこみを自動でやってくれるのが多くなった。 自分でプログラムを組むのもいいけど目的を達成する。というのだけならば こういうサービス使ってしまうのも楽でいい。

そして私はリゼ派だ。