Conventional Commitsメッセージの検証と解析
このConventional Commitsメッセージ検証ツールは、コミットの見出しがタイプ、任意のスコープ、説明という一般的な構造に従っているかを確認し、それぞれを安定した構造化データとして返します。build、chore、CI、ドキュメント、機能追加、修正、性能改善、リファクタリング、取り消し、スタイル、テストに対応する標準的なタイプを認識します。共有履歴、リリース工程、自動変更履歴へ入る前に、不正な見出しや未知のタイプを検出できます。簡潔な結果は追加の文字列解析なしでスクリプトから利用できます。
無料で実行
見出しを検証して必要な項目を抽出します
テキスト欄へコミットメッセージ全体を送信してください。検証ツールは改行コードを正規化し、最初の行をConventional Commitsの見出しとして調べます。そのため、空行、本文の段落、フッターを後続行に含めることができます。有効な見出しは、認識済みの小文字タイプで始まります。続けて括弧内にスコープを指定でき、破壊的変更を示す感嘆符も追加できます。その後にはコロン、区切りとなる空白1個、空でない説明が必要です。たとえば、<code>feat(parser): support escaped delimiters</code>からはタイプ<code>feat</code>、スコープ<code>parser</code>、説明<code>support escaped delimiters</code>が得られます。通常の結果には<code>valid: true</code>と破壊的変更を表す真偽値も含まれます。スコープがない場合は、誤解を招く空値やnullを設定せず、そのプロパティー自体を省略します。構文エラーや未知のタイプは、理由が明確な無効入力エラーになります。エディターのフックやパイプラインは、途中まで解析された結果を推測せず、利用者へ適切な修正内容を示せます。
認識される規約を把握します
Conventional Commitsは見出しの形式を定める一方、タイプの語彙は各プロジェクトが決められるようにしています。この機能では、リポジトリ間で予測可能な結果を得るため、実用的な固定セットとしてbuild、chore、ci、docs、feat、fix、perf、refactor、revert、style、testを採用しています。別の単語を使った見出しは、形が正しくても失敗します。あらゆる単語を許可すると、要求されたタイプ検証にならないためです。タイプは小文字に限ります。スコープは任意で、小文字、数字、ピリオド、アンダースコア、スラッシュ、ハイフンを使用でき、先頭は文字または数字にします。この規則により、<code>api</code>、<code>web-client</code>、<code>packages/core</code>などを許可しつつ、曖昧な空白や対応しない括弧を拒否します。説明では元の句読点と大文字表記を維持しますが、先頭と末尾に空白は置けません。コロン直前の感嘆符は破壊的変更を示し、別項目として返されます。本文に<code>BREAKING CHANGE</code>フッターを残すことはできますが、現在の破壊的変更フラグは見出しの記号だけから判断し、フッターの意味は解釈しません。
決定的な検証を開発工程へ組み込みます
候補メッセージを取得できる最も早い段階で検証してください。コミットメッセージ編集フック、pull requestの検査、マージキュー、リリース用メタデータを準備するサービスなどに適しています。ローカルフックはすぐに結果を返し、サーバー側の検証は自動処理や別のクライアントが作ったコミットにも同じ方針を適用します。解析処理は決定的で、上限のある文字列走査だけを行います。リポジトリのホストへ接続せず、Gitオブジェクトを調査せず、diffから意図を推測せず、渡された説明を書き換えず、外部サービスも利用しません。同じ入力なら、ブラウザーでもAPIでも常に同じ項目または同じエラーになります。返されたタイプ、スコープ、説明は、変更履歴の分類、リリース規則、ダッシュボード向けの分類データとして使えます。ただし、プロジェクト固有の意味検証は別に実施してください。たとえば、<code>fix(auth): reject expired tokens</code>の構造が正しいことは確認できますが、実際に不具合を直す変更か、<code>auth</code>が許可されたパッケージかは証明できません。より厳密なスコープ一覧やチケット参照が必要なら、リポジトリの方針と組み合わせてください。
活用例
commit-msgフックを保護します
不正な見出しを直ちに拒否し、リポジトリが求める正確なConventional Commits構造を作成者へ示します。
マージ自動化を検証します
squash、マージキュー、リリースツールが作成したメッセージを、恒久的な履歴へ入る前に確認します。
リリース入力を分類します
タイプ、スコープ、説明、破壊的変更の状態を抽出し、変更履歴の分類やリリース判断に利用します。
よくある質問
1回の検証料金はいくらですか?
APIリクエスト1回につき$0.002です。ブラウザー版もこのページから直接実行できます。
どのコミットタイプを認識しますか?
build、chore、ci、docs、feat、fix、perf、refactor、revert、style、testを認識します。
スコープは必須ですか?
いいえ。feat: add exportとfeat(api): add exportはどちらも有効です。指定がなければ結果からスコープを省略します。
メッセージに本文とフッターを含められますか?
はい。最初の行を見出しとして検証します。後続行は入力に保持しますが、出力項目としては解析しません。
感嘆符は破壊的変更を示しますか?
はい。コロン直前の感嘆符で破壊的変更が真になります。フッターだけにある宣言は解釈しません。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev2/commit-message-lint \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"feat(parser): support escaped delimiters"}'const res = await fetch("https://api.kit.forhosting.com/dev2/commit-message-lint", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "feat(parser): support escaped delimiters"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/commit-message-lint",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "feat(parser): support escaped delimiters"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/commit-message-lint", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"feat(parser): support escaped delimiters"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"feat(parser): support escaped delimiters"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/commit-message-lint", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "feat(parser): support escaped delimiters"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.commit_message_lint",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_chars | 100000 |
max_header_chars | 1000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |