2024.12.24
ビジネスが急速に変化する現代は「OODAサイクル」と親和性が高い 流通卸売業界を取り巻く5つの課題と打開策
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.01.16
社内プレゼンは時間のムダ パワポ資料のプロが重視する、「ペライチ資料」で意見を通すこと
2025.01.15
若手がごろごろ辞める会社で「給料を5万円アップ」するも効果なし… 従業員のモチベーションを上げるために必要なことは何か
2025.01.20
組織で評価されない「自分でやったほうが早い病」の人 マネジメント層に求められる「部下を動かす力」の鍛え方
2025.01.14
目標がなく悩む若手、育成を放棄する管理職… 社員をやる気にさせる「等級制度」を作るための第一歩
2025.01.09
マッキンゼーのマネージャーが「資料を作る前」に準備する すべてのアウトプットを支える論理的なフレームワーク
2025.01.14
コンサルが「理由は3つあります」と前置きする理由 マッキンゼー流、プレゼンの質を向上させる具体的Tips
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
2025.01.21
言われたことしかやらないタイプの6つの言動 やらされ感が強く他人任せなメンバーを見極めるチェックリスト
2017.03.05
地面からつららが伸びる? 氷がもたらす不思議な現象
2015.11.24
人は食事をしないとどうなるか 餓死に至る3つのステップ
特別対談「伝える×伝える」 ~1on1で伝えること、伝わること~
2024.12.16 - 2024.12.16
安野たかひろ氏・AIプロジェクト「デジタル民主主義2030」立ち上げ会見
2025.01.16 - 2025.01.16
国際コーチング連盟認定のプロフェッショナルコーチ”あべき光司”先生新刊『リーダーのためのコーチングがイチからわかる本』発売記念【オンラインイベント】
2024.12.09 - 2024.12.09
NEXT Innovation Summit 2024 in Autumn特別提供コンテンツ
2024.12.24 - 2024.12.24
プレゼンが上手くなる!5つのポイント|話し方のプロ・資料のプロが解説【カエカ 千葉様】
2024.08.31 - 2024.08.31