APM

>Agent Skill

@nishiyuki0501-wanto/codex-skill-generator

skilldevelopment

Codex CLI用のスキル作成ガイド。YAML frontmatter、ディレクトリ構造、ベストプラクティスを解説。Use when creating new Codex skills, updating existing skills, or learning about Codex skill development.

apm::install
$apm install @nishiyuki0501-wanto/codex-skill-generator
apm::skill.md
---
name: codex-skill-generator
description: Codex CLI用のスキル作成ガイド。YAML frontmatter、ディレクトリ構造、ベストプラクティスを解説。Use when creating new Codex skills, updating existing skills, or learning about Codex skill development.
---

# Codex Skill Generator

Codex CLI用の効果的なスキルを作成するためのガイドです。

## When to Use This Skill

- 新しいCodexスキルを作成する時
- 既存のスキルを更新する時
- スキルの構造やベストプラクティスを学びたい時
- スキルが正しく動作しない時のトラブルシューティング

---

## スキルとは?

スキルはCodex CLIの機能を拡張するための組織化されたフォルダです。指示、リファレンス、スクリプトを含むことができます。

**特徴:**
- モデル呼び出し型(ユーザーのリクエストに基づいて自動的に起動)
- プロジェクト固有またはグローバルに配置可能
- 再利用可能なワークフロー・知識を定義

---

## ディレクトリ構造

### 配置場所

```
# グローバルスキル(全プロジェクトで使用可能)
~/.codex/skills/skill-name/SKILL.md

# プロジェクトスキル(リポジトリ内で使用)
.codex/skills/skill-name/SKILL.md
```

### 基本構造

```
skill-name/
├── SKILL.md              # メインスキルファイル(必須)
├── scripts/              # ユーティリティスクリプト(オプション)
│   ├── setup.sh
│   └── analyze.py
├── templates/            # テンプレートファイル(オプション)
│   └── template.md
└── reference.md          # 追加リファレンス(オプション)
```

---

## スキルの作成手順

### Step 1: ディレクトリ作成

```bash
# プロジェクトスキル
mkdir -p .codex/skills/my-skill-name

# グローバルスキル
mkdir -p ~/.codex/skills/my-skill-name
```

### Step 2: SKILL.md の作成

```yaml
---
name: skill-identifier
description: スキルの説明と使用タイミング。Use when [トリガーシナリオ].
---

# スキル名

スキルの概要説明

## When to Use This Skill

- 使用シナリオ1
- 使用シナリオ2

## Instructions

1. ステップ1
2. ステップ2

## Examples

### 例1
[具体例]
```

### Step 3: 有効化確認

```toml
# ~/.codex/config.toml
[features]
skills = true
```

---

## YAML Frontmatter 仕様

### 必須フィールド

| フィールド | 説明 | 制約 |
|-----------|------|------|
| `name` | スキル識別子 | 小文字、数字、ハイフンのみ。最大64文字 |
| `description` | スキルの説明 | 最大1024文字。トリガーキーワードを含める |

### name の命名規則

```yaml
# ✅ 良い例
name: error-analyzer
name: api-docs-writer
name: db-migration-helper

# ❌ 悪い例
name: Error_Analyzer      # 大文字・アンダースコアNG
name: my skill            # スペースNG
name: スキル名             # 日本語NG
```

### description のベストプラクティス

```yaml
# ✅ 良い例: 具体的でトリガーキーワードが豊富
description: エラー/スタックトレース/ログを解析し、原因の切り分けと最小修正案、確認手順を提示する。Use when debugging errors, analyzing stack traces, or troubleshooting issues.

# ✅ 良い例: 何をするか+いつ使うかが明確
description: CSV/TSV/JSONを要約して洞察を返すスキル。Use when analyzing data, summarizing CSV files, or working with tabular data.

# ❌ 悪い例: 抽象的すぎる
description: データ処理を手伝う

# ❌ 悪い例: いつ使うかが不明
description: このスキルはデータベースマイグレーションとスキーマ変更を処理します
```

---

## 推奨スキル構成

```markdown
---
name: my-skill-name
description: [機能説明]。Use when [使用シナリオ].
---

# スキル名

簡潔な概要説明

## When to Use This Skill

- シナリオ1
- シナリオ2
- シナリオ3

## 手順 / Instructions

### Step 1: [ステップ名]
[説明]

### Step 2: [ステップ名]
[説明]

## Examples

### 例1: [シナリオ]
```[言語]
[コード例]
```

## Context / 補足情報

- 前提条件
- 制約事項

## AI Assistant Instructions

このスキルが起動されたら:

1. まず〇〇を確認
2. 次に〇〇を実行
3. 最後に〇〇を提示

Always:
- 〇〇する
- 〇〇する

Never:
- 〇〇しない
- 〇〇しない
```

---

## スクリプトの活用

### シェルスクリプト(単純な操作向け)

```bash
# scripts/setup.sh
#!/bin/bash
echo "Setting up environment..."
npm install
```

### Pythonスクリプト(複雑なロジック向け)

```python
# scripts/analyze.py
#!/usr/bin/env python3
import json
import sys

def main():
    # 分析ロジック
    result = {"status": "ok"}
    print(json.dumps(result, indent=2))

if __name__ == "__main__":
    main()
```

### SKILL.mdからの参照

```markdown
## 使用方法

セットアップを実行:
```bash
bash scripts/setup.sh
```

分析を実行:
```bash
python3 scripts/analyze.py <path>
```
```

---

## スキルパターン

### パターン1: 分析スキル

```yaml
---
name: code-analyzer
description: コードを分析し、問題点と改善案を提示する。Use when reviewing code, finding bugs, or improving code quality.
---

# Code Analyzer

## Instructions

1. 対象ファイル/ディレクトリを確認
2. 分析観点を明確化
3. 問題点を優先度順にリスト化
4. 具体的な修正案を提示
```

### パターン2: 生成スキル

```yaml
---
name: doc-generator
description: コードからドキュメントを自動生成する。Use when creating API docs, README files, or code comments.
---

# Document Generator

## Instructions

1. 対象コードを読み込む
2. 構造を分析
3. テンプレートに沿ってドキュメント生成
4. 出力形式を確認
```

### パターン3: ワークフロースキル

```yaml
---
name: deploy-helper
description: デプロイ手順をガイドする。Use when deploying to production, staging, or running release processes.
---

# Deploy Helper

## Instructions

1. 現在のブランチ・状態を確認
2. チェックリストを提示
3. 各ステップを順番に実行
4. 結果を確認
```

---

## トラブルシューティング

### スキルが起動しない

**原因1: features.skills が無効**
```toml
# ~/.codex/config.toml
[features]
skills = true  # ← 確認
```

**原因2: ファイル名が間違っている**
```
✅ SKILL.md(大文字)
❌ skill.md
❌ Skill.md
```

**原因3: YAML frontmatter の構文エラー**
```yaml
# ✅ 正しい形式
---
name: my-skill
description: 説明文
---

# ❌ デリミタがない
name: my-skill
description: 説明文

# ❌ タブを使用(スペースを使う)
---
name:	my-skill  # タブNG
---
```

**原因4: description にトリガーキーワードがない**
- ユーザーが使う言葉をdescriptionに含める
- 「Use when」で使用シナリオを明示

### スキルが意図しないタイミングで起動する

**対策:**
- descriptionをより具体的にする
- 他のスキルとキーワードが重複していないか確認

---

## ベストプラクティス

### 1. 1スキル = 1機能

```
✅ error-analyzer: エラー解析専用
✅ doc-generator: ドキュメント生成専用

❌ dev-helper: 何でもやる(曖昧)
```

### 2. 具体例を含める

```markdown
## Examples

### 例: TypeScriptの型エラー

入力:
```
error TS2339: Property 'foo' does not exist on type 'Bar'
```

出力:
```
## 原因
`Bar` 型に `foo` プロパティが定義されていません

## 修正案
1. interface Bar に foo を追加
2. または foo へのアクセスを削除
```
```

### 3. コンテキストを節約

- 基本的な説明は省略(Codexは既に知っている)
- 500行以下を目安に
- 詳細情報は別ファイルに分離

### 4. 明確な指示を書く

```markdown
## AI Assistant Instructions

1. **最初に**: 入力を確認し、不足があれば質問
2. **次に**: 分析を実行
3. **最後に**: 結果を構造化して出力

Always:
- ファイルパスと行番号を明示
- 実行可能なコードを提供

Never:
- 推測だけで回答しない
- 機密情報をログに出力しない
```

---

## クイックリファレンス: チェックリスト

新しいスキルを作成したら確認:

- [ ] ディレクトリ: `.codex/skills/skill-name/` または `~/.codex/skills/skill-name/`
- [ ] ファイル名: `SKILL.md`(大文字)
- [ ] YAML frontmatter: `---` で囲まれている
- [ ] `name`: 小文字・ハイフンのみ、64文字以内
- [ ] `description`: 機能+使用シナリオ、トリガーキーワード含む
- [ ] 「When to Use」セクションがある
- [ ] 具体的な手順・例がある
- [ ] AI Assistant Instructions がある
- [ ] `features.skills = true` が有効

---

## テンプレート

### 最小構成

```markdown
---
name: my-skill
description: [何をするか]。Use when [いつ使うか].
---

# スキル名

## When to Use This Skill
- シナリオ1

## Instructions
1. ステップ1
2. ステップ2

## AI Assistant Instructions
このスキルが起動されたら:
1. [指示]
```

### フル構成

```markdown
---
name: my-skill
description: [詳細な説明]。Use when [シナリオ1], [シナリオ2], or [キーワード].
---

# スキル名

概要説明

## When to Use This Skill
- シナリオ1
- シナリオ2
- シナリオ3

## 前提条件
- 必要な環境
- 依存関係

## Instructions

### Step 1: [ステップ名]
[説明]

### Step 2: [ステップ名]
[説明]

## Examples

### 例1: [シナリオ]
```[言語]
[コード]
```

## Output Format
```
[出力フォーマット]
```

## Context
- 補足情報
- 制約事項

## AI Assistant Instructions

このスキルが起動されたら:
1. [指示1]
2. [指示2]
3. [指示3]

Always:
- [必須事項]

Never:
- [禁止事項]

## 関連リソース
- [リンク]
```