# バッチ設計書 11-remove-examples

## 概要

本ドキュメントは、Jestリポジトリのリリース準備用スクリプト `remove-examples.mjs` の設計仕様を記載する。このバッチは、examplesディレクトリの削除とjest.config.mjsからのprojectsフィールド削除を行う。

### 本バッチの処理概要

このバッチは、Jestパッケージのリリース準備として、開発時に使用されるexamplesディレクトリとその参照設定を削除するクリーンアップ処理を実行する。

**業務上の目的・背景**：Jestの本番リリースパッケージには、開発・テスト用のexamplesディレクトリは不要である。このバッチは、リリース成果物のサイズを削減し、配布パッケージをクリーンな状態に保つために必要である。examplesディレクトリには各種フレームワーク（React、Angular、TypeScript等）のサンプルコードが含まれており、開発時の動作確認には有用だが、npmパッケージとして配布する際には不要なファイル群となる。

**バッチの実行タイミング**：リリース準備時に手動で実行される。通常の開発サイクルでは使用されず、パッケージ公開前のクリーンアップフェーズで実行する。

**主要な処理内容**：
1. jest.config.mjsファイルを読み込み、configオブジェクトからprojectsプロパティを削除
2. 更新されたconfig内容をjest.config.mjsファイルに書き戻し
3. examplesディレクトリを再帰的に削除

**前後の処理との関連**：このバッチはリリース準備の一環として実行される。通常、ビルドプロセス（build.mjs、buildTs.mjs、bundleTs.mjs）の完了後、パッケージ公開前に実行される。後続処理として、npmへのパッケージ公開が行われる。

**影響範囲**：jest.config.mjsファイルの内容が変更される。examplesディレクトリが完全に削除される。一度実行すると元に戻すにはgitリセットが必要となるため、リリースブランチでのみ実行することが推奨される。

## バッチ種別

クリーンアップ処理 / リリース準備

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 随時（リリース時） |
| 実行時刻 | 指定なし |
| 実行曜日 | 指定なし |
| 実行日 | 指定なし |
| トリガー | 手動（yarn remove-examples） |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| Node.js環境 | Node.js 18.14.0以上、20.x、22.x、または24.x以上が必要 |
| 依存パッケージ | yarn installによりgraceful-fsがインストール済みであること |
| jest.config.mjs | リポジトリルートにjest.config.mjsが存在すること |

### 実行可否判定

特別な実行可否判定ロジックはない。スクリプト実行時に必要なファイルが存在しない場合はエラーとなる。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| なし | - | - | - | コマンドライン引数は受け付けない |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| jest.config.mjs | JavaScript ESM | Jest設定ファイル。projectsプロパティを含む設定オブジェクトをエクスポート |
| examples/ | ディレクトリ | 削除対象のサンプルコードディレクトリ |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| jest.config.mjs | JavaScript ESM | projectsプロパティが削除された設定ファイル |

### 出力ファイル仕様

| 項目 | 内容 |
|-----|------|
| ファイル名 | jest.config.mjs |
| 出力先 | リポジトリルート |
| 文字コード | UTF-8 |
| 形式 | ESM形式（export default {...}） |

## 処理フロー

### 処理シーケンス

```
1. モジュールインポート
   └─ path、url、graceful-fs、jest.config.mjsをインポート
2. スクリプトパス解決
   └─ import.meta.urlから現在のディレクトリパスを取得
3. 設定ファイルパス特定
   └─ スクリプトディレクトリから相対パスでjest.config.mjsを特定
4. projectsプロパティ削除
   └─ インポートしたconfigオブジェクトからprojectsを削除
5. 設定ファイル書き戻し
   └─ JSON.stringifyで整形してfs.writeFileSyncで保存
6. examplesディレクトリ削除
   └─ fs.rmSyncでforce: true、recursive: trueオプションで削除
```

### フローチャート

```mermaid
flowchart TD
    A[バッチ開始] --> B[jest.config.mjsを動的インポート]
    B --> C[configオブジェクトからprojectsを削除]
    C --> D[jest.config.mjsに書き戻し]
    D --> E[examples/ディレクトリを再帰削除]
    E --> F[バッチ終了]
```

## データベース操作仕様

### 操作別データベース影響一覧

| 処理 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| なし | - | - | データベース操作は行わない |

### テーブル別操作詳細

データベース操作は行わない。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| ENOENT | ファイル不在 | jest.config.mjsが存在しない | ファイルの存在を確認 |
| EACCES | 権限エラー | ファイルまたはディレクトリへの書き込み権限がない | 権限を確認・修正 |
| EBUSY | リソース使用中 | examplesディレクトリ内のファイルが使用中 | 使用中のプロセスを終了 |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | なし |
| リトライ間隔 | なし |
| リトライ対象エラー | なし |

### 障害時対応

バッチ失敗時は以下の手順でリカバリを行う：
1. エラーメッセージを確認し、原因を特定
2. 必要に応じて `git checkout jest.config.mjs` で設定ファイルを復元
3. 必要に応じて `git checkout examples/` でexamplesディレクトリを復元
4. 問題を解消後、再実行

## トランザクション仕様

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | なし（ファイルシステム操作） |
| コミットタイミング | 各ファイル操作完了時 |
| ロールバック条件 | 自動ロールバックなし（手動でgitリセット） |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 1設定ファイル + 1ディレクトリ |
| 目標処理時間 | 数秒以内 |
| メモリ使用量上限 | 特に制限なし |

## 排他制御

同時実行の制御は行わない。ファイルシステムへの直接書き込みを行うため、複数プロセスからの同時実行は避けること。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| 開始ログ | なし | ログ出力機能なし |
| 進捗ログ | なし | ログ出力機能なし |
| 終了ログ | なし | ログ出力機能なし |
| エラーログ | エラー発生時 | Node.jsの標準エラー出力 |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| なし | - | 監視機能なし |

## 備考

- このスクリプトはリリース準備専用であり、通常の開発作業では使用しない
- 実行後はgitの状態が変更されるため、リリースブランチでの実行を推奨
- force: trueオプションにより、examplesディレクトリが存在しない場合もエラーにならない
