
Claude Code skills 機能をつかって、コードレビューをさせてみた!
はじめに
Claude Code に skills というアツい機能ができました!
skillsとは、自分好みにカスタマイズ できる拡張機能です。以前はカスタムスラッシュコマンドっていわれていたものも統合されて skills となったようです。
マークダウンファイルを用意するだけで気軽につくれて、そのファイルをそのまま共有すれば、だれでも同じ skills をつかえるようになります。簡単にチーム内で同じ skills を共有して使うことができるのは強力ですね!
今回は、この skills 機能に、コードレビューを追加してみます。実際にコードレビューをしてもらい、レビュー指摘の質をみてみました。
Claude code バージョン
使用したClaude Codeのバージョンは下記です。
Claude Code:v2.1.81
コーディングルールのファイルを用意しよう
コーディングルールをマークダウンファイルとして用意しています。
ルールファイルを用意して、CLAUDE.md には「コーディングルールは、.claude\rules\ にあるファイルを参照にする」として定義しています。
作ったコーディングルールファイルは下記になります。
`.claude\rules\coding\coding-guides.md`
---
paths:
- "src/**"
description: コーディング時の基本ルール
---
## コーディングルール
**アーキテクチャ**
- ベースは 増田亨氏が唱えるドメイン駆動設計に基づいた構成とする。
**サービス層**
- サービス層に複雑な処理は記載しないこと。複雑な処理はドメイン処理として切り出すこと。
**プレゼンテーション層**
- プレゼンテーション層(tsxファイルなどのフロント側コード)で、複雑な処理は書かないこと。複雑な処理はドメイン処理として切り出すこと。
**トランスレーター層**
- APIや画面のリクエスト情報をDB保存に変換処理、DB情報をレスポンスに格納する変換処理を、トランスレーター層に切り出すこと。
- サービス層やプレゼンテーション層にて、変換処理は書かないこと。
**データベースアクセス**
- データベースアクセスはクライアント側で行ってはならない
- すべてのデータベース操作はサーバー側でのみ実行する
- データベースアクセスにはService LayerまたはDomain Logic Layerを使用
- クライアントコンポーネントはAPIルートのみを呼び出し、APIルートがService/Domain Layerを使用するskills のファイルを用意しよう
マークダウンファイルを用意します。.claude配下に、skillsフォルダを作成して、そこにマークダウンファイルを格納します。
今回は、/simplify +αなイメージで skills を作成してみました。/simplify は、変更差分のファイルをレビューしてくれる機能です。プロジェクト固有のコーディングルールなどを明示的に指定してレビューをしてもらいたいので、skills として定義してみました。
フォルダー構成は、下記のようになります。SKILL.md が必須ファイルになります。
今回は、SKILL.md のみ作成してためしています。
my-skill/
├── SKILL.md # Main instructions (required)
├── template.md # Template for Claude to fill in
├── examples/
│ └── sample.md # Example output showing expected format
└── scripts/ └── validate.sh # Script Claude can execute作ったファイルは下記の通りです。(Next.js使用しているので、Typescriptに内容が寄っているところはあります)
.claude\skills\review-code-skill\SKILL.md
---
name: review-code-skill
description: Next.jsのコードをレビューを実施する。ユーザからコードレビューを依頼されたときにこのスキルを使用する。
---
- 日本語で回答してください。
- ベストプラクティスの具体例を提示してください。
## レビュー対象の決定
引数(`$ARGUMENTS`)の有無に応じてレビュー対象ファイルを決定してください。
### 引数がない場合(デフォルト)
Gitで変更されたファイルをレビュー対象とします。以下の手順で対象ファイルを特定してください。
1. `git diff --name-only HEAD` を実行し、コミット済みでないステージング・未ステージングの変更ファイルを取得
2. `git diff --name-only --cached` を実行し、ステージング済みの変更ファイルを取得
3. 上記の結果をマージし、重複を除いた一覧をレビュー対象とする
4. 変更ファイルがない場合は「変更されたファイルがありません。レビュー対象のファイルまたは処理名を引数で指定してください。」と表示して終了
### 引数がある場合
- **ファイルパスが指定された場合**: そのファイルをレビュー対象とする
- **処理名・機能名が指定された場合**: 関連するファイルをコードベースから検索し、レビュー対象とする
### 対象外ファイル
以下のファイルはレビュー対象から除外してください。
- `src/lib/` 配下(自動生成コード)
- `.next/`, `node_modules/` 配下
- `*.env*` ファイル
- 画像・フォントなどのバイナリファイル
## コードレビュー専用指示
### 重点チェック項目
1. **セキュリティ**: SQLインジェクション、XSS、認証・認可の不備をチェック。機密情報が直接コードにかかれていないかチェック。
2. **パフォーマンス**: N+1問題、不要なループ、メモリリーク
3. **可読性**: 変数名、関数名、コメントの適切性。
4. **保守性**: DRY原則、SOLID原則の遵守
5. **アーキテクチャ**: ベースは 増田亨氏が唱えるドメイン駆動設計に基づいた構成となっているかの観点でチェック。
6. **言語固有のベストプラクティス**: 各言語の推奨パターンに準拠しているか、非推奨・廃止予定のAPIや構文を使用していないかチェック
7. **コーディングルール**: コーディングルールは、.claude/rules/に記載しているのを参照してチェック。
### ESLint & Prettier チェック
レビュー対象ファイルに対して、以下のコマンドを実行し、結果をレビューに含めてください。
1. **ESLint**: `npx eslint {対象ファイル}` を実行し、lint違反があれば指摘してください。
2. **Prettier**: `npx prettier --check {対象ファイル}` を実行し、フォーマット違反があれば指摘してください。
- 違反がない場合は「ESLint/Prettier チェック: 問題なし」と記載してください。
- 違反があり、コマンド実行後修正された場合は、その内容を提示してください。修正前に戻す必要はないです。このファイルをおくことで、Claudeを起動するとスラッシュコマンドとして追加されます。
あとは、このスラッシュコマンドを実行すれば、コードレビューをしてくれます。
コードレビュー実施してみよう
重点チェック項目をちゃんと見てくれていて、指摘してくれました。
アーキテクチャ周り、可読性周りなど、ちゃんとみて指摘してくれました。
---
まとめ
重要度: 重大
件数: 5
主な指摘: テスト用デフォルト値、コード重複、サービス層の責務過多
────────────────────────────────────────
重要度: 中
件数: 5
主な指摘: バリデーション不足、N+1問題、日付フォーマット
────────────────────────────────────────
重要度: 軽微
件数: 2
主な指摘: HTML id重複 上記のようなサマリーと、各指摘+改善案を提示してくれます。
PR前のチェックで、この skills をどんどん活用すれば品質もあがりそうで、人でのPRレビューの負荷も下がりそうな印象ですね!
もっと先まで行くと、エージェントチームでレビューエージェントを作って、開発→レビューをエージェント化したりできそうですね。
また、PR自体のチェックをやらせることもできたらいいですね。今回はプロンプトのやりとりでしたが、PRコメントに指摘のやりとりが残せたら良いですね。
おわりに
今回はClaude Code skills をつくって、コードレビューさせてみました。毎回プロンプトで依頼より、スラッシュコマンドですぐレビューしてくれるので楽になりますね。CLAUDE.md、ルールファイルなど読み取ってレビューしてくれるので精度は高い印象でした。
今回はコードレビューに焦点をあてましたが、これ以外にも skills を活用し、たとえば設計書整備の skills などを作成し、よりよい環境を築けたら最高ですね!
