インデントスタイル — タブ vs スペースとインデントサイズ
インデントスタイル(タブ vs スペース、2スペース vs 4スペース)、ファイルサイズへの影響、圧縮ツールと整形ツールがインデント変換を処理する方法を解説。チーム設定のヒントも含みます。
Techniques
詳細な説明
コードのインデントスタイル
インデントスタイル — タブかスペースか、レベルごとのスペース数 — はソフトウェア開発で最も議論されるトピックの1つです。圧縮の観点からは、インデントはプロダクションコードから完全に削除される純粋なオーバーヘッドです。
タブ vs. スペース
タブ(\t):
- 視覚的な幅に関係なく、インデントレベルごとに1文字
- 視覚的な幅はエディタごとに設定可能(2、4、8カラム)
- スペースよりわずかに小さいファイルサイズ(インデントごとに1バイト vs 2-4バイト)
- アクセシブル — ユーザーが好みの視覚的な幅を設定可能
スペース:
- すべてのエディタとビューアで一貫した視覚的な表示
- Web開発でより一般的(JavaScript、CSS、HTMLコミュニティはスペースを好む)
- 2スペースインデントがJavaScriptエコシステムで最も人気
- 4スペースインデントはPython、Java、C#で一般的
ファイルサイズへの影響
インデントはソースファイルの驚くほど大きな割合を占めることがあります:
ファイル: app.js(500行、平均3インデントレベル)
2スペースインデント: 約3,000バイトのインデント
4スペースインデント: 約6,000バイトのインデント
タブインデント: 約1,500バイトのインデント
数百のファイルを持つプロジェクトでは、この差は積み重なりますが、minificationによって完全に排除され、gzip圧縮によっても十分に処理されます。
圧縮ツールのインデント処理
圧縮ツールは、ソースがタブを使用しているかスペースを使用しているかに関係なく、すべてのインデントを削除します:
// 4スペースインデントのソース
function calculate(items) {
let total = 0;
for (const item of items) {
total += item.price;
}
return total;
}
// 圧縮後の出力(入力のインデントに関係なく同じ)
function calculate(t){let e=0;for(const l of t)e+=l.price;return e}
整形ツールのインデント処理
整形ツールは出力のインデントスタイルを選択できます。つまり:
- チームの好みのスタイルでコードを書く(2スペース、4スペース、またはタブ)
- プロダクション用にminifyする(インデントが除去)
- デバッグ用にbeautifyする(好みのインデントスタイルで)
チーム設定
.editorconfigを使用してチーム全体で一貫したインデントを強制します:
[*]
indent_style = space
indent_size = 2
[*.py]
indent_size = 4
[Makefile]
indent_style = tab
PrettierやESLintの自動フォーマットと組み合わせることで、インデントの議論を完全に排除できます。
ユースケース
インデントスタイルの理解は、整形ツールの設定、チームのコーディング規約の策定、そしてminificationがファイルサイズの議論を完全に排除する理由をステークホルダーに説明する際に重要です。異なるスタイル規約間でコードベースを移行する際に特に関連します。