.gitignoreパターンでパスを判定
Gitがファイルを無視するか、どの規則で決まるかが分かります。logs/build.log はリストの2番目の規則 *.log によって無視され、!important.log のような後の規則は前の判定を覆せます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- パターン
- dist/, *.log, !important.log, secrets/**
- パス
- logs/build.log
- 一致したパターン
- *.log
- 一致したインデックス
- 1
一時リポジトリを作成したりGitを実行したりせずに、リポジトリ相対パスを順序付きの.gitignoreパターンと照合できます。結果には除外対象かどうかが示され、規則が一致した場合は最終的に判定を決めたパターンと0から始まる位置も表示されます。コメント、エスケープ文字、ルート基準の規則、ディレクトリ規則、ワイルドカード、文字クラス、再帰的な二重アスタリスク、否定規則に対応しています。不正なパターンを無害な文字列として黙って扱わず、入力エラーとして報告します。
実際の順序どおりに規則を指定してください
.gitignoreファイルは、互いに独立したglobを集めただけのものではありません。Gitは規則を上から順に評価するため、後から一致した規則によって、それ以前の判定が変わることがあります。対象の除外ファイルに記載されている順序を保ったまま、パターンを送信してください。
通常の一致規則はパスを除外対象にし、エスケープされていない感嘆符で始まる規則は、その判定を取り消します。空行と、エスケープされていないハッシュ記号で始まる行は、通常の除外ファイルと同様に規則として扱われません。
応答には最後に一致したパターンと、0から始まる配列インデックスが含まれるため、ビルドツールや設定エディターで意外な結果が出た場合も理由を説明できます。パスはリポジトリのルートからの相対形式にし、区切りにはスラッシュを使用してください。
正規化した安定したパスを使うことで、絶対パスの接頭辞、親ディレクトリの区間、OS固有の区切り文字によって同じファイルの判定が変わることを防げます。
対応する照合動作をご確認ください
単一のアスタリスクは、1つのパス区間内にある任意の長さの文字列と一致し、疑問符はスラッシュ以外の1文字と一致します。先頭のスラッシュは規則をリポジトリのルートに固定します。スラッシュを含まないパターンは、どの深さにある名前にも一致できます。
その名前が指定パス内のディレクトリを表す場合、その配下も対象です。末尾のスラッシュはディレクトリ規則を表します。この機能が受け取るのはファイルツリーではなくパスなので、パス文字列とその上位要素から判定します。
末尾要素が実際にファイルまたはディレクトリとして存在するかは確認しません。エスケープされた先頭のハッシュ記号と感嘆符は文字どおりに扱い、エスケープされていない末尾の空白は規約に従って削除します。
検証で設定不備を早期に見つけられます
除外ファイルに小さな変更が繰り返し加えられると、globの誤りは見落とされやすくなります。この機能は、閉じていない文字クラス、空の文字クラス、末尾だけのエスケープ、式を伴わない否定記号など、不正な構造を入力エラーとして報告します。正常な応答は規則を変更せず、ネットワークサービス、現在時刻、乱数、リポジトリの内容、ホストOSにも依存しません。
そのため、コミット前の決定的な確認、Webフォーム、IDEの診断、CIのポリシーテストに適しています。判定理由は真偽値単独より役立つ場合が多いためです。
活用例
不足したビルド入力の理由を確認
見つからないパスをプロジェクトの除外規則と照合し、除外を最終決定した規則を表示します。
除外ファイルエディターを検証
設定を保存する前に、規則の並べ替えや新しい否定規則で結果がどう変わるか確認します。
CIでリポジトリ方針を適用
生成物が除外され、必要なフィクスチャとソースファイルは追跡可能なままであることを確認します。
よくある質問
規則の順序は判定に影響しますか?
はい。 各規則は順番に評価され、最後に一致した規則によってパスを除外するかどうかが決まります。
否定パターンに対応していますか?
はい。 エスケープされていない先頭の感嘆符は否定規則を作り、以前に除外されたパスを再び対象にできます。
複数のディレクトリにまたがって一致できますか?
はい。 二重アスタリスクはディレクトリ境界を越えられますが、単一のアスタリスクは1つの区間内に限定されます。
リポジトリやGitの全体設定を読み込みますか?
いいえ。入力したパスと貼り付けた規則を順番どおりに照合するだけです。ディスクからは何も読まないため、最後の部分がファイルかフォルダーかもパスの文字だけで判断します。
どの規則で結果が決まったかは分かりますか?
はい。最後に一致した規則と、0から数えたリスト内の位置が示されます。例では logs/build.log が位置1の *.log によって無視されており、意外な結果の理由もすぐに説明できます。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev2/gitignore-check-path \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"patterns":["dist/","*.log","!important.log"],"path":"logs/build.log"}'const res = await fetch("https://api.kit.forhosting.com/dev2/gitignore-check-path", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"patterns": [
"dist/",
"*.log",
"!important.log"
],
"path": "logs/build.log"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/gitignore-check-path",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"patterns": [
"dist/",
"*.log",
"!important.log"
],
"path": "logs/build.log"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/gitignore-check-path", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"patterns":["dist/","*.log","!important.log"],"path":"logs/build.log"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"patterns":["dist/","*.log","!important.log"],"path":"logs/build.log"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/gitignore-check-path", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"patterns": [
"dist/",
"*.log",
"!important.log"
],
"path": "logs/build.log"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.gitignore_check_path",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_patterns | 1000 |
max_pattern_chars | 1024 |
max_path_chars | 4096 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
対応する照合動作をご確認ください
`[0-9]`のような文字クラスでは、集合または範囲から1文字を選択できます。二重アスタリスクはディレクトリ境界を越えられるため、`docs/**/draft*.md`は`docs`直下の下書きだけでなく、さらに深いフォルダー内の下書きにも一致します。
検証で設定不備を早期に見つけられます
パターンの数と長さにも上限があるため、検証用エンドポイントで無制限のコンパイル処理が発生しません。自動処理へ組み込む際は、真偽値だけでなく`matching_pattern`も保存してください。ブラウザー版とAPI版は同じ純粋なソルバーを実行し、APIリクエストには公開基本料金$0.002が適用されます。
技術的な質問
リポジトリやGitのグローバル設定を読み取りますか?
いいえ。リクエストで指定されたパターンとリポジトリ相対パスだけを使用します。
パターンが不正な場合はどうなりますか?
パターンの位置と構造上の問題を示すinvalid_inputエラーでリクエストが失敗します。
APIリクエストの料金はいくらですか?
基本料金は1リクエストあたり$0.002です。同じ決定的なソルバーをブラウザーでも利用できます。