2026 年 10 月の OSS 活動
10 月は、Vite+ と vite-task の不具合を直したほかに、Vite+ を使う他のプロジェクトにも PR を出した。また、10 月 24 日に Vue Fes Japan 2026 で「Vite+への貢献と、Team Memberになって見えてきた風景」という題で話した。資料は Docswell にあり、スピーカーノートは Zenn(日本語)と DEV(英語)にある。
voidzero-dev/vite-plus
fix(config): skip git config writes that change nothing (#2958)
vp config は、実行するたびに git config に 4 回書き込んでいた。値が変わらないときも書き込む。書き込むたびに .git/config.lock を取るので、linked worktree で同時に実行すると、遅いほうが could not lock config file で失敗した(#2849)。この PR で、先に現在の値を読み、値が同じなら書き込まないようにした。
ただし、clone した直後の初回の実行では、値を書く必要がある。そのため、初回の実行が同時に起きると、まだ失敗する。この問題は、待って再試行する仕組みが必要で、その設計には別の判断が必要なので、次の PR に分けた。
fix(config): wait for a shared git config lock on first run (#3199)
#2958 の続きである(#2959)。Git 2.55 以前の git config は、ロックが解放されるまで待たない。そこで、vp config がロックのために失敗した書き込みを再試行するようにした。最初は 50 ms 待ち、その後は待つ時間を 2 倍にして、最大 5 回再試行する。再試行の前に値を読み、他の worktree が同じ値をすでに書いていれば、書き込まずに成功として終わる。待つ時間は合計で最大 1.55 秒である。
fix(env): call Nushell built-ins with the % sigil in env.nu (#3123)
Nushell で def update [] のように組み込みコマンドと同じ名前のコマンドを定義すると、Nushell が起動しなくなるという報告があった(#3092)。Nushell はパースの時点でコマンド名を解決し、Vite+ の env.nu をユーザーの設定の後に読む。そのため、env.nu の中の update がユーザーのコマンドを呼び、引数が合わずに nu::parser::extra_positional で止まる。
env.nu で、組み込みコマンドを % sigil を付けて呼ぶようにした(例: %update)。% sigil は Nushell 0.112.1 で追加されたので、それより前の版はパースできない。そこで、vp env setup が PATH 上の nu のバージョンを確かめ、0.112.1 以降のときだけ sigil を付けるようにした。
fix(cli): set package-manager lifecycle env for vp run (#2895)
止まっていた #2385 を引き継いだ PR である(#2897)。fengmk2 と話して私が引き継ぐことにし、#2385 の変更を取り込んでコンフリクトを解消した。#2398 で PackageManager のフィールド名が install_dir から bin_prefix に変わり、#2385 は CI のビルドで失敗していた。その参照とテストを現在の API に合わせた。
voidzero-dev/vite-task
fix(reporter): wait and retry when task output forwarding hits EAGAIN (#801)
CI のように vp run の出力をパイプに渡しているときに、2 つのタスクを同時に実行すると、すべてのタスクが止まることがあった(#782、vite-plus#2824)。再現用のリポジトリを作り、Vite+ v1.0.0 で再現した。
- Node.js のタスクが、共有している出力先を
O_NONBLOCKにする。そのため、vpの fd 1 もノンブロッキングになる。 - もう一つのタスクが大量のログを出し、
vpがそれをパイプに書く。 - パイプのバッファがすぐにいっぱいになる。
vpのwriteが、待たずにEAGAINを返す。vpがこれを致命的なエラーとして扱い、すべてのタスクを止める。
この PR で、write か flush が WouldBlock を返したときは、待って再試行するようにした。ターミナル、ファイル、ブロッキングのパイプへの出力では WouldBlock は起きないので、動作は変わらない。
nuxt-modules/storybook
fix(addon): use Nuxt’s app context for Nuxt 4.6 compatibility (#1139)
Nuxt 4.6.0 で、ブラウザーの Nuxt のインスタンスを保存する場所が unctx から globalThis.__nuxt_app_ctx__ に変わった(nuxt/nuxt#36371)。この addon は unctx に直接インスタンスを登録していたので、Nuxt 4.6 では useNuxtApp() がインスタンスを見つけられず、NUXT_E1001 を投げた(#1138)。#app/nuxt の getNuxtAppCtx を使うように変え、不要になった unctx の依存を削除した。
chibivue-land/chibivue
docs: update setup commands for Vite+ integration (#657)
chibivue は Vite+ に移行したが、日本語のセットアップのページは古い pnpm のコマンドのままで、手順のとおりに進めると失敗した。ページのコマンドを vp に更新し、Vite+ が必要であることを書いた。