add-configuration
戦闘状況やバフ効果など、ダメージ計算に関わる設定項目を、設定インターフェースに追加する際に活用することで、より詳細なビルド設定を可能にするSkill。
📜 元の英語説明(参考)
Use when adding new configuration fields to the Configuration interface for combat conditions, buff stacks, or other build parameters used in damage calculations (project)
🇯🇵 日本人クリエイター向け解説
戦闘状況やバフ効果など、ダメージ計算に関わる設定項目を、設定インターフェースに追加する際に活用することで、より詳細なビルド設定を可能にするSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o add-configuration.zip https://jpskill.com/download/9216.zip && unzip -o add-configuration.zip && rm add-configuration.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/9216.zip -OutFile "$d\add-configuration.zip"; Expand-Archive "$d\add-configuration.zip" -DestinationPath $d -Force; ri "$d\add-configuration.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
add-configuration.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
add-configurationフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
設定フィールドの追加
概要
設定フィールドは、戦闘条件、バフのスタック数、およびダメージ計算に影響を与えるその他のビルドパラメータを制御します。これらは SaveData に永続化され、設定タブの UI を介して編集可能です。
使用場面
- ダメージ計算のための新しいトグル(真偽値)または数値パラメータの追加
- 条件付きの戦闘状態の追加(例:「最近 X を持っている」、「敵が Y を持っている」)
- バフ/デバフのスタック数の追加
- 敵のステータスのオーバーライドの追加
プロジェクトファイルの場所
| 目的 | ファイルパス |
|---|---|
| 設定インターフェースとデフォルト値 | src/tli/core.ts |
| Zod バリデーションスキーマ | src/lib/schemas/config.schema.ts |
| 設定タブ UI | src/components/configuration/ConfigurationTab.tsx |
| 計算での使用 | src/tli/calcs/offense.ts (およびその他の calcs ファイル) |
実装チェックリスト
1. 設定インターフェースへのフィールドの追加 (src/tli/core.ts)
フィールドを Configuration インターフェースに、デフォルトのコメント付きで追加します。
真偽値フィールド(デフォルトは false):
// default to false
newFieldEnabled: boolean;
必須の数値フィールド(適切な非 undefined のデフォルト値を持つ):
// default to 1
numThings: number;
オプションの数値フィールド(undefined は「計算されたデフォルト/最大値を使用」を意味する):
// default to max
someStacks?: number;
2. DEFAULT_CONFIGURATION へのデフォルト値の追加 (src/tli/core.ts)
DEFAULT_CONFIGURATION に一致するデフォルト値を追加します。
// Boolean → false, Required number → the default, Optional number → undefined
newFieldEnabled: false,
numThings: 1,
someStacks: undefined,
3. スキーマバリデーションの追加 (src/lib/schemas/config.schema.ts)
ConfigurationPageSchema に、デフォルト値のエイリアスである d を使用して追加します。パターンはフィールドの型によって異なります。
真偽値:
newFieldEnabled: z.boolean().catch(d.newFieldEnabled),
必須の数値:
numThings: z.number().catch(d.numThings),
オプションの数値:
someStacks: z.number().optional().catch(d.someStacks),
スキーマの末尾にある satisfies z.ZodType<Configuration> は、スキーマがインターフェースと同期していることを保証します。フィールドを見逃したり、型を間違えたりすると、型エラーが発生します。
4. UI コントロールの追加 (src/components/configuration/ConfigurationTab.tsx)
設定タブは、2 列のグリッドを使用します:grid-cols-[auto_auto] で、左側にラベル、右側にコントロールがあります。
NumberInput フィールド(必須の数値):
<label className="text-right text-zinc-50">
Field Label
<InfoTooltip text="Description of what this does. Defaults to X." />
</label>
<NumberInput
value={config.numThings}
onChange={(v) => onUpdate({ numThings: v ?? 1 })}
min={1}
/>
NumberInput フィールド(オプションの数値、undefined = 最大/デフォルト):
<label className="text-right text-zinc-50">
Stack Count
<InfoTooltip text="Defaults to max" />
</label>
<NumberInput
value={config.someStacks}
onChange={(v) => onUpdate({ someStacks: v })}
min={0}
/>
チェックボックスフィールド(真偽値):
<label className="text-right text-zinc-50">Field Label</label>
<input
type="checkbox"
checked={config.newFieldEnabled}
onChange={(e) => onUpdate({ newFieldEnabled: e.target.checked })}
className="h-4 w-4 rounded border-zinc-600 bg-zinc-800 accent-amber-500"
/>
条件付きの子 NumberInput を持つチェックボックス(真偽値トグル + オプションのスタック):
<label className="text-right text-zinc-50">Has Effect</label>
<input
type="checkbox"
checked={config.hasEffect}
onChange={(e) => onUpdate({ hasEffect: e.target.checked })}
className="h-4 w-4 rounded border-zinc-600 bg-zinc-800 accent-amber-500"
/>
{config.hasEffect && (
<>
<label className="text-right text-zinc-50">
Effect Stacks
<InfoTooltip text="Defaults to max" />
</label>
<NumberInput
value={config.effectStacks}
onChange={(v) => onUpdate({ effectStacks: v })}
min={0}
/>
</>
)}
条件付きでレンダリングされるフィールド(ロードアウトに何かがある場合にのみ表示):
{hasPactspirit("Some Pactspirit", loadout) && (
<>
<label className="text-right text-zinc-50">
Some Stacks
<InfoTooltip text="Defaults to max" />
</label>
<NumberInput
value={config.someStacks}
onChange={(v) => onUpdate({ someStacks: v })}
min={0}
max={6}
/>
</>
)}
5. 計算での使用(該当する場合)
計算関数で config パラメータを介してフィールドにアクセスします。
// In src/tli/calcs/offense.ts or related files
const numActiveTangles = config.numActiveTangles;
6. 検証
pnpm typecheck
pnpm check
pnpm test
フィールドタイプの決定ガイド
| シナリオ | インターフェースの型 | デフォルト値 | スキーマ |
|---|---|---|---|
| オン/オフの切り替え | boolean |
false |
z.boolean().catch(d.x) |
| 既知のデフォルト値を持つカウント | number |
その値 | z.number().catch(d.x) |
| undefined = "最大値を使用" となるカウント | number? |
undefined |
z.number().optional().catch(d.x) |
| undefined = "計算値を使用" となるオーバーライド | number? |
undefined |
z.number().optional().catch(d.x) |
NumberInput の onChange パターン
- 必須の数値:
onChange={(v) => onUpdate({ field: v ?? defaultValue })}— クリアされた場合はデフォルト値に戻る - オプションの数値:
onChange={(v) => onUpdate({ field: v })}— undefined を許可する(クリアされた場合はデフォルト/最大値を使用)
UI での配置場所
関連するフィールドの近くの ConfigurationTab 内のグリッドに新しいフィールドを配置します。一般的なグループ化:
- 上部:レベル、熱情、霜焼け、ヒーロー固有
- 中部:プレイヤーの状態(祝福、マナ、移動、攻撃性)
- 中部:敵の状態(抵抗、アーマー、デバフ、状態異常)
- 下部:バフスタック、スキル固有のカウント
自動永続化
永続化のために追加の作業は必要ありません。フィールドは以下のように流れます:
Configuration interface → DEFAULT_CONFIGURATION → ConfigurationPageSchema → SaveData → Zustand store 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Adding Configuration Fields
Overview
Configuration fields control combat conditions, buff stacks, and other build parameters that affect damage calculations. They are persisted in SaveData and editable via the Configuration tab UI.
When to Use
- Adding a new toggle (boolean) or numeric parameter for damage calculations
- Adding conditional combat states (e.g., "has X recently", "enemy has Y")
- Adding stack counts for buffs/debuffs
- Adding enemy stat overrides
Project File Locations
| Purpose | File Path |
|---|---|
| Configuration interface & defaults | src/tli/core.ts |
| Zod validation schema | src/lib/schemas/config.schema.ts |
| Configuration tab UI | src/components/configuration/ConfigurationTab.tsx |
| Calculation usage | src/tli/calcs/offense.ts (and other calcs files) |
Implementation Checklist
1. Add Field to Configuration Interface (src/tli/core.ts)
Add the field to the Configuration interface with a default comment:
Boolean field (default false):
// default to false
newFieldEnabled: boolean;
Required number field (has a sensible non-undefined default):
// default to 1
numThings: number;
Optional number field (undefined means "use calculated default/max"):
// default to max
someStacks?: number;
2. Add Default Value to DEFAULT_CONFIGURATION (src/tli/core.ts)
Add the matching default in DEFAULT_CONFIGURATION:
// Boolean → false, Required number → the default, Optional number → undefined
newFieldEnabled: false,
numThings: 1,
someStacks: undefined,
3. Add Schema Validation (src/lib/schemas/config.schema.ts)
Add to ConfigurationPageSchema using the d alias for defaults. The pattern depends on the field type:
Boolean:
newFieldEnabled: z.boolean().catch(d.newFieldEnabled),
Required number:
numThings: z.number().catch(d.numThings),
Optional number:
someStacks: z.number().optional().catch(d.someStacks),
The satisfies z.ZodType<Configuration> at the end of the schema ensures the schema stays in sync with the interface — a type error will occur if you miss a field or get the type wrong.
4. Add UI Controls (src/components/configuration/ConfigurationTab.tsx)
The configuration tab uses a 2-column grid: grid-cols-[auto_auto] with label on the left, control on the right.
NumberInput field (required number):
<label className="text-right text-zinc-50">
Field Label
<InfoTooltip text="Description of what this does. Defaults to X." />
</label>
<NumberInput
value={config.numThings}
onChange={(v) => onUpdate({ numThings: v ?? 1 })}
min={1}
/>
NumberInput field (optional number, undefined = max/default):
<label className="text-right text-zinc-50">
Stack Count
<InfoTooltip text="Defaults to max" />
</label>
<NumberInput
value={config.someStacks}
onChange={(v) => onUpdate({ someStacks: v })}
min={0}
/>
Checkbox field (boolean):
<label className="text-right text-zinc-50">Field Label</label>
<input
type="checkbox"
checked={config.newFieldEnabled}
onChange={(e) => onUpdate({ newFieldEnabled: e.target.checked })}
className="h-4 w-4 rounded border-zinc-600 bg-zinc-800 accent-amber-500"
/>
Checkbox with conditional child NumberInput (boolean toggle + optional stacks):
<label className="text-right text-zinc-50">Has Effect</label>
<input
type="checkbox"
checked={config.hasEffect}
onChange={(e) => onUpdate({ hasEffect: e.target.checked })}
className="h-4 w-4 rounded border-zinc-600 bg-zinc-800 accent-amber-500"
/>
{config.hasEffect && (
<>
<label className="text-right text-zinc-50">
Effect Stacks
<InfoTooltip text="Defaults to max" />
</label>
<NumberInput
value={config.effectStacks}
onChange={(v) => onUpdate({ effectStacks: v })}
min={0}
/>
</>
)}
Conditionally rendered field (only show when loadout has something):
{hasPactspirit("Some Pactspirit", loadout) && (
<>
<label className="text-right text-zinc-50">
Some Stacks
<InfoTooltip text="Defaults to max" />
</label>
<NumberInput
value={config.someStacks}
onChange={(v) => onUpdate({ someStacks: v })}
min={0}
max={6}
/>
</>
)}
5. Use in Calculations (if applicable)
Access the field via the config parameter in calculation functions:
// In src/tli/calcs/offense.ts or related files
const numActiveTangles = config.numActiveTangles;
6. Verify
pnpm typecheck
pnpm check
pnpm test
Field Type Decision Guide
| Scenario | Interface Type | Default | Schema |
|---|---|---|---|
| On/off toggle | boolean |
false |
z.boolean().catch(d.x) |
| Count with known default | number |
the value | z.number().catch(d.x) |
| Count where undefined = "use max" | number? |
undefined |
z.number().optional().catch(d.x) |
| Override where undefined = "use calculated" | number? |
undefined |
z.number().optional().catch(d.x) |
onChange Patterns for NumberInput
- Required number:
onChange={(v) => onUpdate({ field: v ?? defaultValue })}— fallback to default when cleared - Optional number:
onChange={(v) => onUpdate({ field: v })}— allow undefined (cleared = use default/max)
Where to Place in the UI
Place new fields in the grid inside ConfigurationTab near related fields. General grouping:
- Top: Level, Fervor, Frostbite, hero-specific
- Middle: Player conditions (blessings, mana, movement, aggression)
- Middle: Enemy conditions (resistances, armor, debuffs, ailments)
- Bottom: Buff stacks, skill-specific counts
Automatic Persistence
No additional work is needed for persistence. The field flows through:
Configuration interface → DEFAULT_CONFIGURATION → ConfigurationPageSchema → SaveData → Zustand store → localStorage
The store's updateConfiguration action handles partial updates via spread, and the schema's .catch() ensures old saves without the new field get the default value.