本文へ移動
cccskills
無料GitHub で公開

code-comments

コード・テストコード・コミットログ・コードコメントのどこに何を書くかを決めるときに使う。コードには How、テストコードには What、コミットログには Why、コードコメントには Why not を書き分ける。実装時とコミット・PR 作成時に使う。

インストール方法を見る

含まれるファイル(1)

  • SKILL.md6.6 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

コードとコメントの書き分け

大原則

情報には置き場所がある。置き場所を間違えた情報は、読み手が探しても見つからないか、古くなって嘘になる。

置き場所書くこと具体的には
コードHowどうやって実現しているか
テストコードWhat何が起きるのが正しいか
コミットログWhyなぜこの変更が必要だったか
コードコメントWhy notなぜ他のやり方を採らなかったか

コードコメントに置くのは「あえてやっていないこと」である。やっていることはコードが語るため、重ねて書くと二重管理になる。

出典: t_wada 氏の投稿(2017年9月5日, https://x.com/t_wada )

コメントを書く前に

コメントを書きたくなったら、先にコードで表現できないかを試す。コードとコメントは別々に変更されるため、コメントは必ず古くなる。 コードで表現できる情報をコメントに置くと、いつか嘘になる。

  1. 名前を変えて説明が要らなくならないか(code-naming スキル)
  2. 処理をひとまとまりの関数に切り出して、関数名で説明できないか
  3. 途中の式を、意味のある名前の変数に受けられないか
  4. 定数に名前を付けられないか

ここまでやって消えなかった情報だけをコメントにする。

コードコメントに書くこと(Why not)

コードを読んでも分からず、かつその場所を触る人が必ず知る必要があることだけを書く。

  • あえてやっていないこと。 一見すると足りない処理が、意図的に無いこと。
  • 一見不自然な書き方をしている理由。 外部仕様の制約、既知の不具合の回避、性能のための妥協。
  • 採用しなかった代替案と、採用しなかった理由。 後から「こう書けばいいのに」と思った人が、同じ検討をやり直さずに済む。
  • 制約の出典。 公式ドキュメントの URL、Issue 番号、実測した結果。後から前提が変わったかを確認できるようにする。

書き方の目安。

// ここでリトライしないのは、呼び出し先が冪等でないため。
// 二重実行になるより、失敗を上位に返すほうが安全(Issue #123 の議論による)。
// 500 件ずつに分けているのは、SDK が 1 回あたり 500 件を超えると
// 例外を投げるため(公式ドキュメント https://example.com/docs/batch )。

コードコメントに書かないこと

書かないもの理由
コードをなぞる説明コードを変えたときに必ず食い違う
変更履歴・作成日・作成者バージョン管理が持っている情報
コメントアウトしたコード消す。必要ならバージョン管理から戻せる
引数名を並べただけの定型的な説明情報量がなく、読み飛ばす習慣を作る
これから直すつもりの内容(期限も担当も無いもの)Issue にする。コードに残すと放置される

テストコード(What)

テストは仕様書として読まれる。テスト名だけを並べて読んだときに、その機能が何をするものか分かる状態にする。

  • 名前に「どういう状態で」「何をすると」「どうなる」を入れる。
  • 1つのテストで検証する結果は、読み手が1文で言える範囲に収める。
  • テスト本体に How を書きすぎない。準備が長くなるなら補助関数に切り出し、テスト本体には検証したいことだけを残す。
  • 期待値がなぜその値なのかが自明でないときだけ、コメントを添える。
test_deliver_notifications_outside_delivery_window_persists_nothing
test_delete_stale_push_tokens_deletes_only_tokens_older_than_400_days

コミットログ・PR(Why)

何を変えたかは差分が語る。なぜ変えたかは差分から読めない。

  • コミットの表題は、その変更が何をするものかを1行で書く。
  • 本文には、なぜその変更が必要だったか、どういう問題を解決するかを書く。
  • 設計上の判断をしたなら、選んだ案と選ばなかった案、その理由を書く。
  • 前提の出典(Issue、ドキュメント、実測結果)を添える。

設計文書の判断理由をどこに残すか

実装計画や設計文書は、実装後に更新されないまま古くなるか、役目を終えて削除される。そこにしか書かれていない判断理由は、いずれ失われる。

実装計画に判断理由が書かれている場合、どちらに移すかを決める。

理由の性質移す先
その行・そのブロックを触る人が必ず知る必要があるコードコメント
変更全体の背景であり、個々の行には紐づかないコミットログ・PR 本文

どちらにも当てはまらない理由は、実装が終われば不要になったということなので、移さない。

書き上げたあとのチェック

  • コードの内容をそのまま日本語にしただけのコメントが残っていないか
  • コメントで説明している内容を、名前の変更や関数の切り出しで消せないか
  • 「あえてやっていないこと」が、コメントとして書かれているか
  • 制約や妥協の理由に、出典(URL・Issue 番号・実測結果)が付いているか
  • コメントアウトされたコードが残っていないか
  • 変更履歴や作成者をコメントに書いていないか
  • テスト名だけを並べて読んで、仕様が分かるか
  • コミットログ・PR 本文に「なぜ」が書かれているか(差分の言い換えで終わっていないか)
  • 実装計画にしか書かれていない判断理由が残っていないか

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

claude-plan-review-loop

無料日本語概要

Claude Code CLIで実装計画レビューの改善ループを回す。実装計画ファイルと要件ファイルを指定し、Claude Codeにレビューさせ、指摘をトリアージして計画を修正し、再レビューする。

keitakn/engineering-skills142026年10月8日 更新

claude-pr-review-loop

無料日本語概要

Claude Code CLIでGitHub PRのコードレビューループを回す。PRのURLを指定し、Claude Codeにレビューさせ、指摘をトリアージしてコードを修正し、再レビューする。PRにリンクされたIssue等は必読として機械的に検証する。

keitakn/engineering-skills142026年10月8日 更新

code-naming

無料日本語概要

コードの識別子(変数・関数・メソッド・クラス・型・ファイル)に名前を付けるときに使う。get の濫用をやめ、何をして値を得るのかが名前から読み取れる状態にする。実装時と、実装計画でメソッド名・クラス名を決めるときの両方で使う。

keitakn/engineering-skills142026年10月8日 更新

codex-plan-review-loop

無料日本語概要

Codex CLIで実装計画レビューの改善ループを回す。実装計画ファイルと要件ファイルを指定し、Codexにレビューさせ、指摘をトリアージして計画を修正し、再レビューする。

keitakn/engineering-skills142026年10月8日 更新

codex-pr-review-loop

無料日本語概要

Codex CLIでGitHub PRのコードレビューループを回す。PRのURLを指定し、Codexにレビューさせ、指摘をトリアージしてコードを修正し、再レビューする。PRにリンクされたIssue等は必読として機械的に検証する。

keitakn/engineering-skills142026年10月8日 更新

explain-visually

無料日本語概要

長大な設計文書・Pull Request・Issueを読み解き、図と短い文を組み合わせた解説HTMLを生成してブラウザで開く。生成したページ内の識別子を指定すると、その項目だけを掘り下げたページも作る。

keitakn/engineering-skills142026年10月8日 更新

keitakn のスキルをすべて見る

このスキルの問題を報告する