بنقرة واحدة
breed
ポケモン育成シミュレーション。性格・特性・持ち物・技・努力値を対話的に設定し、Lv50実数値を算出する。育成したい・実数値計算・努力値配分等の質問時に使用。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
ポケモン育成シミュレーション。性格・特性・持ち物・技・努力値を対話的に設定し、Lv50実数値を算出する。育成したい・実数値計算・努力値配分等の質問時に使用。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
ナッシュ均衡ソルバー。零和対戦 (ポケモン選出、構築マッチアップ、じゃんけん型メタ) の最適混合戦略、選出最適化 (pkdx select)、メタ乖離分析 (pkdx meta-divergence) を提供。「最適選出」「選出分布」「構築メタ」「対面ジャンケン」「使用率 vs 最適」等の質問時に使用。
ダメージ計算。攻撃側・防御側・技名を指定し、特性・持ち物・天候込みのダメージ乱数表を出力する。ダメージ計算・ダメ計・何発で落ちる等の質問時に使用。
対戦用ポケモン構築支援(シングル/ダブル対応)。軸ポケモンからタイプ補完・メタ分析・選出パターンまでガイドする。構築したい・パーティを組みたい・チーム作成時に使用。
対戦中の高速応答モード。calc skillを事前ロードし、ダメ計とメモのラベル付き入力のみを最短で処理する。対戦中・バトル中・実戦中・対戦が始まる等の発話時に使用。
pkdxを最新版に更新する。構築・育成データを保護しながらスキルやCLIツールを安全にアップデートする。更新したい・アップデート・最新にしたい時に使用。
サイト記事・設定のメンテナンス。新規ブログ記事の作成、公開/非公開切替、frontmatter (タイトル・説明文・タグ) 編集、記事削除、記事一覧表示、メンバー画像追加・差し替え、構築記事の本文編集 (構築コンセプト / ダメージ計算 / ポケモンメモ / 選出やりなおし)、サイト設定 (サイト名 / author / enabled) 変更を対話的に行う。最後にユーザー確認のうえ git push でサイトに反映。記事管理・ブログ管理・本文編集・構築コンセプト編集・ダメ計追加削除・ポケモンメモ・選出変更・メンバー画像差し替え・サイト名変更・公開切替・記事削除・記事一覧などの際に使用。
| name | breed |
| description | ポケモン育成シミュレーション。性格・特性・持ち物・技・努力値を対話的に設定し、Lv50実数値を算出する。育成したい・実数値計算・努力値配分等の質問時に使用。 |
| allowed-tools | Bash, Read, Write, AskUserQuestion |
ポケモン1体の育成データを対話的に構築するスキル。性格・特性・持ち物・技・努力値を順に決定し、Lv50での実数値を常にフィードバックする。完成した育成データはダメージ計算(calc skill)に連携可能。
v1スコープ: 通常フォーム限定。リージョンフォーム・メガシンカフォーム等は対象外。
SKILL_DIR=(このSKILL.mdが置かれたディレクトリ)
REPO_ROOT=$SKILL_DIR/../../../.. (.claude/skills/breed/ → repo root)
PKDX=$REPO_ROOT/bin/pkdx
CACHE_DIR=$REPO_ROOT/pokedex # pokedex.dbと同じディレクトリ
各Phase完了時に、育成中のデータをJSONファイルとして $REPO_ROOT/box/cache/breed_cache_<pokemon_name>.json に書き出す。ポケモンごとに別ファイルとする。
$REPO_ROOT/box/cache/breed_cache_<pokemon_name>_<timestamp>.json
<timestamp> はスキル開始時(Phase 0)に date +%s で取得した UNIX タイムスタンプ。同じポケモンを複数回育成しても衝突しない。以降のフェーズでは $CACHE_FILE 変数でパスを参照する。
CACHE_FILE="$REPO_ROOT/box/cache/breed_cache_<pokemon_name>_$(date +%s).json"
スキーマ定義は src/writer/schema.mbt の pokemon_schema() がSSoT。初期JSONは以下のコマンドで生成する:
bin/pkdx init-cache pokemon > "$CACHE_FILE"
生成されるJSONの特徴:
null0[]Phase 1でDB結果を pokemon オブジェクトにマージし(types[] と abilities[] は canonical order: type1→type2 / ability1→ability2→dream_ability、null は除外)、以降のPhaseで build フィールドを段階的に埋めていく。ステータス関連のキーは全て短縮形式 {h, a, b, c, d, s}。
各Phaseの「Training State 出力」の直後にキャッシュファイルを書き出す。具体的には:
| Phase | 書き込む内容 |
|---|---|
| 1 | pokemon情報 (types[] / abilities[]) + base_stats (短縮キー) |
| 2 | + nature + actual_stats再計算 (nature_up/down は writer が nature から導出するため保存不要) |
| 3 | + ability |
| 4 | + item |
| 5 | + moves(name/type/category/power/accuracy を含む詳細オブジェクト) |
| 6 | + stat_points + actual_stats最終値 |
| 7 | + damage_calcs(ダメ計実行ごとに追記) |
pkdx のデフォルトバージョンは Champions。EV/IV は廃止され SP (Stat Points) に統一されている。
HP = BaseStat + SP + 75
他 = floor((BaseStat + SP + 20) * nature_mod)
nature_mod: 上昇=1.1(11/10), 無補正=1.0, 下降=0.9(9/10)
Phase 6 では「SP配分」として 0-32 の範囲で配分を行い、合計 66 以下を制約とする。従来の 508 EV 配分を SP で再現すると 1 ポイント余る(SP の +1 優位)。詳細は team-builder/references/champions_sp.md を参照。
--version scarlet_violet 等の旧バージョン指定時のみ使用。IV=31 固定。
HP = floor((base*2 + 31 + floor(EV/4)) * 50 / 100) + 60
他 = floor((floor((base*2 + 31 + floor(EV/4)) * 50 / 100) + 5) * nature_mod)
Phase 6 では「努力値配分」として各 0-252、合計 510 以下を制約とする。
| 性格 | 上昇(×1.1) | 下降(×0.9) |
|---|---|---|
| いじっぱり | こうげき | とくこう |
| さみしがり | こうげき | ぼうぎょ |
| やんちゃ | こうげき | とくぼう |
| ゆうかん | こうげき | すばやさ |
| ずぶとい | ぼうぎょ | こうげき |
| わんぱく | ぼうぎょ | とくこう |
| のうてんき | ぼうぎょ | とくぼう |
| のんき | ぼうぎょ | すばやさ |
| ひかえめ | とくこう | こうげき |
| おっとり | とくこう | ぼうぎょ |
| うっかりや | とくこう | とくぼう |
| れいせい | とくこう | すばやさ |
| おだやか | とくぼう | こうげき |
| おとなしい | とくぼう | ぼうぎょ |
| しんちょう | とくぼう | とくこう |
| なまいき | とくぼう | すばやさ |
| おくびょう | すばやさ | こうげき |
| せっかち | すばやさ | ぼうぎょ |
| ようき | すばやさ | とくこう |
| むじゃき | すばやさ | とくぼう |
| てれや | -- | -- |
| がんばりや | -- | -- |
| すなお | -- | -- |
| きまぐれ | -- | -- |
| まじめ | -- | -- |
Phase 1-7 の各 Stat Card / Training State テンプレは version で表示列を切り替える。skill 本文のテンプレは旧版(scarlet_violet 等)の体裁で書かれているため、Champions では下記マッピングで読み替える。
| skill 本文の列 | Champions(version=champions) | 旧版(scarlet_violet 等) |
|---|---|---|
| 個体値列 | 非表示(SP に統合済み、IV は存在しない) | 31(IV 固定) |
| 努力値列 | SP 列に読み替え(各 0-32) | EV 列(各 0-252) |
| 合計表示 | <total>/66 (残り: <remaining>/66) | <total>/510 (残り: <remaining>/510) |
skill 本文は EV 制(H4 A252 S252 等)で書かれているため、Champions では下記に置き換える。
Champions(合計 ≤ 66、各 ≤ 32):
ASぶっぱ: H4 A32 S30 / HAベース: H32 A32 S2 / 耐久調整: H32 A2 B32CSぶっぱ: H4 C32 S30 / HCベース: H32 C32 D2 / 耐久調整: H32 C2 D32HBベース: H32 B32 D2 / HDベース: H32 B2 D32旧版(合計 ≤ 510、各 ≤ 252): skill 本文の Phase 6-1 表記そのまま(H4 A252 S252 等)
$PKDX query "ピカチュウ" --format json >/dev/null 2>&1 && echo "OK" || echo "NOT_FOUND"
NOT_FOUNDの場合、以下を案内してスキルを終了:
pkdx CLI または pokedex.db / champions.db が見つかりません。リポジトリルートで以下を実行してください:
./setup.sh
AskUserQuestion(1問):
| # | 質問 | header | オプション | multiSelect |
|---|---|---|---|---|
| 1 | ゲームバージョンは? | バージョン | champions(default / 推奨, SP 制), scarlet_violet(deprecated, 旧 EV/IV 制), legendsza(deprecated), Other(バージョン名を入力) | false |
推奨の理由: Champions 以降は SP (Stat Points) 制に一本化されており、実数値算出・ダメ計・hbd 最適化ともに SP 前提で最適化されている。旧 EV/IV 制 (scarlet_violet / legendsza 等) は後方互換のために残しているが、新規育成は champions を選択すること。
champions 選択時は続けてレギュレーションを質問:
| # | 質問 | header | オプション | multiSelect |
|---|---|---|---|---|
| 1 | レギュレーションは? | レギュレーション | M-B | false |
キャッシュに regulation フィールドも記録(champions以外では null)。
AskUserQuestion(1問):
| # | 質問 | header | オプション | multiSelect |
|---|---|---|---|---|
| 1 | 育成するポケモンは? | ポケモン | "Otherで回答してください" (desc: ポケモン名を入力), "Otherで入力" (desc: 日英どちらも対応) | false |
テンプレートのポケモン名をオプションに含めてはならない。
取得したポケモン名で以下を実行:
$PKDX query "<ポケモン名>" --version "<version>" --format json
手順:
pkdx query "<名前>" --version "<version>" --format json に渡す。以下は直接引ける:
ウォッシュロトム / ヒートロトム / メガガブリアス / メガリザードンX 等キュウコン(アローラ) / ランドロス(れいじゅう) / ガーディ(ヒスイ) / バクフーン(ヒスイ) 等Wash Rotom / Ninetales (Alolan) 等Error: Pokemon not found) は原種名で再 query し、返り値の forms[] を確認:
forms[] はその version に実在するフォームの一意名配列。原種引き時のみ列挙され、フォーム直引き時や形態無しの場合は JSON キーごと省略 されるpkdx query ロトム --version champions → "forms":["ヒートロトム","ウォッシュロトム","フロストロトム","スピンロトム","カットロトム"]pkdx query キュウコン --version scarlet_violet → "forms":["キュウコン(アローラ)"]type1 / type2 / ability1 / ability2 / dream_ability / 種族値を取得注意点:
forms[] に現れない。これらは原種として扱って問題ないforms[] からも除外される (例: Champions にはランドロス(れいじゅう)未収録)forms[] に含まれる (メガガブリアス 等)。メガ名で query するとメガ進化後の type/ability/stats が得られるイダイトウ(オス) / イダイトウ(メス)、eng Basculegion (Male) / Basculegion (Female)。性別未指定の イダイトウ は M base を返すため、F 個体を育成する際は必ず (メス) 付きで照合する。ユーザー入力が イダイトウ♂ / イダイトウ♀ (ゲーム内表記) で来た場合は ♂ → (オス) / ♀ → (メス) に正規化してから query する結果が空の場合:
AskUserQuestion(1問):
| # | 質問 | header | オプション |
|---|---|---|---|
| 1 | メガシンカポケモンのデータが見つかりませんでした。最新のメガシンカデータをDBに取り込みますか?(⚠ 実験的機能: マスターデータの更新時に再実行が必要になる場合があります) | メガデータ | はい(desc: メガシンカ64体のデータを取り込む), いいえ(desc: 通常フォームで育成を続ける) |
「はい」の場合:
"$REPO_ROOT/bin/pkdx" migrate --repo-root "$REPO_ROOT"
実行後、元のクエリを再実行してデータを取得する。取得できた場合はそのまま続行。 取得できなかった場合は「パッチ対象に含まれていないポケモンです」と案内し、通常フォームでの育成を提案する。
JSONから hp, atk, def_, spa, spd, spe, type1, type2, ability1, ability2, dream_ability を抽出。
EV=0, 無補正で実数値を計算し表示する:
=== Stat Card (初期状態: EV=0, 無補正) ===
<name> (<type1>/<type2>)
種族値 個体値 努力値 実数値
HP <hp> 31 0 <calc>
こうげき <atk> 31 0 <calc>
ぼうぎょ <def> 31 0 <calc>
とくこう <spa> 31 0 <calc>
とくぼう <spd> 31 0 <calc>
すばやさ <spe> 31 0 <calc>
特性: {ability1} / {ability2} / {dream_ability}
=== Training State (Phase 1完了) ===
ポケモン: <name> (<type1>/<type2>)
種族値: H<hp> A<atk> B<def> C<spa> D<spd> S<spe>
性格: 未選択
特性: 未選択
持ち物: 未選択
技: 未選択 / 未選択 / 未選択 / 未選択
EV: H0 A0 B0 C0 D0 S0 (残り: 510/510)
実数値: H<hp> A<atk> B<def> C<spa> D<spd> S<spe>
AskUserQuestion(1問):
上昇ステータス別にグループ化して提示する。
| # | 質問 | header | オプション | multiSelect |
|---|---|---|---|---|
| 1 | 性格を選んでください | 性格 | こうげき↑: いじっぱり/さみしがり/やんちゃ/ゆうかん, ぼうぎょ↑: ずぶとい/わんぱく/のうてんき/のんき, とくこう↑: ひかえめ/おっとり/うっかりや/れいせい, とくぼう↑: おだやか/おとなしい/しんちょう/なまいき, すばやさ↑: おくびょう/せっかち/ようき/むじゃき, 無補正: てれや/がんばりや/すなお/きまぐれ/まじめ | false |
各オプションには desc として「<上昇ステータス>↑ <下降ステータス>↓」を付与する(無補正は「補正なし」)。
性格テーブルを参照し、上昇ステータスに×1.1、下降ステータスに×0.9を適用して全実数値を再計算。
=== Stat Card (性格: <nature> — <stat>↑ <stat>↓) ===
<name> (<type1>/<type2>)
種族値 個体値 努力値 実数値 補正
HP <hp> 31 0 <calc> --
こうげき <atk> 31 0 <calc> ↑/↓/--
ぼうぎょ <def> 31 0 <calc> ↑/↓/--
とくこう <spa> 31 0 <calc> ↑/↓/--
とくぼう <spd> 31 0 <calc> ↑/↓/--
すばやさ <spe> 31 0 <calc> ↑/↓/--
Phase 1で取得した ability1, ability2, dream_ability から空でないものを選択肢とする。
AskUserQuestion(1問):
| # | 質問 | header | オプション | multiSelect |
|---|---|---|---|---|
| 1 | 特性を選んでください | 特性 | {ability1}, {ability2}(空でなければ), {dream_ability}(空でなければ, desc: 夢特性) | false |
Stat Card を更新(実数値は変わらないが特性を表示に追加)。
AskUserQuestion(1問):
| # | 質問 | header | オプション | multiSelect |
|---|---|---|---|---|
| 1 | 持ち物を選んでください | 持ち物 | なし, こだわりハチマキ(desc: A×1.5/技固定), こだわりメガネ(desc: C×1.5/技固定), こだわりスカーフ(desc: S×1.5/技固定), いのちのたま(desc: 威力×1.3/HP1/10消費), きあいのタスキ(desc: HP満タンで一撃耐え), たべのこし(desc: 毎ターンHP1/16回復), とつげきチョッキ(desc: D×1.5/変化技使用不可), しんかのきせき(desc: BD×1.5/進化前限定), ゴツゴツメット(desc: 接触技にHP1/6反動), オボンのみ(desc: HP1/2以下でHP1/4回復), ラムのみ(desc: 状態異常回復), Other(desc: アイテム名を入力) | false |
Stat Card を更新(持ち物を表示に追加)。
$PKDX moves "<ポケモン名>" --version "<version>" --format json
取得した技一覧を以下のカテゴリに分類して提示:
AskUserQuestion(4問を一括):
| # | 質問 | header | オプション | multiSelect |
|---|---|---|---|---|
| 1 | 技1を選んでください | 技1 | {上位技のリスト}, Other(desc: 技名を入力) | false |
| 2 | 技2を選んでください | 技2 | {上位技のリスト}, Other(desc: 技名を入力) | false |
| 3 | 技3を選んでください | 技3 | {上位技のリスト}, Other(desc: 技名を入力) | false |
| 4 | 技4を選んでください | 技4 | {上位技のリスト}, Other(desc: 技名を入力) | false |
各オプションには desc として「<タイプ>/<分類>/威力」を付与する。 変化技には desc に「ダメ計対象外」を明記する。
pkdx moves は learnset 内の技のみを返すため、Other で learnset 外の技(例: SV では非習得・廃止された技)を指定された場合の取扱:
moves[].name に名前のみ格納するtype / category / power / accuracy は null で保留するpkdx damage --format json)が出力 JSON に技情報を含むため、ダメ計実行時に値を補填するpkdx write pokemon が null を弾く)learnset 外の技は将来 patch 必須になる可能性があるため、可能な限り learnset 内の技を選ぶよう推奨する。
Stat Card を更新(技構成を表示に追加)。
耐久寄りのポケモンで総合耐久(被物理+被特殊ダメージ合計)を最大化したい場合は、pkdx hbd を使って H/B/D の最適EV配分を自動算出できる。これは HBD/(B+D) を最大化する勾配法ベースの最適化で、H=B+D 則や 11n調整を暗黙に考慮する。
# S振り固定、H/B/D を最適化
$PKDX hbd "<pokemon>" --nature "<nature>" --fixed-ev "_,0,_,0,_,252" --hp-snap <leftovers|residual|sitrus|lifeorb|none>
# 物理多想定で非対称配分
$PKDX hbd "<pokemon>" --nature "<nature>" --phys-weight 2 --spec-weight 1
# 上位N候補を比較
$PKDX hbd "<pokemon>" --nature "<nature>" --top 5
このオプションを提示するかは Phase 1-2 で選んだ性格と種族値から自動判定(耐久上昇性格 or 耐久型種族値のポケモンに対して推奨)。理論的背景は .claude/skills/team-builder/references/bulk_theory.md を参照。
種族値と性格を分析し、典型的な配分パターンを3つ提案する。
物理アタッカー型(Atk種族値 > SpA種族値の場合):
特殊アタッカー型(SpA種族値 > Atk種族値の場合):
耐久型(Def+SpD種族値が高い場合):
各提案に対して実数値を計算して併記する。
AskUserQuestion(1問):
| # | 質問 | header | オプション | multiSelect |
|---|---|---|---|---|
| 1 | 努力値配分を選んでください | EV配分 | {提案1}(desc: 実数値サマリ), {提案2}(desc: 実数値サマリ), {提案3}(desc: 実数値サマリ), カスタム(desc: 自由に配分) | false |
AskUserQuestionで6ステータスの努力値を質問する。
AskUserQuestion(6問を一括):
| # | 質問 | header | オプション | multiSelect |
|---|---|---|---|---|
| 1 | HP努力値は? | HP EV | 0(default), 4, 252, Other(desc: 0-252の値) | false |
| 2 | こうげき努力値は? | A EV | 0(default), 4, 252, Other(desc: 0-252の値) | false |
| 3 | ぼうぎょ努力値は? | B EV | 0(default), 4, 252, Other(desc: 0-252の値) | false |
| 4 | とくこう努力値は? | C EV | 0(default), 4, 252, Other(desc: 0-252の値) | false |
| 5 | とくぼう努力値は? | D EV | 0(default), 4, 252, Other(desc: 0-252の値) | false |
| 6 | すばやさ努力値は? | S EV | 0(default), 4, 252, Other(desc: 0-252の値) | false |
以下を検証する:
バリデーションエラーがある場合はAskUserQuestionで再入力を依頼する。
全実数値を計算し、最終 Stat Card を表示:
=== 最終 Stat Card ===
<name> (<type1>/<type2>)
性格: <nature> (<stat>↑ <stat>↓) 特性: <ability> 持ち物: <item>
種族値 個体値 努力値 実数値 補正
HP <hp> 31 <ev> <calc> --
こうげき <atk> 31 <ev> <calc> ↑/↓/--
ぼうぎょ <def> 31 <ev> <calc> ↑/↓/--
とくこう <spa> 31 <ev> <calc> ↑/↓/--
とくぼう <spd> 31 <ev> <calc> ↑/↓/--
すばやさ <spe> 31 <ev> <calc> ↑/↓/--
技: <move1> / <move2> / <move3> / <move4>
EV合計: <total>/510 (残り: <remaining>)
AskUserQuestion(1問):
| # | 質問 | header | オプション | multiSelect |
|---|---|---|---|---|
| 1 | この配分でよろしいですか? | 確認 | はい(default), 努力値を調整する, 性格を変更する | false |
=== 育成完了: <name> ===
タイプ: <type1>/<type2>
性格: <nature> (<stat>↑ <stat>↓)
特性: <ability>
持ち物: <item>
Lv50 実数値:
HP: <hp> A: <atk> B: <def> C: <spa> D: <spd> S: <spe>
EV: H<ev> A<ev> B<ev> C<ev> D<ev> S<ev>
技構成:
1. <move1> (<type>/<category>/威力<power>)
2. <move2> (<type>/<category>/威力<power>)
3. <move3> (<type>/<category>/威力<power>)
4. <move4> (<type>/<category>/威力<power>)
AskUserQuestion(1問):
| # | 質問 | header | オプション | multiSelect |
|---|---|---|---|---|
| 1 | ダメージ計算を行いますか? | ダメ計 | はい(desc: 育成した実数値でダメージ計算), いいえ(desc: 保存に進む) | false |
「はい」の場合:
AskUserQuestion(2問):
| # | 質問 | header | オプション | multiSelect |
|---|---|---|---|---|
| 1 | 相手のポケモンは? | 相手 | "Otherで回答してください" (desc: ポケモン名を入力) | false |
| 2 | 使用する技は? | 技 | {move1}(攻撃技のみ), {move2}, {move3}, {move4} | false |
変化技を選択された場合: 「この技はダメージを与えません。攻撃技を選んでください」と案内し、再度質問する。
ダメージ計算を実行:
$PKDX damage "<name>" "<相手名>" "<技名>" \
--atk-stat <計算済み実数値> \
--atk-ability "<ability>" \
--atk-item "<item>" \
--version "<version>" \
--format json
--atk-stat にこうげき実数値を使用--atk-stat にとくこう実数値を使用--atk-stat は「rank 前の実数値」として解釈される。育成済み実数値をそのまま渡せば性格補正込みの値になっているので --atk-nature は不要。rank 補正 (--atk-rank) を併用する場合も override の上から rank が適用されるpkdx が --format json で免疫時にプレーンテキスト(Immune (0 damage))を返す場合がある。JSONパース失敗時は「タイプ相性または特性により無効(ダメージ0)です」と案内する。
calcスキルと同じ形式でダメージテーブルを表示:
### ダメージ計算結果
**<name>** → **<相手名>** / <技名>
| 項目 | 値 |
|------|-----|
| 攻撃実数値 | <stat_name> <actual> |
| 技 | <move> (<type>/<category>, 威力<power>) |
| | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 |
|---|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|-----|
| ダメージ | ... |
| 割合 | ... |
**確定数**: {ko_text}
重要: 各ダメ計結果(攻撃側/防御側、相手名、技名、乱数テーブル、確定数)をPhase 8の保存用に蓄積しておく。
ダメ計後、追加計算するか質問:
AskUserQuestion(1問):
| # | 質問 | header | オプション | multiSelect |
|---|---|---|---|---|
| 1 | 続けますか? | 追加計算 | 別の技で計算, 別の相手で計算, 保存に進む | false |
AskUserQuestion(4問):
| # | 質問 | header | オプション | multiSelect |
|---|---|---|---|---|
| 1 | 育成データを保存しますか? | 保存 | はい(desc: box/pokemons//配下に保存), いいえ(desc: 保存せず終了) | false |
| 2 | ファイル名を入力してください(拡張子不要) | ファイル名 | Other(desc: 例: スカーフ型, HBゴツメ等。空欄の場合はYYYYMMDD) | false |
| 3 | ポケソル形式のテキストも出力しますか? | ポケソル出力 | はい(desc: ダメージ計算SV等で読み込めるテキストを出力), いいえ(desc: md保存のみ) | false |
| 4 | この育成データをバージョン管理の対象にしますか? | バージョン管理 | はい(desc: gitで変更履歴を残す。GitHubアカウントがあればクラウドにもバックアップ可能), いいえ(desc: 手元にのみ保存。gitには記録しない) | false |
「いいえ」(質問1)の場合はスキルを終了。
「はい」の場合:
ファイル名の決定:
<入力値>YYYYMMDD(当日の日付)質問4の回答に基づき --file の値を決定:
--file "<ベース名>"--file "__no_save.<ベース名>"出力先:
box/pokemons/<pokemon-name>/<ベース名>.mdbox/pokemons/<pokemon-name>/__no_save.<ベース名>.md (gitignore対象)pkdx write に渡すキャッシュ JSON はPhase 0-7で段階的に構築済み。CLIがJSON→マークダウンCST→serializeを行うため、マークダウンを直接書く必要はない。
cat $CACHE_FILE | $PKDX write pokemon --name "<pokemon-name>" --file "<filename or __no_save.filename>"
CLIはキャッシュ JSON のスキーマ(pokemon + build セクション)をバリデーションする。
build.moves の各要素は name/type/category/power/accuracy を含む詳細オブジェクトである必要がある(Phase 5 で書き込み済み)。
空の move name がある場合はバリデーションエラーとなる。
エラー時の再試行: exit code が 0 以外の場合、stderrのエラーメッセージに基づいてキャッシュ JSON を修正し再試行する。最大3回まで。
保存完了後:
✓ box/pokemons/<name>/<filename>.md に保存しました。
出力先: mdと同じ prefix ルールを適用(--file で指定した名前に _pokesol.txt を付与)
box/pokemons/<pokemon-name>/<filename>_pokesol.txtbox/pokemons/<pokemon-name>/__no_save.<filename>_pokesol.txt<ポケモン名> / <特性> / <持ち物>
<技1> / <技2> / <技3> / <技4>
実数値: <HP>-<攻撃>-<防御>-<特攻>-<特防>-<素早さ>
努力値: <HP>-<攻撃>-<防御>-<特攻>-<特防>-<素早さ>
性格: <性格名>
出力後:
✓ box/pokemons/<name>/<filename>_pokesol.txt に保存しました。
$CACHE_FILE を削除「いいえ」(質問1)の場合もキャッシュファイル $CACHE_FILE を削除してからスキルを終了。
| 状況 | 対応 |
|---|---|
| pkdx / DB が見つからない | セットアップ手順を案内しスキル終了 |
| ポケモンが見つからない | 名前の再入力を依頼。リージョンフォームの可能性を案内。メガシンカの場合はパッチ実行を提案 |
| 技一覧が空 | バージョンの確認を案内(技はバージョンで異なる) |
| EV合計 > 510 | 再入力を依頼 |
| EV > 252(単体) | 再入力を依頼 |
| EVが4の倍数でない | 警告を表示(エラーではない) |
| ダメ計で免疫 | 「タイプ相性または特性により無効です」と案内 |
| 変化技でダメ計 | 「この技はダメージを与えません」と案内し攻撃技を再選択 |
| 同名ファイル存在 | 上書き確認をAskUserQuestionで行う |
pkdx write pokemon が legacy schema detected エラー | 既存 box/pokemons 配下の .meta.json が旧 schema のまま。bin/pkdx convert meta --in <path> --in-place で変換。./setup.sh を流すと box/pokemons/**/*.meta.json を一括変換できる |
| ファイル名に使用不可文字 | 「ファイル名に使用できない文字が含まれています」と案内し再入力 |