🎉
Claude Code SKILL.md 肥大化対策パターン
TL;DR
- 決定論的処理(日付計算、ファイル操作)はスクリプト化
- SKILL.mdは「何を呼ぶか」だけ記述(42行に削減)
- AIには創造性が必要な処理のみ任せる
実装パターン
SKILL.mdが肥大化する原因は、決定論的処理を自然言語で記述していること。以下のスクリプトで解決できます。
#!/bin/bash
# get_next_date.sh - 次の火曜or木曜を計算
# Usage: ./get_next_date.sh [base_date]
# Output: YYYY-MM-DD
set -euo pipefail
BASE_DATE="${1:-$(date +%Y-%m-%d)}"
# 曜日を取得(0=日, 1=月, ..., 6=土)
day_of_week=$(date -j -f "%Y-%m-%d" "$BASE_DATE" "+%w" 2>/dev/null || \
date -d "$BASE_DATE" "+%w")
# 次の火曜(2)または木曜(4)までの日数を計算
case $day_of_week in
0) days_to_tue=2; days_to_thu=4 ;; # 日曜
1) days_to_tue=1; days_to_thu=3 ;; # 月曜
2) days_to_tue=7; days_to_thu=2 ;; # 火曜 → 次は木曜
3) days_to_tue=6; days_to_thu=1 ;; # 水曜
4) days_to_tue=5; days_to_thu=7 ;; # 木曜 → 次は火曜
5) days_to_tue=4; days_to_thu=6 ;; # 金曜
6) days_to_tue=3; days_to_thu=5 ;; # 土曜
esac
# 早いほうを選択
if [[ $days_to_tue -le $days_to_thu ]]; then
days_to_add=$days_to_tue
else
days_to_add=$days_to_thu
fi
# 日付を計算(macOS/Linux両対応)
if date -v +1d > /dev/null 2>&1; then
date -j -v +${days_to_add}d -f "%Y-%m-%d" "$BASE_DATE" "+%Y-%m-%d"
else
date -d "$BASE_DATE + $days_to_add days" "+%Y-%m-%d"
fi
解説
| 箇所 | 役割 |
|---|---|
set -euo pipefail |
エラー時即座に停止、未定義変数防止 |
case $day_of_week |
曜日ごとの日数計算をルールベースで |
date -v / date -d
|
macOS/Linux両対応の日付計算 |
SKILL.mdはこれだけ
# blog-publish
## Usage
`/blog-publish <source> [--date next|YYYY-MM-DD]`
## Init
`bash scripts/orchestrate.sh <source> [--date DATE]`
Returns: `{mode, source, publish_date, seed_exists}`
## Phase Execution
| Phase | Condition | Skill |
|-------|-----------|-------|
| Seed | mode=repo | AskUser: reuse? |
| Blog | !--skip-blog | `seed-to-blog` |
42行。 AIが知るべきは「何を呼び出すか」だけ。
使いどころ
- 日付計算、ファイル存在チェック、パス変換
- 入力→出力が固定の処理すべて
- 毎回AIが再解釈している処理
さらに深掘りしたい方へ
この記事ではSKILL.mdのスクリプト化パターンを紹介しました。
SKILL.mdの書き方|Claude Code Skills設計ベストプラクティス【肥大化防止】 ではさらに:
- 🔄 orchestrate.sh、detect_mode.shの完全実装
- ⚠️ macOS/Linux互換性、JSONエスケープの落とし穴
- 📊 他Skill(generate-thumbnail等)への応用例
playpark について
playpark LLCは業務自動化・AI活用・Web開発を支援するテクノロジーパートナーです。
Discussion