「モダンで簡潔な構文が欲しい。でも .NET のランタイムや資産は手放したくない」——その両方を狙う新しい言語 G#(ジー・シャープ) が登場しました。作者は David Obando 氏で、2026 年 7 月に 0.3 リリースを発表。Microsoft の David Fowler 氏も「新しい .NET 言語 G#」として紹介し、注目を集めています。
この記事では G# の要点を、構文とコードで整理します。
G# とは何か
G# は、.NET のマネージドアセンブリへ直接コンパイルするプログラミング言語です。Go のパッケージ設計、Kotlin・Swift の null 安全といったモダンな言語設計を取り入れつつ、CLR ランタイム・BCL・NuGet・MSBuild・Portable PDB・C# 相互運用といった .NET の資産をそのまま使えます。作者いわく「C# は優秀だが大きい。G# は言語表面を小さく予測可能に保つ、という別の制約から始める」。
モダンで簡潔な構文
package / import / func、${...} の文字列補間。Go や Kotlin を触ったことがあれば、ほぼ説明なしで読めます。
package Hello
import System
func greet(name string) string {
return "Hello, ${name}!"
}
Console.WriteLine(greet("world"))
data class は、構造的等価・with によるコピー・分解代入を自動生成します。C# のレコードに近い発想を、より短い記述で。
data class Person(Name string, Age int32)
let alice = Person("Alice", 30)
let older = alice with { Age = 31 }
let (n, a) = older
Console.WriteLine(alice == Person("Alice", 30)) // True
null は型システムに組み込まれています。null ではなく nil を使い、素の T は nil を持てず、T? だけが nil を許容。取り出しは if let で安全に行えます。
func Greet(name string?) {
if let n = name {
Console.WriteLine("hi ${n}")
} else {
Console.WriteLine("hi stranger")
}
}
非同期は async/await が Task・Task[T] の上で動きます(ジェネリクスは角括弧 [])。特徴的なのが scope { ... } ブロックで、内部で開始した子タスクの完了(join)を自動で待ち合わせる構造化並行を強制します。数値型は int32 / uint64 / float64 のように幅が名前に現れ、値のサイズが明示されます。
.NET との相互運用
G# の実用性を支えるのが相互運用です。あらゆる .NET 型をそのまま呼べ、LINQ・プロパティ・IEnumerable[T] への for-in、P/Invoke まで対応します。xUnit のような既存のテスト資産も @Fact / @Theory / @InlineData でそのまま使えます。「新しい言語だが、.NET のエコシステムの中にいる」わけです。
3 コマンドで動かす
必要なのは .NET SDK だけ。テンプレートから作って走らせます。
dotnet new install Gsharp.Templates
dotnet new gsharp-console -n HelloG
cd HelloG && dotnet build && dotnet run
REPL の gsi、C#→G# 変換の cs2gs、VS Code 拡張も揃っています。なお G# は**プレ 1.0(v0.3)**で、相互運用の一部は emit のみ・移行ツールも拡大中です。まずは検証・学習から触れるのが安全でしょう。
もっと詳しく
本家ブログでは、サーバーで C# サービスを直接呼ぶ相互運用のデモ、ダーク図解つきの言語機能まとめ、3 ステップのチュートリアル(実コード+出力)、David Fowler 氏の反応、FAQ まで掘り下げています。
👉 G# とは — Go・Kotlin・Swift の書き味を .NET に持ち込むモダン言語 | WithNext.NET
.NET / C# のモダナイゼーション、パフォーマンス最適化、AI 活用などの実践記事を WithNext.NET で発信しています。

