mcpField
B
busfactor

busfactor

ローカル
github.com/CloudCorpRecordsバージョン管理01 週間前に更新

busfactor について

busfactor は、渡されたコミット数とレビュアー情報から、ファイルごとの著者集中度と外部レビュー状況を示します。単一著者が支配し、外部レビューもないファイルを抽出し、リポジトリのファイル自体は読み取りません。

主な機能

  1. 01ファイル別の著者・コミット統計
  2. 02最多著者の割合と閾値判定
  3. 03外部レビュアー数の集計
  4. 04リスク対象ファイルと件数の要約
  5. 05順序が安定した結果
  6. 06ローカル CLI と MCP サーバー

活用シーン

  1. 01著者が集中しているファイルの特定
  2. 02外部レビューのないファイルの確認
  3. 03チーム変更前のリスクパス確認

MCP 対応

MCP サーバーは `analyze_bus_factor` を提供します。ファイルの著者・レビュアー情報と任意の集中度閾値を受け取り、ファイル情報、リスク対象パス、集計結果を返します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"cloudcorprecords-busfactor": {
"command": "npx",
"args": [
"-y",
"@reneturcios/busfactor"
]
}
}
}
起動コマンドnpx -y @reneturcios/busfactor

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@reneturcios/busfactor0.1.0
ocighcr.io/cloudcorprecords/busfactor:0.1.0

ツール

1

掲載時のツール一覧 · 1 週間前に更新

パラメーター型必須説明
filesarrayはい著者とレビューのデータを含むファイル(1 件以上)
thresholdnumberいいえファイルが単一の作者に支配されているとみなす、作者の最大シェア(任意、デフォルトは 0.8、> 0 かつ <= 1)

詳細

busfactor

すべてのコードベースには、実質的に一人しか把握していないファイルがあります。 その人が休暇中、病欠、あるいはチームを離れた場合、そのファイルは安全に変更できる人がいなくなります。busfactor は、そうしたリスクがどこにあるかを算出します。各ファイルについて、誰が作成したか、各作成者が何回コミットしたか、さらに誰が変更をレビューしたかを渡すと、事実に基づく一覧が返されます。

  • ファイルごとの項目 — 各ファイルの total_commits、異なる作成者の数、top_author と、その作成者がファイルのコミットに占める top_share、および external_reviewers(ファイルのレビュアーのうち、ファイルの作成者ではない人の数)を示します。ファイルの作成者自身によるレビューは外部レビューとして数えないため、作成者だけが確認したファイルは未レビューとして扱われます。
  • 2つのフラグと1つのリスト — ファイルは、最も多くコミットした作成者の割合がしきい値(デフォルトでは 0.8)に達すると dominated になります。また、外部レビュアーがいない場合は never_reviewed になります。両方に該当するファイルは at_risk となり、at_risk_files に該当するパスのみが格納されます。このリストが示すのは、貢献の集中度とレビューの網羅性に関する事実であり、関係者への評価ではありません。
  • 概要の件数 — 分析したファイル数、リスクのあるファイル数、作成者が1人のファイル数、外部レビューを受けていないファイル数を示します。

同一ファイル内で作成者名が重複している場合は、計算前にコミット数を合算し、レビュアー名は重複を除去します。最も多くコミットした作成者の割合は小数点以下4桁に丸めます。支配的かどうかの判定では、レポートに表示されるこの丸め後の割合をしきい値と比較するため、ちょうどしきい値として報告されるファイルは必ず dominated と判定されます。結果内のすべてのリストは昇順に並べ替えられるため、同じデータからは常にまったく同じ一覧が得られます。ファイルリストの欠落や空欄、パスの重複、コミット数が設定されていない作成者など、不正な入力がある場合は、該当するパスを示す検証エラーが発生します(例:files[1].authors[0].commits must be an integer >= 1)。途中までの一覧は生成されません。計算は純粋かつローカルに行われます。ネットワークや設定は不要で、渡された入力以外のファイルを読み込むこともありません。

CLI

npx @reneturcios/busfactor analyze --input args.json
npx @reneturcios/busfactor --version

args.json には引数オブジェクト全体を指定します。

{
  "files": [
    { "path": "src/solo.ts", "authors": [{ "name": "amy", "commits": 10 }] },
    {
      "path": "src/shared.ts",
      "authors": [
        { "name": "amy", "commits": 5 },
        { "name": "bob", "commits": 5 }
      ],
      "reviewers": ["amy", "cleo"]
    }
  ]
}

各ファイルの reviewers のデフォルト値は []、threshold のデフォルト値は 0.8 です。ここでは src/solo.ts は作成者が1人で未レビュー、src/shared.ts は均等に分担され、cleo による外部レビューを受けています。結果の一覧は JSON として出力されます。

{
  "files": [
    {
      "path": "src/shared.ts",
      "total_commits": 10,
      "distinct_authors": 2,
      "top_author": "amy",
      "top_share": 0.5,
      "external_reviewers": 1,
      "never_reviewed": false,
      "dominated": false,
      "at_risk": false
    },
    {
      "path": "src/solo.ts",
      "total_commits": 10,
      "distinct_authors": 1,
      "top_author": "amy",
      "top_share": 1,
      "external_reviewers": 0,
      "never_reviewed": true,
      "dominated": true,
      "at_risk": true
    }
  ],
  "at_risk_files": ["src/solo.ts"],
  "summary": {
    "total_files": 2,
    "at_risk_count": 1,
    "single_author_count": 1,
    "never_reviewed_count": 1
  }
}

終了コード:成功時は 0、実行時エラー(読み取り不能または無効な入力ファイル、入力不正を含む)の場合は 1、使用方法のエラーの場合は 2。

MCP サーバー

npx -y @reneturcios/busfactor mcp

MCP クライアントの設定:

{
  "mcpServers": {
    "busfactor": {
      "command": "npx",
      "args": ["-y", "@reneturcios/busfactor", "mcp"]
    }
  }
}
ツール
  • analyze_bus_factor — 作成者情報とレビューデータから、作成者が1人のファイルと未レビューのファイルを特定します。

    • files(配列、必須、1件以上)— {path, authors, reviewers?} オブジェクトとして指定するファイル。path はファイル間で一意である必要があります。各 authors エントリーは {name, commits} の組で、コミット数は1以上である必要があります。reviewers には、そのファイルへの変更をレビューした人の名前を指定します。
    • threshold(数値、省略可、デフォルト 0.8)— これ以上の場合に、ファイルが1人の作成者に支配されていると判定する、その作成者のコミット割合。0より大きく、1以下である必要があります。

    {files, at_risk_files, summary} を返します。

Docker

docker run -i ghcr.io/cloudcorprecords/busfactor
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/busfactor analyze --input /w/args.json

開発

npm install
npm run build   # tsc -> dist/
npm test        # tsx --test test/*.test.ts (pure local, no network)
npm run dev     # run the CLI from source

ライセンス

MIT — Copyright (c) 2026 Rene Turcios

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。