プログラム系統備忘録ブログ

記事中のコードは自己責任の下でご自由にどうぞ。

C# Kaigi 2026に一般参加しました

C# Kaigi 2026(connpassページ)に一般参加しました。公式ページの表現を借りるとC#er のための C# 特化型カンファレンスです。当日の雰囲気はC# Kaigi 2026がお台場で開催 基調講演と先進デバッガが話題 / Xをご覧いただくと掴みやすいかもしれません。

本記事は当該カンファレンスの感想記事です。「楽しかった!」な内容です。

各セッションのざっくり感想

私の参加したセッションのざっくり感想です。セッションの一覧はタイムテーブルページをご参照ください。各発表の時間は、基調講演が50分、一般の発表が30分、LTが5分でした。

neueccさんの「【基調講演】C#の現在地 進化の歴史と、AI時代の.NET Everywhere」

C#の歴史や進化の話と、AI時代の現状の発表でした。C#の歴史では、オブジェクト指向としては不純物な値型やdelegateを、C#は最初期から持っている点が印象的でした。実際、ユーザー定義の値型を簡単に使える点が、様々な高速化に寄与している印象です。

追加で、ランタイムの歴史ではUnityがいろいろな方面で登場していることも目立っていました。Unityのランタイムが古いままの影響は色々なところから聞こえてくるので、UnityのCoreCLR移行がうまくいくことを願っています!

AI時代の話では、Code Analyzerを量産しやすいことがC#の利点として挙げられていました。C#のビルドが高速であることに加えて、Analyzerで「ライブラリ等固有の使い方を強要」しやすいことも合わさって、HumanもAIもどちらも幸せになれる環境だと思います。個人的な印象だと、言語によっては「複数のlinterがあり、各種linterがそれぞれ自力でコードパース等をしている」状況が非効率的と思っているので、C#ではRoslyn APIとして整備されている利点が大きいと思っています。

AI時代の現状でもHumanの知識が大いに役立つ実例としてのMessagePackの話は、さすがのneueccさんと思いました!(後述するように私はファンです)

prozolicさんの「ふとしたことから始めた .NET ランタイムへのコントリビュート」

.NET Runtimeへのコントリビュートのための、環境準備の苦悩や、作業の進め方など、各種経験談の発表でした。.NET runtimeの巨大さゆえの、Visual Studioで開くまでの時間や、ビルド時間の長さの話が印象的でした。多くがC# Projectのはずですが、キャッシュなしだとビルドに30分~1時間かかったそうです!

また、1日30~40のPRを毎日追う方法として、PR Digest.NETを開発した話が驚きでした!各種PRに付けられているラベルの統計情報も確認できるサイトなので、どの分野のPRが活発なのか確認できて面白そうです。

高速化や不具合修正など、様々な面でコントリビュートいただいているのが本当にありがたいです。今後.NETを使う私たち全員が幸せになります!

ニッチなBreaking Changesの影響を受けた話や、「天下の.NET Runtimeで!?」という話は、私も以前遭遇したことがあるので、猛烈にうなずきながら聞けました!(過去記事: .NET 8からはLibraryImportAttributeで使うSafeHandle型のコンストラクタをpublicにしよう、LibraryImportAttribute経由で取得したCOMオブジェクトのReleaseはほぼGC頼りになる)

tkymさんの「すこし踏み込む CancellationToken .NETの実装とか他言語比較とか」

.NETでのCancellationTokenの実装詳細や、他言語(Python、Go、Rust)での非同期処理をキャンセルする仕組みの発表でした。私は他言語の事情を全然知らないので面白く聞けました!

Pythonのasyncio.wait_forではタイムアウト発生時に非同期処理を止めてくれたり、止めたくないならasyncio.shieldで制御できたりするんですね。ライブラリ内部で色々連動している雰囲気がします。Rustは所有権の仕組みでうまく表現しているようです。Goは言語レベルで全然分かっていません……。

発表後の質疑応答で「CancellationTokenSourceそのものをDisposeすべきかいつも迷う」という質問をきっかけに、様々な参加者様が参加する議論に発展していたのが面白かったです!私は「Dispose要否が全然分からないものの、とりあえず常にDisposeすればいい?」と思っていたのですが、参加者様が「よく分からんからDisposeする方針に倒すことになった。それでusingを使う方針にしていたら、ログ出力中に突然死ぬことが多発してデバッグが大変だった」旨のことを発言されており、非同期処理の怖さが垣間見えました。

nuskeyさんの「MagicOnion + quiche + UnityでgRPC over HTTP/3を実現する」

準備としてQUIC、HTTP/3、MagicOnionの説明を挟んで、本番としてUnity環境で実現する発表でした。.NET 7以降ではHTTPサーバー側もHTTPクライアント側もHTTP/3に対応しているものの、Unityでは使えないので、様々な工夫で解決する内容でした!

C#ではDllImportAttributeで他言語のライブラリを呼び出せて、おそらくRust側のFFIではC言語互換でライブラリを提供できるらしいことをうまく使っていることが印象的でした。また、HttpClientでの通信処理はHttpMessageHandlerを差し替えることで丸々置き換えられるという柔軟性も寄与しているようです。

発表後の質疑応答で、「ユーザー環境だとUDPが通らない場合や、部分的にだけ通る場合がある。また、最初はパケットが通るけど後から通らなくなることがある。」という話題がありました。ゲーム用途などのモバイル環境では様々な通信環境のユーザーを考慮する必要がありそうで大変そうです!

何縫ねの。さんの「Cloudflare Workers 向けアプリを C# で構築する ~ WASM Native AOT への道~」

Cloudflare Workersで動作するWASMをC#で書けるようにする方法などの発表、のはずです(私の理解が追いついておらず)。私はCloudflare Workersという用語の時点で初耳だったので、様々な制約を新鮮な気持ちで聞いていました。特に、無料用途の範囲だとCPU時間がわずか10msという短さに驚きました!

目的のWASMを出力するために、あらゆる創意工夫を凝らしている点で印象的でした。.NETの実験的プロジェクトを使ったり、ビルドプロセスに介入してtargetオプションを制御したりが必要だったようです。更にC#とJavaScriptの相互運用や非同期対応のために、更に色々必要だったとのことです。様々な要素を、すべて何とか実現してしまっている点が凄かったです!

akeit0さんの「C#でブラウザ(JavaScript Engine, HTML Renderer)を自作して学んだ高速化、効率的なメモリの使い方」

ブラウザの各種要素を実装する際の個別の改善手法の発表でした。発表スライドの表示そのものも自作ブラウザ経由とのことです!

資料中に「作った動機: 作りたかったから」とあったり、質疑応答での「Q: (色々なもの)を実装するのは大変だった?」「A: 大変だった。頑張った。」なやり取りがあったくらいには、パワーある内容でした!ブラウザが担う領域は広大です!

デモンストレーションとして自作ブラウザでいくつかのページを表示していく中で、example.comはいい感じに表示されたり、C# Kaigiサイトではいくつかの画像が大きく表示される状況もあったり、クラッシュしてしまって「というわけでこれが私が作ったブラウザであることが皆さん分かったと思います」で締めくくられたりで、デモンストレーションも面白かったです!

ハダシAさんの「最速のread性能を目指すピュアC#製組み込みDB実装」

読み取り専用DBという概念や、C#の最適化の発表でした。

Zero allocationやdevirtualizing等のC#レベルの話から始まり、次第にページレベルキャッシュや分岐予測ミスといった話や、検索専用のDigest値をノード用に追加するなど、低いレイヤーでも多くの話がありました!また、変更前後での測定で、メトリクスとして実行命令数やキャッシュミス等を測定して判断している点も興味深かったです。やはり測定は重要です!

.NETでは使えてUnityでは使えない機能の話題で「でもそれぐらいでは涙は出ない」発言があったのが面白かったです。修羅の道をくぐり抜けておられる……!また、SQLiteにimmutableモードがあることを初めて知りました。なにかの役に立つこともありそう?

LT大会

1名5分で、合計8本のLTがありました。1本目は残念ながらキャンセルとのことです。

皆様見事に、時間内に収めつつ、各種トピックを発表しておられました!個人的に最も印象に残ったのが、いくつかのLTでUnityに対する言及があったことです。書籍の執筆者様だったり、Unityで色々なものを試しておられたり、例としてUnityでゲームづくりをしておられたり、Unityで動かないので詳細を見たらMonoTODO属性がついていたり、色々な内容がありました。UnityはC#コミュニティの重要な立ち位置にあるようです!

その他感想

  • C#特化のカンファレンスが開催されて嬉しいです!そして面白かったです!是非、今後も続いて欲しいです!
  • 各種発表もとても面白かったことに加えて、皆様と交流できたこともとても良かったです!
    • neue ccは私の愛読サイトの1つです。各種ライブラリの設計思想や高速化手法等が詳細に記述されていて、本当に参考になります。おそらくRxあたりからは全記事を読んでいるはず?その思いもあり、neueccさんにご挨拶できてよかったです!
    • @ufcppdotnetチャンネルでの.NET配信は、楽しみなことの1つです。C#や.NETの最新事情を、issueやPRの背景情報付きで、かつ日本語で聞けるというのは本当にありがたいです。おそらく全部見ているはず?その思いもあり、スタッフとして参加なされていたxin9leさんにご挨拶できてよかったです!
    • その他、個人的に交流のある皆様ともお話できたのも良かったです!

受付横の看板