make-all.js にディレクトリ作成処理を追加
この PR は SSR 用全コンポーネントファイルを生成するビルドスクリプト make-all.js に、出力先ディレクトリを確実に作成する処理を加えました。ディレクトリが未生成の状態でもスクリプトが安定して動作するようになります。
背景
make-all.js は src/ssr/all.ts を生成するために、ビルドディレクトリ内の custom-elements.json を読み取ります。既存のロジックでは deleteSync(allFile) によるファイル削除のみが行われ、出力先ディレクトリの存在確認は実施されていませんでした。ディレクトリが存在しない状態で書き込み処理が実行されると、Node のファイルシステム API はエラーを返す可能性があります。そこでディレクトリ作成を明示的に行うことで、スクリプトの前提条件をコード側で保証する方針が取られました。
技術的な変更
fs から mkdirSync をインポート することで、標準ライブラリの同期ディレクトリ作成機能を利用できるようにしました。
-import fs from 'fs';
+import fs, { mkdirSync } from 'fs';
deleteSync 後に mkdirSync を呼び出す ことで、allFile の親ディレクトリが必ず存在する状態を作ります。{ recursive: true } オプションにより、階層が不足していても安全に作成されます。
@@
- deleteSync(allFile);
+ deleteSync(allFile);
+ mkdirSync(path.dirname(allFile), { recursive: true });
この変更はファイル削除ロジックに最小限の差分で追加され、既存の引数処理やメタデータ取得ロジックには一切影響を与えません。
設計判断
標準の fs.mkdirSync を採用 した点が重要です。外部パッケージやラッパーを導入せず、Node が提供する同期 API をそのまま利用することで依存関係を増やさずに実装できます。recursive:true オプションは単一行で階層的ディレクトリ作成を実現し、コードの可読性も保たれます。
後方互換性を保持 しています。ディレクトリが既に存在する場合 mkdirSync は何もせずに正常終了するため、既存のビルドフローやローカル開発環境への変更は不要です。また、公開 API やモジュールインターフェースは変更されていないため、他スクリプトからの呼び出し側への影響もありません。
まとめ
make-all.js にディレクトリ作成処理を組み込んだことで、SSR 用全コンポーネントファイル生成時に必要なディレクトリが常に確保され、ビルドスクリプトの信頼性が向上しました。最小限のコード変更で実装されたこの設計は、依存増加を抑えつつ堅牢性を高める合理的な判断と言えます。