コードのコメント行数を数えて文書密度を測定
ソースファイルのうち説明に使われている割合を測れます。コメント3行とコード3行を含む6行のコードなら、比率は1、コメントは50パーセントです。引用符の中の記号は数えません。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 言語
- Javascript
- 総行数
- 6
- 空白行
- 1
- コメント行
- 3
- コード行
- 3
コメント行カウンターは、ソースファイルのうち、実行コードではなく説明に使われている部分を測定します。ソースを貼り付け、言語を選択するか自動判定を使用すると、コメント行、コード行、空行、混在行の件数と、コメント対コード比が得られます。コードレビュー、保守計画、品質ダッシュボード、リポジトリ監査で文書密度を確認するための簡潔な指標です。字句解析は決定的に動作し、文字列内の記号をコメントとして誤認せず、選択した言語を毎回明示します。
数値を目標ではなく対話の材料として読み取る
コメント密度は、普遍的な点数にするのではなく、検討を始める材料として使うと有効です。このカウンターはコメント行数をコード行数で割り、さらにコメントとコードの観測総数に占めるコメントの割合も示します。コードの後ろにコメントがある行は両方に数えられ、別途表示される混在行数によって重複を確認できます。
空行はいずれにも含まれません。この定義により継続的な測定を比較できますが、コメントが多いほど必ず優れたソフトウェアになるわけではありません。小さな関数は適切な名前とテストだけで明確な場合があり、プロトコル実装には不変条件や外部制約の詳しい説明が必要な場合があります。
役割、言語、成熟度が近いファイル同士を比較してください。複雑な部分から説明が消えた、生成コードに誤解を招く見出しがある、無効化したコードをコメントに残したため密度が急増した、といった変化を確認します。複雑度、テスト網羅率、変更頻度、レビュー担当者の判断と組み合わせてください。
この指標は読むべき場所を示しますが、コメントの正確性、必要性、有用性までは判断しません。
言語を選択してカウント規則を確認する
コメント記号は言語によって異なるため、言語が分かる場合は明示的に選択してください。C系言語では二重スラッシュの行コメントとスラッシュ・アスタリスクのブロックを使い、Python とシェルではハッシュ記号、SQL では二重ハイフンとブロック、HTML ではマークアップ用の区切りを使います。
自動モードは一般的なソースパターンを調べ、推定した言語を結果に返すため、判断が隠れません。スキャナーは複数行にまたがるブロックコメントの状態を追跡し、単一引用符、二重引用符、バッククォート内にある見かけ上のコメント記号を無視します。各物理行を、コード、コメント、両方、どちらでもない、のいずれかに分類します。
そのため複数行ブロックでは占有する物理行ごとにコメント行が加算されます。命令の後ろのコメントは、コード行、コメント行、混在行のすべてに加算されます。この字句方式は高速で決定的ですが、完全なコンパイラーではありません。
特殊なraw文字列、埋め込み言語、プリプロセッサー技法、言語固有の文書リテラルについて厳密な意味分類が必要な場合は、言語の明示指定や専用パーサーをご利用ください。
レビューと保守性確認に結果を活用する
個別レビューでは、変更前後にカウンターを実行し、一律の基準値を課すのではなく、大きな変化を調べてください。複雑になったアルゴリズムで比率が下がれば、前提や境界条件の説明が不足している可能性があります。比率の上昇は適切な文書化を表す場合もありますが、削除してバージョン管理に任せるべきコードがコメント化されている場合もあります。
リポジトリ全体では、コミット識別子、言語、ファイルパス、生成ファイルかどうかとともに件数を保存します。設定、テスト、生成クライアント、アプリケーションロジックでは文書化の必要性が異なるため、比較可能なグループ内で集計してください。保守性を判断する前に、必ず実際のコメント内容もお読みください。
活用例
文書化の変更をレビューする
変更前後の密度を比較し、複雑なファイルで予期しない増減があれば内容をご確認ください。
品質ダッシュボードを作成する
安定した件数と比率を、複雑度、変更頻度、テスト網羅率とともに記録します。
保守作業の優先度を決める
頻繁に変更されている一方、説明が著しく少ないモジュールを特定します。
よくある質問
コメント対コード比とは何ですか?
コメント行数をコード行数で割り、小数第6位までに丸めた値です。
コードとコメントが混在する行はどう数えますか?
コードとして1回、コメントとして1回、さらに混在行の専用項目にも1回加算します。
空行は比率に影響しますか?
影響しません。 空行は別に表示され、比率のどちらの項にも含まれません。
コメントだけでコードがない場合はどうなりますか?
ゼロ除算には有限の結果がないため比率項目を省略し、個別の件数はそのまま返します。
言語の自動判定は常に正確ですか?
いいえ。 慎重なパターン規則による推定結果を表示します。精度が重要な場合は言語を明示的にお選びください。
コメントの品質も評価しますか?
いいえ。 物理行の密度を測るもので、コメントが正確、最新、有用かどうかは評価しません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev/count-comments \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"// Convert a value\nfunction double(value) {\n return value * 2; // arithmetic\n}"}'const res = await fetch("https://api.kit.forhosting.com/dev/count-comments", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "// Convert a value\nfunction double(value) {\n return value * 2; // arithmetic\n}"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/count-comments",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "// Convert a value\nfunction double(value) {\n return value * 2; // arithmetic\n}"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/count-comments", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"// Convert a value\\nfunction double(value) {\\n return value * 2; // arithmetic\\n}"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"// Convert a value\nfunction double(value) {\n return value * 2; // arithmetic\n}"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/count-comments", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "// Convert a value\nfunction double(value) {\n return value * 2; // arithmetic\n}"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.count_comments",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_mb | 5 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
レビューと保守性確認に結果を活用する
安定した JSON 出力は品質ダッシュボードや継続的インテグレーションのレポートに利用でき、ブラウザー実行は簡単で非公開の確認に適しています。API による自動化は1リクエストあたり $0.002 です。この数値を優先順位付けの根拠として、変更頻度と組み合わせて頻繁に編集される説明不足のファイルを探し、複雑度と組み合わせてレビュー対象を絞り込んでください。