2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
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#の技術を持っていて、まだまだいろいろな仕込みがあるので、ぜひこれからも注目してほしいなと思っています。以上です。ありがとうございました。
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略