多言語対応の docstring/コメントを体系的に管理し高品質なドキュメントを維持する。「docstring を更新して」「コメントを整備して」「ドキュメントコメントを追加」「JSDoc を更新」などで起動。
Scanned 9/7/2026
Install to Claude Code
npx -y skills add wasabeef/claude-code-cookbook --skill update-doc-string --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Update Doc String?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/wasabeef-update-doc-string-947b1904)More formats (shields.io, HTML) on the badges page.
---
description: "多言語対応の docstring/コメントを体系的に管理し高品質なドキュメントを維持する。「docstring を更新して」「コメントを整備して」「ドキュメントコメントを追加」「JSDoc を更新」などで起動。"
allowed-tools:
- Read
- Edit
- Grep
- Glob
---
# 多言語対応 docstring/コメントの管理
多言語対応の docstring/コメントを体系的に管理し、高品質なドキュメントを維持します。
## 使い方
```bash
# 言語を自動検出して実行
「docstring がないクラス・関数に追加し、基準を満たさないコメントを更新してください」
# 言語を指定して実行
/update-doc-string --lang python
「Python ファイルの docstring を PEP 257 準拠で更新してください」
# 特定ディレクトリのドキュメント整備
「src/components/ 配下の関数に JSDoc を追加してください」
```
## オプション
- `--lang <en|ja>` : ドキュメントの記述言語 (デフォルト: 既存コメントから自動判定、なければ en)
- `--style <スタイル>` : ドキュメントスタイルを指定 (言語固有のデフォルトあり)
- `--marker <true|false>` : Claude マーカーを付与するか (デフォルト: true)
## 基本例
```bash
# 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)**:
```python
# 日本語版 (デフォルト)
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)**:
```javascript
/**
* ユーザープロフィールを表示するコンポーネントです。(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**:
```go
// CalculateTotal はアイテムリストの合計金額を計算します。(30-60 文字)
//
// 各アイテムの価格と数量を掛け合わせ、税込み合計を返します。
// 空のスライスの場合は 0.0 を返します。(50-200 文字)
//
// Generated by Claude 🤖
func CalculateTotal(items []Item) float64 {
```
**Rust**:
```rust
/// アイテムリストの合計金額を計算します。(30-60 文字)
///
/// 各アイテムの価格と数量を掛け合わせ、税込み合計を返します。
/// 空のベクタの場合は 0.0 を返します。(50-200 文字)
///
/// Generated by Claude 🤖
pub fn calculate_total(items: &[Item]) -> f64 {
```
**Dart (DartDoc)**:
```dart
/// ユーザープロフィールを表示する 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` など
- 既存のパラメータ・戻り値説明
## 言語別設定
```yaml
# 言語別デフォルト設定
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 要素を必ず含む
- ✅ **完全性**: 役割・使用コンテキスト・注意点を記載
- ✅ **言語規約**: 各言語の公式スタイルガイドに準拠
- ✅ **例外**: エラー・例外の説明 (該当する場合)
- ✅ **正確性**: 実装を分析し、事実に基づいた記述のみ
## 注意事項
**🔴 絶対禁止事項**:
- ❌ ドキュメントコメント以外のコード変更
- ❌ 実装詳細に関する推測 (事実のみ記載)
- ❌ 言語規約に反するフォーマット
- ❌ 既存の型アノテーションの削除・変更
- ❌ 既存コメントとの重複
- ❌ テストファイルへの文字数基準未満のコメント
**実行と検証**:
```bash
# 実行結果の記録
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 との連携
```bash
# プロジェクト全体の分析 (言語自動判定)
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"
```
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!