========================================================================
コードコメント・ドキュメント規則 (Code Comment & Documentation Guide)
========================================================================
1. 基本方針 (Basic Policy)
------------------------------------------------------------------------
コードの可読性と保守性を高めるため,ファイル・型・関数・定数それぞれに対して
適切な粒度でコメントを記述する.
・言語: 日本語で記述する.
・句読点: 「,」(全角カンマ)を使用し,文末の句点(「.」「。」)は付けない
- 列挙が続く場合は「,」で区切る
・文体: 体言止め,または「〜する」形で統一する
2. コメントの種類と用途 (Comment Types)
------------------------------------------------------------------------
2-1. ファイルドキュメント (File Header Doc Comment)
・ファイルの先頭に必ず記述する.
・JSDoc形式(`/** */`)を使用する.
・書式:
/**
* [ファイル名(拡張子なし)]
* [ファイルの主な責務を1行で説明]
* [補足情報があれば続けて記述]
*/
・例:
/**
* useJoystick
* ジョイスティック入力を受け取り,座標計算と正規化ベクトルの出力を行うフック
* UI描画に必要な中心点・ノブ位置・半径も合わせて提供する
*/
2-2. 型・定数ドキュメント (Type & Constant Doc Comment)
・`export` される型(`type`,`interface`)および定数(`const`)には必ず記述する.
・JSDoc形式の1行コメント(`/** */`)を直前行に記述する.
・書式:
/** [その型・定数が何を表すかを端的に説明] */
export type / const ...
・例:
/** UI側と共有する最大半径の既定値 */
export const MAX_DIST = 60;
/** 2D座標の簡易型 */
type Point = { x: number; y: number };
/** フックが返すUI向けの状態とハンドラ */
type UseJoystickReturn = { ... };
2-3. 関数・コンポーネント・フックドキュメント (Function Doc Comment)
・`export` される関数,Reactコンポーネント,フックには必ず記述する.
・JSDoc形式の1行コメント(`/** */`)を直前行に記述する.
・書式:
/** [その関数・コンポーネントが何をするかを端的に説明] */
export const / function ...
・例:
/** 正規化ベクトルの出力とUI用の座標を提供するフック */
export const useJoystick = ...
/** ポインター入力と描画を結びつけるジョイスティックUI */
export const Joystick = ...
2-4. ブロックコメント (Block Comment)
・関数・コンポーネント内で,処理のまとまりが変わる箇所に記述する.
・通常の行コメント(`//`)を使用する.
・書式:
// [このブロックの処理を端的に説明]
...処理...
・例:
// 入力開始時の基準座標をセットする
const handleStart = ...
// 入力座標からベクトルを計算し,半径でクランプして正規化出力する
const handleMove = ...
2-5. JSXコメント (JSX Comment)
・JSX内のブロック区切りには `{/* */}` 形式を使用する.
・例:
{/* 見た目のみの描画(入力は扱わない) */}
<JoystickView ... />
2-6. 再エクスポートコメント (Re-export Comment)
・外部へ再公開する `export { ... }` には1行ドキュメントを付ける.
・例:
/** 入力半径の既定値を外部から参照できるように再公開 */
export { MAX_DIST } from "./useJoystick";
3. 記述しない場合の判断基準 (When to Omit)
------------------------------------------------------------------------
・ファイル内部でのみ使用し,外部に公開されない型・関数・定数は省略してもよい
・コード自体が自明な場合(変数名で意図が十分伝わる場合)は省略してもよい
・ユニットテストファイルは,テストケース名で意図が伝わる場合は省略してもよい
4. NG例 (Anti-patterns)
------------------------------------------------------------------------
・句点を付ける
- NG: /** ジョイスティックの入力を受け取る. */
- OK: /** ジョイスティックの入力を受け取る */
・「、」「。」を使う
- NG: // 入力開始時の基準座標をセットする。
- OK: // 入力開始時の基準座標をセットする
・ファイルヘッダーを通常の行コメントで書く
- NG: // useJoystick: ジョイスティック入力を受け取るフック
- OK: /** \n * useJoystick\n * ジョイスティック入力を受け取るフック\n */