💬

細かいコメントは書きすぎない方がいい??

に公開

はじめに

コメントは少なければ少ないほどいい。
『Good Code, Bad Code』より

「え、コメントを書かなくていいの!?」
プログラミングを始めたばかりの頃、私はドキュメント至上主義でした。関数1つ書くたびに日本語で説明を付け、引数ごとにコメントを足し……気づけばソースよりコメントが長いコードの完成。

でも実務を1年ほど経験した今、ようやく本書の主張が腑に落ちてきました。結論から言うと “コメントを読まなくても理解できるコード” を書いた方が、チームも未来の自分もハッピーになれます。

この記事では『Good Code, Bad Code』のエッセンスと私の実体験を交えながら、初学者向けに「コメント最小主義」の考え方をまとめます。


TL;DR(3行まとめ)

  1. コメントは“最後の手段”:まずは命名や設計で伝える。
  2. 人は細かい文字を読まない:使う側が絶対に見るのは関数名・引数・戻り値だけ。
  3. 制限で守る:想定外の使い方はコンパイルエラー/例外で防ごう。

なぜコメントは読まれないのか?

契約書メタファ

『Good Code, Bad Code』ではスクーターのレンタルサービスを例にこう語られています。

明確だから読むもの 不明瞭だから読まれないもの
料金 / 借りる場所 / 返却場所 長〜い利用規約の細かい条項

私たちは「1時間いくら? どこで借りてどこで返す?」のような必須情報には必ず目を通します。しかし利用規約に潜む“30 km/h以上で走ると壊れます。壊したら弁償300ドル”の一文まで丁寧に読む人はほとんどいないでしょう。これでは多くの怠惰なユーザー(私も含む)は困ってしまいます...

コードに置き換えると…

“必ず見る”明確なもの “読まれにくい”不明瞭なもの
関数名 / クラス名
引数 / 戻り値
コメント
例外処理

つまり、コメントは規約の細則に等しいというわけです。読まれない前提で設計しないと、バグの温床になります。


コメントを減らす3つの作戦

1. 意味が一目で分かる命名

# Bad
def proc(dt): ...
# Good
def send_daily_report(date: datetime): ...

「名前を読めば用途が分かる」を徹底すれば説明文は要りません。

2. 一般的な実装パターンを使う

  • Python らしいイテレータ
  • REST らしい URL 設計
  • React らしいフック命名

読者が“見慣れた形”ならドキュメントは最低限で済みます。

3. 制限をコードで enforce する

@dataclass(frozen=True)
class KmPerHour:
    value: int

    def __post_init__(self):
        if self.value > 30:
            raise ValueError("30km/h を超える速度は許可されていません 🚫")

「30 km/h以上を禁止する」ロジックを型や例外で表現すれば、規約に埋もれることもありません。


スクーターの例をコードに当てはめる

コード上でユーザーに何かを守らせたい場合は、そもそもできないようにすれば良い話。
先ほどのスクーターの例も、そもそも30km/h以上出ないようにすれば問題ないわけです。

def rent_scooter(*, duration_h: int, speed_limit: int = 30) -> None:
    """
    スクーターをレンタルする

    Parameters
    ----------
    duration_h : int
        レンタル時間(時間単位)
    speed_limit : int, optional
        速度上限 (km/h)。デフォルト 30。
    """
    if speed_limit > 30:
        raise ValueError("Speed limit must be <= 30 km/h")
    ...
  • 速度上限は引数名で主張
  • 上限違反はコメントではなく例外で防止。

これならドキュメントを読まなくても安全に使えますよね。


まとめ

コメントは “補足” ではなく “最後の砦”。
まずは命名・設計・制限で「読まなくても分かる/壊れない」コードにしよう。

もちろん「なぜそう実装したのか」「ドメイン特有の知識」などはコメントに残す価値があります。しかしそれでも最小限で OK。

明日読む自分と、まだ顔も知らない未来の仲間のために——読まれなくても機能するコードを目指してみませんか?


参考文献

  • Sarah Drasner, “Good Code, Bad Code”
    (日本語訳未発売/英語版は各種オンライン書店で購入可能)

Discussion