mirror of
https://github.com/yoshiko-pg/difit.git
synced 2026-09-19 05:03:24 +08:00
10 KiB
10 KiB
difitは、ローカルのgit上にある差分をGitHub風のビューアで閲覧・レビューできるCLIツールです。見やすい表示に加え、コメントはAIへのプロンプトとしてコピーできます。AI時代のローカルコードレビューツール!
⚡ クイックスタート
まず試す
npx difit # 最新コミットのdiffをWebUIで表示
インストールして使う
npm install -g difit
difit # 最新コミットのdiffをWebUIで表示
AIエージェントから使えるようにする
npx skills add yoshiko-pg/difit # エージェントにスキルを追加
🚀 使い方
基本的な使い方
difit <target> # 単一コミットのdiffを表示
difit <target> [compare-with] # 2つのコミット/ブランチを比較
単一コミットのレビュー
difit # HEAD(最新)のコミット
difit 6f4a9b7 # 特定のコミット
difit feature # featureブランチの最新コミット
2つのコミットを比較
difit @ main # mainブランチと比較(@はHEADのエイリアス)
difit feature main # ブランチ間を比較
difit . origin/main # 作業ディレクトリとリモートmainを比較
特別な引数
difitは一般的なdiffシナリオ用の特別なキーワードをサポートしています:
difit . # すべての未コミット差分(ステージングエリア + 未ステージ)
difit staged # ステージングエリアの差分
difit working # 未ステージ差分のみ
GitHub PR
difit --pr https://github.com/owner/repo/pull/123
--pr モードでは、内部で gh pr diff --patch を実行してパッチを取得します。
認証は GitHub CLI が処理します:
- 一度ログイン(推奨):
gh auth login - トークン認証(CI/非対話環境):
GH_TOKENまたはGITHUB_TOKENを設定
GitHub Enterprise Server
Enterprise Server の PR を表示する場合は、GitHub CLI を Enterprise ホスト向けに認証してください:
gh auth login --hostname YOUR-ENTERPRISE-SERVER- または
GH_HOST=YOUR-ENTERPRISE-SERVERとGH_TOKEN/GITHUB_TOKENを設定
標準入力
パイプを使用して標準入力経由で統一diff形式を渡すことで、任意のツールからのdiffをdifitで表示できます。
# 他のツールからのdiffを表示
diff -u file1.txt file2.txt | difit
# 保存されたパッチをレビュー
cat changes.patch | difit
# マージベースとの比較
git diff --merge-base main feature | difit
# 既存ファイル全体を新規追加として確認
git diff -- /dev/null path/to/file | difit
# 明示的に標準入力モードを使う
git diff --cached | difit -
標準入力モードは、意図を優先して次のルールで選択されます。
-を指定した場合は常に標準入力モード- positional 引数(
<target>/[compare-with])、--pr、--tuiのいずれかがある場合は Git/PR/TUI モードとして扱い、標準入力を自動読み取りしない - 明示モード指定がない場合のみ、stdin が pipe/file/socket のときに自動で標準入力モードになる
⚙️ CLIオプション
| フラグ | デフォルト | 説明 |
|---|---|---|
<target> |
HEAD | コミットハッシュ、タグ、HEAD~n、ブランチ、または特別な引数 |
[compare-with] |
- | 比較対象の2番目のコミット(2つの間のdiffを表示) |
--pr <url> |
- | レビューするGitHub PRのURL(例:https://github.com/owner/repo/pull/123) |
--port |
4966 | 優先ポート。使用中の場合は+1にフォールバック |
--host |
127.0.0.1 | サーバーをバインドするホストアドレス(外部からアクセスしたい場合は0.0.0.0を指定) |
--no-open |
false | ブラウザを自動的に開かない |
--mode |
split | 表示モード。unifiedまたはsplit |
--tui |
false | WebUIの代わりにターミナルUIを使用 |
--clean |
false | 起動時に既存コメントと閲覧済みファイルをすべてクリア |
--include-untracked |
false | diffにuntrackedファイルを自動的に含める(.またはworkingのみ有効) |
--keep-alive |
false | ブラウザ切断後もサーバーを終了せず起動したままにする(Ctrl+Cで手動停止) |
💬 コメントシステム
difitにはAIコーディングエージェントへフィードバックしやすいレビューコメントシステムが含まれています:
- コメント追加:diffの任意の行のコメントボタンをクリック or 範囲ドラッグしてコメントを追加
- コメント編集:編集ボタンで既存のコメントを編集
- プロンプト生成:コメントには、AIコーディングエージェント用にコンテキストをフォーマットする「Copy Prompt」ボタンが含まれます
- すべてコピー:「Copy All Prompt」を使用して、すべてのコメントを構造化された形式でコピー
- 永続的な保存:コメントはコミットごとにブラウザのlocalStorageに保存されます
コメントプロンプトフォーマット
src/components/Button.tsx:L42 # この行が自動的に追加されます
ここの変数名をもっとわかりやすくして
範囲指定した場合
src/components/Button.tsx:L42-L48 # この行が自動的に追加されます
この部分は不要です
🤖 エージェントからの呼び出し
difitを利用してユーザーにレビューを依頼するSkillを以下でインストールできます。
npx skills add yoshiko-pg/difit
エージェントがコードを編集したあと、difitサーバーを立ち上げるようになります。
🎨 シンタックスハイライト対応言語
- JavaScript/TypeScript:
.js,.jsx,.ts,.tsx - Web技術:HTML, CSS, JSON, XML, Markdown
- シェルスクリプト:
.sh,.bash,.zsh,.fish - バックエンド言語:PHP, SQL, Ruby, Java, Scala, Perl
- システム言語:C, C++, C#, Rust, Go
- モバイル言語:Swift, Kotlin, Dart
- IaC:Terraform (HCL)
- その他:Python, Protobuf, YAML, Solidity, Vim Script
🔍 自動折りたたみファイル
difitは特定のファイルを自動的に識別し、ビューをすっきりさせるために折りたたみます:
- 削除されたファイル: 削除されたファイルは詳細なレビューが不要なため、自動的に折りたたまれます
- 自動生成ファイル: 自動生成されたコードはデフォルトで折りたたまれます。これには以下が含まれます:
- ロックファイル (
package-lock.json,go.mod,Cargo.lock,Gemfile.lockなど) - 圧縮されたファイル (
*.min.js,*.min.css) - ソースマップ (
*.map) - 生成されたコード:
- Orval (
*.msw.ts,*.zod.ts,*.api.ts) - Dart (
*.g.dart,*.freezed.dart) - C# (
*.g.cs,*.designer.cs) - Protobuf (
*.pb.go,*.pb.cc,*.pb.h)
- Orval (
- フレームワーク:
- Ruby on Rails (
db/schema.rb) - Laravel (
_ide_helper.php) - Gradle (
gradle.lockfile) - Python (
uv.lock,pdm.lock)
- Ruby on Rails (
- 一般的な生成ファイル (
*.generated.cs,*.generated.ts,*.generated.js) - コンテンツベースの検出:
@generatedマーカーを含むファイルDO NOT EDITヘッダーを含むファイル- 言語固有の自動生成ヘッダー (Go, Pythonなど)
- ロックファイル (
🛠️ 開発
# 依存関係のインストール
pnpm install
# 開発サーバーの起動(ホットリロード付き)
# これはViteの開発サーバーとCLIの両方をNODE_ENV=developmentで実行します
pnpm run dev
# プロダクションビルドとサーバーの起動
pnpm run start <target>
# プロダクション用ビルド
pnpm run build
# テストの実行
pnpm test
# 型チェックとlintとフォーマット
pnpm run check
pnpm run format
開発ワークフロー
pnpm run dev:Vite開発サーバー(ホットリロード付き)とCLIサーバーを同時に起動pnpm run start <target>:すべてをビルドしてプロダクションサーバーを起動(最終ビルドのテスト用)- 開発モード:ホットリロードと高速開発のためにViteの開発サーバーを使用
- プロダクションモード:ビルド済みの静的ファイルを提供(npxとプロダクションビルドで使用)
🏗️ アーキテクチャ
- CLI:包括的なバリデーションを備えたCommander.jsでの引数解析
- バックエンド:diff処理用のsimple-gitを備えたExpressサーバー
- GitHub統合:GitHub CLI(
gh pr diff --patch)によるPRパッチ取得 - フロントエンド:React 18 + TypeScript + Vite
- スタイリング:GitHubライクなダークテーマを備えたTailwind CSS v4
- シンタックスハイライト:動的言語ロードを備えたPrism.js
- テスト:同じ場所に配置されたテストファイルを使用したVitestユニットテスト
- 品質:oxlint、oxfmt、lefthookプリコミットフック
📋 要件
- Node.js ≥ 21.0.0
- レビューするコミットを含むGitリポジトリ
--prモード利用時は GitHub CLI(gh)
📄 ライセンス
MIT

