Gitブランチ名からURLスラッグを作成
feature/add-user-loginのようなGitブランチ名から、ワークフロー用の接頭辞を含まない簡潔なURLスラッグを作成します。最初のパス区間をブランチ種別、その後の全体を説明部分として認識し、小文字とハイフンで構成された語句へ正規化します。処理は常に同じ結果を返し、ネットワークへ接続しません。接頭辞の後に利用可能な説明がない場合は、明確な入力エラーをお知らせします。
無料で実行
ワークフロー情報と必要な説明を分けます
Gitを利用するチームでは、feature、fix、chore、release、docsなどのワークフロー種別をブランチ名の先頭に置くことが一般的です。この区間はブランチの目的を人や自動処理へ伝える際に役立ちますが、公開URLには通常不要です。本機能は最初のスラッシュより前を種別の接頭辞とみなし、それより後の内容だけからスラッグを作ります。たとえばfeature/add-user-loginはadd-user-loginに、fix/checkout/payment-timeoutはcheckout-payment-timeoutになります。説明部分が複数階層でも語句として残るため、最終URLにスラッシュを出さずに意味のある範囲を保てます。Gitツールや継続的インテグレーションから返されることが多いrefs/heads/も、解析前に取り除きます。使用可能な種別を固定リストで制限してはいません。先頭区間が空でなければ接頭辞として扱うため、spike、experiment、maintenanceのような社内規則や、組織独自のチケット運用にも同じ規則をご利用いただけます。
スラッグの正規化規則をご確認ください
説明部分を選び出した後、決められた順序で安定した変換を行います。前後の空白を除去し、アクセント付きラテン文字を正規化して小文字に変換します。続いてASCII英数字以外の連続部分を1つのハイフンへ置き換え、先頭と末尾のハイフンを削除します。そのため、スラッシュ、空白、アンダースコア、句読点、連続した区切りは、同じURL向け形式にまとまります。feature/Account Settings_v2ならaccount-settings-v2になります。結果の予測可能性を重視しており、言語モデル、辞書、ネットワーク照会、乱数、時刻、リポジトリの状態は使いません。単語を補ったり、課題識別子の意味を推測したりすることもありません。説明内の数字は保持されるため、fix/PROJ-482-login-loopのような名前にも適しています。正規化によって記号や未対応の文字体系が消える場合があるため、利用可能な文字または数字が1つ以上残ることも確認します。説明が句読点や未対応文字だけの場合、空の値を返さず入力エラーとしてお知らせします。
公開処理や自動化で安全にお使いいただけます
返されるオブジェクトのフィールドはslugの1つだけです。ドキュメントのプレビュー、一時環境のURL、リリースノートのパス、変更履歴ページ、pull requestの公開フローなどへ直接渡せます。利用先に最大長、予約済みパス、一意性などの追加規則がある場合は、ルートを確保する前に結果をご確認ください。本機能はルーター、ホスティング事業者、Gitサービス、コンテンツデータベースへ問い合わせないため、同じスラッグが使用済みかどうかは判断できません。また、入力された文字列がリポジトリに実在するブランチかどうかも検証せず、記載された命名規則だけを適用します。スラッシュのない名前、種別の直後で終わる名前、正規化後に空になる説明は拒否します。この厳格なエラー処理により、不正な入力から空または一般的すぎるルートへ誤って公開されることを防げます。APIによる自動化では、1回のリクエストに公開基本料金$0.002が適用されます。個別の変換には、同じ決定的な処理をブラウザーでご利用いただけます。
活用例
プレビュー環境へ名前を付ける
featureブランチから接頭辞を除き、独立したレビュー環境向けの読みやすいパスを作成します。
リリースノートのパスを作る
releaseまたはfixブランチの説明から、生成ノート用の一貫したURL区間を取得します。
pull requestのリンクを統一する
階層化されたブランチ説明を、文書や自動化で使える安定した小文字リンクへ正規化します。
よくある質問
種別の接頭辞とは何ですか?
最初のスラッシュより前にある空でない区間です。feature、fix、choreのほか、チーム独自の種別も使えます。
階層化されたブランチパスはどうなりますか?
最初のスラッシュより後の全区間を説明として扱い、それぞれの区切りをハイフンへ変換します。
refs/headsを含む完全な名前も使えますか?
はい。種別の接頭辞と説明部分を判定する前に、先頭のrefs/heads/を取り除きます。
スラッシュのないブランチが失敗するのはなぜですか?
種別の接頭辞と説明部分を明確に分ける必要があり、区切りのない名前は判定できないためです。
ブランチが実在するか確認しますか?
いいえ。決定的な文字列処理だけを行い、リポジトリやGitホスティングサービスへ接続しません。
APIリクエストの料金はいくらですか?
APIリクエストごとに公開基本料金$0.002が適用され、ブラウザー版では同じ変換をローカルで実行できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev/slug-from-git-branch \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"branch":"feature/add-user-login"}'const res = await fetch("https://api.kit.forhosting.com/dev/slug-from-git-branch", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"branch": "feature/add-user-login"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/slug-from-git-branch",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"branch": "feature/add-user-login"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/slug-from-git-branch", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"branch":"feature/add-user-login"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"branch":"feature/add-user-login"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/slug-from-git-branch", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"branch": "feature/add-user-login"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.slug_from_git_branch",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |