v0.1.173
変わったところ
- アイコンを一回り大きくしました。 タスクバーに並べると、隣のエクスプローラーより少し小さく見えていました。Windows はアイコンを正方形の枠で描くので、枠に対してフォルダがどれだけ場所を使っているかが、そのまま見た目の大きさになります。実機で測ると、エクスプローラーが 36×32 のところ FolderOS は 34×28 でした。フォルダを縦に伸ばして枠をきちんと使うようにし、いまは同じ大きさで並びます(青い丸の印は歪まないよう、真円のまま置き直しています)
直したところ
- アプリの更新が「Error opening file for writing」で止まる問題を直しました。 会社フォルダが Google ドライブなどのクラウド同期フォルダにあると、FolderOS がファイルの中身を読もうとしたまま返ってこなくなることがありました。この状態のプロセスは、閉じても消せません(Windows の中で読み取りを待ち続けるため)。消えないあいだアプリの部品を掴んだままなので、次の更新でインストーラが上書きできず必ず失敗していました。実機では21時間前と16時間前のものが2つ残っていました
- 更新を始める前に、その状態かどうかを確かめるようにしました。 掴まれていたら更新を始めず、「パソコンを再起動してから、もう一度この帯を押してください」とお伝えします。以前は気づかず始めてしまい、本体だけ入れ替わって途中で力尽き、アプリが自分を古い版だと思い続けて何度も同じ失敗を繰り返していました
- フォルダを閉じたのに裏の処理が残る問題を直しました。 これまでアプリが終わっても、裏で走っていた一覧の読み取りや索引づくりはそのまま残っていました。アプリの終了を見張って一緒に終わるようにしました
変わったところ
- 索引づくりが、読めないファイルで止まらなくなりました。 1つのファイルの読み取りに時間がかかりすぎたら、そのファイルは名前だけ登録して先へ進みます(中身はあとで読めるようになった時点で自動的に入ります)。同じ場所で何度も止まるようなら、そこはまだ手元に降りてきていないと判断して、残りは名前だけで作り上げます
- 索引づくりの途中経過が、こまめに保存されるようになりました。 これまでは全部終わるまで書き込みを抱え込んでいたため、途中で止まると作業ファイルが際限なく膨らみ(実機で411MB)、その間は検索の更新も止まっていました
技術詳細
- Google ドライブは Windows の cloud files API を使っていないため、実体が手元に無いファイルも属性上は普通のファイルに見える(実機の G: 配下 4,000 件すべてが
Normal)。読む前に見分ける手が無いので、「詰まることは防げない」前提で組み直した - 本文読みを同期→非同期+上限時間(
BODY_READ_TIMEOUT_MS)に。同期のままだとメインスレッドごと固まり、親の死活監視のタイマーもprocess.exit()も動けない - 詰まった読みは裏のスレッドを1本占有したまま返らない。Node の既定は4本なので上限(
MAX_STUCK_READS)を置かないと全部埋まる BEGIN〜COMMITの中で本文を読まないよう分割(TX_BATCH)。WAL 肥大の直接の原因だった- 索引はキャッシュなので
synchronous = NORMAL。小分けにした commit の増加分を吸収し、6,191 ファイルで 65.3 秒 → 51.0 秒(benchmarks.mdA1.18) - 単発 CLI にも
--parent-pidの死活監視を追加(従来は--serveのみ)。10分ごとの全走査(常駐の子)にも渡す - 更新前の確認は Rust の
sidecar_locked(同梱 node.exe を書き込みで開けるかだけ見る) - ⚠️ 差分更新(
refreshPaths・常駐の中)はまだ同期のまま。詳細は CLAUDE.md 1.6u