シェルスクリプト整形
整形処理はすべてブラウザ内で完結します。データは送信されません
インデントが失われたシェルスクリプトを整えます。if / fi、for / done、while / do、case / esac、関数本体、サブシェルが階層どおりに揃い、case の分岐ラベルは 1 段深く、;; は分岐の階層に戻ります。このツールが自分に課している線引きは「各行の先頭の空白だけを変える」ことです。行内の 1 文字も触りません。シェルは自由に組み替えられる言語ではありません。`<<EOF` から `EOF` までの内容はデータそのもので、空白 1 つで変わってしまいます。行継続や引用符内の改行も元の位置に依存します。代償として `if [ x ]; then echo ok; fi` を 3 行に展開することはしませんが、スクリプトを壊すこともありません。
機能
- 構造に沿ったインデント:if / for / while / case / 関数本体 / サブシェル
- case の分岐を個別に処理:分岐ラベルは 1 段深く、;; で分岐の階層に戻ります
- 変えるのは行頭の空白のみ。行内の文字はそのまま
- ヒアドキュメント(<<EOF)の間は逐字保持。インデントはデータを変えてしまいます
- 複数行文字列の内部はそのまま。コメント内の引用符を文字列開始と誤認しません
- 終了語のあとにリダイレクトが続く場合(done < file)も正しく揃います
- インデント幅は 2 か 4。行末空白の削除と空行の圧縮も任意で選べます
使い方
- スクリプトを貼り付けます
- インデントがその場で整います
- 必要に応じて幅と 2 つの空白オプションを調整します
- 結果をコピーします
よくある質問
- 「圧縮」機能がないのはなぜですか?
- シェルではそれが罠になるからです。コメントはヒアドキュメントの中に置かれることがあり、そこではデータなので削ると出力が変わります。末尾に改行のないスクリプトを 1 行にまとめると意味が変わります。&& やパイプの前後の改行も自由には動かせません。ほとんどのスクリプトは無事でしょうが、壊れるものは沈黙したまま実行時に奇妙な挙動を示します。そのためこのツールは行いません。
- ヒアドキュメントをそのままにするのはなぜですか?
- `<<EOF` から `EOF` までの各行は書き出されるデータであり、そこでのインデントは内容の一部だからです。インデントを付けることはスクリプトの出力内容を変えることになります。YAML やコード片を生成している場合、インデントがずれるとファイル全体が壊れます。`<<-` は先頭のタブのみ許可しますが、その区別も保っています。
- スクリプトの動作は変わりますか?
- 変わりません。ツールは各行の先頭の空白だけを書き換え、その前にヒアドキュメントと複数行文字列を識別して除外します。行内の内容(余分な空白、特殊文字、コメント)はすべてそのままです。
- スクリプトは送信されますか?
- いいえ。整形はブラウザ内で完結し、ページはリクエストを送りません。デプロイ用スクリプトには鍵や社内アドレスが含まれることが多く、それらが端末から出ることはありません。
関連ツール
コード着色
Webコードに色を付け、選択コピーで色ごとスライドや Word に貼れます。インラインスタイルの HTML を出力してブログに貼ることも可能。26 言語に対応。
JS 圧縮と整形
整形JavaScript をオンラインで圧縮・整形。圧縮はコメントと空白を削除(/*! のライセンス表記は保持)、整形は波括弧とセミコロンで組み直します。
SQL 整形
整形SQL をオンラインで整形:キーワードの大文字小文字を統一し、SELECT / FROM / WHERE などの句ごとに改行。圧縮は余分な空白とコメントを削除します。
JSON 整形
整形JSON をブラウザ内で整形・圧縮・検証。折りたたみ可能なツリーで表示し、キーと値の検索、行番号とハイライト付きの編集、Python dict への変換にも対応。
JSON → コード
整形JSON サンプルから TypeScript interface、Go struct、Java class、Rust struct を生成。欠けたキーは任意に、型の衝突は共用型に。すべてブラウザ内で処理します。
JSON5 変換
整形JSON5 を標準 JSON に変換。コメント・引用符なしキー・シングルクォート・末尾カンマ・16進数・Infinity に対応し、エラーは行と列を示します。