「夫婦専用」をやめたとき、コードのどこを直すことになったか
ふたかけはもともと「夫婦2人で使う家計簿」として作り始めた。自分たち夫婦が使うために作ったので、それが自然だった。
一般に公開するにあたって、この前提を外した。今は1人でも、未婚のカップルでも、同性のパートナーでも、同じように使えるようにしてある。
外してみて分かったのは、前提というのはコードの1箇所に書いてあるわけではないということだった。その記録を書いておく。
きっかけは、矛盾した2つの決定だった
公開版の仕様を詰めていた時期に、2日違いで次の2つを決めていた。
- ある日:夫婦ロールは現状維持。「夫婦専用アプリ」と割り切る
- その翌日:パートナーが未参加でも全機能を使える。1人利用を正式にサポートする
後者が前者を実質的に上書きしているのだが、そのことに誰も気づかないまま実装が進んだ。決定の記録は残っているのに、前の決定を取り消す作業をしなかったせいだ。
結果どうなったか。
「1人でも始められます」と書いた登録画面の、真上に夫婦のアバターが並んでいた。 登録直後の最初の設問が「あなたは夫ですか、妻ですか」の二択だった。
一人で使おうとした人が最初に見る画面がこれである。文言では歓迎しておいて、UI では「あなたは想定の利用者ではない」と言っている状態だった。
前提はどこに埋まっていたか
外す作業に入って、「夫婦」がどこに書かれているかを探した。出てきた場所はおおよそ次のとおりだった。
文言。 これは分かりやすい。「夫婦2人専用」「夫の手取り」「夫婦合算」。文字を置き換えれば済む。
二択の設問。 「夫か妻か」を選ばせている箇所。これは選択肢を消して自由入力にした。
アバターの色。 ここが厄介だった。「夫なら青、妻なら赤」という決め方が、3つの画面にそれぞれ手書きされていた。役割で色を決めている限り、役割を無くすと色も決まらない。
分母のラベル。 耐性メーターの説明文に「夫の手取り比」と直接書かれていた箇所があった。
一番効いた修正は、色の決め方を変えたこと
アバターの色は、役割ではなく世帯内の並び順で決めるように変えた。1人目はこの色、2人目はこの色、という単純な規則だ。
これで「夫」「妻」を選ばなくても色が決まる。役割を書いていない人も、猫の名前を役割欄に入れた人も、同じように表示される。
同時に、3箇所に散らばっていた決定ロジックを1つの関数にまとめた。今後メンバーを表示する画面を増やしても、そこを呼ぶ限り表示は揃う。
前提を外す作業をしていると、同じ判断が複数の場所に手書きされていることが必ず見つかる。前提があるうちは「夫は青」で全部通じるので、重複していても困らない。前提を外した瞬間に、その重複が全部バグになる。
「夫」「妻」を禁止したわけではない
誤解されやすいので書いておくと、この語を使えなくしたわけではない。
役割は自由に書ける欄になっていて、「夫」と書きたい人は書ける。書けば表示される。選ばされるのをやめただけで、選びたい人の選択肢は残っている。
同時に決めたのは、役割に機能を依存させないことだ。役割欄は表示のためだけにあって、集計にも権限にも一切影響しない。ここを一度でも崩すと、「役割を空欄にすると動かない機能がある」という形で前提が復活する。
名前は変えなかった
一方で、「片働き耐性メーター」という名前はそのままにした。
「片働き」は夫婦を前提にした語に聞こえるが、この指標が測っているのは「支出を、ひとりぶんの収入で割る」という計算そのものだ。1人で使っている人にとっても「自分の収入だけで暮らせているか」という意味で普通に成立する。
用語を機械的に中立化しにいくと、測っているものを指す名前まで曖昧になる。ここは踏みとどまるべき線だと判断した。
世帯は2人までのまま
もうひとつ変えなかったのが、世帯の上限は2人という制約だ。
3人以上を許すと、「誰の収入を分母にするか」も「誰が払ったか」も一気に複雑になる。ふたかけは「ふたりで同じ画面を見る」ことに寄せたアプリなので、ここを広げると別のアプリになる。
前提を外す作業では、外すものと守るものを最初に分けておかないと、なし崩しに全部を一般化してしまう。「夫婦であること」は外し、「2人であること」は守る、という線を先に引いたのがよかったと思っている。
確かめ方も決めた
作業の最後に、「夫婦」という語がコードから消えたかを機械的に確認できるようにした。
ただしここで一度失敗している。アプリのコードだけを検索して「0件、完了」としたのだが、アプリの外にあるファイルが検索対象から漏れていた。具体的には、スマホにインストールしたときのアプリ説明文が古い文言のまま残っていた。
検索して0件だったときは、検索した範囲が正しかったかを疑うべきだった。これは今も自分への戒めとして覚えている。