AWSでアジャイル開発を実現!インフラ運用からアジャイル開発を支えるで触れている、利用状況の計測について詳しく触れてみたいと思います。
アジャイルは「顧客にとってのアウトカム(成果)を最大化する」ことが目標です。そのためユーザーが実際にどの機能をどのような使い方をしているのか知ることはとても重要です。
ユーザーからの要望を受けて開発した機能もリリースして終わりではなく、ユーザーに使ってもらうことで初めて価値をうみます。あらかじめゴールを設定してリリース後に目標を達成しているか利用状況をはかることでユーザーのニーズを満たしているか判断しています。
目次
ページ遷移やクリック操作の計測
ページ遷移やクリックなどの計測にはGoogle Analyticsを使っています。
新しくリリースした機能のURLにどの程度のユーザーがアクセスしているのか計測することで、機能が認知・活用されているかどうか、ユーザーが興味を持って画面を開いてくれたかどうかを把握できます。
また計測をもとに機能やUIの改善につなげることができます。それほど使われていないだろうと思っていた機能が、計測してみると実は多くのユーザーに使われていることがわかり、動線の改善につながったケースもあります。
計測したデータをもとに機能やUIを変えることでコンバージョンの改善やユーザーからの問い合わせを減らすことにもつながります。
すべてのイベントを計測するのではなくポイントをしぼって計測することで、改善までのアクションにつなげやすくしています。
ログインとデータ更新の計測
どの数字が変わると事業の成長スピードに影響を与えるか、計測する対象を柔軟に変えて検証をしている段階のため、外部のツールは使わず自前で計測してデータベースへ保存しています。
ログインの計測と登録・編集・削除などデータの更新が発生したイベントを記録しています。
機能ごとの活用度や定着状況をはかる目的から、
- いつ
- 誰が
- どんな操作をしたか
という情報にしぼって記録しています。
全ての操作履歴をログ形式で残すこともできますが、データ量が爆発的に増えるのでまずは1日単位での計測にとどめています。いまは1日に同じ操作を1回した場合と10回した場合で違いが出ないため、将来的にはすべての操作履歴を記録する方向に切り替えていきたいと考えています。
計測結果を集計する
計測した結果は夜間バッチで以下のようにして集計しています。
Lambdaを使ってデータベースから集計をおこなう
アクセスの少ない夜間にバッチを走らせて利用状況の集計をしています。スプレッドシートに取り込む上での制約から、ユーザーごとのデータを会社単位でまとめるようにしています。
集計結果をS3にCSV出力する
集計した結果をCSVファイルにしてS3に出力します。
スプレッドシートにCSVファイルを取り込む
Google Apps Script(GAS)を使ってS3上のCSVファイルを取り込んでいます。さまざまな切り口で数字を見るためCSVファイルをそのまま取り込み、最終的な集計をスプレッドシートで行っています。
このデータをもとにサービス全体での各機能の活用度を見ています。
新しい機能を追加した際もここで利用状況を計測して、想定以上に使われているので追加開発をおこなう、思ったほど使われていないので改善するなどの判断をしています。
チャットサポートでのデータ活用
Aipoでは利用ユーザー向けのチャットサポートにチャネルトークを使っています。
Aipoのようにすでに顧客の情報がある場合には、契約プラン、ユーザーの権限などのユーザー属性をチャネルトークに渡すことで、チャットサポートをする際にユーザーに合わせた回答ができます。
各機能の利用状況もチャネルトークで確認できるようにすることで、同じ機能についての質問でも、初めてその機能を使う人なのか、すでに何度も使っている人なのかわかるため相手に合ったサポートがしやすくなります。
JavaのSDKを自作してチャネルトークに利用状況を連携
夜間バッチの中でユーザーごとの利用状況をチャネルトークに連携するようにしています。
チャネルトークにはAPIが用意されており、このAPIをたたくことでユーザー属性を更新できます。
チャネルトークにはAndroid, iOS, React NativeのSDKはありますが、JavaのSDKはなかったのでSDKを自作してデータを渡すようにしています。
チャネルトークではAPIからさまざまなデータを更新できますが、ユーザー属性を更新する機能に割り切ってSDKをつくりました。将来的には機能を拡張して公開したいところです。(SDKの全容を知りたい方はお気軽にお声がけください。)
SDKの中身は割愛して呼び出し方に関するコードを書いておきます。
ChannelIoUser user = new ChannelIoUser();
user.setMemberId("ユーザー識別子");
List<Option<?>> attrList = Lists.newArrayList();
attrList.add(Option.newStringOption("company", "会社名"));
attrList.add(Option.newBooleanOption("isAdmin", true));
attrList.add(Option.newIntegerOption("users", 30));
attrList.add(Option.newIntegerOption("loginDays", 237));
// attrListに追加することで属性を追加可能
for (Option<?> attr : attrList) {
user.addProfile(attr);
}
ChannelIoUser.updateUserAsync(user);
このようにして文字列、数字、日付、Booleanなどの属性を渡せるようにしました。
チャネルトークに利用状況を連携することで、新しい機能を使ってくれた人にたいして、機能は期待したものになっていたか、使い勝手は問題なかったかヒアリングがしやすくなります。
まとめ
利用状況を計測することで、ユーザーに合わせたサポートやヒアリングなどの定性的な行動につなげる、全体の数字をみて定量的な分析につなげる、2つの視点でのアクションにつなげています。
一緒に働く仲間を募集しています。
新卒採用・中途採用を問わず、年間を通して、さまざまな職種を募集しています。「すぐに仕事がしたい」「話を聞いてみたい」「オフィスを訪問してみたい」など、ご応募をお待ちしています。共に未来をカタチにする仲間を待っています。