godot について
Godot 4.3 以降の GDScript 開発とゲーム設計を支援するコード生成スキルです。静的型付けと公式スタイルガイドを徹底し、Godot 3 の構文や非推奨 API を避けます。
主な機能
- 01Godot 4.3 以降に限定
- 02静的型付けの宣言を必須化
- 03公式 GDScript スタイルガイドに準拠
- 04疎結合とデータ駆動設計を採用
- 05一般的なゲームシステムの実装パターン
活用シーン
- 01GDScript ファイルの作成や変更
- 02Godot 3 コードの Godot 4 への移行
- 03シーンツリーとノード間通信の設計
- 04コントローラー、セーブ、ステートマシンの実装
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ shihabshahrier/ godot-skill --skill godotインストール後、Claude Code で/godotを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/architecture-patterns.mdcommon-systems.mdgdscript-style-guide.mdgodot4-syntax.md詳細
Godot 4.3+ 向けに、本番環境で使用できる型安全な GDScript 2.0 を生成します。生成するすべてのコードに、公式スタイルガイド、厳格な静的型付け、最新のアーキテクチャパターンを適用します。
目的
このスキルでは、Godot 関連のコード生成を次のように制限します。
- Godot 4.3+ のみ — Godot 3 の構文と非推奨 API を積極的にブロックします
- 厳格な静的型付け — すべての変数、パラメーター、戻り値の型を宣言します
- 公式 GDScript スタイルガイド — 命名、書式、17 段階のコード順序
- 疎結合 — 「呼び出しは下へ、シグナルは上へ」、継承よりコンポジションを優先します
- データ駆動設計 — データには Resource、プレゼンテーションには Node、ロジックには Manager を使用します
適用するタイミング
次のタスクでは常に適用します。
- GDScript ファイルの作成または変更
- Godot のシーンアーキテクチャやノードツリーの設計
- ゲームメカニクス(移動、戦闘、インベントリ、AI)の実装
- UI、セーブ/ロードシステム、プロシージャル生成の構築
- Godot 3 のコードから Godot 4 への移行
構文の制約
以下は必須です。違反するとコンパイルエラーになります。
| 禁止(Godot 3/非推奨) | 必須(Godot 4.3+) |
|---|---|
yield | await |
emit_signal("name") | signal_name.emit() |
connect("signal", target, "method") | signal.connect(callable) |
TileMap ノード | TileMapLayer ノード |
File/Directory クラス | FileAccess/DirAccess |
deg2rad/rad2deg | deg_to_rad/rad_to_deg |
stepify/rand_range/instance() | snapped/randf_range/instantiate() |
export var/onready var | @export var/@onready var |
KinematicBody2D | CharacterBody2D |
move_and_slide(velocity) | velocity = ...; move_and_slide() |
コードを移行する場合は、非推奨項目の一覧をすべて確認するために references/godot4-syntax.md を読み込みます。
型安全性
すべての宣言で静的型付けを行う必要があります。
var speed := 400.0 # Inferred
var player_name: String = "" # Explicit
var enemies: Array[Enemy] = [] # Typed array
func calculate_damage(base: float, mult: float) -> float: # Params + return
func take_damage(amount: int) -> void: # Void explicit
命名と書式
命名規則と書式ルールについては、references/gdscript-style-guide.md を読み込みます。
常に適用される主なルール:
| 要素 | 規則 | 例 |
|---|---|---|
| ファイル | snake_case.gd | weapon_system.gd |
| クラス/ノード | PascalCase | class_name NetworkManager |
| 関数 | snake_case() | func calculate_velocity(): |
| シグナル | snake_case(過去形) | signal enemy_defeated |
| 定数/列挙型のメンバー | CONSTANT_CASE | const MAX_SPEED := 600.0 |
書式:1 行につき 1 文、ブール演算子には英語表記(and/or/not)を使用し、不要な括弧は避け、複数行の条件式はインデントを 2 段階にします。
スクリプト構造(17 段階の順序)
すべてのスクリプトは、次の順序に厳密に従います。
1. @tool, @icon 2. class_name 3. extends
4. ## Docstring 5. signals 6. enums
7. constants 8. static var 9. @export var
10. var (public → _private) 11. @onready var 12. _static_init()
13. static func 14. Virtual callbacks (_init → _ready → _process → _physics_process)
15. Public methods 16. Private methods 17. Inner classes
アーキテクチャパターン
シグナルバス、ステートマシン、エンティティパターン、コンポジションの例については、references/architecture-patterns.md を読み込みます。
常に適用される判断ツリー:
状態管理:
Needs _process() or node lifecycle? → Autoload
Just data/utilities/config? → Static class (class_name + static var/func)
通信:
Parent → Child: direct method calls
Child → Parent: signals (emit up)
Sibling → Sibling: signal bus or parent mediates
Cross-scene: Autoload event bus
よく使われるシステム
TileMapLayer、FileAccess、Resource、入力、カメラ、プーリング、UI のパターンについては、references/common-systems.md を読み込みます。
常に適用される主な制約:
- 非推奨の TileMap ではなく TileMapLayer を使用します — レイヤーごとに 1 つのノードを使います
- File/Directory ではなく FileAccess/DirAccess を使用します — セーブには
user://を使い、エクスポート時のres://は読み取り専用です - エクスポートしたビルドでアセットを読み込むには ResourceLoader を使用します
- 移植可能なデータには Resource(
.tres)を使用します — データとプレゼンテーションを分離します
よく使われるタスクパターン
プレイヤーコントローラー(2D プラットフォーマー)
完全な CharacterBody2D スクリプトを生成します。エクスポートする移動変数、move_and_slide() を使う _physics_process、コヨーテタイム、ジャンプ入力のバッファリング、列挙型による状態管理、入力マップへの参照を含めます。
ステートマシン
State の子ノードを管理する専用の StateMachine ノードを使います。各状態は基底 State クラスを継承します。遷移にはシグナルを使います。状態の比較に文字列は使用しません。
セーブ/ロード
すべてのセーブに user:// を使用します。エラーチェック付きで FileAccess.open() を使います。JSON または ResourceSaver を使用します。File クラスは使用しません。
TileMap/レベルデザイン
論理レイヤーごとに TileMapLayer を使用します。get_cell_source_id() / set_cell() を使用します。コードによるプロシージャル生成も可能です。
出力ルール
- コードブロックを使用し、アーキテクチャ上の根拠は最大 2 文にします
- 会話的な前置きは入れません
- コメントでは「何をするか」ではなく「なぜそうするか」を説明します
- ファイルパスは必ず指定します
- 関連する場合はノードツリーを記述します:
Player (CharacterBody2D)
├── CollisionShape2D
├── Sprite2D
├── AnimationPlayer
└── Hurtbox (Area2D)
└── CollisionShape2D
エラーからの復旧
Godot 3 のコードが提示された場合 → 非推奨の要素を特定し、現代的な代替方法を提示して、移行について 1 文で説明したうえで、修正済みコードを生成します。
アーキテクチャ上、適切でないリクエストの場合 → 適切なパターンを用いて生成し、懸念点を 1 文で述べます。問題によって実際にスケーリング上の課題が生じる場合に限り、代替案を提案します。
禁止事項
- Godot 3 の構文(
yield、emit_signal()、文字列ベースのconnect()、TileMap、File、Directory)を決して出力しません - 静的型付けが可能な場合に、動的型付けを決して使用しません
- camelCase、ハンガリアン記法、記号形式のブール演算子(
&&、||、!)を決して使用しません - ノード間通信に
get_parent()やget_node("../Sibling")を決して使用しません - 純粋なユーティリティ/データ用途に Autoload を決して提案しません。静的クラスを使用します
- 条件判定と実行を同じ行に決して記述しません
- 複数行の条件式で、行末に
and/orを決して置きません - 戻り値のない関数で
-> voidを決して省略しません - コードが「何をするか」を説明するコメントは決して書きません。「なぜそうするか」のみ記述します
- ユーザーの既存プロジェクトのコンテキストを先に確認せず、コードを決して生成しません