PROMARI JOURNAL

共有・保存・計測は、なぜ同じ責務にしないのか

作成: / 公開: / 内容更新:

執筆:tamito0201 / 掲載・運営:プロマリ

丸い共有ボタンの裏側を掘る連載の第1回。共有・保存・計測という3つの仕事を、変更の理由・変わる速さ・背負う約束で見分け、分けた理由と払った代償の両方を、図12点と実装コードでたどります。

PASS IT ON

ひとつの発見を、次の会話へ。

三つの仕事を、中身から見る

ここからは3つの責務を1つずつ開けて、中身を確かめます。同じクリックから始まるのに、通信の形は3つとも違います。共有は渡したら終わりの一方通行、保存は返事を待つ往復、計測は送る前に同意を確かめる手順です。うまくいかなかったときに起きることも、それぞれ別です。

共有——渡したら終わりの、一方通行

共有の仕事は、渡すところまでです。記事のURLと文言から共有画面のURLを組み立てて、新しいタブで開く。そこから先、読者が実際に投稿したかどうかは、こちらからは分かりません。

図3.1-1 共有は、渡したら終わりの一方通行
図3.1-1 共有は、渡したら終わりの一方通行。現在のしくみ。渡すところまでが共有の仕事です。投稿の完了は、こちらからは分かりません。図3.1-1 共有は、渡したら終わりの一方通行。現在のしくみ。渡すところまでが共有の仕事です。投稿の完了は、こちらからは分かりません。

実装の根拠:共有先・操作の判断(ShareActionPolicy)

「分からないなら、投稿完了まで追いかける作りにすればいいのに」と思われるかもしれません。ただ、それは各SNSの中の出来事で、こちらの管理の外です。管理の外を追いかける仕組みを足すほど、共有の責務はSNS各社の仕様に深く縛られていきます。この実装では、渡すまでを共有の仕事と割り切ることで、責務の輪郭を細く保っています。

共有先そのものは、次のようなTOMLのデータファイルで宣言されています。共有先1つにつき1ファイルです。責務の話として読むと「共有先の名前・行き先・渡す項目だけがあり、保存や計測の言葉が1つも出てこない」ことが見どころです。

TOMLdestinations/x.toml(アイコンの中身を省略)
# X(旧Twitter)のポスト画面。
key = 'x'
label = 'ポスト'
brand_color = '#000000'
action = 'open'
endpoint = 'https://twitter.com/intent/tweet'
icon = '<svg …>…</svg>'

[params]
url = 'url'
text = 'text'
hashtags = 'hashtagsCsv'
via = 'via'

保存——返事を待つ、往復

次は保存です。ハートを押したあとの流れを追ってみます。共有との違いは一目瞭然で、こちらは行って、返ってくる。押した事実をサーバーのAPIへ届け、記録された結果として新しい件数を受け取り、その数字で画面を描き直します。

図3.2-1 保存は、返事を待つ往復
図3.2-1 保存は、返事を待つ往復。現在のしくみ。画面の件数は、サーバーが返した結果から決まります。押した瞬間の想像ではありません。図3.2-1 保存は、返事を待つ往復。現在のしくみ。画面の件数は、サーバーが返した結果から決まります。押した瞬間の想像ではありません。

画面の件数が「押した瞬間の想像」ではなく「サーバーが返した結果」から決まる、というのがこの往復の要点です。想像で数字を増やしてしまうと、通信が失敗した夜に、画面と記録がずれたまま朝を迎えます。さらに保存には、同じ人の同じ記事へのいいねを二重に数えないという一意性の決まりも付いてきます。失敗にどう備え、二重をどう防ぐか——この深掘りは連載の保存の章のお楽しみに取っておきますね。

計測——数える前に、確かめる

3つ目の計測は、他の2つと決定的に違う手順を1つ持っています。数える前に、数えてよいかを確かめる。読者が解析への同意をしていなければ、操作は数えず、GA4への通信そのものを行いません。

同意があるときも、送るのは操作の種類だけです。どの記事のURLか、本文に何が書いてあるかは送りません。この抑制は技術の制約ではなく、同意管理という約束ごとの実装です。共有や保存が「動くかどうか」の世界にいるのに対して、計測は「やってよいかどうか」の世界を背負っています。責務として切り離しておかないと、この約束の見直しのたびに、共有と保存のコードまで棚卸しする羽目になります。

分けた部品は、イベントで連絡を取り合う

3つに分けたとなると、今度は連絡の方法が要ります。共有部品が計測のコードを直接呼べば話は早いのですが、それではせっかく切った境目を、呼び出しの線がまたいでしまう。この実装が選んだ連絡手段が、ページ1でも顔を出したイベントです。

図3.4-1 部品どうしは、イベントで連絡を取り合う
図3.4-1 部品どうしは、イベントで連絡を取り合う。現在のしくみ。共有部品は解析ツールの名前を知りません。知らせるのは出来事だけです。図3.4-1 部品どうしは、イベントで連絡を取り合う。現在のしくみ。共有部品は解析ツールの名前を知りません。知らせるのは出来事だけです。

実装の根拠:共有イベントの発行(CustomEventShareActivityPublisher)

共有部品は「共有した」と放送するだけで、解析ツールの名前を知りません。放送を聞いた計測のつなぎ役が、同意を確かめ、送ってよい形に言い換えてから解析へ渡します。知らない相手とは縁が切れている、というのが依存の話の要点で、解析ツールを入れ替える日が来ても、共有部品には差分が出ません。

COMMENTS
コメント…

このページ(3ページ目)の感想・質問・設計へのコメント

PASS IT ON

この気づきを、誰かにも。

この記事を書いた人

Takaomi Murasaki

Promari SNS Shareの開発を通して、Webの仕組みや設計の選び方を紹介しています。動く実装と、その判断に至るまでを記事に残しています。

公開記事 4 件

プロフィールを見る
THANK YOU FOR READING.すべての記事へ ↗

FROM INSIGHT TO IMPACT

「できたらいいな」を、
動く仕組みに。

記事で見つけたヒントを、あなたの事業へ。
新しいサービスも、手間のかかる業務も。
いまの課題から、つくるべきものを一緒に考えます。

開発・AI・研修の実績を見る

まだ、仕様書はいりません。

「何から始める?」から、ご一緒に。

課題がまとまっていなくても大丈夫。テーマを選ぶと相談文をご用意します。
連絡先の必須入力は、お名前とメールアドレスだけ。

まずは課題の整理から相談する

ご相談後の流れ

  1. 01 内容を確認
  2. 02 メールでご連絡
  3. 03 課題・進め方をご相談
送信だけで契約やお申込みが確定することはありません。