🔍Claudeを利用したオープンソースのコードリーディング Tips
はじめに
近年、AIを活用した開発効率化の流れが加速していますが、コードリーディングにもAIを活かせることをご存じでしょうか?
私は日常的にオープンソースのコードを読む機会が多いのですが、最近では Claude や DeepSeek のような LLM を使うことで、コードベースの構造や設計意図を効率よく把握できるようになりました。
LLMを活用することで、プロジェクトの構成や品質を「通信簿」のようにスコア付きで評価してくれるため、初見のリポジトリでも要点を素早く掴めるようになります。
本記事では、そうした AIを使ったコードリーディングの実践例を紹介しつつ、従来の手法との組み合わせや、DeepSeekとの比較なども取り上げていきます。
ちなみに対象とするオープンソースプロジェクトは本記事でも利用するClineにしました(ただしClineは.clinerulesのドキュメントにアーキテクチャーと開発ガイドはあります)。
既存の手法
まずは、AIを使う前に、コードリーディングに役立つ手法をいくつか紹介しておきます。
Tokei
Tokei は Rust 製のコードメトリクスツールで、プロジェクト内の言語別のコード行数、ファイル数、コメント行数などを集計してくれます。大規模なコードベースの構成を把握したり、言語別の比率を確認するのに非常に便利です。
🔗 公式リンク:
利用方法は簡単で、プロジェクトのルートフォルダで以下のコマンドを実行するだけです。
tokei
以下はClineでの例です、どの言語がどの程度使われてるのか一目瞭然ですね。
===============================================================================
Language Files Lines Code Comments Blanks
===============================================================================
CSS 1 183 130 24 29
HTML 1 12 12 0 0
JavaScript 19 3780 3230 277 273
JSON 31 82764 82759 0 5
Protocol Buffers 14 1227 882 151 194
Shell 1 27 22 1 4
SVG 1 16 16 0 0
TSX 99 24127 21634 873 1620
TypeScript 375 52413 40224 7279 4910
-------------------------------------------------------------------------------
Markdown 53 6153 0 4299 1854
|- BASH 13 68 68 0 0
|- JSON 2 37 37 0 0
|- Markdown 2 123 0 83 40
|- XML 1 26 26 0 0
(Total) 6407 131 4382 1894
===============================================================================
Total 595 170702 148909 12904 8889
===============================================================================
Onefetch
Onefetch は Rust 製の CLI ツールで、Git リポジトリのメタ情報を視覚的に表示してくれるツールです。
リポジトリの概要(使用言語、最新コミット、作者、ライセンス、スター数など)を一目で把握できるため、GitHub 上のプロジェクトに初めて触れる際のスクリーニングに非常に便利です。
プロジェクトの概要をアイコン付きでカラー表示してくれるのが特徴で、neofetch に似たスタイルを持っています。
🔗 公式リンク:
onefetch # titleを消す場合 --no-titleをつける
以下出力例です、 プロジェクトの概要が一目瞭然で分かりますね。
こうした概要情報をターミナル上で即座に得られることで、プロジェクトを初見で把握する時間を大きく短縮できます。
tree
treeは昔からあるunixコマンドでフォルダの階層構造を把握するために使います。
プロジェクトの階層構造を把握する際には、基本的にフォルダの1 ~ 3階層までみると大体の構造が分かります。
以下は第2階層のフォルダの階層構造を知るためのコマンドです。
tree -dL 2
出力内容
.
├── assets
│ ├── docs
│ └── icons
├── docs
│ ├── assets
│ ├── enterprise-solutions
│ ├── exploring-clines-tools
│ ├── features
│ ├── getting-started
│ ├── mcp
│ ├── more-info
│ ├── prompting
│ ├── provider-config
│ └── running-models-locally
├── eslint-rules
│ └── __tests__
├── evals
│ └── cli
├── hosts
│ └── vscode
├── locales
│ ├── ar-sa
│ ├── de
│ ├── es
│ ├── ja
│ ├── ko
│ ├── pt-BR
│ ├── zh-cn
│ └── zh-tw
├── old_docs
│ ├── architecture
│ ├── cline-customization
│ ├── getting-started-new-coders
│ ├── mcp
│ ├── prompting
│ └── tools
├── proto
│ └── host
├── scripts
├── src
│ ├── api
│ ├── core
│ ├── dev
│ ├── exports
│ ├── integrations
│ ├── packages
│ ├── services
│ ├── shared
│ ├── standalone
│ ├── test
│ └── utils
├── standalone
│ └── runtime-files
├── walkthrough
└── webview-ui
└── src
57 directories
git shortlog
git shortlog は、Git の履歴を著者ごとに集計し、誰がどれだけのコミットをしているかを一覧で確認できる便利なコマンドです。
特に -s(コミット数のみ表示)と -n(数値順にソート)というオプションを併用することで、プロジェクトにおける主要なコントリビューターの貢献度を簡単に把握できます。
gitshortlog -sn
出力内容
1469 Saoud Rizwan
188 Evan
113 pashpashpash
94 canvrno
52 Dennis Bartlett
49 brownrw8
38 Toshii
37 Ara
34 github-actions[bot]
28 yusheng chen
27 Sarah Fortune
24 akfoster
20 Daniel Steigman
20 Frostbourne
18 Trevor Hudson
17 ocasta181
16 Tomás Barreiro
13 Ocasta
12 Andrei Eternal
12 dependabot[bot]
12 watany
9 Andrei Edell
9 Evan Fannin
7 Peter Dave Hello
7 nomaven
6 Daniel Trugman
6 David Nanyan
6 Mark Percival
6 Matt Rubens
6 celestial-vault
6 nickbaumann98
5 AlwaleedAlwabel
5 monotykamary
4 Johann Taberlet
4 vivek-kothandapani
3 Caleb Eom
3 Hiroki Nakashima
3 Michael
3 Michael Overhorst
3 Steven White
3 Suvarchal Kumar Cheedela
3 Wesley Smith
3 omercelik
2 Beatrix
2 Cheese
2 Hanzen Shou
2 Leonid Bugaev
2 Philip Fung
2 Sam
2 Shawn Smith
2 aicc
2 francis
2 kevinneung
2 minorunara
2 suntp
2 yt3trees
2 起司猫
1 *caco
1 0x23d11
1 Adam Hesch
1 Adam Jones
1 Adel Khial
1 Adil Riazudeen
1 Akim Tsvigun
1 Alberto Valiña Lema
1 Alejandro Peral Taboada
1 Alex
1 Andrew Monostate
1 Arri Rucker
1 Asbjørn Rørvik
1 Benny Yen
1 Dave Lasley
1 Deepak Mangla
1 Derek Lopes
1 Dimosthenis Kaponis
1 Ding Fei
1 Donovan Sydow
1 Doug Daniels
1 DrobConsulting
1 Duncan Ogilvie
1 Elon Gliksberg
1 Eric Li
1 Everett Bolton
1 Felipe Albuquerque
1 FlavioInacta
1 Gustavo A. Rodríguez Suárez
1 Gustavo de Oliveira
1 Huge
1 Isabel Zimmerman
1 Jille
1 Jon Atkinson
1 Jonny Chen
1 Jorge García Rey
1 José Luis Di Biase
1 Kefei Tu
1 Kenji Hikmatullah
1 Kevin Taylor
1 KevinTurnbull
1 Khalil Yao
1 Linh Tran
1 Lobay
1 Luis Felipe Salazar Ucros
1 Mark Bradshaw
1 Matthew Rogers
1 Minhao-Zhang
1 Nigel Packer
1 Nir
1 Ofek Lev
1 Pao
1 Paul Gear
1 Peter Stalman
1 Quentin Machu
1 Roman Davydov
1 Roman Rozhdestvenskiy
1 Sanjaykumar S
1 Sean Gallen
1 Shixian Sheng
1 Shlomo
1 Shohei Ihaya
1 Shravan Vadeghar
1 Slava Kurilyak
1 Takuma TSUJI
1 Taosh
1 Tim Stewart
1 Tomochika Hara
1 TongZ
1 Vlad Gerasimov
1 Waylon
1 WingsDrafterwork
1 WinterYukky
1 XcantloadX
1 Xiaoli
1 Xudong Guo
1 Y.Yamamoto
1 Yaroslav Halchenko
1 Yusuke Mizushima
1 Yuto
1 atsushi-ishibashi
1 camaro
1 cheese
1 clicube
1 cschnidr
1 deepman
1 eljapi
1 gislinyuxin
1 holchan
1 k-inoway
1 kimkiyong
1 ksmkzs
1 kuu(Fumiya Kume)
1 limitx0
1 loupzeur
1 mikelmao
1 nighttrek
1 nutstore-dev
1 owengo
1 phadtrapong
1 ryo-ma
1 schaveyt
1 stephen8339
1 supermomonga
1 techknowlogick
1 treeleaves30760
1 tszhong0411
1 user202729
1 wangyijing130
1 wen-jy
1 zapp88
1 乔浩
Claudeを使ったコード構造レビューの手順
今回の実行環境は、Claude デスクトップ + Desktop Commander(MCP Server) の構成で、使用モデルは Sonnet 4 です。
Desktop Commander は、Claude デスクトップと連携して、ローカル環境のファイル操作・フォルダ移動・スクリプト実行などを可能にする補助ツールです。これにより、Claude をあたかもターミナルのように操作できるようになります。
🔗 公式リンク:
なお、Claude デスクトップ単体ではファイル操作やシェル実行ができないため、Desktop Commander の導入は事実上必須です。
ちなみに、同様の解析は Cline でも実行可能ですが、API リクエストごとに料金が発生するため、今回は使用していません。
無料で試す用途であれば、Claude Desktop や OpenRouter 経由の DeepSeek などのモデルを使うのが現時点では手軽です。
プロジェクトの通信簿をつけてもらう
まずは、Claude に解析させたい対象フォルダに移動します。
移動指示は、たとえば以下のように入力します:
cd <対象フォルダ>
その後、Claude に対して
「このプロジェクトの通信簿をつけてください、100点満点でお願いします」
と依頼すると、各観点ごとのスコアとコメントを付けて評価してくれます。
出力内容
このプロジェクトの評価を行うために、まずプロジェクトの構造と内容を詳しく調査させてください。# Clineプロジェクト通信簿 📊
## 総合評価: **87点/100点満点** 🎯
---
## 各項目別評価
### 🔧 技術的品質 (22/25点)
- **技術スタック**: ★★★★★ (5/5)
- TypeScript/React/VS Code拡張の現代的構成
- 52,413行の大規模コードベース
- **コード品質**: ★★★★☆ (4/5)
- ESLint・Prettier完備
- 適切なモジュラー設計
- **アーキテクチャ**: ★★★★★ (5/5)
- MCP(Model Context Protocol)実装
- Protobuf移行進行中
- **セキュリティ**: ★★★★☆ (4/5)
- 適切な権限管理
- セキュリティ設定完備
### ⚙️ 開発プロセス (18/20点)
- **CI/CD**: ★★★★★ (5/5)
- GitHub Actions完備(テスト・リリース自動化)
- 複数環境対応
- **バージョン管理**: ★★★★★ (5/5)
- Changeset使用の変更管理
- 活発な開発(毎日複数commit)
- **コードレビュー**: ★★★★☆ (4/5)
- PRテンプレート・CODEOWNERS設定
- 複数開発者による協働
### 🧪 テスト・品質保証 (10/15点)
- **テストカバレッジ**: ★★☆☆☆ (2/5)
- 39テストファイル/491総ファイル(約8%)
- **改善が必要な領域**
- **テスト種類**: ★★★☆☆ (3/5)
- Unit/Integration/E2Eテスト存在
- **品質ツール**: ★★★★★ (5/5)
- Codespell・Lint完備
### 📚 ドキュメンテーション (19/20点)
- **包括性**: ★★★★★ (5/5)
- 66のMarkdown/MDXファイル
- Mintlifyによるプロ仕様サイト
- **ユーザビリティ**: ★★★★★ (5/5)
- 初心者〜上級者まで対応
- Getting Started〜Enterprise Solutions
- **開発者向け**: ★★★★★ (5/5)
- CONTRIBUTING.md・CODE_OF_CONDUCT.md完備
- **国際化**: ★★★★☆ (4/5)
- 7言語サポート
### 🚀 革新性・価値 (18/20点)
- **革新性**: ★★★★★ (5/5)
- AIコーディングアシスタントの先駆け
- VS Marketplace #1獲得
- **機能豊富さ**: ★★★★☆ (4/5)
- ファイル操作・ターミナル・ブラウザ統合
- 多プロバイダーサポート
- **拡張性**: ★★★★☆ (4/5)
- MCP対応・プラグイン機能
---
## 👍 特に優秀な点
1. **圧倒的なドキュメンテーション品質** - 初心者でもすぐに始められる
2. **プロフェッショナルな開発プロセス** - Enterprise水準の管理体制
3. **技術的先進性** - AI開発の最前線を走る革新的プロダクト
4. **活発なコミュニティ** - 毎日の更新と多数の貢献者
## ⚠️ 改善すべき点
1. **テストカバレッジの向上** - 現在8%を最低20%以上に
2. **テスト戦略の強化** - E2Eテストの充実化
---
## 🎓 評価コメント
Clineは**AIコーディングアシスタント分野のトップクラス**プロジェクトです。技術的品質、ドキュメンテーション、開発プロセスすべてがプロフェッショナル水準で、特にユーザー体験への配慮が素晴らしいです。
唯一の大きな改善点はテストカバレッジの向上ですが、これは多くの急成長プロジェクトが直面する課題です。全体として**非常に高品質で将来性のあるプロジェクト**と評価できます。
**おめでとうございます!87点は優秀な成績です!** 🎉
このように「通信簿をつけて」とClaudeに依頼すると、設計、型、テスト、ドキュメントといった観点ごとに、スコアとコメント付きでプロジェクト全体を評価してくれます。
初見のコードでも構成の特徴や設計方針、注意すべき点などをすばやく把握できるため、効率的なコードリーディングの足がかりとして非常に有用です。
見落としがちな設計の問題点やカバレッジの偏りなども浮き彫りになるため、構造理解や全体像の把握を加速するツールとして活躍してくれます。
フォルダの解析をしてもらう
フォルダの解析をしてもらうには、「フォルダ構成解析 tree -d -L 2 まで」といった指示をすることで解析を行ってくれます。
出力内容
フォルダ構成を解析します。`tree -d -L 2`コマンドでディレクトリ構造を確認しましょう。# Clineプロジェクト フォルダ構成解析 📁
## ディレクトリツリー構造 (深度2まで)
```
.
├── assets/ # アセット関連
│ ├── docs/ # ドキュメント用画像・メディア
│ └── icons/ # アイコンファイル
├── docs/ # メインドキュメンテーション
│ ├── assets/ # ドキュメント用アセット
│ ├── enterprise-solutions/ # エンタープライズ向け情報
│ ├── exploring-clines-tools/ # ツール解説
│ ├── features/ # 機能説明
│ ├── getting-started/ # 入門ガイド
│ ├── mcp/ # Model Context Protocol
│ ├── more-info/ # 追加情報
│ ├── prompting/ # プロンプトエンジニアリング
│ ├── provider-config/ # プロバイダー設定
│ └── running-models-locally/ # ローカルモデル実行
├── eslint-rules/ # カスタムESLintルール
│ └── __tests__/ # ESLintルールのテスト
├── evals/ # 評価・ベンチマーク
│ └── cli/ # CLI評価ツール
├── hosts/ # ホスト環境
│ └── vscode/ # VS Code関連
├── locales/ # 国際化対応
│ ├── ar-sa/ # アラビア語
│ ├── de/ # ドイツ語
│ ├── es/ # スペイン語
│ ├── ja/ # 日本語
│ ├── ko/ # 韓国語
│ ├── pt-BR/ # ブラジルポルトガル語
│ ├── zh-cn/ # 簡体中国語
│ └── zh-tw/ # 繁体中国語
├── old_docs/ # 旧ドキュメント(アーカイブ)
│ ├── architecture/ # アーキテクチャ設計
│ ├── cline-customization/ # カスタマイゼーション
│ ├── getting-started-new-coders/ # 初心者向け
│ ├── mcp/ # MCP関連
│ ├── prompting/ # プロンプト関連
│ └── tools/ # ツール関連
├── proto/ # Protocol Buffers定義
│ └── host/ # ホスト関連プロトコル
├── scripts/ # ビルド・デプロイスクリプト
├── src/ # メインソースコード
│ ├── api/ # API関連
│ ├── core/ # コア機能
│ ├── dev/ # 開発用ユーティリティ
│ ├── exports/ # エクスポート機能
│ ├── integrations/ # 外部統合
│ ├── packages/ # パッケージ管理
│ ├── services/ # サービス層
│ ├── shared/ # 共有コンポーネント
│ ├── standalone/ # スタンドアロン版
│ ├── test/ # テスト関連
│ └── utils/ # ユーティリティ関数
├── standalone/ # スタンドアロン実行環境
│ └── runtime-files/ # ランタイムファイル
├── walkthrough/ # チュートリアル
└── webview-ui/ # UI層(React)
└── src/ # UIソースコード
```
## 📋 構成分析
### 🏗️ **アーキテクチャの特徴**
1. **明確な責任分離**
- `src/` - バックエンド/拡張機能ロジック
- `webview-ui/` - フロントエンド/UI
- `docs/` - ドキュメンテーション
- `evals/` - 品質評価
2. **国際化対応**
- 8言語サポート(`locales/`)
- グローバル展開を意識した設計
3. **プロトコル駆動開発**
- `proto/` - Protocol Buffers使用
- 型安全な通信プロトコル
### 🎯 **特に注目すべき構造**
- **`src/core/`** - アプリケーションの心臓部
- **`src/integrations/`** - VS Code等との統合層
- **`docs/`** - 非常に充実したドキュメント体系
- **`evals/`** - 品質保証への真剣な取り組み
- **`old_docs/`** - 適切なアーカイブ管理
### 📊 **構成の品質評価**
- ✅ **論理的構造** - 機能別に明確に分離
- ✅ **スケーラビリティ** - 拡張しやすい設計
- ✅ **保守性** - 責任分離が明確
- ✅ **国際化** - グローバル対応完備
- ✅ **ドキュメント** - 包括的なドキュメント体系
**総ディレクトリ数: 57** - 大規模でありながら整理された構造です!
このように、各フォルダの役割や構成意図を簡潔に説明してくれるため、初見のコードベースでも構造や責務の把握がスムーズに進みます。
DeepSeek R1-0528でも同様の評価を実施してみた
Claudeと同じことをDeepSeekでもやってみました。
検証環境はCline + Open Routerのdeepseek/deepseek-r1-0528:freeモデルです。
🔗 リンク:
ちなみにこのモデルは、OpenRouter の人気ランキングで現在10位にランクインしています。
🔗 リンク:
プロジェクト全体の通信簿をつけてもらう
Claudeと同じ内容を試してみました
出力内容
評価結果をまとめます。各項目を10点満点で評価し、総合評価を100点満点で算出します。
### 評価項目と点数
1. **ドキュメンテーションの充実度 (10/10点)**
- README.mdが多言語対応で詳細な説明あり
- [CONTRIBUTING.md](http://contributing.md/), CODE_OF_CONDUCT.mdなど開発者向けドキュメント完備
- 公式ドキュメント(docs/)が機能別に体系化され充実
2. **テストカバレッジと品質 (5/10点)**
- Mochaテストフレームワークの設定あり
- テストディレクトリが空で実質的なテストケース不足
- テストスクリプトは存在するがカバレッジ不明
3. **コードの保守性 (9/10点)**
- TypeScriptで型安全な実装
- モジュール化が適切(core, services, integrationsなど)
- エイリアスを使用したパス解決で可読性向上
- 複雑な処理にはコメント付与
4. **ビルド・デプロイの容易さ (9/10点)**
- esbuildを使用した効率的なビルドシステム
- 開発/本番モードの切り分けが明確
- スタンドアロンビルドのサポート
- WASMファイルの自動コピー機能
5. **エラーハンドリングとロギング (8/10点)**
- エラーレベル別のロギング(error, warn, debugなど)
- 専用のErrorServiceでエラー管理
- 例外処理が適切に実装
- 改善点: ログの構造化(JSON形式など)が不足
6. **パフォーマンス (8/10点)**
- 非同期処理を適切に使用(async/await)
- コンテキスト保持(retainContextWhenHidden)によるパフォーマンス改善
- ツリーシェイキング可能なビルド設定
- 改善点: 大規模プロジェクトでのパフォーマンス検証データなし
7. **セキュリティ (9/10点)**
- 機密情報はVSCodeのシークレットストレージを使用
- 認証処理にstateパラメータを使用したCSRF対策
- コンテンツセキュリティポリシー(CSP)適用
- 改善点: サニタイズ処理の明示的な実装が不足
8. **ユーザーフレンドリーさ (10/10点)**
- 直感的なUI/UX設計
- コンテキストメニュー統合
- マルチインスタンス対応(サイドバー+タブ)
- 豊富なカスタマイズオプション
- ホットリロード対応の開発モード
### 総合評価: 86点
**内訳:**
(10+5+9+9+8+8+9+10) × 10/8 = 86点
**優れている点:**
- ドキュメンテーションが非常に充実
- モジュール化された保守性の高いコード構造
- ユーザーフレンドリーな設計と多機能
- セキュリティ対策が適切に実装
**改善が必要な点:**
- テストカバレッジの大幅な強化が必要
- ログの構造化と詳細なエラートラッキング
- 大規模プロジェクトでのパフォーマンス検証
- 入力値のサニタイズ処理の追加
このプロジェクトは非常に高い完成度を持っていますが、テスト不足が顕著なため、その部分を重点的に改善することでさらに品質が向上します。
プロジェクトの通信簿: 86点/100点
詳細評価:
- ドキュメンテーション: 10/10
- テスト: 5/10
- 保守性: 9/10
- ビルド: 9/10
- エラーハンドリング: 8/10
- パフォーマンス: 8/10
- セキュリティ: 9/10
- UX: 10/10
主な改善点:
1. テストカバレッジの拡充
2. 構造化ログの実装
3. 大規模プロジェクトでのパフォーマンス検証
4. 入力値サニタイズの強化
全体的に優れたプロジェクトですが、テスト不足が顕著です。テストケースを追加することで、さらに信頼性が向上します。
Claude が 87 点、DeepSeek が 86 点と、ほぼ同じような評価結果になりました。
どちらもテスト関連でツッコミが入っていますが、まあオープンソースという前提を考えると、そこはある程度仕方ない部分もありますね。
フォルダの解析をしてもらう
同様に解析してもらいました。
出力内容
フォルダ構成を確認しました。プロジェクト構造は非常に整理されており、機能別・層別に適切に分割されています。特に以下の点が優れています:
1. **論理的なディレクトリ構成**
- `src/`配下に`core`, `services`, `integrations`など責務が明確
- ドキュメントが`docs/`配下でカテゴリ別に整理
- 多言語対応のロケールが`locales/`で管理
2. **開発支援環境**
- ビルドスクリプト(`esbuild.js`), テスト(`test/`), リンター設定(`eslint-rules/`)が整備
- プロトコル定義(`proto/`)が分離
3. **拡張性**
- `hosts/`でVSCode拡張機能のホスト機能を分離
- `webview-ui/`でフロントエンドを分離
プロジェクト構造の評価を追加し、総合評価を更新します。
### 評価項目と点数(更新版)
1. **プロジェクト構造 (10/10点)**
- 機能別・層別の明確な分割
- 国際化対応の適切な実装
- 拡張性を考慮した設計
- 開発支援ツールの統合
### 総合評価: 89点
**内訳:**
(10+5+9+9+8+8+9+10+10) × 100/90 = 89点
フォルダ構成の解析結果は、Claude と DeepSeek でかなり違いがありました。
Claude は tree コマンドの出力構造を保ちながら、そのまま各フォルダの役割を丁寧に解説してくれたのに対し、DeepSeek は全体像を文章ベースで要約するスタイルでした。
そのため、構造の可視性という点では Claude の方が圧倒的にわかりやすかったという印象です。
まとめ
ClaudeなどのLLMを活用することで、オープンソースのコードリーディングは格段に効率化されるようになってきました。
最近リリースされたDeepSeekでも同様の解析を試してみたところ、こちらも非常に高い精度でコードを評価してくれました。
今回紹介した手法は、オープンソースに限らず、社内プロジェクトや個人開発にも十分応用可能な内容ですので効率よくプロジェクトの把握をする際におすすめのTipsとなります。
Discussion