対戦用ポケモン構築支援(シングル/ダブル対応)。軸ポケモンからタイプ補完・メタ分析・選出パターンまでガイドする。構築したい・パーティを組みたい・チーム作成時に使用。
6体構築のシングル(3体選出)/ダブル(4体選出)対戦構築支援スキル。
スキルファイルの位置からリポジトリルートを算出する。CLIツール pkdx を使用する。
SKILL_DIR=(このSKILL.mdが置かれたディレクトリ)
REPO_ROOT=$SKILL_DIR/../../../.. (.claude/skills/team-builder/ → repo root)
PKDX=$REPO_ROOT/bin/pkdx
各Phase完了時に、構築中のデータをJSONファイルとして $REPO_ROOT/box/cache/team_cache_<axis_name>.json に書き出す。
cat cache.json | pkdx write teams に直接渡す(JSON→マークダウン変換はCLI側で行う)$REPO_ROOT/box/cache/team_cache_<axis_name>_<timestamp>.json
<timestamp> はスキル開始時(Phase 0)に date +%s で取得した UNIX タイムスタンプ。以降のフェーズでは $CACHE_FILE 変数でパスを参照する。
CACHE_FILE="$REPO_ROOT/box/cache/team_cache_<axis_name>_$(date +%s).json"
スキーマ定義は pkdx/src/writer/schema.mbt の team_schema() がSSoT。初期JSONは以下のコマンドで生成する:
bin/pkdx init-cache team > "$CACHE_FILE"
生成されるJSONの特徴:
null0[]Phase 0でユーザー選択値(battle_format, mechanics, version, regulation)をマージし、以降のPhaseで members を段階的に追加していく。
各Phaseの「Team State 出力」の直後にキャッシュファイルを書き出す:
| Phase | 書き込む内容 |
|---|---|
| 0 | battle_format + mechanics + version + regulation |
| 1 | + members[0](軸ポケモン: name/types/base_stats、role は空文字でも可) |
| 2 | + members[0].ability + coverage初期値 + members[0].role(ポケモンメモ) |
| 3 | + members[1-2](攻め補完メンバー) + coverage更新 + 各 role(ポケモンメモ) |
| 4 | + members[3-4](受け補完メンバー) + defense_matrix + 各 role(ポケモンメモ) |
| 5 | + 全メンバーの moves 確定 + members[5](素早さ枠等) + 各 role(ポケモンメモ) |
| 6 | + matchup_plans(仮想敵分析結果) |
| 7 | + strengths + weaknesses + 全メンバーの item 確定 + 残スロットの role(ポケモンメモ) |
メモ:
roleフィールドはスキーマ上は文字列だが、SKILL では役割(物理アタッカー / 受け / サポート 等)に限定せず、採用理由・型名・対面時の注意点などを自由に書けるポケモンメモ欄として扱う(空文字可)。詳細は メンバー確定共通: ポケモンメモ入力 を参照。
cat cache.json | pkdx write teams で直接マークダウンに変換各メンバーの特性・持ち物確定後、または Phase 1-Team-Vision でのスクショ取り込み確認後に呼び出す共通サブフロー。role フィールド(スキーマ上は文字列)へ自由メモを記入する。
役割と複数情報の併記も可。空文字 "" 許容(無理に埋めない)。
ユーザーへ次のテキストを出力(AskUserQuestion ではなくフリー入力依頼):
{ポケモン名} のメモを入力してください(役割・採用理由・対面メモなど自由)。
不要なら「なし」と返答してください。
ユーザーの次のメッセージ全文を members[i].role に格納する(改行は半角スペース 1 個に正規化、目安 200 文字以内)
「なし」「skip」「省略」「-」等の場合は "" を格納
キャッシュファイルへ書き戻し、Team State Block の対応行のメモ表示を更新
| 呼び出し元 | タイミング |
|---|---|
| Phase 2-5 後 | 軸ポケモンの特性・持ち物確定直後 |
| Phase 3-6 後 | 攻め補完メンバー(2-3 体)の確定直後 |
| Phase 4-5 後 | 受け補完メンバー(2 体)の確定直後 |
| Phase 5-5 後 | 素早さ枠の確定直後 |
| Phase 7-1 後 | 残未確定スロットの確定直後 |
| Phase 1-Team-Vision 確認後 | スクショから 6 体確定後、members[0] → members[5] の順に 1 体ずつ本サブフローを呼び出す |
$PKDX query "ピカチュウ" --format json >/dev/null 2>&1 && echo "OK" || echo "NOT_FOUND"
NOT_FOUNDの場合、以下を案内してスキルを終了:
pkdx CLIまたはpokedex DBが見つかりません。リポジトリルートで以下を実行してください:
git submodule update --init
cd pokedex && ruby tools/import_db.rb
cd pkdx && moon build --target native
以下を並列でReadする:
$SKILL_DIR/references/stat_thresholds.md → 種族値ベンチマーク$SKILL_DIR/references/format_rules.md → メカニクスルール$SKILL_DIR/references/items_abilities.md → 持ち物・特性リファレンスNote: タイプ相性は $PKDX type-chart および $PKDX coverage で計算可能。type.json の直接読み込みは不要。
AskUserQuestionでバトル形式を質問:
選択結果を battleFormat として以降のフェーズで使用。
AskUserQuestionで有効メカニクスを質問(multiSelect: true):
未選択の場合はバニラルール(メカニクスなし)として動作。
AskUserQuestionでゲームバージョンを質問:
scarlet_violet(デフォルト)legendszachampionschampions 選択時は続けてレギュレーションを質問:
M-A(current)キャッシュに version と regulation を記録。regulation は champions 以外では空文字。
これ以降、スクリプトに渡す --version / --regulation 引数として使用。
Phase 0 で version=champions を選択した場合、Phase 1 の冒頭で入力方式を質問する。それ以外の version では、直接「Phase 1 対話モード」に進む。
AskUserQuestion(1問):
| # | 質問 | header | オプション | multiSelect |
|---|---|---|---|---|
| 1 | チーム入力方式を選んでください | 入力方式 | 対話で 1 体ずつ構築(desc: 従来通り Phase 1-5), ゲームのスクショから一括取り込み(desc: チーム画面の「能力」+「ステータス」2 枚から 6 体を OCR) | false |
対話で 1 体ずつ構築 → 下記「Phase 1 対話モード」へゲームのスクショから一括取り込み → Phase 1-Team-Vision へAskUserQuestionで軸ポケモンを聞く:
軸とするポケモンを1匹教えてください。
(日本語名・英語名どちらでもOK)
取得したポケモン名で以下を実行:
$PKDX query "<ポケモン名>" --version "<version>" --format json
結果が空の場合:
AskUserQuestion(1問):
| # | 質問 | header | オプション |
|---|---|---|---|
| 1 | メガシンカポケモンのデータが見つかりませんでした。最新のメガシンカデータをDBに取り込みますか?(⚠ 実験的機能: マスターデータの更新時に再実行が必要になる場合があります) | メガデータ | はい(desc: メガシンカ64体のデータを取り込む), いいえ(desc: 通常フォームで続ける) |
「はい」の場合:
"$REPO_ROOT/bin/pkdx" migrate --repo-root "$REPO_ROOT"
実行後、元のクエリを再実行してデータを取得する。取得できた場合はそのまま続行。 取得できなかった場合は「パッチ対象に含まれていないポケモンです」と案内する。
結果からglobalNoを取得し、以降のフェーズで使用。
Champions のチーム画面スクショ 2 枚 (能力 + ステータス) から 6 体分の team cache を冪等に構築する。1 枚に 6 体が並ぶ UI のため、12 枚や 1 体ずつのループは不要。
ユーザーへ以下のメッセージを出力し、次のメッセージで 2 枚の画像を会話に添付してもらう (AskUserQuestion ではファイル添付できないためテキスト指示):
Champions のチーム画面スクショ 2 枚を、次のメッセージにまとめて貼ってください:
- 「能力」画面 (特性・持ち物・技 4 つ が 6 体分見えるもの)
- 「ステータス」画面 (SP・実数値・性格 ↑↓ が 6 体分見えるもの)
ユーザーからの次のメッセージに添付された画像 path (会話履歴に残る一時パス、例: /var/folders/.../Image.png 等) を Read ツールで読み込んで vision 抽出に進む。画像が 1 枚しか無い / 関係ない画像の場合はもう一度添付を依頼する。
2 枚の画像から、6 体それぞれについて以下を一度に vision で抽出する:
中間結果は 6 体分まとめて表示する (体ごとに分割表示しない)。
抽出した 6 体について、ポケモンごとに以下を順次実行する。ユーザー対話は発生させず一括で進める (性格が一意に決まらない個体だけ、後段の確認時にまとめて選ばせる):
pkdx query "<name>" --version champions --format json で種族値・タイプ・特性候補を取得。Champions 側で未登録なら --version scarlet_violet で fallbackpkdx stat-reverse "<name>" --stats "<HP>,<A>,<B>,<C>,<D>,<S>" --version champions --format json の出力 SP と vision 抽出 SP を比較。複数解は「いずれかと一致」で OKteam-builder/references/champions_sp.md 参照)。候補 1 つなら自動確定、複数候補は後段で AskUserQuestionpkdx moves "<name>" --version champions --format json で抽出した 4 つの技名を DB 照合し type/category/power/accuracy を埋める=== Champions チーム抽出結果 (6/6 体) ===
[1] マンムー (ようき / こだわりスカーフ / あついしぼう)
SP: H20 A32 B0 C0 D0 S14 技: じしん / つららおとし / つららばり / ばかぢから
[2] アシレーヌ (れいせい / しんぴのしずく / げきりゅう)
SP: ...
...
[6] ヌメルゴン(ヒスイ) (ずぶとい / たべのこし / シェルアーマー)
SP: ...
メガ石 (「〇〇ナイト」) を検出した体があれば末尾に警告:
⚠ 次のポケモンはメガ石を所持しています: ハッサム, キュウコン
メガ進化の戦闘評価は task B 実装後に有効になります。
AskUserQuestion(1問):
| # | 質問 | header | オプション | multiSelect |
|---|---|---|---|---|
| 1 | このチーム構成でよいですか? | 確認 | はい(desc: team cache 組み立てに進む), 修正する(desc: 特定のポケモンの項目を個別修正), やり直す(desc: スクショ添付から再実行) | false |
修正する → どのポケモン (1-6) のどの項目 (技 / 持ち物 / 性格 / SP 等) を上書きするか AskUserQuestion で選び、個別に修正やり直す → 手順 1 (スクショ添付依頼) から全体リセット確認 OK の後、6 体それぞれの role(ポケモンメモ)を members[0] から順に質問する。
各メンバーについて メンバー確定共通: ポケモンメモ入力 のフリー入力フローを使い、必ず 1 体ずつ 入力依頼 → ユーザーの次のメッセージ全文を当該 members[i].role に格納 → 次のメンバーへ、という直列シーケンスで処理する。6 体分のメモを 1 メッセージにまとめて受け付ける bulk モードは廃止。理由: 共通サブフローの「次メッセージ全文 = 対象メンバーの role」というシンプルな契約を壊さないため。
全員 なし 回答ならメモは空文字のまま。
AskUserQuestion(1問):
| # | 質問 | header | オプション | multiSelect |
|---|---|---|---|---|
| 1 | この後どうしますか? | 動線 | メタ分析・選出方針も対話で構築(desc: Phase 6 (仮想敵分析) に進む), 保存のみ(desc: Phase 8 に直行。メタ分析は空欄) | false |
メタ分析・選出方針も対話で構築 → Phase 6 に進む。team cache の members[0..5] は埋まっているので Phase 2-5 (軸分析・補完・素早さ・耐久) は skip保存のみ → team cache の matchup_plans / strengths / weaknesses を空配列のまま、Phase 8 に直行。出力 md の冒頭に「⚠ メタ分析セクションは未記入。/team-builder で再開可能」と注記を入れる$PKDX init-cache team > "$CACHE_FILE"
抽出 6 体を members に詰め、version: "champions", regulation: "M-A", battle_format: "singles", mechanics: "メガシンカ" (該当時) を明記
pkdx import-check で冪等性判定:
EXISTING_DIR="$REPO_ROOT/box/teams"
if [ -d "$EXISTING_DIR" ]; then
EXISTING=$(for f in "$EXISTING_DIR"/*.meta.json; do
[ -f "$f" ] && jq --arg p "$f" '{path: $p, content: .}' "$f"
done | jq -s '.')
else
EXISTING='[]'
fi
jq -n \
--slurpfile cache "$CACHE_FILE" \
--argjson existing "$EXISTING" \
'{kind: "team", cache: $cache[0], existing: $existing}' | \
$PKDX import-check
出力に応じて分岐:
{"status":"skip", "matched_file": "..."} → 既に同一データあり。AskUserQuestion: 保存せず終了 / 別名で保存する / やり直す{"status":"diff", "matched_file": "...", "differing_fields": [...]} → 差分を表示し、AskUserQuestion: 新規ファイルとして保存 / 既存を上書き / 保存せず終了{"status":"new"} → そのまま次のステップへ$PKDX moves "<globalNo>" --version "<version>" --format json
$PKDX query のJSON出力から ability1, ability2, dream_ability を取得済み。特性の詳細説明が必要な場合は DB を直接クエリする:
sqlite3 "$REPO_ROOT/pokedex/pokedex.db" \
"SELECT name, description FROM ability_language WHERE ability IN ('<ability1>', '<ability2>', '<dream_ability>') AND version='<version>' AND language='jpn';"
以下の形式で提示:
## 軸ポケモン分析: {名前}
**タイプ**: {type1}/{type2}
**種族値**: H{hp} A{atk} B{def} C{spa} D{spd} S{spe} (合計: {bst})
**役割分類**: {stat_thresholds.mdから判定}
### 特性
- {ability1}: {説明}
→ 戦闘効果: {items_abilities.mdから該当する効果を分類表示}
- {ability2}: {説明}(あれば)
→ 戦闘効果: {同上}
- {dream_ability}: {説明}(夢特性)
→ 戦闘効果: {同上}
特性効果の分類:
- 耐性付与: 「ふゆう → じめん無効」
- 耐性変化: 「あついしぼう → ほのお/こおり半減」
- 火力補正: 「ちからもち → 物理火力2倍」
- 防御補正: 「マルチスケイル → HP満タン時ダメージ半減」
- フィールド/天候: 「ひひいろのこどう → 晴れ展開+攻撃強化」
- わざわい系: 「わざわいのつるぎ → 相手防御0.75x」
### 実質タイプ耐性(特性考慮)
| 攻撃タイプ | タイプ相性 | ability1考慮 | ability2考慮 | dream考慮 |
(免疫特性で弱点が消える場合や耐性変化がある場合のみ差分を表示)
### 主要技
#### STAB技(タイプ一致)
| 技名 | タイプ | 分類 | 威力 | 命中 |
(type1/type2に一致する技を威力順で)
#### 補完技(タイプ不一致の攻撃技)
| 技名 | タイプ | 分類 | 威力 | 命中 |
(STAB以外の攻撃技を威力順で上位10個)
#### 変化技(主要なもの)
| 技名 | タイプ | 効果概要 |
(category=変化の技から対戦で有用なもの)
#### 【doubles時のみ】ダブルバトル向けサポート技
| 技名 | タイプ | 効果概要 | カテゴリ |
(items_abilities.md §8 のダブル向け技リストと照合し、習得可能なものを抽出)
カテゴリ: 味方支援 / リダイレクト / S操作 / 全体防御 / 妨害
AskUserQuestionで採用特性を確定(ability1/ability2/dream_abilityから1つ選択)。 各選択肢のdescriptionに戦闘効果を記載する。
確定した特性と役割分類に基づき、items_abilities.mdから推奨持ち物を2-3個提案:
AskUserQuestionで持ち物を確定(「後で決める」も選択可)。
メンバー確定共通: ポケモンメモ入力 の手順で軸ポケモンのメモを members[0].role に格納する。
type.jsonを参照し、以下のアルゴリズムで計算:
## 攻めの相性補完
### STAB技で抜群を取れるタイプ
{type1で抜群: ...}, {type2で抜群: ...}
### 技範囲全体で抜群を取れるタイプ
{全攻撃技で抜群が取れるタイプ一覧}
### 攻めの穴(抜群を取れないタイプ)
{18タイプから攻撃範囲を引いた残り}
### 穴を埋めるタイプ提案
| 攻めの穴 | 抜群を取れるタイプ |
軸の確定特性がスキン系・火力補正系の場合、実質的な攻撃範囲を補正:
攻めの穴を埋めるタイプで候補を検索:
$PKDX search --type "<穴を埋めるタイプ>" --version "<version>" --format json
候補に対して $PKDX query で特性も取得し、特性込みで評価:
ダブルバトルでは軸との「横の並び」(同時に場に出るペア)を重視して評価する。items_abilities.md §8〜§10 を参照し、以下の観点で候補をスコアリング:
AskUserQuestionで:
メンバー確定時:
$PKDX query で特性一覧を取得members[i].role を埋めるtype.jsonおよびitems_abilities.mdを参照し、以下のアルゴリズムで計算:
倍率 = type.json[攻撃タイプ][type1] × type.json[攻撃タイプ][type2]type.json[攻撃タイプ][type1]のみ0(無効)に変更(例: ふゆう → じめん = 0)## 受けの相性補完
### 弱点
| 攻撃タイプ | 倍率 |
(弱点を倍率の高い順に)
### 耐性
| 攻撃タイプ | 倍率 |
(半減以下を)
### 無効
| 攻撃タイプ |
### 弱点を補完するタイプ提案
| 弱点 | 半減以下で受けられるタイプ |
弱点を受けられるタイプで候補を検索:
$PKDX search --type "<弱点を受けるタイプ>" --version "<version>" --format json
候補に対して $PKDX query で特性も取得し、特性による実質耐性で再評価:
相性補完コアの提示: 軸 + 補完で互いの弱点をカバーし合う組み合わせを提案(特性込み)。
ダブルバトルでは隣のポケモンを守る手段も「受けの補完」に含まれる:
AskUserQuestionで:
メンバー確定時:
$PKDX query で特性一覧を取得members[i].role を埋めるstat_thresholds.mdを参照し、確定メンバーの素早さティアを判定。
チーム全体にTier A以上(base 111+)のポケモンが1体もいない場合、以下を警告:
⚠ チームに高速ポケモンがいません。以下のいずれかが必要です:
- base S 111+の高速ポケモンを追加
- こだわりスカーフで中速ポケモンを高速化
- おいかぜ/トリックルームなどのS操作技
Tier B-C帯のポケモンでも、こだわりスカーフ持ちなら高速ポケモンを抜ける場合がある。
計算: スカーフ最速 = (base S × 2 + 52) × 1.1 × 1.5(小数点切り捨て)
既にチームにスカーフ持ちが確定していない場合、スカーフ枠の候補も提示。
ダブルバトルではS操作技がシングル以上に重要。チーム内のS操作手段を棚卸し:
| S操作手段 | 効果 | 持続 | 評価基準 |
|---|---|---|---|
| おいかぜ | 味方全体S2倍 | 4ターン | 中速チーム向き。始動役の耐久が重要 |
| トリックルーム | S逆転 | 5ターン | 低速エース軸。始動役が倒されないよう保護が必要 |
| こごえるかぜ / エレキネット | 相手S1段階↓ | 永続 | 控えめだが全体技で両方に入る |
| ねこだまし | 相手1体ひるみ | 1ターン | S操作の始動ターンを確保する補助 |
チーム内にS操作手段が0個の場合は警告し、おいかぜ/トリックルーム始動役の追加を提案。
Phase 3-4で決めた補完タイプと両立する高速ポケモンを検索:
$PKDX search --type "<補完タイプ>" --min-speed 100 --version "<version>" --format json
AskUserQuestionで素早さ枠の方針を確認。
メンバー確定時:
$PKDX query で特性一覧を取得members[i].role を埋める耐久寄りのポケモン(HP/防御型アタッカー、壁役、受けポケ等)にSPを振る際は、pkdx hbd で総合耐久指数 HBD/(B+D) を最大化する配分を自動算出できる。S振りを固定して残りを H/B/D に最適配分:
# デフォルト (Champions SP): 予算66、各上限32
$PKDX hbd "<name>" --nature "<nature>" --fixed-ev "_,0,_,0,_,<S_sp>"
# Deprecated版: --version scarlet_violet 指定時は EV として解釈(予算508、各上限252)
$PKDX hbd "<name>" --nature "<nature>" --fixed-ev "_,0,_,0,_,<S_ev>" --version scarlet_violet
--hp-snap leftovers: たべのこし持ちは 16n+1(H ≡ 1 mod 16)--hp-snap residual: 定数ダメ耐性重視は 16n-1--phys-weight P --spec-weight S: 物理/特殊のメタを反映した非対称重み(例: 物理多なら --phys-weight 2)--top N: 上位 N 候補を比較(微差の配分を選択)アルゴリズムの詳細・H=B+D の導出・11n調整との関係は .claude/skills/team-builder/references/bulk_theory.md を参照。SP システムの詳細は .claude/skills/team-builder/references/champions_sp.md を参照。
AskUserQuestionで取得方法を選択:
WebFetch: https://www.smogon.com/stats/
Prompt: "ディレクトリ一覧から最新のYYYY-MM形式の月を返してください"
singles時:
WebFetch: https://www.smogon.com/stats/{YYYY-MM}/gen9bssregi-1760.txt
→ 失敗時: gen9bssregi-1695.txt
→ 失敗時: gen9bssregi-0.txt
→ 失敗時: gen9ou-1695.txt
doubles時:
WebFetch: https://www.smogon.com/stats/{YYYY-MM}/gen9bssfregidoubles-1760.txt
→ 失敗時: gen9bssfregidoubles-1695.txt
→ 失敗時: gen9bssfregidoubles-0.txt
→ 失敗時: gen9doublesou-1695.txt
→ 失敗時: gen9vgc2025-1695.txt
Prompt: "パイプ区切りの表から、上位30体のポケモン名(英語名)と使用率(%)を抽出してください"
Top30から6体を選出する基準:
各仮想敵のデータ取得:
$PKDX query "<仮想敵名>" --version "<version>" --format json
AskUserQuestionで仮想敵リストを提示し、入れ替えを受付。
ここまでのフェーズで集まった情報を統合し、6体の構築を確定する。
| Slot | 役割 | 決定元 |
|---|---|---|
| 1 | 軸 | Phase 1 |
| 2 | 攻め補完 | Phase 3 |
| 3 | 受け補完 | Phase 4 |
| 4 | 素早さ枠 | Phase 5 |
| 5 | メタ対策枠 | Phase 6 |
| 6 | 汎用/糊枠 | 残りの弱点を埋める |
未確定のスロットがある場合、Phase 3-5の候補リストから提案し、AskUserQuestionで決定。 各未確定メンバーの確定時にも特性選択 + 持ち物提案 + ポケモンメモ入力を行う(Phase 3-5と同様のフロー)。メモ入力は メンバー確定共通: ポケモンメモ入力 を参照。
6体全員の持ち物を一覧し、重複がないことを確認。 重複がある場合はAskUserQuestionで代替を提案。
type.jsonを参照し、チーム全体の攻撃・防御カバー率を計算:
攻撃カバー率:
防御カバー率:
仮想敵6体それぞれに対して、最適な3体選出パターンを提示:
### vs {仮想敵名} ({type1}/{type2})
- 選出: 軸 + {メンバーA} + {メンバーB}
- 理由: {タイプ相性・特性・持ち物を含めた役割の説明}
- 特性シナジー: {該当する場合。例: 「ふゆう持ちのロトムで地面技を無効化」}
- 注意: {弱点やリスク。例: 「わざわいのつるぎで防御が下がるため物理受け注意」}
軸は必ず選出。残り2枠の組み合わせを仮想敵の弱点・タイプ・特性に応じて最適化。
仮想敵6体それぞれに対して、最適な4体選出パターンを提示。先発2体 + 後発2体の構成で記述:
### vs {仮想敵名} ({type1}/{type2})
- 先発: {メンバーA} + {メンバーB}
- 後発: {メンバーC} + {メンバーD}
- 初手の動き: {ターン1の理想的な行動。例: 「Aがおいかぜ、Bがまもる→次ターンから攻撃開始」}
- 横の並びシナジー: {先発ペアの相互作用。例: 「AのこのゆびとまれでBの積み技を通す」}
- 裏の役割: {後発2体の投入タイミング。例: 「Aが倒れたらCで天候を再展開」}
- 注意: {弱点やリスク。例: 「相手のねこだまし+集中攻撃でAが初手で落ちる場合はBを先発に」}
先発ペアは以下を重視して選定:
特に以下を考慮:
terastalメカニクスが有効な場合、AskUserQuestionで:
megaメカニクスが有効な場合:
AskUserQuestion(2問):
| # | 質問 | header | オプション | multiSelect |
|---|---|---|---|---|
| 1 | ポケソル形式のテキストも出力しますか? | ポケソル出力 | はい(desc: ダメージ計算SV等で読み込めるテキストも出力), いいえ(desc: mdレポートのみ) | false |
| 2 | この構築データをバージョン管理の対象にしますか? | バージョン管理 | はい(desc: gitで変更履歴を残す。GitHubアカウントがあればクラウドにもバックアップ可能), いいえ(desc: 手元にのみ保存。gitには記録しない) | false |
質問2の回答に基づきファイル名を決定:
{軸ポケモン名}-build-{YYYY-MM-DD} (通常のファイル名)__no_save.{軸ポケモン名}-build-{YYYY-MM-DD} (gitignore対象)キャッシュ JSON はPhase 0-7で段階的に構築済み。CLIがJSON→マークダウンCST→serializeを行うため、マークダウンを直接書く必要はない。
出力先:
box/teams/{軸ポケモン名}-build-{YYYY-MM-DD}.mdbox/teams/__no_save.{軸ポケモン名}-build-{YYYY-MM-DD}.md8-1の回答に基づき --axis の値を決定:
--axis "<軸ポケモン名>"--axis "__no_save.<軸ポケモン名>"cat $CACHE_FILE | $PKDX write teams --date "YYYY-MM-DD" --axis "<軸ポケモン名 or __no_save.軸ポケモン名>"
CLIはキャッシュ JSON のスキーマ(members + coverage + defense_matrix 等)をバリデーションする。
全メンバーの moves が4技埋まっていない場合はバリデーションエラーとなる。
エラー時の再試行: exit code が 0 以外の場合、stderrのエラーメッセージに基づいてキャッシュ JSON を修正し再試行する。最大3回まで。
レポート出力後、ファイルパスをユーザーに通知。キャッシュファイルを削除する。
8-1で「はい」の場合のみ、Writeツールで以下の形式のテキストファイルを書き出す。
出力先: mdレポートと同じ prefix ルールを適用(バージョン管理なしの場合は __no_save. 付与)
box/teams/{軸ポケモン名}-build-{YYYY-MM-DD}.txtbox/teams/__no_save.{軸ポケモン名}-build-{YYYY-MM-DD}.txt各ポケモンのブロックを空行区切りで並べる:
{ポケモン名} / {特性} / {持ち物}
{技1} / {技2} / {技3} / {技4}
実数値: {HP}-{攻撃}-{防御}-{特攻}-{特防}-{素早さ}
SP: {HP}-{攻撃}-{防御}-{特攻}-{特防}-{素早さ}
性格: {性格名}
注意事項:
実数値: 未設定 / SP: 未設定 / 性格: 未設定 と記載box/pokemons/<name>/ 配下にbreedスキルの出力ファイルが存在する場合、そこから実数値・SP・性格を読み取る各フェーズ終了時に以下を出力し、会話内の状態を管理する。contextが圧縮された場合も、最新のTeam Stateから状態を復元可能。また、キャッシュファイルからも読み出すことができる。
=== Team State (Phase N完了) ===
バトル形式: {singles or doubles}
メカニクス: {有効メカニクス}
バージョン: {version}
軸: {名前} ({type1}/{type2}) [{H}/{A}/{B}/{C}/{D}/{S}] globalNo:{globalNo}
攻めカバー: {タイプ一覧} → {X}/18タイプ
攻めの穴: {タイプ一覧}
弱点: {タイプ(倍率)}(特性補正込み)
耐性: {タイプ(倍率)}(特性補正込み)
素早さ: Tier {X} (base {S})
確定メンバー:
1. {名前} (軸) 特性:{特性名} 持ち物:{持ち物名} メモ:{role or 未記入}
2. {名前 or 検討中} (攻め補完) 特性:{特性名} 持ち物:{持ち物名} メモ:{role or 未記入}
3. {名前 or 検討中} (受け補完) 特性:{特性名} 持ち物:{持ち物名} メモ:{role or 未記入}
4. {名前 or 検討中} (素早さ枠) 特性:{特性名} 持ち物:{持ち物名} メモ:{role or 未記入}
5. {名前 or 検討中} (メタ対策) 特性:{特性名} 持ち物:{持ち物名} メモ:{role or 未記入}
6. {名前 or 検討中} (汎用) 特性:{特性名} 持ち物:{持ち物名} メモ:{role or 未記入}
使用済み持ち物: [{持ち物1}, {持ち物2}, ...]
【doubles時のみ】S操作手段: {おいかぜ/トリックルーム/ねこだまし等}
【doubles時のみ】横の並びペア: {主要な先発ペアとそのシナジー}
仮想敵: {6体のリスト or Phase 6で決定}
| 状況 | 対応 |
|---|---|
| pkdx / pokedex.db が見つからない | Phase 0でセットアップ手順を案内し終了 |
| pkdx query の結果が空 | ポケモン名の確認を再度依頼。リージョンフォームの可能性を案内。メガシンカの場合はパッチ実行を提案 |
| pkdx moves の結果が空 | version値の不一致の可能性を案内 |
| Smogon Stats取得失敗 | フォールバック順で試行。全失敗時は手動入力モードに切り替え |
| DB未収録のポケモン | AskUserQuestionでタイプ・種族値・主要技を手動入力してもらう |