インデント
コードの階層構造を視覚的に表現するための字下げ
プログラミング基礎
インデントとは
インデント (Indent) は、コードの行頭に空白を入れて階層構造を視覚的に表現する手法である。関数の中身、条件分岐のブロック、ループの本体など、コードの入れ子構造をインデントで示すことで、可読性が大きく向上する。
インデントの効果
// ❌ インデントなし
function process(items: string[]) {
for (const item of items) {
if (item.length > 0) {
console.log(item);
}
}
}
// ✅ インデントあり
function process(items: string[]) {
for (const item of items) {
if (item.length > 0) {
console.log(item);
}
}
}
インデントがないコードは、どの行がどのブロックに属するのか判別できない。インデントがあれば、コードの構造が一目でわかる。
スペース vs タブ
インデントにはスペースとタブの 2 種類がある。
| 方式 | 特徴 |
|---|---|
| スペース 2 個 | JavaScript / TypeScript で主流 |
| スペース 4 個 | Python、Java で主流 |
| タブ | Go で標準、アクセシビリティに有利 |
プロジェクト内で統一されていることが重要であり、どちらが正しいという絶対的な答えはない。チームやプロジェクトの規約に従う。
言語ごとの慣習
| 言語 | 標準的なインデント |
|---|---|
| TypeScript / JavaScript | スペース 2 個 |
| Python | スペース 4 個 (構文上必須) |
| Go | タブ (gofmt で強制) |
| Rust | スペース 4 個 (rustfmt で強制) |
| Java | スペース 4 個 |
Python ではインデントが構文の一部であり、インデントの誤りは IndentationError になる。他の言語ではインデントは見た目の問題だが、Python では正しく動作するために必須である。
フォーマッタによる自動整形
手動でインデントを揃えるのは手間がかかり、ミスも起きやすい。フォーマッタを使えば、保存時に自動でインデントが整う。
| ツール | 対象言語 |
|---|---|
| Prettier | JavaScript, TypeScript, CSS, HTML |
| Black | Python |
| gofmt | Go |
| rustfmt | Rust |
EditorConfig (.editorconfig) を使えば、エディタを問わずインデント設定を統一できる。
# .editorconfig
root = true
[*]
indent_style = space
indent_size = 2
ネストが深いときの対処
インデントが深くなりすぎるのは、コードの構造に問題がある兆候である。
// ❌ ネストが深い
function handle(req: Request) {
if (req.method === "POST") {
if (req.body) {
if (req.body.name) {
if (req.body.name.length > 0) {
// 処理
}
}
}
}
}
// ✅ 早期リターンで平坦に
function handle(req: Request) {
if (req.method !== "POST") return;
if (!req.body?.name?.length) return;
// 処理
}
目安として、インデントが 4 段以上になったら構造の見直しを検討する。
よくある間違い
| 間違い | 問題 | 対策 |
|---|---|---|
| スペースとタブの混在 | 表示が崩れる | フォーマッタで統一 |
| インデント幅の不統一 | 可読性の低下 | EditorConfig を設定 |
| 深すぎるネスト | 構造が追えない | 早期リターン、関数分割 |
コードの可読性とインデントの考え方は関連書籍に詳しい。
この記事は役に立ちましたか?