VBScript コード整形
整形処理はすべてブラウザ内で完結します。データは送信されません
VBScript コードのインデントを整えます。`Sub` / `If … End If` / `For … Next` / `Do … Loop` / `Select Case … End Select` といったブロックキーワードの対応関係から各行の深さを求めます。 ⚠️ はっきり書いておきます:このページには構文木がありません。 当サイトの他の 7 つの言語ツール(Python / Ruby / Java / C / C# / PHP / Perl)は tree-sitter で実際に構文解析し、ブロックの境界はパーサーが与えます。VBScript にはそれができません —— 既成の文法が存在しないからです。公開されている tree-sitter の文法集に VBScript は無く、npm にある唯一の VBA 文法はネイティブアドオンでブラウザでは動きません。 そこでキーワードの対応で代用しています。括弧を数える方式よりはずっと賢く、文字列やコメントの中の偽物(`"End If"` は終端ではない)、単行 `If`(`If x Then y = 1` に `End If` は無い)、行末 `_` の継続行を理解します。ただし「この `}` はどのブロックに属するか」といった問いには答えられません。構文自体が誤っているコードでは、ここのインデントが意図と合わないことがあります —— 他の 7 つは構文エラーがあってもブロック境界はパーサーから得られます。この点は隠さずここに書きます。 ⚠️ 変更するのは各行の先頭の空白だけで、行内の文字には一切触れません。 継続行・文字列・コメントの中身は触れません。 利点は何もダウンロードしないことです(他の 7 つはそれぞれ数百 KB〜5 MB の文法ファイルを取得します)。開いた瞬間に使えます。
機能
- Sub / Function / If / For / Do / While / Select Case / With / Class の対応で整形します
- 単行 If を認識します(`If x Then y = 1` はブロックの開始ではありません)
- 文字列やコメントの中の `End If` などは対応判定に使いません
- 行末 `_` の継続行はそのまま保持し、途中で切りません
- 変えるのは行頭の空白だけで、行内の文字には触れません
- インデントはスペース 2 / 4 / タブから選択
- キーワードの大文字小文字は区別しません(VBScript 自体が区別しないため)
- シンタックスハイライト表示に対応
- すべて端末内で完結し、コードは送信されません(文法ファイルの取得も不要)
使い方
- コードを左側に貼り付けます
- インデント幅を選びます
- Ctrl/⌘ + Enter か「実行」を押します
- 「コピー」で結果を取得します
よくある質問
- 同じサイトの Python / Java の整形ツールと同じものですか?
- いいえ。能力差は実際にありますので、はっきり書きます。 それらは tree-sitter で構文木を作り、各行の深さはそれが属する文法構造で決まります —— パーサーはどの `}` がどのブロックを閉じるかを知っています。 VBScript には使える文法が存在しないため(公開の tree-sitter 文法集に無く、npm にある唯一の VBA 文法はネイティブアドオンでブラウザでは動きません)、ここではキーワードの対応を使います。`If … End If` や `For … Next` といった対を見つけ、そこから深さを求めます。 差が出るのは構文が誤っているコードです:構文木なら構文が誤っていてもブロック境界は分かりますが、キーワード対応はその行の最初の語が何かしか分かりません。したがってコード自体が壊れている場合、ここのインデントは意図と合わないことがあります。
- 単行 If を使っていますが、崩れませんか?
- 崩れません。VBScript では `If x Then y = 1` に `End If` はありません。これをブロックの開始と見なすと、以降の行がどんどん深くなってしまいます。 ここの判定基準はその行が `Then` で終わるかです:`If x Then` はブロック、`If x Then y = 1` は単行です。`If x Then ' 説明` のように Then の後ろがコメントの場合はブロック扱いのままです —— 判定の前にコメントを取り除いているためです。
- 文字列やコメントの中のキーワードを構造と誤認しませんか?
- 誤認しません。構造を判定する前にコメントを外し、文字列リテラルも理解しています:`s = "End If"` の中の `End If` はキーワードではなく、`' End Sub` は行全体がコメントです。 文字列内の連続する引用符(`"彼は ""はい"" と言った"`)は VBScript の規則どおり 1 つのエスケープ引用符として扱うので、文字列が途中で終わることもありません。
- コードの中身は変わりますか?
- 変わりません。触るのは各行の先頭の空白だけです —— 行内の 1 文字も動かさず、並べ替え・折り返し・行削除・文字列やコメントへの介入も行いません。行末 `_` の継続行はまるごと保持します。あのインデントはあなたが決めたもので、組み直すと 1 つの文が 2 つに割れてしまうからです。 同じ理由で、欠けた構文を補うことはできません。これはインデントのツールであり、修復のツールではありません。
関連ツール
JS 圧縮と整形
整形JavaScript をオンラインで圧縮・整形。圧縮はコメントと空白を削除(/*! のライセンス表記は保持)、整形は波括弧とセミコロンで組み直します。
JS 難読化
整形コメントと空白を削り、文字列と数値をエスケープ表記にし、ローカル変数を短い名前に —— 小さく、ざっと見て読みにくく。すべて端末内で処理します。
コード着色
Webコードに色を付け、選択コピーで色ごとスライドや Word に貼れます。インラインスタイルの HTML を出力してブログに貼ることも可能。26 言語に対応。
Shell 整形
整形シェルスクリプトを構造に沿って整形します。if/fi、for/done、case/esac、関数本体が揃います。変更するのは行頭の空白だけで、ヒアドキュメントは逐字保持します。
JSON 整形
整形JSON をブラウザ内で整形・圧縮・検証。折りたたみ可能なツリーで表示し、キーと値の検索、行番号とハイライト付きの編集、Python dict への変換にも対応。
JSON → コード
整形JSON サンプルから TypeScript interface、Go struct、Java class、Rust struct を生成。欠けたキーは任意に、型の衝突は共用型に。すべてブラウザ内で処理します。