Files
gh-wasabeef-claude-code-coo…/commands/update-doc-string.md
2025-11-30 09:05:37 +08:00

9.6 KiB

Update Doc String

多言語対応の docstring/コメントを体系的に管理し、高品質なドキュメントを維持します。

使い方

# 言語を自動検出して実行
「docstring がないクラス・関数に追加し、基準を満たさないコメントを更新してください」

# 言語を指定して実行
/update-doc-string --lang python
「Python ファイルの docstring を PEP 257 準拠で更新してください」

# 特定ディレクトリのドキュメント整備
「src/components/ 配下の関数に JSDoc を追加してください」

オプション

  • --lang <en|ja> : ドキュメントの記述言語 (デフォルト: 既存コメントから自動判定、なければ en)
  • --style <スタイル> : ドキュメントスタイルを指定 (言語固有のデフォルトあり)
  • --marker <true|false> : Claude マーカーを付与するか (デフォルト: true)

基本例

# 1. 対象ファイルの分析 (プログラミング言語は自動検出)
find . -type f \( -name "*.py" -o -name "*.js" -o -name "*.ts" -o -name "*.dart" -o -name "*.go" -o -name "*.rs" \) | grep -v test
「docstring が不足している要素 (コメント行数 0 または 30 文字未満) を特定してください」

# 2. ドキュメント追加 (言語自動判定)
「特定された要素に言語固有の必須要素を含む docstring を追加してください」
# → 既存コメントに日本語があれば日本語で、なければ英語で記述

# 3. ドキュメント追加 (明示的に英語指定)
/update-doc-string --lang en
「Add docstrings with required elements to the identified elements」

# 4. マーカー確認
「追加・更新したすべての docstring に Claude マーカーがあることを確認してください」

実行手順

1. 対象要素の優先順位

  1. 🔴 最優先: docstring/コメントがない要素 (コメント行数 0)
  2. 🟡 次優先: 基準を満たさない要素 (30 文字未満または必須要素欠如)
  3. 🟢 確認対象: Claude マーカーがない既存コメント

対象要素 (言語共通):

  • Class/クラス定義
  • Function/関数・メソッド
  • Module/モジュール (Python, Go)
  • Enum/列挙型
  • Interface/インターフェース (TypeScript, Go)

2. 言語別記述ルール

Python (PEP 257):

# 日本語版 (デフォルト)
def calculate_total(items: List[Item]) -> float:
    """アイテムリストの合計金額を計算します。(30-60 文字)

    各アイテムの価格と数量を掛け合わせ、税込み合計を返します。
    空のリストの場合は 0.0 を返します。(50-200 文字)

    Args:
        items: 計算対象のアイテムリスト

    Returns:
        税込み合計金額

    Generated by Claude 🤖
    """

# 英語版 (--lang en)
def calculate_total(items: List[Item]) -> float:
    """Calculate the total amount for a list of items. (30-60 chars)

    Multiplies the price and quantity of each item and returns
    the total with tax. Returns 0.0 for empty lists. (50-200 chars)

    Args:
        items: List of items to calculate

    Returns:
        Total amount with tax

    Generated by Claude 🤖
    """

JavaScript/TypeScript (JSDoc):

/**
 * ユーザープロフィールを表示するコンポーネントです。(30-60 文字)
 *
 * アバター画像、ユーザー名、ステータス情報を表示し、
 * クリック時にプロフィール詳細画面へ遷移します。(50-200 文字)
 *
 * @param {Object} props - コンポーネントのプロパティ
 * @param {string} props.userId - ユーザー ID
 * @param {boolean} [props.showStatus=true] - ステータス表示フラグ
 * @returns {JSX.Element} レンダリングされたコンポーネント
 *
 * @generated by Claude 🤖
 */
const UserProfile = ({ userId, showStatus = true }) => {

Go:

// CalculateTotal はアイテムリストの合計金額を計算します。(30-60 文字)
//
// 各アイテムの価格と数量を掛け合わせ、税込み合計を返します。
// 空のスライスの場合は 0.0 を返します。(50-200 文字)
//
// Generated by Claude 🤖
func CalculateTotal(items []Item) float64 {

Rust:

/// アイテムリストの合計金額を計算します。(30-60 文字)
///
/// 各アイテムの価格と数量を掛け合わせ、税込み合計を返します。
/// 空のベクタの場合は 0.0 を返します。(50-200 文字)
///
/// Generated by Claude 🤖
pub fn calculate_total(items: &[Item]) -> f64 {

Dart (DartDoc):

/// ユーザープロフィールを表示する Widget です。(30-60 文字)
///
/// アバター画像、ユーザー名、ステータス情報を縦に配置し、
/// タップ時にプロフィール詳細画面へ遷移します。(50-200 文字)
///
/// Generated by Claude 🤖
class UserProfileWidget extends StatelessWidget {

3. 既存コンテンツ保持ルール

  1. 既存コメントが基準を満たす場合: そのまま保持 (新規追加しない)
    • 基準: 30 文字以上かつ必須要素 (概要・詳細・マーカー) を含む
  2. 既存コメントが基準を満たさない場合: 完全に置き換え (重複させない)
  3. 既存コメントがない場合: 新しいコメントを追加

保持すべき重要情報:

  • URL やリンク: See also:, @see, 参照: など
  • TODO コメント: TODO:, FIXME:, XXX: 形式
  • 注意事項: Note:, Warning:, 注意: など
  • 使用例: Example:, 例:, # Examples など
  • 既存のパラメータ・戻り値説明

言語別設定

# 言語別デフォルト設定
languages:
  python:
    style: "google" # google, numpy, sphinx
    indent: 4
    quotes: '"""'

  javascript:
    style: "jsdoc"
    indent: 2
    prefix: "/**"
    suffix: "*/"

  typescript:
    style: "tsdoc"
    indent: 2
    prefix: "/**"
    suffix: "*/"

  go:
    style: "godoc"
    indent: 0
    prefix: "//"

  rust:
    style: "rustdoc"
    indent: 0
    prefix: "///"

  dart:
    style: "dartdoc"
    indent: 0
    prefix: "///"

品質チェックリスト

  • 文字数: 概要 30-60 文字、詳細 50-200 文字を厳守
  • 必須要素: 概要・詳細説明・Claude マーカーの 3 要素を必ず含む
  • 完全性: 役割・使用コンテキスト・注意点を記載
  • 言語規約: 各言語の公式スタイルガイドに準拠
  • 例外: エラー・例外の説明 (該当する場合)
  • 正確性: 実装を分析し、事実に基づいた記述のみ

注意事項

🔴 絶対禁止事項:

  • ドキュメントコメント以外のコード変更
  • 実装詳細に関する推測 (事実のみ記載)
  • 言語規約に反するフォーマット
  • 既存の型アノテーションの削除・変更
  • 既存コメントとの重複
  • テストファイルへの文字数基準未満のコメント

実行と検証:

# 実行結果の記録
ADDED_COMMENTS=0
UPDATED_COMMENTS=0
ERRORS=0

# 既存コメントから言語を自動判定
# 日本語文字 (ひらがな・カタカナ・漢字) を検出したら ja、それ以外は en
DOC_LANGUAGE="en"  # デフォルト
if grep -r '[ぁ-んァ-ヶー一-龠]' --include="*.py" --include="*.js" --include="*.ts" --include="*.dart" --include="*.go" --include="*.rs" . 2>/dev/null | head -n 1; then
  DOC_LANGUAGE="ja"
fi

# プログラミング言語の自動検出と静的解析
if [ -f "*.py" ]; then
  pylint --disable=all --enable=missing-docstring .
elif [ -f "*.js" ] || [ -f "*.ts" ]; then
  eslint . --rule 'jsdoc/require-jsdoc: error'
elif [ -f "*.go" ]; then
  golint ./...
elif [ -f "*.rs" ]; then
  cargo doc --no-deps
elif [ -f "*.dart" ]; then
  melos analyze
fi

if [ $? -ne 0 ]; then
  echo "🔴 エラー: 静的解析が失敗しました"
  exit 1
fi

# 実行サマリーの出力
echo "📊 実行結果:"
echo "- ドキュメント言語: $DOC_LANGUAGE"
echo "- 追加したコメント: $ADDED_COMMENTS 件"
echo "- 更新したコメント: $UPDATED_COMMENTS 件"
echo "- エラー発生数: $ERRORS 件"

実行成功基準

  1. 完了判定: 以下をすべて満たす場合に成功

    • 言語固有の静的解析が PASSED
    • エラー発生数が 0
    • 追加・更新したコメントがすべて基準を満たす
  2. 部分成功: 以下の場合

    • エラー発生数が 5 件未満
    • 全体の 90% 以上が基準を満たす
  3. 失敗: 以下の場合

    • 静的解析が FAILED
    • エラー発生数が 5 件以上

Claude との連携

# プロジェクト全体の分析 (言語自動判定)
find . -type f \( -name "*.py" -o -name "*.js" -o -name "*.ts" \)
/update-doc-string
「このプロジェクトの docstring を言語別のベストプラクティスに従って更新して」
# → 既存コメントに日本語があれば ja、なければ en で実行

# 明示的に英語ドキュメントで実行
/update-doc-string --lang en
"Update docstrings following language-specific best practices"

# 明示的に日本語ドキュメントで実行
/update-doc-string --lang ja
「このプロジェクトの docstring を言語別のベストプラクティスに従って更新して」

# マーカーなしで実行 (言語自動判定)
/update-doc-string --marker false
"Improve existing docstrings without adding Claude markers"

# 英語ドキュメント、マーカーなし
/update-doc-string --lang en --marker false
"Improve existing docstrings without adding Claude markers"