mcpField
G
godot

godot

github.com/shihabshahrier開発4102 回インストール9 週間前に更新
リポジトリ

godot について

Godot 4.3 以降の GDScript 開発とゲーム設計を支援するコード生成スキルです。静的型付けと公式スタイルガイドを徹底し、Godot 3 の構文や非推奨 API を避けます。

主な機能

  1. 01Godot 4.3 以降に限定
  2. 02静的型付けの宣言を必須化
  3. 03公式 GDScript スタイルガイドに準拠
  4. 04疎結合とデータ駆動設計を採用
  5. 05一般的なゲームシステムの実装パターン

活用シーン

  1. 01GDScript ファイルの作成や変更
  2. 02Godot 3 コードの Godot 4 への移行
  3. 03シーンツリーとノード間通信の設計
  4. 04コントローラー、セーブ、ステートマシンの実装

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/shihabshahrier/godot-skill --skill godot

インストール後、Claude Code で/godotを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
architecture-patterns.md
common-systems.md
gdscript-style-guide.md
godot4-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+)
yieldawait
emit_signal("name")signal_name.emit()
connect("signal", target, "method")signal.connect(callable)
TileMap ノードTileMapLayer ノード
File/Directory クラスFileAccess/DirAccess
deg2rad/rad2degdeg_to_rad/rad_to_deg
stepify/rand_range/instance()snapped/randf_range/instantiate()
export var/onready var@export var/@onready var
KinematicBody2DCharacterBody2D
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.gdweapon_system.gd
クラス/ノードPascalCaseclass_name NetworkManager
関数snake_case()func calculate_velocity():
シグナルsnake_case(過去形)signal enemy_defeated
定数/列挙型のメンバーCONSTANT_CASEconst 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() を使用します。コードによるプロシージャル生成も可能です。

出力ルール

  1. コードブロックを使用し、アーキテクチャ上の根拠は最大 2 文にします
  2. 会話的な前置きは入れません
  3. コメントでは「何をするか」ではなく「なぜそうするか」を説明します
  4. ファイルパスは必ず指定します
  5. 関連する場合はノードツリーを記述します:
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 を決して省略しません
  • コードが「何をするか」を説明するコメントは決して書きません。「なぜそうするか」のみ記述します
  • ユーザーの既存プロジェクトのコンテキストを先に確認せず、コードを決して生成しません

コメント