VAS は画面上の機密テキストを自動検出し、隠す必要のある領域を自動マークします。しかし開発中、OCR にはまだ先天的な限界があることがわかりました——時に見逃したり誤認識したりします。私たちはツールが完璧でなければならないという追求をやめました。
彼女は認識エラーをただのツールの失敗で終わらせず、協働の引き継ぎポイントにしたかった。
プライバシーモザイクをサイズ調整可能な浮動レイヤーにしました:OCR が対応できない部分は、ユーザーが手動で調整します。
認識ミスは「エラー」ではなく「分業の引き継ぎ」になります——ツールの不完全さはユーザーのコントロール権を損ないません。
OCR は自動化タスクの 90% しか完了できないかもしれませんが、手動モザイクを少しドラッグするだけで、本来 100% 手動でやるべきだったタスクを完了できます。
間違えてカバーしても大丈夫——モザイクは独立した浮動オブジェクトで、undo で一発削除できます。どんな結果も元に戻せます。
QR コードのスキャンは表面上「検出」か「未検出」の二択に見えます。しかし VAS は違う見方をします——ユーザーの意図を読み取り、その意図に基づいて次のアクションを決めます。
これも一種の人機協働です:ユーザーはスクリーンショットの構図で意図を伝え、ツールはそれを読み取ります。言葉も、ボタンも、メニューも不要——どう切り取るかが、欲しいものの表明です。ツールが読んでいるのは命令ではなく、行動の言語です。
ユーザーが QR コードを正確に検出したいとき、選択枠内に完全かつ QR コードだけが収まるよう自然にフレーミングすると私たちは判断しました——その行為自体が意図の宣言です。選択領域に対して QR コードが占める割合が大きいほど、認識精度が上がり、信頼度が高まり、ツールはより直接的に行動できます。言葉を必要としない暗黙の了解がユーザーとツールの間に生まれます。
ツールは自分が不確かなときに確かなふりをすべきではありません。QR コードを求める意図が確かなら直接リンクを開く;信頼度が曖昧なら、リンクを開くか確認する;信頼度が低すぎるなら、静かにエディターを開いて判断を委ねる。各閾値の背後には「自分がどれだけ知っているかを知っている」という誠実な設計があります。
VAS の呼吸ライトは待機の象徴だけではありません——環境を感知しています。ユーザーが URL をコピーして近づくと、呼吸ライトがそっと尋ねます:「このウェブページをキャプチャしましょうか?」ユーザーが同意すれば、スクリーンショットが完了し、エディターが開きます。
ユーザーがファイルやブラウザからコピーした画像を呼吸ライトに近づけると、呼吸ライトは両腕を広げて迎えるように、ツールバーを展開してファイルを受け取り、またはすぐにエディターを起動して、ユーザーの次のアクションを待ちます。
最良のツールは「ツールモード」への切り替えを要求しません。あなたの環境に溶け込み、何をしているかを理解し、そして行動で応えます。
* 呼吸ライトによるウェブページキャプチャとコピー画像の開封は Tauri 専用機能です。Electron 版はツールバーへのドラッグ&ドロップによる画像受け取りのみ対応しています。
「遅延キャプチャ」を開発したことで、デュアルモニター時の全画面キャプチャで表示される Apple 純正の画面選択メニューが、逆に摩擦になりました。
遅延キャプチャはマウスイベント——エラー状態、ホバー効果、デバッグの瞬間——を捉えるために生まれた機能です。カウントダウン中、マウスは画面のどこかに留まっていなければなりません。
しかし純正のデュアルモニター選択メニューはカウントダウン終了後にツールバーから飛び出してきて、「どちらの画面をキャプチャしますか?」と選ばせます——セルフタイマーをセットしたのに、カウントダウンが終わったカメラが「どちら側を撮りますか?」と聞いてくるほど不合理です。
VAS は Apple 純正の画面選択メニューを廃止し、カスタムの全画面オーバーレイに置き換えました:遅延なしの場合はクリックした画面をキャプチャ、Enter で両画面を合成して一枚のスクリーンショットに。
さらに:ユーザーが遅延ルールを設定すると、VAS はデフォルトでマウスのいる画面をキャプチャします——選択すら不要、ツールが自動判断します。ユーザーはこの判断がバックグラウンドで行われたことすら気づきません。
ツールの種類が増えるにつれ——点、線、面、テキスト、シンボル——すべてのオブジェクトに色、線、サイズ、方向のプロパティがある。重複して積み重なるプロパティは、見えない技術負債になる。機能は動くが、構造は寄せ集めの車のようだ。
その決断は Sprint 9 の Retro でなされました。App Store の審査を待つあいだ、ふたりは見積もりました:4 スプリントあれば十分なはずだ、と。
4 スプリントが 17 スプリントになるとは、誰も予想していませんでした。方向が間違っていたわけではありません——ただ、一層の負債を返すたびに、その下にまた別の層が現れました。Sprint 20、Nova が手動 QC の疲弊でもう限界に近づき、ついに「自動テストがあるのになぜまだこんなに疲れているんだろう」と問いかけたとき、ふたりはようやく気づきました:テストアーキテクチャそのものが、技術負債の一部だったのです。続いて、あるユーザーが簡体字中国語への対応を求めました。実装しながら i18n の構造を見て、ふたりは言いました——これは次の言語をサポートできない——そしてまたひと巡りのリファクタリングが始まりました。Sprint 24、分厚くなった KM を開いたとき、ふとひらめきました:踏んだ穴の記録が詰まったこの帳簿を、逆に検証の地図として使えるのではないか——すべての穴が埋められたことを確かめるための。Sprint 26 が終わり、ふたりはリストを照合しました。「本当にもうないよね?」
Sprint 27、吹き出しツールが追加されました。透明度、影、グラデーション——他のツールがすでに持っていたプロパティが、ここで直接継承されました。ひとつの車輪も作り直す必要はありませんでした。それが本当の完成のサインでした。宣言ではなく、新しいツールがアーキテクチャに自然と受け入れられたその瞬間。
このリファクタリングは Electron 版にも恩恵をもたらしました——底層の統一により、両プラットフォームが同じロジックで動き、安定性が自然と向上します。
Electron は新機能を追加しなくなりましたが、機能完全・無料・安定を維持する必要があります。ユーザーが VAS を信頼し、Tauri へのアップグレードを決断する前に試す機会を与えるためです。一度のリファクタリングで、デュアルプラットフォームの長期運営戦略全体が支えられます。