インデントはタブ派?スペース派?—迷えるあなたに徹底解説!

こんにちは。ゆうせいです。
「インデント、タブにする?それともスペース?」
これは初心者から上級者まで、誰もが一度は悩む問題です。
コードをきれいに見せるために必要なインデントですが、タブとスペース、どちらを使うかには深い意味があります。
今回は、それぞれの特徴と、実際にどっちを選べば良いのかをわかりやすく解説します!
インデントとは?まずは基本を確認!
インデントとは、コードの先頭に空白やタブで「字下げ」をすることです。
たとえば、Pythonだとインデントがないとエラーになります:
# 正しい例
if True:
print("Hello")
# 誤った例(インデントなし)
if True:
print("Hello") # ← エラー!
インデントはコードの構造を表す「見た目のルール」であり、言語によっては文法そのものです。
タブ vs スペース:それぞれの特徴を比較!
項目 | タブ(\t ) | スペース( を複数個) |
---|---|---|
表示幅 | 環境によって異なる(例:4文字) | 常に一定(たとえば4スペースなら4文字) |
サイズ | 1文字で済む(ファイルサイズが小) | 複数文字になる(ファイルサイズが少し大) |
柔軟性 | エディタ設定で見え方を変えられる | 見え方が固定される |
チーム開発 | 表示が人によってズレる可能性あり | 見た目が常に同じ |
一貫性 | 混在するとトラブルが起きやすい | Linterで強制しやすい |
例を見てみましょう:
タブ:
→print("Hello") ← タブ1個(表示幅は環境依存)
スペース4個:
print("Hello") ← スペース4つ(どこでも同じ見た目)
混ぜると最悪:
→ print("Hello") ← タブ+スペース(見た目も実行もバグのもと)
Pythonではどっちが推奨されている?
Pythonの公式スタイルガイド「PEP8」では、**明確に“スペース推奨”**とされています。
PEP8より:
「インデントにはスペースを使うこと。タブを混ぜないこと。」
なぜかというと、Pythonはインデントでブロックを判定する言語なので、見た目の不一致がバグの原因になるからです。
JavaScript、C、Go など他の言語では?
言語ごとの傾向を見てみましょう。
言語 | 推奨インデント | 備考 |
---|---|---|
Python | スペース(4個) | PEP8が標準。タブは禁止されることが多い |
JavaScript | スペース(2〜4個) | ESLintで統一可能。プロジェクトによる |
C/C++ | タブ or スペース混在 | 古くからの慣習に依存 |
Go | タブ | gofmt で強制的にタブを使用 |
Rust | スペース(4個) | Rust公式スタイルがスペース推奨 |
つまり、言語によって「公式スタイル」が異なるため、その言語の慣習に従うのが正解です!
VS Codeなどのエディタで自動化しよう!
いちいち自分で気にするのは大変。そこで、エディタの設定で自動化しましょう。
VS Codeの設定例(スペース4つ):
{
"editor.insertSpaces": true,
"editor.tabSize": 4,
"editor.detectIndentation": false
}
Goなどでタブが必要なときは、insertSpaces
をfalse
に変更すればOK!
結論:どちらを使うかは「言語とチームのルール」に合わせよう!
- Pythonならスペース一択(4つ)
- Goならタブ一択
- JavaScriptなどはプロジェクトごとの設定に従う
- チームで働くなら LinterやFormatterの設定を揃えることが最重要
インデントの統一は、「読みやすさ」だけでなく「バグ防止」や「開発効率」に直結します。まるで道路の車線がバラバラだったら事故が増えるのと同じですね。
今後の学習の指針
次におすすめなのは、Linter(構文チェッカー)やFormatter(自動整形ツール)の設定方法について学ぶことです。
特に以下のツールはとても役立ちます:
prettier
(JavaScript/HTML/CSS向けの整形)black
(Pythonのフォーマッタ)gofmt
(Goの標準整形).editorconfig
(多言語対応の共通設定ファイル)
「エディタでどうやってLinter動かすの?」
「チーム全体でFormatterを統一するには?」
そんな疑問があれば、どんどん聞いてくださいね!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
