実装編では、パス指定エディタから、禅モード、AI漢字変換へと転換していった技術的な経緯を書きました。思想編では、なぜそういう設計にしたのか、その考え方をまとめます。
個人用ツールとしての最小構成
zen-noteには、バックエンドがありません。ビルドの工程もありません。依存ライブラリも、できる限り増やさないようにしています。
これは「シンプルが正義」という一般論というより、壊れる場所を減らすという実利的な理由からです。自分一人が使うツールなので、壊れたら自分で直すしかありません。だったら、壊れる可能性のある部分自体を、最初から減らしておいたほうがいい。GitHub PagesとブラウザだけでAPIを直接叩く構成にしているのも、この考え方の延長です。
プライバシーへの一貫した配慮
v3でAI漢字変換を導入する際、最初に確認したのは「入力内容が学習に使われるかどうか」でした。API経由なら基本的に学習に使われないことを確認してから、初めて実装に進んでいます。
認証情報(GitHub PAT / Gemini APIキー)も、ブラウザのlocalStorageにのみ保存し、どこにも送信しない構成にしました。機能を追加するたびに、この姿勢は崩さないようにしています。
「脳の排水」としての設計
自分の場合、脳の中に何かがたまってくると、「疲れた」という感覚が強くなります。それを解消する方法のひとつが、手書きでひたすら書き出すことでした。頭の中にあるものを、止まらずに紙の上に出し続ける。それだけで、たまっていたものが減っていく感覚があります。
zen-noteは、この「手書きに近い感覚」を、デジタルでも再現できないかという発想から出発しています。完璧な文章を作る場所ではなく、思考をそのまま流し出すための道具、という位置づけです。
これは単なるコンセプトではなく、実際の挙動に落とし込まれています。カーソルは画面中央から動きません。確定した行は、見えなくなるか、薄れながら上に積み上がっていきます。つまり、「前に戻って推敲する」よりも「前に進み続ける」ことを、UIの側から促す設計になっているわけです。
書いたものを読み返せない、直せない、という不便さは、意図的に選んだ制約です。
変換を後段に寄せる
手書きなら、変換候補を選ぶために手を止めることはありません。書きたい言葉を、そのまま書き続けられます。デジタルでその感覚に近づけるなら、IMEのかな漢字変換自体が邪魔になる、という結論に行き着きました。
そこで、そもそも変換させない方向に倒しました。lang="en"を指定してローマ字を直打ちし、整形はAIにまとめて任せる形です。
これは「入力」と「整形」という、本来別の関心事を分離する試みでもあります。書いている最中は変換候補に気を取られず、ただ流し込むことに集中する。整った表記にするかどうかは、後段のAIに任せる。役割を分けることで、それぞれをシンプルに保っています。
バージョンを消さずに枝分かれさせる
v1、v2、v3は、上書きされずにすべて残っています。機能を追加するたびに前のバージョンを消すのではなく、新しいバージョンとして枝分かれさせる形にしました。
これによって、方針転換のコストが下がります。v2で禅モードに全面転換したときも、v1の実装自体はそのまま残っていたので、「戻れる場所がある」という安心感の中で大胆な転換ができました。
不具合は都度、原因を特定してから直す
実装編で書いたCSSの環境依存バグ、フォント計測のズレ、トークン上書きバグなど、どれも「効かないので別の方法にする」では済ませず、実機と挙動が食い違うたびに、具体的な原因を切り分けてから対処しています。
これは地味に時間のかかるやり方ですが、原因を特定しないまま次の手を打つと、同じ種類の不具合が形を変えて再発することが多いです。回り道に見えても、結局はこちらのほうが早いというのが、作りながら得た実感でした。
この原因の切り分けは、一人で黙々とやったわけではありません。AIと相談しながら、一緒に直してもらう、というスタンスで進めています。自分がすべてのコードを把握しているわけではないので、「実機ではこう動いた」「期待していたのはこうだった」というズレを言葉にして渡し、そこから一緒に原因を絞り込んでいく。一人で抱え込まず、対話しながら直していくやり方が、結果的に一番早く正確でした。
—
思想として並べると当たり前のことのようにも見えますが、実際には機能を一つ追加するたびに、この方針に立ち返って判断し直す場面がありました。バックエンドを持たない構成にするか、AIに固有名詞を含めるか、IMEと戦うか手放すか。そのたびに、「これは脳の排水のための道具である」という一点に立ち返ることで、判断がぶれずに済んだように思います。
この後、自転車に乗りながら使うための自転車モード編も作ることになります。


コメント