世界を動かす技術を、日本語で。

構文ハイライトの誤り

2025年10月16日原文(tonsky.me)

概要

  • シンタックスハイライト はコード可読性向上のための重要なツール
  • 色の使いすぎは逆効果で、 最小限の色数 が理想
  • 何を強調し、何を目立たせないかの 選択が重要
  • コメントや定数など、 目立たせるべき要素 の明確化
  • Alabaster という実践的配色テーマの提案

シンタックスハイライトの正しい使い方

  • シンタックスハイライト はコードの読みやすさ・探索効率向上のためのツール
  • 適切に使えば、 大規模ファイル内での位置把握や特定要素の素早い発見 が可能
  • しかし、 全てを強調 すると、逆に何も目立たなくなる現象(クリスマスライトダイアリア現象)が発生
  • 全要素を明るくする配色 は、重要な情報の識別を困難にする
  • 強調箇所の取捨選択 が不可欠

色数の最小化と実用性

  • 理想的な配色テーマは、 記憶できる色数に制限 すること
  • 例:Alabasterテーマは 4色のみ を使用
    • グリーン:文字列
    • パープル:定数
    • イエロー:コメント
    • ライトブルー:トップレベル定義
  • 色と要素の対応を即座に思い出せる範囲に限定
  • 色の入れ替えが即座に気づけるレベルが理想

強調すべき要素と避けるべき要素

  • 強調すべきは 数が少なく、意味的な区切りや参照点となる要素
    • 定数(数値・文字列)
    • トップレベル定義
  • 変数や関数呼び出しは 頻度が高すぎて強調の意味が薄い
  • 言語キーワード(class, function, ifなど) は強調不要
    • これらは検索対象になることが少なく、目立たせる意義が薄い
  • コメント は本来重要な情報源であり、 目立つ色で強調 すべき
  • コメントには 説明無効化コード の2種類があり、可能なら区別

配色テーマ設計の原則

  • 明度差 を活用し、色の違いを明確に
  • 必要以上に 色数を増やさない
  • 背景色の活用 で、白背景でも色の識別性を向上
  • 太字やイタリック は色の代わりにはならないため、基本的に非推奨
  • 科学的な均整配色(例:全色同明度・均等色相配置)は 実用性が低い

ダークテーマとライトテーマの違い

  • ダークテーマ は色のバリエーションが豊富で、見た目も鮮やか
  • ライトテーマ は使える色が限られ、色の識別性が低下しやすい
  • 背景色の工夫 でライトテーマでも色の判別性を高めるテクニックが有効

実践例:Alabasterテーマの設計

  • 言語キーワード・変数使用・関数呼び出しの強調を排除
  • トップレベル定義や定数、コメントを 明確な色 で強調
  • 記憶しやすく、目に優しい配色 を実現
  • 複数エディター(VS Code, JetBrains, Sublime Text等)で利用可能

まとめと提案

  • 色数の制限と強調箇所の取捨選択 がシンタックスハイライトの本質
  • Alabasterテーマはその実践例であり、他テーマでも応用可能
  • 既存のカラフルなテーマから抜け出し、 意図的で合理的な配色設計 を推奨
  • 配色設計の見直しが、コード可読性・作業効率を大きく向上

Hackerたちの意見

脳って、すごく微妙なことをキャッチするんだよね。特に、パターン認識の力を活かせるときは。デフォルトでごちゃごちゃしない方がいいって意見には賛成だけど、さっきも変な構文ハイライトのおかげで、変数のタイプに基づいてデバッグが30秒も短縮できたばかりなんだ。すぐに間違いだって分かったし、すぐに直せた。しかも、俺は色盲なんだよね。著者が言うほど、もっと色を上手く使えると思うよ。

黒い背景に強烈な黄色のブログを持ってる人から色のアドバイスを受けるのは難しいよね。冗談じゃなくて。著者は様々な構文ハイライトの比較を見せようとしてるけど、明るい黄色の背景と黒いコードサンプルの背景の大きなコントラストに圧倒されちゃって、違いが全然分からないんだよ。

俺はこれでいいと思うよ。ここで見たダークグレーに紫よりは全然マシだし。

俺はこれでいいと思うし、確かにすごく認識しやすいよ。

うわ、目にきつかったな。。

アドバイスには同意だけど、うん、このウェブサイトは目が疲れた。

黄色?確認しに戻らなきゃ - Darkreaderを試してみて :)

同意、彼のサイトの他のページもいくつかチェックして、あの特定の投稿だけの皮肉じゃないか確認したよ。

黄色を見た瞬間、読むのをやめた。色が好きなんだ。虹色のデリミタも好き。今は変えないつもり。ミニマリスティックなハイライトには満足してる。もっとミニマルなハイライトでVisual Studioを使ってたこともあるし、それも悪くなかった。好みの問題だと思うし、あまり気にする価値はないと思う。気になるなら、気にならなくなるまで変えればいい。あんまり考えないようにしてる。

わかる。これ、今年見た中で一番ダサいページだわ。明るい背景に、ヘッダーにはダサいサインがいっぱい、テキストは何か意味不明なことを言ってるし。

ここで簡単なテストをしてみて。ここで関数の定義を見つけてみて。 最初の例で著者が視聴者に関数の定義を見つけるように頼んだとき、彼が間違ってると思ったカラフルな構文ハイライトのおかげで、俺はそれをもっと早く見つけられたんだ。コードの異なる要素を認識するのは、単に色だけじゃなくて、言語の実際の構文やコードブロックの形状にも関わってる。これは好みの問題だし、俺のプログラミングの何十年かの経験の中で、同僚や多くのチームが色々なファンシーなテーマを試してみた結果、結局「つまらない」テーマ、例えばマテリアルテーマに戻ってくるのを見てきた。著者は、リテラル(彼が定数と呼んでいるもの)や、同じ明るさの要求を拒否すること、コメントを強調することについては良いアイデアを持ってると思う。彼の完璧な構文ハイライトをアイデアの市場に持ち込むのは大歓迎だよ。もし彼のアイデアが勝てば、その採用が証明するはず。

同じ経験をしたよ。虹色のハイライトの方がずっと見つけやすかった(モノクロのハイライトの時にどこを探せばいいかは知ってたけど!)。著者は後で色クラス定義について尋ねてるけど、シンタックスハイライトが人間にどう役立つかを根本的に間違えてると思う。お気に入りのハイライトでは色が何か全然わからないけど、脳はすごいパターン認識をして、意識せずにコードを理解する手助けをしてくれるんだ。だから、彼の問題提起は成り立たないけど、実際に問題がないわけじゃない。

Hacker Newsで議論の続きを見る