インデント

コードの階層構造を視覚的に表現するための字下げ

プログラミング基礎

インデントとは

インデント (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 個 PythonJava で主流
タブ 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 を設定
深すぎるネスト 構造が追えない 早期リターン、関数分割

コードの可読性とインデントの考え方は関連書籍に詳しい。

この記事は役に立ちましたか?

関連用語

関連する記事