Gunosyデータ分析ブログ

Gunosyで働くデータエンジニアが知見を共有するブログです。

プロダクトの変更ログを記録することと、Slack+Zapier+Google Calendarを利用した記録の自動化について

グノシー開発部の@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カレンダーで出来事管理

グノシーでは、上記のような調査を迅速に行うために、メンバー間で共有可能なカレンダーを作り、日々起こったことを登録していっています。

f:id:cou_z:20171203150133p:plain

これで過去の出来事を振り返ることが楽になりました。

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処理を書くことが出来る機能が便利でした。

処理の流れは、

  1. (今まで通り)Slackに「デプロイやABテスト等のプロダクトへの変更」を共有する。
  2. ZapierがSlackの投稿から「デプロイやABテスト等のプロダクトへの変更」のみをFilterし、Google Calendarに登録する。
  3. Google Calendarに登録されたイベントのURLを 1 の投稿に返信するかたちでSlackに投稿する。

のようになっています。

1. (今まで通り)Slackに「デプロイやABテスト等のプロダクトへの変更」を共有する。

ここは何も変更無く、今まで通り以下のようにSlackで「デプロイやABテスト等のプロダクトへの変更」を共有していました。

f:id:cou_z:20171203150145p:plain

2. ZapierがSlackの投稿から「デプロイやABテスト等のプロダクトへの変更」のみをFilterし、Google Calendarに登録する。

Zapierを利用した流れは以下のようになっています。

  1. 特定のSlackチャンネルへの投稿をトリガーにzapを起動する。(zapというのはこの一連の処理のことを言う。)
  2. 次のステップ3のFilterで使用する変数を投稿から抽出する。
  3. 投稿がGoogle Calendarに登録する条件を満たしているかFilterする。
  4. Google Calendarにイベントを登録する。
  5. Google Calendarに登録されたイベントをSlackに通知する。

f:id:cou_z:20171202202252p:plain

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_reporttrueの場合のみステップ4に繋げるようにします。

3. Google Calendarに登録されたイベントのURLを 1 の投稿に返信するかたちでSlackに投稿する。

以下のように自動で返信することによって、Google Calendarにイベントが登録されたことを教えてくれます。

f:id:cou_z:20171203150203p:plain

最後に

簡単にですが、グノシーで実施しているプロダクトカレンダーによるプロダクトの変更ログを記録することと、Slack + Zapier + Google Calendarを利用した記録の自動化について紹介しました。

KPIのグラフに、その日の出来事を重ねて表示出来るようになるといいなあ。