KenichiroArai directory-operation-parallel-execution-tool .cursorrules file for Java

# プロジェクトの指示

あなたは高度な問題解決能力を持つAIアシスタントです。以下の指示に従って、効率的かつ正確にタスクを遂行してください。

まず、ユーザーから受け取った指示を確認します:
<指示>
{{instructions}}
</指示>

この指示を元に、以下のプロセスに従って作業を進めてください:

---

## 1. 指示の分析と計画

このセクションは、後続のプロセス全体を導くものなので、時間をかけてでも、十分に詳細かつ包括的な分析を行ってください。

### タスク分析

- 主要なタスクを簡潔に要約してください。
- 記載された技術スタックを確認し、その制約内での実装方法を検討してください。
  - **※ 技術スタックに記載のバージョンは変更せず、必要があれば必ず承認を得てください。**
- 重要な要件と制約を特定してください。
- 潜在的な課題をリストアップしてください。
- タスク実行のための具体的なステップを詳細に列挙してください。
- それらのステップの最適な実行順序を決定してください。

### 重複実装の防止

実装前に以下の確認を行ってください

- 既存の類似機能の有無
- 同名または類似名の関数やコンポーネント
- 重複するAPIエンドポイント
- 共通化可能な処理の特定

## 2. タスクの実行

- 特定したステップを一つずつ実行してください。
- 各ステップの完了後、簡潔に進捗を報告してください。
- 実装時は以下の点に注意してください
  - 適切なディレクトリ構造の遵守
  - 命名規則の一貫性維持
  - 共通処理の適切な配置

## 3. 品質管理と問題対応

- 各タスクの実行結果を迅速に検証してください。
- エラーや不整合が発生した場合は、以下のプロセスで対応してください
  - 問題の切り分けと原因特定(ログ分析、デバッグ情報の確認)
  - 対策案の作成と実施
  - 修正後の動作検証
  - デバッグログの確認と分析

- 検証結果は以下の形式で記録してください
  - 検証項目と期待される結果
  - 実際の結果と差異
  - 必要な対応策(該当する場合)

## 4. 最終確認

- すべてのタスクが完了したら、成果物全体を評価してください。
- 当初の指示内容との整合性を確認し、必要に応じて調整を行ってください。
- 実装した機能に重複がないことを最終確認してください。

## 5. 結果報告

以下のフォーマットで最終的な結果を報告してください:

```markdown
    # 実行結果報告

    ## 概要

    [全体の要約を簡潔に記述]

    ## 実行ステップ
    1. [ステップ1の説明と結果]
    2. [ステップ2の説明と結果]
    ...

    ## 最終成果物

    [成果物の詳細や、該当する場合はリンクなど]

    ## 課題対応(該当する場合)

    - 発生した問題と対応内容
    - 今後の注意点

    ## 注意点・改善提案

    - [気づいた点や改善提案があれば記述]
```

---

## 重要な注意事項

- 不明点がある場合は、作業開始前に必ず確認を取ってください。
- 重要な判断が必要な場合は、その都度報告し、承認を得てください。
- 予期せぬ問題が発生した場合は、即座に報告し、対応策を提案してください。
- **明示的に指示されていない変更は行わないでください。** 必要と思われる変更がある場合は、まず提案として報告し、承認を得てから実施してください。
- **特に UI/UXデザインの変更(レイアウト、色、フォント、間隔など)は禁止**とし、変更が必要な場合は必ず事前に理由を示し、承認を得てから行ってください。
- **技術スタックに記載のバージョン(APIやフレームワーク、ライブラリ等)を勝手に変更しないでください。** 変更が必要な場合は、その理由を明確にして承認を得るまでは変更を行わないでください。

---

## 技術スタック

### コア技術

- Java: 21
- Spring Boot: 3.2.1
- JUnit Jupiter: (Spring Boot依存バージョン)
- Mockito: 5.11.0

### 開発ツール

- Maven: 3.9.x
- Eclipse: 2024-03
- JaCoCo: 0.8.11

### プロジェクト設定

- Java Compiler: Java 21
- Source Encoding: UTF-8
- Test Thread Count: 8
- Test Fork Count: 2C

---

## プロジェクト構成

以下のディレクトリ構造に従って実装を行ってください:

```bash
directory-operation-parallel-execution-tool/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── kmg/
│   │   │       └── tool/
│   │   │           └── directorytool/
│   │   │               ├── service/      # サービス層
│   │   │               ├── model/        # モデル
│   │   │               └── runner/       # 実行クラス
│   │   └── resources/                    # リソースファイル
│   └── test/
│       ├── java/                         # テストコード
│       │   └── kmg/
│       │       └── tool/
│       │           └── directorytool/
│       │               ├── service/      # サービステスト
│       │               ├── model/        # モデルテスト
│       │               └── runner/       # 実行クラステスト
│       └── resources/                    # テストリソース
├── .settings/                            # Eclipse設定
│   ├── org.eclipse.jdt.core.prefs       # Java開発設定
│   ├── org.eclipse.jdt.ui.prefs         # UI設定
│   └── org.eclipse.core.resources.prefs  # リソース設定
└── pom.xml                              # Mavenプロジェクト設定
```

### 配置ルール

- サービスクラス → `src/main/java/kmg/tool/directorytool/service/`
- モデルクラス → `src/main/java/kmg/tool/directorytool/model/`
- 実行クラス → `src/main/java/kmg/tool/directorytool/runner/`
- テストクラス → 対応する実装クラスと同じパッケージ構成

---

## 共通のコーディングルール

### メソッドの戻り値

- メソッドの戻り値は変数`result`で定義
- メソッドの戻り値の変数は先頭で宣言
- return文は`return result;`に統一

### 処理コメント

- 機能ごと、処理のまとまり単位に`/* コメント */`で記載
- 通常コメントは`//`で記載

### Javadoc

- 修飾子に限らず必須
- Javadocルールに従う

### 早期リターンパターン

- 早期リターンパターンを使用し、不要なネストを避ける

#### 基本的な指示

早期リターンパターンを使用してコードを書いてください。

#### 詳細な指示

コードの可読性を高めるため、以下の方針でコードを書いてください:
    - ネストを減らすため、条件が満たされない場合は早期にreturnする
    - if-elseの代わりに、ガード節(早期リターン)を使用する
    - インデントの深さを最小限に抑える

#### 具体例を含む指示

以下のような形式でコードを書いてください:

```java

// 望ましくない形式:
if (condition) {
    // 処理A
    // 処理B
}

// 望ましい形式:
if (!condition) {
    return result;
}
// 処理A
// 処理B
```

#### メリット

- コードの可読性が向上
- ネストの深さが減少
- 処理の流れが明確になる
- メンテナンス性の向上

#### 使用シーン

- メソッドやフローの入り口でのバリデーション
- 例外的なケースの早期処理
- 条件分岐が多い処理の簡略化

#### コード例

```java
public boolean someMethod(String input) {
    boolean result = false;  // 先頭で戻り値変数を宣言

    // 早期リターン(ガード節)
    if (input == null) {
        return result;
    }

    // メインの処理
    result = true;

    return result;  // 統一された形式でreturn
}
```

## テストのコーディングルール

### テストコードの実装順序

下記の順番で実装してください。

1. 期待値の定義

   - ```/* 期待値の定義 */```のコメントを入れる。
   - ```expected```で始まる期待値を定義する。

2. 準備

    - ```/* 準備 */```のコメントを入れる。
    - テスト対象を行うために準備しておくべき処理。

3. テスト対象の実行

    - ```/* テスト対象の実行 */```のコメントを入れる。
    - テスト対象を実行する。

4. 検証の準備

    - ```/* 検証の準備 */```のコメントを入れる。
    - ```actual```で始まる実際の値を定義する。

5. 検証の実施

    - ```/* 検証の実施 */```のコメントを入れる。
    - ```Assertions.assertTrue```は```actualXXX```と説明を記載する。
    - ```Assertions.assertEquals```は```actualXXX```と説明を記載する。
    - ```Assertions.assertEquals```は```expectedXXX```と```actualXXX```と説明を記載する。

### テストメソッドのアクセス修飾子

- 「testXXX」メソッドのアクセス修飾子を全て「public」にする

### メッセージの検証

- ```Assertions.assertEquals```を使用する
- 1行1行で検証する

#### メッセージの検証のコード例

```java
@Test
public void testMethod() {

    /* 期待値の定義 */
    final String[] expectedOutputLines = {
            "メッセージ1",
            "メッセージ2",
            "メッセージ3",
    };
    /* 準備 */

    /* テスト対象の実行 */

    /* 検証の準備 */
    final String[] actualLogMessages = this.listAppender.list.stream().map(ILoggingEvent::getFormattedMessage)
            .toArray(String[]::new);

    /* 検証の実施 */
    Assertions.assertEquals(expectedOutputLines.length, actualLogMessages.length, "ログメッセージの数が正しいこと");
    for (int i = 0; i < expectedOutputLines.length; i++) {

        final String expectedLine = expectedOutputLines[i];
        Assertions.assertEquals(expectedLine, actualLogMessages[i],
                String.format("出力に「%s」が含まれること", expectedLine));

    }

}
```

---

## 順守

以上の内容を順守し、タスクを遂行してください。
java
spring

First Time Repository

ディレクトリ操作並行実行ツール

Java

Languages:

Java: 111.0KB
Created: 1/13/2025
Updated: 1/23/2025

All Repositories (1)

ディレクトリ操作並行実行ツール