グノシー開発部の@cou_zです。最近はPUNPEEのアルバムをよく聴いています。
日々、KPIを追っていると、意図せずにトレンドが変化することが良くあります。
なぜトレンドに変化があったのかを調査するためには、その時に何が起こっていたのかを知っている必要があります。「何が起こっていたのか」を全て覚えておくことは不可能なので、後で振り返られるようにログを残しておくと便利です。
GunosyではGoogleカレンダーで個人の予定を管理しているため、アプリの変更・出来事もGoogleカレンダーに「グノシープロダクトカレンダー」を作り、影響のありそうな出来事を登録しています。
かつては、手動でカレンダーに登録していましたが、定期的に発生するイベントの登録はSlack + Zapierを使って自動化しました。今日は、Googleカレンダーを用いてプロダクトのログを残すということと、Slack + Zapierを用いた自動化について紹介します。
よく起こること、KPIのトレンドの変化
Gunosyにおけるプロダクト改善は、KPIの可視化による現状把握から始まると考えています。 KPIの可視化やトレンド抽出については、以下のブログで紹介しました。 data.gunosy.io data.gunosy.io
上記のブログ記事のようにKPIを可視化していると、サービスがどういった状況にあるのか、を数値的に把握することが出来ます。 最近ではKPIの変化に素早く気付けるために、トレンド抽出や異常検知の自動化を進めています。 これらの取り組みは、KPIの変化に対する気付きを早めたり正確にすることは出来ますが、その変化の要因が何なのかまでは教えてくれません。
例えば、グノシーのKPIの変化に影響がありそうな出来事としては、以下のようなものがあります。
- デプロイ、新バージョンのリリース、ABテスト等のプロダクトの変更
- 大きな事件やニュース、速報プッシュ等の外的要因
- 障害、バグ
- 大規模プロモーション
KPIの変化が、プロダクトの変更により意図したものであれば良いですが、意図したものでない場合には、過去のログを遡ったり調査を行う必要があります。
Googleカレンダーで出来事管理
グノシーでは、上記のような調査を迅速に行うために、メンバー間で共有可能なカレンダーを作り、日々起こったことを登録していっています。
これで過去の出来事を振り返ることが楽になりました。
Slack + Zapier + Google Calendarを利用した自動化
かつては、上記のカレンダーの運用は手動で行っていました。 しかし、登録が面倒であったり、登録漏れがあったりしてしまうため、フォーマット化出来るものは自動化しました。
例えば、「デプロイやABテスト等のプロダクトへの変更」は元々Slackで共有することにしていたため、Slackへ投稿すると自動でGoogle Calendarに登録するようにしました。
Slackへの投稿をトリガーにGoogle Calendarにイベントを登録するのはZapierを利用しました。 Zapierというのは、複数のサービスを連携させた作業の自動化ができるサービスです。例えば、Zapierのトップページには、Gmailにメールが届いたら、添付ファイルをDropBoxに上げて、DropBoxに新しいファイルが出来たことをSlackに通知できると載っています。 会社でZapierを利用することに、Zapier for Teamsを会社で契約して使ってみた - Qiitaが詳しかったです。
Zapierは上記のような多段の連携や、PythonでFilter処理を書くことが出来ます。元々Slackで共有していたフォーマットは変更無しに、「デプロイやABテスト等のプロダクトへの変更」のみをGoogle Calendarに登録する際に、Pythonで柔軟にFilter処理を書くことが出来る機能が便利でした。
処理の流れは、
- (今まで通り)Slackに「デプロイやABテスト等のプロダクトへの変更」を共有する。
- ZapierがSlackの投稿から「デプロイやABテスト等のプロダクトへの変更」のみをFilterし、Google Calendarに登録する。
- Google Calendarに登録されたイベントのURLを 1 の投稿に返信するかたちでSlackに投稿する。
のようになっています。
1. (今まで通り)Slackに「デプロイやABテスト等のプロダクトへの変更」を共有する。
ここは何も変更無く、今まで通り以下のようにSlackで「デプロイやABテスト等のプロダクトへの変更」を共有していました。
2. ZapierがSlackの投稿から「デプロイやABテスト等のプロダクトへの変更」のみをFilterし、Google Calendarに登録する。
Zapierを利用した流れは以下のようになっています。
- 特定のSlackチャンネルへの投稿をトリガーにzapを起動する。(zapというのはこの一連の処理のことを言う。)
- 次のステップ3のFilterで使用する変数を投稿から抽出する。
- 投稿がGoogle Calendarに登録する条件を満たしているかFilterする。
- Google Calendarにイベントを登録する。
- Google Calendarに登録されたイベントをSlackに通知する。
1の出力では、 text
という値に
【日時】 xxxxx 【内容】 yyyyy 【影響】 zzzzz
のようにSlackへの投稿内容が入っています。
ステップ2では、ステップ3でこの投稿がGoogle Calendarに登録する条件を満たしているか判定するための変数をPythonコードで定義します。
Pythonは2.7のため、日本語を扱う場合はu'ほげほげ'
とする必要があるのが注意点です。
output = { 'is_deploy_report': input_data['text']がデプロイについての投稿かどうか判定してtrue or falseを入れる, 'summary': input_data['text']からタイトルぽいところを抽出する, 'description': 全文ぽく、input_data['text']とinput_data['permalink']を入れる, 'datetime': input_data['text']内のu'【日時】'の文字列をいれる, }
ステップ3では、is_deploy_report
がtrue
の場合のみステップ4に繋げるようにします。
3. Google Calendarに登録されたイベントのURLを 1 の投稿に返信するかたちでSlackに投稿する。
以下のように自動で返信することによって、Google Calendarにイベントが登録されたことを教えてくれます。
最後に
簡単にですが、グノシーで実施しているプロダクトカレンダーによるプロダクトの変更ログを記録することと、Slack + Zapier + Google Calendarを利用した記録の自動化について紹介しました。
KPIのグラフに、その日の出来事を重ねて表示出来るようになるといいなあ。