Godot Engineを使い始めるとき、多くの開発者が最初に迷うのが「GDScriptとC#、どちらを使うべきか」という問題です。2026年現在、Godot 4.xの成熟に伴い両言語の状況は大きく変わりました。この記事では、実際のベンチマークデータやエコシステムの現状を基に、どちらを選ぶべきかを整理します。
コミュニティの選択:数字が語る現実
2025年のGodotコミュニティ調査(回答者数約9,600人)によると、**GDScript利用率は84%**です。C#は約14%、残りがGDExtensionやVisual Scriptの利用者です。
この数字は単なる人気投票ではなく、エコシステム全体に影響します。チュートリアル、プラグイン、フォーラムの回答はほとんどGDScript前提で書かれています。C#を選ぶと、問題に詰まったとき参考にできるリソースが大幅に少なくなります。
パフォーマンス:「C#のほうが速い」は本当か
「C#はコンパイル言語だからGDScriptより速い」という認識は、2024年以前なら概ね正しかったです。しかし、Godot 4.xで導入された**型付き命令(Typed Instructions)**がこの構図を変えました。
GDScriptの型付き命令による高速化
Godot公式の報告では、静的型付けを使うことで以下の高速化が実現されています:
| 処理内容 | 高速化率 |
|---|---|
| 属性アクセス | 5〜7% |
| 演算操作 | 25〜50% |
| 組み込み型のメソッド呼び出し(検証済み) | 約70% |
| ネイティブクラスのメソッド呼び出し(検証済み) | 120〜150% |
| イテレーション | 10〜50% |
これらは100,000回ループのデバッグビルドでの計測であり、リリースビルドではさらに改善が見込めます。
実測ベンチマーク:Vector2演算
beep.blogが公開したベンチマーク(M2 Max、10億回イテレーション)では、Vector2の距離計算で以下の結果が出ています:
# 型なし vs 型あり(Vector2.distance_to)
デバッグビルド:55.0% 高速化
リリースビルド:58.8% 高速化
整数の加算でも34.2%、乗算で35.9%の高速化(リリースビルド)です。静的型を付けるだけでこれだけ変わります。
実際のゲームで問題になるか
結論から言うと、ほとんどのゲームではGDScriptで十分です。ゲームのボトルネックはスクリプト言語ではなく、描画処理や物理演算にあることが多く、これらはエンジン内部のC++コードが処理します。
本当にスクリプト層の速度が必要な場合は、C#よりもGDExtension(C/C++/Rust)を使うほうが効果的です。
C#の制約:見落としがちな問題
C#にはGDScriptにはない制約がいくつかあります。
Webエクスポート不可
2026年4月現在、Godot 4.xの.NET版はWebへのエクスポートに対応していません。ブラウザゲームやitch.ioでのWeb公開を考えているなら、C#は選択肢から外れます。
GDExtensionとの非互換
C#からGDExtensionを直接呼び出すことはできません。GDExtensionベースのプラグインを使う場合、GDScript経由のラッパーが必要になるケースがあり、設計が複雑になります。
エディタ環境の追加要件
C#を使う場合、.NET SDKのインストールと外部エディタ(Visual Studio、Rider等)の設定が必要です。GDScriptはGodotエディタだけで完結します。
GDScriptを選ぶべきケース
- Godotを初めて使う場合:学習コストが低く、エンジンとの統合が深い
- Web公開を予定している場合:C#ではWebエクスポートできない
- 小〜中規模のプロジェクト:スクリプト速度がボトルネックにならない
- プラグインやアドオンを活用したい場合:エコシステムの大半がGDScript前提
商業的に成功したGodotタイトル(Brotato、Dome Keeper、Cassette Beasts)もGDScriptで開発されています。
C#を選ぶべきケース
- 大規模なC#コードベースを既に持っている場合
- チームにC#経験者が多く、GDScriptの学習コストを避けたい場合
- Unityからの移行で、既存のC#ロジックを再利用したい場合
- 強い型システムやIDEのリファクタリング支援が必要な場合
ただし上記に当てはまる場合でも、Webエクスポートの制約は確認してください。
静的型付けGDScriptの書き方
GDScriptで速度を出すには、変数に型を明示します:
# 型なし(遅い)
var speed = 10.0
var position = Vector2(0, 0)
var enemies = []
# 型あり(速い)
var speed: float = 10.0
var position: Vector2 = Vector2(0, 0)
var enemies: Array[Node2D] = []
関数の引数と戻り値にも型を付けます:
func calculate_damage(base: float, multiplier: float) -> float:
return base * multiplier
func get_nearest_enemy(from: Vector2, enemies: Array[Node2D]) -> Node2D:
var nearest: Node2D = null
var min_dist: float = INF
for enemy: Node2D in enemies:
var dist: float = from.distance_to(enemy.global_position)
if dist < min_dist:
min_dist = dist
nearest = enemy
return nearest
型を付けるのが面倒に感じる場合は、ZivaのようなAIコード生成ツールを使うと、最初から型付きのGDScriptが出力されます(筆者はZivaの開発者です)。
まとめ
| 項目 | GDScript | C# |
|---|---|---|
| 利用率 | 84% | 約14% |
| 学習コスト | 低い | 中〜高 |
| Web対応 | あり | なし |
| GDExtension連携 | 直接可能 | 不可 |
| 型付き高速化 | 25〜150% | — |
| IDE不要 | Godot内蔵 | 外部エディタ推奨 |
| エコシステム | 充実 | 限定的 |
特別な理由がない限り、2026年のGodot開発ではGDScriptが安全な選択です。型を付けて書けば、パフォーマンスも十分に出ます。C#は「既にC#の資産がある」場合の選択肢であり、新規プロジェクトであえて選ぶ理由は少なくなっています。
参考資料
- GDScript progress report: Typed Instructions - Godot公式
- Yes, your Godot game runs faster with static types - beep.blog
- Godot Community Poll 2025 - Godotコミュニティ調査