
2025.02.12
職員一人あたり52時間の残業削減に成功 kintone導入がもたらした富士吉田市の自治体DX“変革”ハウツー
A quick tour of the Cysharp OSS(全1記事)
リンクをコピー
記事をブックマーク
河合宜文氏(以下、河合):「A quick tour of the Cysharp OSS」というテーマでCysharpの河合が話します。お願いします。
私は河合宜文と言って、Cygamesの子会社であるCysharpという会社で社長をしています。今回イベントを主催したサイバーエージェントの子どもの子どもなので、孫会社です。Cysharpはいろいろとやってはいて、目に見えるところで一番大きなものは、OSSの提供だと思っているんですが、我々は「C#の可能性を切り開いていく」というのをテーマでやっているんですね。
「なんやねん」と言うと、.NETのサーバーサイド技術と、Unityのクライアント技術の両方を極限まで追求して、C#を最高の開発環境にしたいと思っています。その手段として、唯一無二のOSSを提供することによって「CysharpのライブラリがあるからC#いいよね」「これがないとちょっとしんどいな、だからC#使うか」みたいな、C#を使う理由を作っていきたいと活動しています。
すごく良いことを言っているんですけど、問題が1個あるんですよ。というのも、作りすぎたんですね。けっこう作りすぎたので、残念ながら誰も全貌をわかっていないんです。「何を作っているのか知らんがな!」という感じになっているので、今回はOSSを紹介したいと思っています。「宣伝じゃないか!」みたいなところもあるんですが、誰でも使える状態なので、ぜひ知って帰ってもらえるとうれしいなと思います。
まず一覧で見せると、こんなものを作っています。これはUnity用と.NETの共用のものが多いです。とりあえず8個あります。我々はUnity以外に.NETもやっているので、.NET単独で動くものもこれだけあります。
Cysharpを作る前に、個人のリポジトリで公開しているものもいくつかあるんですが、これらもけっこう有名なものも多いです。シリアライザも3部作で、私は自称シリアライザのスペシャリストなので、とても詳しいんですが、その中でも特にMessage Pack for C#は非常にオススメです。もちろんUnityでも使えます。
ほかにも、LINQ to GameObjectがけっこう便利なので、みなさんに使ってほしいなと思っていて、別のかたちでもプッシュしたいなと思っています。
先日リリースされた『NieR Re[in]carnation』については、このあとアプリボットさんのセッションがあるんですが、Cysharpも少しだけ協力していて、MasterMemory、Message Pack for C#、UniTask、UniRx、Utf8Jsonが実際にライブラリとして使われています。
本題のQuick Tourです。時間がないのでクイックにいきたいと思っていて、GitHubのスター順にいきたいと思います。我々が作っているものの代表作はMagicOnionで、これはC#サーバーのリアルタイム通信エンジンです。これはUnityから見て、サーバーが本当に透明に、すごく自然に通信が行えるようになっています。これは私たちが提唱している「C#大統一理論」を実現するためのキーになるライブラリです。
このリアルタイム通信エンジンについて実は今日一番言いたいのは、すでにけっこう使われていますということです。事例として、Donutsさんの『D4DJ Groovy Mix』、VirtualCastさんの『バーチャルキャスト』、INTENSEさんの『少女キャリバー.io』、Happy Elementsさんの『メルクストーリア』、BANK OF INNOVATIONさんなど、タイトルも中身もいろいろなもので使われています。
APIサーバーやコマンドの送受信、VR SNS、リアルタイムアクションバトルなどいろいろなかたちで使われているので、MagicOnionは実用としてけっこうイケてるぞと言いたいです。
もう1つ、Cysharp一押しなのが、UniTaskというライブラリです。これは.NET Coreでも動くんですが、基本的にはUnity用のライブラリで、async/awaitをゼロアロケーションで実現するものです。恐らくUnityだけだと、async/awaitがあっても、言語機能として使えてもあまり使いやすくないんですね。
そこをいろいろな工夫を施すことによって、Unityでとても使いやすいasync/awaitを実現したのがUniTaskです。最初は、コルーチンよりも機能が豊富で、性能が良いぐらいのノリで使うといいんじゃないかなと思っています。導入も、最初の使い方も簡単だし、使いこなしていくとメチャクチャ便利なライブラリで、非常にオススメです。
ほかにも、MasterMemoryというものがあります。これはとても速いインメモリデータベースです。私自身、ゲーム開発はけっこう長いので、何が必要で何が足りないのかすごく考えているんですね。やっぱりゲームにマスタデータは付き物で、良いソリューションがあるようでなかったと思うんですが、MasterMemoryはCysharpの考える、マスタデータ用の究極のソリューションだと思っています。
とにかくとても速い。速いのは良いことなので、MasterMemoryもけっこうおすすめ度が高いです。
ZStringというものも公開しています。これはゼロアロケーションString Builderという感じなんですが、文字列はけっこうゴミが出るんですね。文字列の生成そのものが、ゴミの塊みたいなものなので、そこを極力小さくしたいという思いで作ったものです。
これは良いところが1個あります。TextMeshProにダイレクトにバインドできて、文字列を通さないので、UIの文字の変更などもゼロアロケーションでいけることです。
何が悪いかというと、要するに文字列が悪いんですね。文字列という存在はポイッとしないといけないので、そこを通さないのが一番いいですよという感じです。もう1個、ZStringの中で使ったZLoggerというものも、セット販売で作りました。これはゼロアロケーションのText/Structured Loggerというものです。
やっぱりロギングは文字列を作るんですよね。文字列を作るから、それはゴミの塊になってしまう。それは非常に良くないので、最後に書き込む。どこかに対するバッファに、文字列を通さないでバイナリとしてダイレクトに書き込むことによってゼロアロケーション化できるので。メチャクチャ良いです。
これはとてもいいんですが、サーバー向けとして作っていて、依存ライブラリがメチャクチャ多いUnityで使うのは、そんなにはおすすめしません。ただしサーバー用途で使う場合は、とてもおすすめします。
ほかにも、Ulidというものを作りました。ソート可能なGUIDの仕様としてUlidがあるんですが、それのとても速い実装を用意しました。ほとんどGUIDの代わりとして使えるんですが、これはソート可能なので、データベースのIDなどで使うとメチャクチャいいんです。ただ、Unityでソート可能になっても別にそんなにうれしくないというか、そんなに出番がないので、実際は使わないよねというのは正しいです。
なので、たぶんそんなに役には立たないんですが、MagicOnionなどを使うと、サーバーとクライアントの両方で、共通のコードが使えるようになるんですね。そういうときに、Ulidで両方で使えると、余計な変換を通さなくていいのでパフォーマンスよくやり取りできます。そういうところを踏まえて、Unity側と.NET Core側の両方の実装を提供しています。
あとは、RuntimeUnitTestToolkitという、いい具合のものを公開しています。これは何かというと、Unity Test Runnerのフロントエンドです。CIなどでユニットテストを実行するときにあるとすごく楽ちんになります。テストをちょっとまともに書いてみようとか、CIで動かしてみようという人はぜひ試してみてほしいです。
テストドリブンみたいな大仰なことを言わなくても、ライブラリを作る人にとっては便利なんじゃないかなと思っています。Cysharpはご存知のとおり、ライブラリをメチャクチャ作る企業なので、こういうツールがあることによって、テストが非常に捗っています。GitHub ActionやCircleCIやJenkinsで使うことができます。
最後に、SlnMergeというものも提供しています。これもUnityに関係あるのかないのか微妙にわからないのですが、サーバーサイドのC#を利用する場合に便利な機能です。MagicOnionなどを使うと、1個のソリューションの中にサーバーのプロジェクトとクライアントのプロジェクトを含めることができます。
そうすると、クライアントとサーバーとクライアントをデバッグ実行でF11、F11、F10、F10とやると、クライアント、サーバー、クライアントとステップ実行ができるので、とても便利なんですが、その度にVisual StudioやRiderの上で両方のプロジェクトが管理されていないといけないんですね。
UnityはUnityだけの独自のソリューションを生成するので、サーバーはいないじゃんとなって、効果的なデバッグができなくて不便なんですが、SlnMergeを使うと、Unity自身のためのslnを生成するところを、フックしてガッチャンコすることによって、両方を1個のソリューションで管理できます。これはC#大統一理論をやるときにあると便利で、メチャクチャ良いライブラリになっています。
駆け足でやってきたんですが、まとめです。我々は「C#の可能性を切り開いていく」ということで、要はサーバーとクライアントの両方をカバーしようと試みています。合わさることで、単独よりも相乗効果で2倍、3倍、10倍に強力になるんですね。これを両方できる企業は少ないと思うんですよ。なので我々はそこをできることが唯一無二の強みとしています。
そしてサーバーだけ、クライアントだけ、ではできないような成果をOSSとして還元していきたいと思っています。最高のコンテンツを作るための最高の開発体験をCysharpはC#を軸にして提供していきます。我々は非常に高いC#の技術を持っていて、まだまだいろいろな仕込みがあるので、ぜひこれからも注目してほしいなと思っています。以上です。ありがとうございました。
2025.02.13
“最近の新人は報連相をしない”という、管理職の他責思考 部下に対する「NG指示」から見る、認識のズレを防ぐコツ
2025.02.06
すかいらーく創業者が、社長を辞めて75歳で再起業したわけ “あえて長居させるコーヒー店”の経営に込めるこだわり
2025.02.13
AIを使いこなせない人が直面する本当の課題 元マッキンゼー・赤羽雄二氏が“英語の情報”を追い続ける理由
2025.02.12
マネージャーは「プレイング3割」が適切 チームの業績を上げるためのマネジメントと業務の比率
2025.02.12
何度言っても変わらない人への指示のポイント 相手が主体的に動き出す“お願い”の仕方
2025.02.14
報連相ができない部下に対するコミュニケーションの取り方 「部下が悪い」で終わらせない、管理職のスキル向上のポイント
2025.02.13
「みんなで決めたから」を言い訳にして仲良しクラブで終わる組織 インパクトも多様性も両立させるソース原理
2025.02.10
32歳で「すかいらーく」を創業、75歳で「高倉町珈琲」で再起業 「失敗したからすかいらーくができた」横川竟氏流の経営哲学
2025.02.13
上司からは丸投げ、部下からはハラスメント扱い、業務は増加…プレイングマネジャーを苦しめる「6つの圧力」とは
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
2025.02.13
“最近の新人は報連相をしない”という、管理職の他責思考 部下に対する「NG指示」から見る、認識のズレを防ぐコツ
2025.02.06
すかいらーく創業者が、社長を辞めて75歳で再起業したわけ “あえて長居させるコーヒー店”の経営に込めるこだわり
2025.02.13
AIを使いこなせない人が直面する本当の課題 元マッキンゼー・赤羽雄二氏が“英語の情報”を追い続ける理由
2025.02.12
マネージャーは「プレイング3割」が適切 チームの業績を上げるためのマネジメントと業務の比率
2025.02.12
何度言っても変わらない人への指示のポイント 相手が主体的に動き出す“お願い”の仕方
2025.02.14
報連相ができない部下に対するコミュニケーションの取り方 「部下が悪い」で終わらせない、管理職のスキル向上のポイント
2025.02.13
「みんなで決めたから」を言い訳にして仲良しクラブで終わる組織 インパクトも多様性も両立させるソース原理
2025.02.10
32歳で「すかいらーく」を創業、75歳で「高倉町珈琲」で再起業 「失敗したからすかいらーくができた」横川竟氏流の経営哲学
2025.02.13
上司からは丸投げ、部下からはハラスメント扱い、業務は増加…プレイングマネジャーを苦しめる「6つの圧力」とは
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
着想から2か月でローンチ!爆速で新規事業を立ち上げる方法
2025.01.21 - 2025.01.21
新人の報連相スキルはマネージメントで引きあげろ!~管理職の「他責思考」を排除~
2025.01.29 - 2025.01.29
【手放すTALK LIVE#45】人と組織のポテンシャルが継承されるソース原理 ~人と組織のポテンシャルが花開く「ソース原理」とは~
2024.12.09 - 2024.12.09
『これで採用はうまくいく』著者が語る、今こそ採用担当に届けたい「口説く」力のすべて
2024.11.29 - 2024.11.29
【著者来館】『成果を上げるプレイングマネジャーは「これ」をやらない』出版記念イベント!
2025.01.10 - 2025.01.10