


インデント論争の歴史は古く、プログラミング言語の黎明期から続いているといわれています。ソースコードとしてはどちらでも問題なく動作しますが、インデントの種類について、なぜエンジニアは長年争いを続けてきたのでしょうか。それは、双方が掲げるそれぞれの「正義」があるからです。
ご存じの方も多いかもしれませんが、実はかつては「タブ派」がスタンダードに近い存在でした。その理由は、データの軽量化です。複数のスペースを連続して打つ代わりに、わずか1バイトのタブ文字1つで済むという事実が、通信速度やストレージ容量が重視される時代には合理性の高い選択だったのです。
さらに、タブの強みは、表示幅を個人の設定で変えられることにもあります。「2段分で見たい」「4段分で見たい」といった個人の好みに、一つのコードで対応できるというアクセシビリティも兼ね備えている、というのがタブ派の主張です。
対するスペース派が掲げるのは、徹底した一貫性です。スペース1つは、どこまでいってもスペース1つです。それはつまり、エディタの種類、OSなどの環境に左右されず、どのような環境で開いても、同じ見た目が保証されるということです。
チーム開発において「誰が見ても構造が崩れない」ことは、コードの可読性を高める上で絶対的な正義である、というのがスペース派の主張です。

Aerial cityscape view of San Francisco from the Salesforce Tower
この論争がいかに熱いものであるかを象徴するエピソードが、人気海外ドラマ『シリコンバレー』に登場します。
『シリコンバレー』は、アメリカのカリフォルニア州にあるITの聖地・シリコンバレーを舞台に、主人公の天才プログラマー、リチャード・ヘンドリクスがスタートアップ企業を立ち上げ、巨大企業と戦いながら奮闘する姿をコミカルに描いた人気作品です。
作中では、技術者特有のこだわりや「あるある」が随所に散りばめられており、その代表例がインデント論争のエピソードです。
主人公の天才エンジニア、リチャードが、同じく優秀なエンジニアの女性といい仲になるのですが、破局の決定打となったのは性格の不一致ではなく「インデント流派の不一致」でした。リチャードがタブ派であるのに対し、彼女はスペース派だったのです。
深夜、彼女がスペースキーを連打する音に、リチャードは耐えきれなくなります。ついには、「タブのほうがサイズも節約できるし、効率的だ!」「タブは環境によって表示が崩れるから、スペースの方がいい」と口論が始まり、そのまま破局を迎えます。
技術者にとって、インデントの違いは、カップルの破局に至るレベルの価値観の相違である。そんなリアリティが、視聴者のエンジニアたちに共感されました。

さて、長く続いたこの聖戦ですが、近年あるデータによって決着が示されました。
Googleのデベロッパー・アドボケイトであるフェリペ・ホッファ氏が、GitHub上の数十億行のコードを対象に行った調査(『400,000 GitHub repositories, 1 billion files, 14 terabytes of code: Spaces or Tabs?』Google Cloud Blog,2016年)では、主要なプログラミング言語のほとんどにおいて、スペース派がタブ派を上回っていることが判明したのです。
面白いのは、言語ごとに傾向が異なることです。
スペースが圧倒的優位で、ほぼ100%に近い勢いであったのがPythonです。これは、Pythonの公式ガイド「PEP 8」でスペース4つが推奨されているため、その規律が守られていることが要因と考えられます。
一方、主要言語の中で唯一タブ派が優勢なC言語では、1970年代からの1バイトでも節約するという文化が今も息づいています。また、C言語で構築された有名なシステムであるLinuxカーネルでは、公式のコーディング規約で「インデントには8文字のタブを使用する」と厳格に定められています。この影響力もあって、C言語の世界ではタブ派が勢力を保ち続けているのでしょう。
なぜ、かつてスタンダードだったタブは劣勢に立たされたのでしょうか。
その要因は、現代のチーム開発におけるコードレビュー文化にあると言われています。ツールやブラウザベースのレビュー方法が普及したことで、環境によって表示幅が変わってしまうタブよりも、どの画面でも表示が崩れないスペースの方が安全であると判断されたのです。
また、タブの強みである、ソースコードを軽量化できるという点が、ストレージ技術や通信インフラの発展によって重要視されなくなったことも大きな要因となっているといえるでしょう。
「タブがスタンダードだと思っていた」という方にとっては少し寂しい結果かもしれませんが、実は現代において、もはやこの議論に熱を上げる必要はなくなっています。
その理由は、PrettierやESLintといった自動フォーマッタの普及です。
エンジニアがインデントのフォーマットにタブ・スペースどちらを選択したとしても、ファイルを保存した瞬間に、プロジェクトで決められたルールに基づいて、ツールが強制的に変換してくれます。
かつてのエンジニアたちが激論を交わした聖戦は、ツールの進化によって終結を迎えつつあります。個人のこだわりを捨て、チームの生産性を重視し、機械による統一を受け入れる。これもまた、ソフトウェア開発が辿り着いた一つの最適化の形と言えるでしょう。
インデントにスペースを選択するか、タブを選択するか考えるとき、その裏には「美しく、メンテナンスしやすいコードを残したい」というエンジニアの共通の想いがありました。
論争はデータによって一つの決着を見ましたが、かつてエンジニアたちがインデントに込めた情熱こそが、ソースコードの品質を磨き上げ、プログラミングの世界を進化させてきたといえるのではないでしょうか。

仕事で疲れた脳みそをリフレッシュしたいとき、一人でゆっくりしたい夜、ちょっとした空き時間に、気軽に「つまめる」ソースコードの話題をお届けします。
まるで隠れ家バーでマスターが語るウンチクのように、普段は見過ごしがちなコードの奥深さや、思わず「へぇ〜!」と唸るようなユニークなアイデア、クスッと笑える小ネタを、ソースコードの世界を熟知した「情シスのじかん」がご紹介します。
コードを書くのが大好きなエンジニアさんも、ソースコードはちょっと苦手…という情シス部門の方も、この特集を読めば、きっとソースコードの新たな一面を発見できるはず。
業務効率化のヒントになるTipsや、セキュリティ対策に役立つ情報も盛りだくさん。
さあ、あなたも「おつまみとしてのソースコード」で、技術の世界をもっと身近に、もっと楽しく感じてみませんか?
本特集はこちら30秒で理解!フォローして『1日1記事』インプットしよう!