blog.naokihaba.com

2026 年 9 月の OSS 活動

9 月の終わりに、Vite+ 1.0 がリリースされました(リリースノート)! 9 月は、Vite+ の CLI の不具合を直すのと、setup-vp の改善が中心でした。

voidzero-dev/vite-plus

fix(cli): handle broken pipes in command output (#2785)

次のように出力を head に渡すと、vp が終了コード 134 で異常終了していました(#2661)。

vp --version | head -n 1

head が先に stdout を閉じると、println! が BrokenPipe で panic します。Vite+ は panic = "abort" でビルドしているので、そのままプロセスが止まります。

Oxc の print_and_flush を参考に、出力用の関数を追加しました。BrokenPipe なら正常に終了し、Interrupted と WouldBlock なら再試行し、それ以外のエラーは呼び出し元に返します。

vp –version の出力をパイプで head -n 1 に渡す。head は 1 行読むと先にパイプを閉じるので、そのあとの vp の書き込みが失敗する。変更前は println! が BrokenPipe で panic し、panic = “abort” でビルドしているので終了コード 134 で止まる。#2785 の後の出力用の関数は、BrokenPipe なら正常に終了し、Interrupted と WouldBlock なら再試行し、それ以外は呼び出し元に返す

SIGPIPE のハンドラーをデフォルトに戻す方法も考えましたが、これはプロセス全体の振る舞いを変えるので、後処理の前にプロセスが止まる可能性があります。#[tokio::main] の中では設定するタイミングも遅すぎて、スレッドとの競合を避けられません。なので、書き込む場所で BrokenPipe を処理することにしました。

refactor: make global CLI stdout broken-pipe safe (#2793)

#2785 の続きです。vp_global_cli と vp_shared に残っていた print! と println! を同じ関数に置き換えて、クレート全体で clippy::print_stdout を許可していた設定も消しました。これで、AI エージェントが println! を直接書いても CI で検出できます。

ci: load generated environment before install doctor checks (#2790)

#2785 の CI で、Windows の vp env doctor が失敗しました。#2758 で fallback 用の shim ディレクトリが追加され、vp env doctor はそのディレクトリも PATH にあるかを確かめるようになっていました。ところが、インストールを確かめるワークフローは ~/.vite-plus/bin しか GITHUB_PATH に追加しておらず、v1.0.0-rc.0 が公開されたタイミングでこのずれが表に出ました。ワークフローで ~/.vite-plus/env を読み込んでから vp env doctor を実行するようにして直しました。

docs: clarify Nushell XDG startup requirements and recovery (#2704)

Nushell の config.nu で XDG_DATA_HOME を変えると、新しいセッションで Vite+ の設定が読み込まれないことに気づいて、Issue を立てました(#2491)。Nushell は config.nu を実行する前に autoload のディレクトリを決めるので、そのあとで XDG_DATA_HOME を変えると、インストーラーが設定を書く場所と Nushell が読む場所がずれます。

Nushell を XDG_DATA_HOME=A で起動すると、autoload の場所は A の下に決まる。そのあと config.nu が XDG_DATA_HOME を B に変えると、インストーラーは B の下に Vite+ の設定を書く。Nushell は A の下しか読まないので、Vite+ の設定が読み込まれない

Nushell のドキュメントでは、XDG の変数は Nushell を起動する前に設定することになっています。インストーラー側で対応する案もいくつか調べましたが、どれも問題の一部しか解決しないか、正しく設定しているユーザーにまで不要な警告を出してしまいます。なので、インストーラーは変えずに、Getting Started にこの条件と回避方法を書きました。

docs: clarify migration dependency retention for pnpm (#2660)

Web サイトの移行用プロンプトを、vp help migrate の pnpm の説明に合わせました(#2656)。vp migrate が作る vite と vitest の依存は、削除せずに残します。

docs: update homepage pack demo for the 1.0 release (#2844)

ホームページの vp pack のデモが、古い tsdown 0.14.1 の出力のままだったので、Vite+ 1.0 の vp pack の実際の出力に更新しました。

voidzero-dev/setup-vp

feat: add cache-save input for restore-only caching (#140)

cache-save という入力を追加しました(#139)。すべてのブランチでキャッシュを読みつつ、信頼できるブランチだけがキャッシュを更新する、という設定のための入力です。デフォルトは true なので、既存のワークフローの動作は変わりません。false にすると、キャッシュを復元するだけで保存はしません。Azure Pipelines と GitLab ではキャッシュをそれぞれの設定で扱うので、効くのは GitHub Actions だけです。

cache-save が true(デフォルト)の main ブランチは、キャッシュを復元して最後に保存する。cache-save が false の PR のブランチは、復元だけして保存しない。GitHub Actions だけで効く

refactor: centralize Windows platform checks (#165)

process.platform === "win32" という判定がいくつものモジュールに散らばっていたので(#157)、isWindows という共通の関数にまとめました。

docs: update checkout examples to v7 (#144)

README の例にある actions/checkout を v7 に更新しました。