共有・保存・計測は、なぜ同じ責務にしないのか
作成: / 公開: / 内容更新:
執筆:tamito0201 / 掲載・運営:プロマリ
丸い共有ボタンの裏側を掘る連載の第1回。共有・保存・計測という3つの仕事を、変更の理由・変わる速さ・背負う約束で見分け、分けた理由と払った代償の両方を、図12点と実装コードでたどります。

こんにちは、プロマリの紫です。先日公開した丸い共有ボタンの記事では、表示・保存・計測・配信という裏側の全体を、地図のようにひとまわり紹介しました。今回からは、その地図の一区画ずつを掘り下げる連載です。第1回のテーマは、すべての土台になる問い——共有・保存・計測は、なぜ同じ責務にしないのか。え? ボタンを押したら共有されて、ついでに数も増えるだけでしょ、って。実はその「ついで」をどう分けるかが、この部品の設計で最初に決めたことでした。分けた理由と、分けたことで払った代償の両方を、順番に見ていきます。
点線の付いた用語は、その言葉を押すと詳しい説明が開きます。意味、身近なたとえ、この実装での使い方を順に読めます。キーボードではTabで用語へ移動し、EnterまたはSpaceで開き、Escapeで本文へ戻れます。各ページで最初に出る用語から参照できるようにしました。
この記事は連載「丸いボタンの裏側」の第1回(1.1)です。連載全体の地図は、本編5ページ目の連載の目次からどうぞ。実装の全体像を先に眺めたい方は本編の記事が入口です。
1つの共有欄に、3つの仕事が同居している
まずは現物からまいりましょう。記事の上に並んでいる丸いボタンの列。読者から見えるのは、XやLINEのアイコンと、ハートに添えられた小さな数字だけです。ところが裏側を開くと、この一列の中で性質の違う仕事が3つ、同時に動いています。
1つ目は共有。選んだSNSの共有画面へ、記事のURLを渡す仕事です。2つ目は保存。ハートが押されたことをサーバーへ記録して、新しい件数を画面へ返す仕事です。そして3つ目が計測。どのボタンがどれだけ使われたかを、解析への同意を確かめたうえで数える仕事です。
「全部ボタンの仕事でしょ」とまとめたくなりますよね。私も最初の設計メモでは1行にまとめて書いていました。ただ、実装を進めるほど、この3つは似ているのは見た目だけで、変わる理由がまったく別だと分かってきます。それがこの記事の主題です。
1回のクリックを、行き先で分けてみる
Xのボタンを1回押したとき、何が起きるかを行き先ごとに並べてみます。共有画面へ向かう道、操作を数える道、そしてボタン自身の見た目を整える道。同じ1クリックから、3本の道が別々の方向へ延びています。
ちなみに、真ん中の「計測の道」で運ばれているのはイベントという小さな知らせだけです。押した瞬間にGoogleのサーバーへ何かを送るのではなく、まず部品の中で「共有した」という出来事を放送します。誰がその放送を聞くかは、放送する側は知りません。この作りが後半の話につながるので、頭の片隅に置いておいてください。
責務とは、「変更の理由」のまとまり
ここで、タイトルにも使った責務という言葉を定義しておきます。責務と聞くと「担当する作業の一覧」を思い浮かべますが、設計の話ではもう一歩踏み込んで、同じ理由で一緒に変更されるものの、まとまりを指します。作業の種類ではなく、変更の理由で線を引くのです。
この定義は単一責任の原則と呼ばれる古典的な指針から来ています。原則という言葉は少し堅いのですが、実際にやることは素朴です。目の前のクラスに向かって「あなたは、どんな知らせが届いたときに書き換えられますか」と質問してみる。答えが2種類以上あるなら、そこには2つ以上の責務が同居しています。
共有欄で質問してみましょう。共有の仕事は、SNS側の共有URLの決まりが変わったときに書き換えられます。保存の仕事は、いいねの記録の決まりを変えたいときに。計測の仕事は、同意の扱いや解析の設定が変わったときに。ほら、質問への答えが3種類返ってきました。だから3つの責務なのです。
考えてみる:ボタンの色を変えるのは、どの責務の変更?
じつは、どれでもありません。色やあしらいは「見た目」の都合で、共有URLの決まりとも、保存の決まりとも、同意の扱いとも独立に変わります。だからこの実装では、見た目は部品の表示側の責務として、さらに別に扱っています。変更の理由で数えると、責務は「共有・保存・計測」の3つより細かく見えてくることもあります。







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