ハコヅミを作る #66:ほかの人のギアを「欲しい」に入れる(写すのは3つだけ、「やめても残る」という初めての例外)

共有の機能で、ほかの人のギアと、おすすめ度を見られるようになりました。見ていて「これ、欲しい」と思っても、今までは、名前を覚えて、自分で登録し直すしかありませんでした。

その場で、自分の「欲しい」に入れられるようにしました。

  • 写すのは、3つだけ
  • だれから入れたかは、残さない
  • 「やめても残る」という、初めての例外
  • 同じ名前でも、止めない
  • 人が付けた名前が、自分のデータに入る
  • テストが見つけた、消える知らせ
  • 「フォームはない」と覚えていたテスト
  • 出す日を、先に決めて書く
  • X の募集の、最初の数字

写すのは、3つだけ

ほかの人のギアのくわしい画面に、ボタンを1つ足しました。

ほかの人のギアのくわしい画面の、下のほう。おすすめ度の星5つと、おすすめ理由。その下に「欲しいものに入れる」のボタンと、「製品名・メーカー・カテゴリを、自分の「欲しい」のギアとして登録します(画像と、おすすめ度・おすすめ理由は、写しません)。」の説明

ほかの人のギアのくわしい画面(架空のデータ)

押すと、自分のギアが1件できます。状態は「欲しい」です。前に作った「欲しい」のタブに並んで、買ったら「所有」に変える。その流れに、そのまま乗ります。

共有のページで見えているのは、製品名・メーカー・カテゴリ・画像・おすすめ度・おすすめ理由の6つです。このうち、写すのは、製品名・メーカー・カテゴリの3つだけにしました。

見えるもの 写すか 理由
製品名・メーカー・カテゴリ 写す 「どの製品か」という、事実
画像 写さない 撮った人のもの
おすすめ度・おすすめ理由 写さない もとの人の感想

画像は、迷いました。「欲しい」のギアに画像がないと、一覧が寂しくなります。それでも、写しません。

画像を写すと、もとの人が共有をやめても、退会しても、その人が撮った写真が、ほかの人の手元に残ります。ハコヅミは、「退会すると、すぐ消える」と約束しています。写真は、その約束の外に出したくありません。

おすすめ度とおすすめ理由は、もとの人が、使ってみて書いた感想です。自分は、まだ持っていません。持っていないものに、★5つが付いているのは、おかしい。自分で買って、使ってから、自分で付けます。

残った3つは、「どの製品か」を指す言葉です。店の棚に書いてあることと、変わりません。


だれから入れたかは、残さない

入れたギアに、「〇〇さんのギアから」という印は、付けません。だれのギアから入れたかは、どこにも記録していません。テーブルも、変えていません。

残す案も、ありました。「この人のおすすめで買った」と、あとで見返せます。入れられた数を数えれば、ランキングにもなります。

でも、残すと、決めることが増えます。

  • もとの人が退会したら、その印はどうするか(「退会すると、すぐ消える」のに、名前が残る)
  • もとの人が共有をやめたら、どう出すか
  • もとの人に、「だれかが入れた」と伝えるか。伝えないなら、数だけ持つのか

どれも、今すぐ答えを出さなくてよいことです。残さなければ、どれも起きません。まず、残さない形で作りました。要ると分かったら、そのときに足します。あとから列を足すのは、簡単です。あとから消すのは、約束をしたあとでは、難しくなります。


「やめても残る」という、初めての例外

共有には、最初から守っている線があります。

共有をオフにすると、すぐに、ほかの利用者から見えなくなります。

画像の配信を、ブラウザに覚えさせないようにしたのも、この線のためでした。

今回、この線に、初めて例外ができました。ほかの人が「欲しい」に入れたギアは、もとの人が共有をやめても、退会しても、残ります。入れた人の登録内容になるからです。

残るのは、製品名・メーカー・カテゴリだけです。だれから入れたかも、分かりません。それでも、「自分が共有にしたものの一部が、自分の手を離れて残る」ことに、変わりはありません。

これは、黙ってやってよいことでは、ありません。3か所に書きました。

  • 利用規約:共有にしたギアの製品名・メーカー・カテゴリは、ほかの利用者が写して使える。写したものは、共有をやめても、退会しても、残る
  • プライバシーポリシー:同じことと、「だれのギアから写したかは、記録しない」
  • ギアの共有をオンにするときの確認:規約を読まない人にも、オンにする、その場で伝わるように

もう共有をオンにしている人にも関わることなので、お知らせは、一覧のいちばん上に固定しました。

といっても、本番で共有をオンにしている人は、まだ、いません。わたし自身も、まだです。ギアの写真を、試しに入れた仮のもの(自分で撮っていない写真)のままにしているからです。「自分に権利のない写真を、共有にしない」と規約に書いた本人が、それを破るわけにはいきません。自分で撮った写真に差し替えてから、オンにします。

写すものを3つに絞ったのは、ここにも効いています。「残ります」と書くものが、製品の名前だけなら、読んだ人も、受け入れやすいはずです。画像や感想まで写していたら、この1文は、ずっと重くなっていました。


同じ名前でも、止めない

同じギアを、2回入れようとしたら、どうするか。

止めませんでした。同じ製品名・メーカーの自分のギアが、もうあるときは、知らせるだけです。

「欲しいものに入れる」を押したあと。ボタンの上に「欲しいものに入れました(入れたギアを開く)」の知らせ。ボタンの下の説明の最後に、「同じ名前のギアが、もう登録されています。」

入れたあと。同じ名前のギアがあることも、知らせる

名前が同じでも、同じ物とは限りません。同じ製品を2つ欲しい人もいます。「廃棄済」にした古いものと、買い直したい新しいものが、同じ名前のこともあります。止める理由を、こちらで決めきれませんでした。

知らせておけば、まちがえて入れた人は、気づいて消せます。


人が付けた名前が、自分のデータに入る

この機能で、ハコヅミに、初めてのことが起きます。ほかの人が付けた名前が、自分のデータに入るようになります。

今までは、自分のデータの中の文字は、全部、自分で打ったものでした。だから、気にしなくてよかったことが、1つあります。データの書き出しの CSV です。

ギアの製品名を、こう付けた人がいたとします。

=HYPERLINK("https://example.com/","ここを押す")

これを、そのまま CSV に書き出して、表計算ソフトで開くと、文字ではなく、式として動きます。押せるリンクになったり、もっと悪いことが起きたりします。

自分で付けた名前なら、自分で自分を困らせるだけです。害がないので、セカンドオピニオンのレビューでこの指摘が出たとき、「ほかの人が付けた名前が、自分の書き出しに入るようになったら、対策する」と決めて、先送りにしていました。

その「なったら」が、今回でした。

対策は、よく知られたものです。CSV に出すとき、=・+・-・@ などで始まる文字の先頭に、' を付けます。表計算ソフトは、' で始まるものを、文字として扱います。

困るのは、まっとうな名前にも付くことです。

'+d
'-196℃

「+d」も「-196℃」も、本当にある製品の名前に使われそうな書き出しです。見分ける方法は、ありません。割り切りました。CSV は、「人が、表計算ソフトで読むための形」です。そこでは、安全なほうへ倒します。機械で読むための data.json には、もとの名前が、そのまま入っています。

先送りには、条件を書いておく

この対策を、忘れずに入れられたのは、先送りにしたときに、「いつやるか」を、条件で書いておいたからです。

ほかの人の付けた名前が、自分のエクスポートに入るようになったとき

「あとでやる」とだけ書いたものは、たいてい、やりません。「いつか」は、来ないからです。「こうなったらやる」と書いておくと、その「こう」が来たときに、思い出せます。今回は、Issue の下書きを作るときに、Claude Code がプロジェクトの記録を読んで、拾ってくれました。


テストが見つけた、消える知らせ

ハコヅミには、登録できる数の上限があります。フリーの会員は、ギアが 300 件までです。上限に達している人には、ボタンの代わりに、案内を出します。

ギアの数が上限に達しているときの画面。ボタンの代わりに、赤い字で「ギアの数が上限に達しています(1 / 1)」、その下に「「欲しいもの」には入れられません。不要なギアを削除すると、また入れられます。」

上限に達しているとき(撮るために、上限を1件にしてある)

このテストを書いているときに、不具合が1つ、見つかりました。

テストの筋書きは、こうです。上限まで登録してある人が、1件消して、空きを1つ作る。そこへ、ほかの人のギアを入れる。「欲しいものに入れました」と出ることを確かめる。

出ませんでした。

入れることには、成功していました。ギアは、ちゃんと1件できています。ところが、入れた瞬間に、その人は、また上限に達します。画面は、「ボタン」から「上限の案内」に切り替わります。「入れました」の知らせは、ボタンと同じ枠の中に置いてあったので、ボタンと一緒に、消えていました。

入れた人から見ると、ボタンを押したら、赤い字で「上限に達しています」と出た、という動きです。入ったのか、断られたのか、分かりません。

知らせを、ボタンの枠の外に出しました。下が案内に変わっても、「入れました」は残ります。

これは、上限ぎりぎりの人にしか起きない動きです。手で触って確かめていたら、まず通りません。「上限のテストも書く」と決めていたから、通った道でした。


「フォームはない」と覚えていたテスト

もう1つ、前からあるテストが、落ちました。

ほかの人のギアのくわしい画面には、こういうテストがありました。

このページに、送信のフォームは、ない。

「ほかの人のものは、見るだけ。変えられない」という、共有の大事な線を、確かめるためのテストです。フォームがなければ、何も変えようがありません。

今回、このページに、フォームを1つ足しました。「欲しいものに入れる」のボタンです。テストは、正しく落ちました。

ここで、テストを消したり、「フォームは1つ」と数字だけ直したりすると、もとの狙いが、消えます。狙いは、「ほかの人のものを、変えられないこと」でした。こう直しました。

  • フォームは、1つだけ
  • その送り先は、「欲しいものに入れる」
  • 中に、入力欄は、ない(送る値で、何かを変える余地がない)

そして、別のテストで、入れる前とあとで、もとの人のギアが、1文字も変わっていないことを、確かめています。更新の日時も、含めてです。

テストが落ちたとき、「今の仕様に合わせて、通るように直す」だけだと、テストが覚えていたことを、忘れさせてしまいます。そのテストは、何を守ろうとしていたのか。それを、新しい形で、守り直します。


出す日を、先に決めて書く

この機能は、夜に作って、本番に出すのは、次の日にしました。

困るのが、日付です。お知らせには、日付が要ります。利用規約とプライバシーポリシーには、「最後に改定した日」が出ます。どちらも、本番に出す日でなければ、いけません。

作った日の日付で書いて、次の日に出すと、「昨日、改定しました」という表示が、今日はじめて出ることになります。

Claude Code に頼むときに、一言、添えました。

本番には今日は出さない

これで、日付は、全部、次の日で書いてくれました。開発環境には、日付が変わるまでの数時間、未来の日付のお知らせが出ていたことになります。見るのは、わたしだけなので、困りません。

出す日がずれたら、日付を直す PR を、もう1本出すことになります。出す日を、先に決めておく。小さなことですが、規約を同じ日に3回改定した前の日に比べると、少し、段取りがよくなりました。


X の募集の、最初の数字

#64 で、X にテスタの募集を投稿しました。2時間たったときの数字です。

項目 数
表示された回数(インプレッション) 70
何かの操作(エンゲージメント) 4
リンクを押した回数 1
いいね・リポスト・返信 0

ふだん、ブログの更新を知らせる投稿は、表示された回数が、多くても 10 回ほどです。同じ数え方で、70。7倍です。キャンプのタグを付けると、ふだんより多くの画面に、表示される。これは、分かりました。

ただ、「表示された回数」は、「来てくれた回数」では、ありません。だれかの画面に、投稿が流れた回数です。読まずに通りすぎた分も、入っています。実際に紹介のページまで来てくれたのは、「リンクを押した回数」のほう。つまり、1 です。その1回が、わたし自身でないとも、言いきれません。

最初、わたしは、この2つを取り違えていました。ふだんの 10 を、「記事へのアクセスが 10 件」だと思っていたのです。表示が 10 回なら、記事まで来てくれた人は、0 か 1 だったことになります。

足りないのは、「押される割合」より、「表示される回数」のほうです。70 回の表示で、1回。応募までは、そこからさらに、紹介のページを読んで、ボタンを押して、フォームを書く、という段があります。1件の応募が来るには、表示の回数が、2桁は多く要りそうです。

1回の投稿で、どうにかなる数では、ありません。切り口を変えて、何度か出します。


おわりに

  • 写すのは、「どの製品か」という事実だけ。撮った写真と、書いた感想は、その人のもの
  • 残さなければ、決めなくてよいことがある。あとから足すのは簡単で、約束したあとに消すのは難しい
  • 約束に例外を作るなら、規約だけでなく、その操作をする場所でも伝える
  • 写すものを絞っておくと、「残ります」の1文が、軽くなる
  • ほかの人が付けた文字が、自分のデータに入るようになったら、今まで気にしなくてよかったことを、見直す
  • 先送りには、「いつやるか」を、条件で書いておく
  • 上限ぎりぎり、のような端の動きは、手で触っても通らない。テストで通る
  • 落ちたテストは、通るように直す前に、何を守ろうとしていたかを読む
  • 出す日が決まっているなら、日付は、その日で書く
  • 「表示された回数」と「来てくれた回数」は、別の数

共有で残っているのは、料理のコピーと、プロフィールの SNS のリンクです。料理のコピーは、レシピの文の権利のことを、先に確かめてからにします。

テスタを募集しています。キャンプに行く方、よければ、触ってみてください。

← トップページに戻る