通知機能って何を作ればいいの?

こんにちは、id:nanto_vi です。この記事ははてなエンジニア Advent Calendar 2017 の 10 日目の分です。前日は id:ikesyo さんによる「SwiftのSDK overlayとswift-corelibs-foundation」でした。
スマホアプリはもちろん、Web でも利用の広まっている通知機能。うまく使えばユーザーに多大なモチベーションを与えることができます。ここでは、あるサービスで通知機能を作るにあたって、議論のたたき台としてまとめた内容を紹介します。まとめた目的は、

  • 何を実装し、何を実装しないのかはっきりさせる
  • チーム内で用語を統一する

ことにありました。

通知機能の基盤

通知機能は、大きく二つに分けられます。

  1. 通知タイムライン
    • 「自分の記事にコメントがついた」「フォローしているユーザーが新しく記事を書いた」といった出来事 (通知項目) を、時系列で並べたもの。
  2. プッシュ通知
    • あるユーザーの通知タイムラインに通知項目が追加された時点で、そのユーザーが使っている端末 (スマホなど) にメッセージを表示させる。

通知機能の詳細

通知タイムラインとプッシュ通知は、以下のような挙動を示すことがあります。

  • 同種同一対象の通知項目のまとめ
    • 「A さんがあなたの記事 X にコメントしました」「B さんがあなたの記事 X にコメントしました」というふたつの通知項目を、「A さんと B さんがあなたの記事 X にコメントしました」というひとつの通知項目にまとめる。
    • Twitter、Facebook の通知タイムラインで実現済み。
  • 通知項目の未読・既読の管理
    • Twitter では通知タイムラインを閲覧することで、その時点の全通知購読が既読となる。
    • Facebook では通知タイムラインを閲覧するだけでは既読とならず、通知項目ごとにそれぞれ既読管理される。
  • 未読件数のバッジ表示
    • 通知タイムラインでの未読件数を、スマホアプリでバッジ表示する。
    • Twitter、Facebook とも「プッシュ通知はされないが通知タイムラインには追加され、未読件数に含まれる」ような通知項目が存在する。
  • 通知項目の件数の上限
    • 一定期間を過ぎた、もしくは一定件数を超えた通知項目は削除されることがある。
  • 通知タイムラインでの通知項目のフィルタリング
    • Twitter では「すべての通知項目」と「自分に言及している通知項目」を切り替えて表示できる。
  • プッシュ通知内容の変更
    • 同種同一対象の通知項目をまとめたときに、それに対応するプッシュ通知のメッセージも書きかわるかどうか。
  • プッシュ通知の削除
    • いったんはコメントがついたが後に削除されたといった場合に、それに対応するプッシュ通知が削除されるかどうか。
  • 端末間でのプッシュ通知の同期
    • Slack では自分へのメンションがプッシュ通知されるが、ある端末でそのメンションを確認すると、別の端末ではそのメンションに対するプッシュ通知が削除される。
  • プッシュ通知する種別の設定
    • Twitter、Facebook では「ダイレクトメッセージ」「友達申請」「写真へのタグ付け」など通知項目の種別ごとに、それらの通知項目をプッシュ通知するかどうか設定できる。
    • プッシュ通知しない通知項目でも、通知タイムラインには追加されることがある。

結び

ここでは通知機能を実装するという観点からまとめましたが、通知機能を運用していくうえで重要なのは何をどのような条件で通知するかです。過ぎたるは猶及ばざるが如し。うっとうしいと思われてユーザー側で通知機能を無効化されては元も子もありません。ユーザーから見て「なぜその通知が自分のもとに来たのか」がわかりやすく、またその内容が喜ばしいものであるよう、工夫を重ねていきたい所存です。