テキストインデント正規化
2・4・6スペースで字下げされた行は、2スペース単位のレベル1・2・3として読み取られ、各行がその単位どおりに書き直されます。字下げより後ろの内容は一切変わりません。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- def foo(): if True: bar() baz() return
- 入力
- def foo(): if True: bar() baz() return
- インデントのスタイル
- spaces
- インデントの単位
- 2
- 検出した単位
- 2
先頭の空白が揃っていない状態は、コードレビューや設定ダンプ、ドキュメントのブロックへ貼り付けるときに最もよくある悩みの一つです。断片が2スペースと4スペースの段を混ぜたり、さらに悪い場合は一部の行がタブで他の行がスペースだったりすると、リンタや同僚がファイルを拒否するまで問題が残ります。このテキストインデント正規化ツールは複数行のプレーンテキストを受け取り、空でない各行の先頭インデントの書き方を分類し、単一の基準単位(スペース数の最大公約数、またはタブ1つ)を検出し、インデントがその単位の正確な倍数になるよう各行を書き直します。
基準単位の検出と段の書き直しの仕組み
アルゴリズムはまず Windows の CRLF と古い CR の改行を単一の LF 形式に正規化し、文書を行に分割します。完全に空の行は空のまま残し、インデントスタイルには寄与しません。空でない各行について、先頭のスペースとタブの連続を測ります。
空でない行の一部がスペースインデントで他がタブインデントの場合、文書に単一の明確なスタイルがないため同様に拒否されます。変換は推測ではなく意図的である必要があります。インデントされたすべての行がスペースを使う場合、基準単位は正の先頭スペース数すべての最大公約数です。
何もインデントされていない場合、報告用の既定単位は2スペースです。インデントされたすべての行がタブを使う場合、基準単位はタブ1つで、先頭の各タブが1段として数えます。
各行の段は単位で割ったカウントとして再計算され(観測されたスペース数の GCD では正確、タブモードでは整数のタブ数)、行は出力単位×段の長さの繰り返しスペース、または段の長さの繰り返しタブという純粋な接頭辞で書き直されます。先頭インデントの後の内容は決して変更されません。内部スペース、末尾スペース、コードトークンはバイト単位で同一のままです。
活用例
コミット前に貼り付けたコードと設定を整える
開発者は2スペースと4スペースが混在する断片を貼り付けます。ツールは各行を一つの基準単位に書き直し、レビュー用に最大インデント深さを報告します。
よくある質問
ツールはインデントの基準単位をどのように選びますか?
スペースインデントの行では、正の先頭スペース数すべての最大公約数を使います(何もインデントされていない場合の報告用既定単位は2)。タブインデントの行では単位は段あたりタブ1つです。
一部の行がタブで他の行がスペースの場合はどうなりますか?
文書レベルでタブとスペースが混在すると単一の明確な規則がありません。まず一つの様式に変換してから正規化してください。
正規化は行の内部のコードを変更しますか?
いいえ。 先頭インデント列だけが書き直されます。内部の間隔、末尾スペース、インデント以外のすべての文字は変わりません。
2スペースのインデントを4スペースに変換できますか?
できます。スペースで字下げした文章なら、出力の単位を4に指定すると、階層はそのままで1レベルあたり4スペースになります。タブで字下げした文章ではこの指定は無視され、タブが勝手に展開されることはありません。
空行やWindowsの改行はどう扱われますか?
完全な空行は空行のまま残り、字下げの種類の判定には使われません。Windowsや古い形式の改行は、測る前に1種類にそろえられるので、ずれの原因になりません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/text/text-indentation-normalize \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"def foo():\n if True:\n bar()\n baz()"}'const res = await fetch("https://api.kit.forhosting.com/text/text-indentation-normalize", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "def foo():\n if True:\n bar()\n baz()"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/text/text-indentation-normalize",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "def foo():\n if True:\n bar()\n baz()"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/text/text-indentation-normalize", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"def foo():\\n if True:\\n bar()\\n baz()"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"def foo():\n if True:\n bar()\n baz()"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/text/text-indentation-normalize", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "def foo():\n if True:\n bar()\n baz()"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.text_indentation_normalize",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_tokens | 20000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
同一行または文書全体でタブとスペースが明確な規則なく混在する場合、黙って推測せず invalid_input で失敗します。任意の target_unit により、論理的な深さの木を変えずにスペース基準の段を再スケール(例: 2から4)できます。
基準単位の検出と段の書き直しの仕組み
その連続に両方の文字が現れる場合、または他の Unicode 空白が現れる場合、その行は混在とみなし、行番号を明示した明確なメッセージでリクエスト全体が失敗します。任意の target_unit はスペース様式の文書にのみ適用され、段は保持され、出力はその段あたりスペース数を使います。これが2スペースの木を1回の呼び出しで4スペースの木へ変換する方法です。タブ様式の入力は target_unit を無視し、タブを黙って展開しません。
入力契約、応答フィールド、エラーの扱い
非整数や範囲外の値は検証に失敗します。行単位の真のインデント意味論が欲しいときは、改行を事前に潰さず生の複数行本体を送ることを推奨します。1本の長い行は正規化すべきインデントが1つだけです。必須の文字列フィールド text(別名 input、value、string、s、content、body)を含む JSON 本体を POST してください。値は全体の空白トリム後に空でない文字列でなければならず、貼り付け1回で Worker やブラウザのメモリを枯渇させないよう十万文字を超えてはいけません。任意の target_unit は1から32までの正の整数です。成功時の応答は、元の文字列としての input、LF で結合された完全に書き直された複数行結果としての text、spaces / tabs / none としての indent_style、有効な出力単位サイズとしての indent_unit、目標オーバーライド前に推定された単位としての detected_unit、空行を含む行数としての line_count、正の段を持った行数としての indented_lines、最も深いインデント段としての max_level、lines と揃った行ごとの整数深さ配列としての levels、書き直された行文字列の順序付き配列としての lines、スタイル・単位・行数・最大段の短い要約としての message を返します。text 欠落、非文字列、空内容、過大なペイロード、無効な target_unit、同一行のタブとスペース混在、文書レベルのスタイル混在などの検証失敗は invalid_input を返し、課金されません。料金は単位 item での成功リクエストごとに定額 $0.002 です。統合時は、清浄な内容について text または lines をアサートし、回帰では任意で levels と indent_unit を比較し、混在貼り付けの invalid_input は課金イベントではなくクライアント側のスタイル衝突として扱ってください。
このツールを使う場面と関連検索との違い
検索意図がテキストインデント段の正規化、オンラインでの不揃いインデント修正、2と4スペースの不揃い貼り付けを単一単位へ変換、コミット前のタブ対スペース様式検出であるときに、この能力を使ってください。テストの往復確認は簡単です。末尾空白と行内の整列用スペースに注意してください。このツールは先頭インデント列だけを書き直し、行内の整列スペースは扱いません。完全なコードフォーマッタでも、言語対応プリティプリンタでも、空行削除でも、意図的な構造を壊す全体の String.trim でもありません。先頭スペースが0・2・4の3行ブロックを入れ、indent_unit が2で levels が0・1・2であることを期待します。純タブの入れ子ブロックでは indent_style が tabs で、段がタブ数と一致する整数であることを期待します。タブの後にスペースが続く行、またはタブ行の隣にスペース行がある入力を意図的に送り、タブとスペースの混在に言及する invalid_input を確認します。深さの木を保たず各行の前後空白だけを除きたいときは str.trim_lines を、固定インデントで pretty-print すべき JSON なら data.json_format を、人が既に階層的なプレーンテキストやコード風ブロックを書いており一貫した基準単位が必要なときは本能力を選んでください。invalid_input を返す失敗タスクは前払い残高を消費しないため、フォーム検証と CI の負テストを安く保てます。
連携の活用例
CI とリンタの前処理
パイプラインはタブとスペースの混在を invalid_input で早期に拒否するか、スタイル検査の前にスペースのみの木をプロジェクトの target_unit へ正規化します。
ドキュメント、チュートリアル、宿題用フィクスチャ
著者と教員は、エディタ、LMS ツール、ゴールデンテスト向けに、既知の良いインデント複数行例と混在スタイルのエラー事例を生成します。
技術的な質問
2スペースのインデントを4スペースに変換できますか?
はい。スペース様式の入力では target_unit を 4 に設定します。検出された段は保持され、各段は4スペースで書き直されます。タブ様式の入力は target_unit を無視します。
テキストインデントの正規化の料金はいくらですか?
ブラウザのツールは無料です。API リクエストは成功した呼び出しごとに $0.002 の前払い KIT 残高を使い、無効な入力は課金されません。