💡

Cline にきちんとタスクを完了してもらうための tips

2024/11/22に公開

概要

Cline は、VSCode や Cursor で利用できる AI アシスタント型の拡張機能です。
https://github.com/cline/cline

以下、 Felo AI に聞いた回答

Clineの主な機能
  • 自動コード生成: Clineは新しいプロジェクトを立ち上げる際に、必要なファイルやフォルダー構成を自動で生成します。例えば、ReactやNext.jsのプロジェクトでは、手動で設定する必要がある「package.json」ファイルの作成も自動化されます。

  • エラーフィックス機能: コマンド実行時に発生するエラーを自動で分析し、修正提案を行います。実際にエラーを修正する機能も備えており、開発者のトラブルシューティングを大幅に簡素化します。

  • Gitとの統合: ClineはGitへのコミット作業をサポートし、変更内容を簡単に記録できます。また、エラーログを解析し、適切な修正を提案することで、エラー解決の手間を削減します。

  • API管理とキャッシング: Clineは複数のAPIプロバイダーを利用でき、特にAnthropicの「Claude 3.5 Sonnet」との相性が良いです。プロンプトキャッシング機能により、APIコストを最適化することが可能です。

  • Compute Use機能: Clineはマウス操作やUI操作を自動で制御できるため、UIテストなどの場面でも活用できます。

この記事は、Cline を使う時の tips について、自分の備忘録を兼ねたものになっています。

対象読者

  • Cline を使ってみたいが導入していない人
  • Cline を使ってみたが期待した精度より低いものしか生成されなかった人

この記事の前提

  • VSCode を利用
  • プロジェクトは laravel
  • Compute Use 機能については触れません

本題

Custom Instructions

Custom Instructions はリクエスト毎に送られるシステムプロンプトの最後に追加されるものらしいです。
入力は Settings からすることができます。

そして Cline は与えた Task に対してまず分析をしてくれるのですが、その分析結果を私たちも見れます。
そこから推測するに、以下の情報を Custom Instructions に与えてあげると無駄な生成やチャットのやり取りが減って快適だと感じています。

  • コミュニケーションの方法を指定
  • タスクの分析を依頼
  • ディレクトリ構成や設計方針が記載されているドキュメント
  • 依存しているライブラリの情報

また、マークダウン記法で記述して、パスを指定する際は絶対パスを用いるようにした方が確実に読み込んでくれます。

例えば laravel のプロジェクトで Cline を利用するなら以下のような形になります

# 基本方針
## コミュニケーション基準
- 日本語でやり取りしたいです。
- 既存ロジックを許可なく削除しないでください。
- タスクを進めていく上で以下の状況に該当する場合には、後述の[テスト実行手順](#テスト実行手順)に従って、テストの実行もおこなってください
  - 開発対象のクラスにテストコードが存在する場合
  - テストコードを改修した場合
- テストが fail や error になった場合は、解決できるような改修を提案してください。

## 要件定義とタスク理解
- タスクの要件が不明確な場合は、以下の観点から質問を行い、実装の前に合意を形成してください:
  1. 機能要件(実装すべき機能の範囲と期待される動作)
  2. 非機能要件(パフォーマンス、セキュリティ、保守性などの基準)
  3. 入力値と出力値の定義
  4. エラーハンドリングの基準

## 品質基準
- 提案するコードは以下の基準を満たしてください:
  1. phpstan level 9 に準拠した型定義
  2. 適切なエラーハンドリングの実装
  3. セキュリティベストプラクティスの適用

# 開発環境
## ディレクトリ構成
- 開発対象のディレクトリは `/path/to/your_repository` です。
- このリポジトリは PSR-4 を採択しています。
- use 文を使用して他のクラスをインポートしているので、タスクで指定されたクラスの関連ファイルは自動的に解析して考慮してください

## 依存関係
このリポジトリの依存ライブラリは以下に記載されています:
- `/path/to/your_repository/composer.json`

## アーキテクチャ
このリポジトリの設計思想は日本語で書かれていて、以下に記載されています:
- `/path/to/your_repository/doc/architecture.md`

この設計思想に従ってコーディングをしてください。

## テストコード規約
テストコードの規約については、以下に日本語で記載があります:
- `/path/to/your_repository/doc/test_code.md`

テストコードを生成する場合は、これに従って生成してください。

# テスト実行手順
テストの実行には `テストコードのクラスのパス` が与えられている必要があります。  
もしもユーザーからテストコードのクラスのパスが与えられていない場合は質問を行い、パスを特定してください。

## 実行例
テスト実行コマンド:
```bash
composer phpunit path/to/test/code.php
```

Task

上記の Custom Instructions を設定しておけば、おおざっぱな指示でもある程度のものを生成してくれますが、Task に関してもマークダウン記法で書いた方が精度が上がるような気がしています。

何か生成・改修してほしい場合は、出来るだけ対象を絞って指定した方が精度が高くなります。
以下例です。

# 実装したいこと
@/path/to/ClassA.php 
上記クラスの作成

## 実装する必要があること
- ClassA::method() の引数を Param クラスにする
- Param クラスは id と status プロパティを持つ
- id は string 型にして、 status は int 型にする
- InterfaceA を DI して、 InterfaceA::method() の返り値が false なら例外を投げる
  - true なら何もしない

また、 @ でファイルパスを指定する時には深掘ることができる階層の上限があるのか分からないのですが、 No results found と表示されてしまう場合があります。
しかし、きちんと正しいパスを指定すれば、ファイルを読み込んでくれるようです。

反対に、フォルダ指定はあまり得意ではないようで、度々こちらが指示を追加しなくてはいけないことが多かったように思えます。

Discussion