2024.10.01
自社の社内情報を未来の“ゴミ”にしないための備え 「情報量が多すぎる」時代がもたらす課題とは?
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.10.29
5〜10万円の低単価案件の受注をやめたら労働生産性が劇的に向上 相見積もり案件には提案書を出さないことで見えた“意外な効果”
2024.10.24
パワポ資料の「手戻り」が多すぎる問題の解消法 資料作成のプロが語る、修正の無限ループから抜け出す4つのコツ
2024.10.28
スキル重視の採用を続けた結果、早期離職が増え社員が1人に… 下半期の退職者ゼロを達成した「関係の質」向上の取り組み
2024.10.22
気づかぬうちに評価を下げる「ダメな口癖」3選 デキる人はやっている、上司の指摘に対する上手な返し方
2024.10.24
リスクを取らない人が多い日本は、むしろ稼ぐチャンス? 日本のGDP4位転落の今、個人に必要なマインドとは
2024.10.23
「初任給40万円時代」が、比較的早いうちにやってくる? これから淘汰される会社・生き残る会社の分かれ目
2024.10.23
「どうしてもあなたから買いたい」と言われる営業になるには 『無敗営業』著者が教える、納得感を高める商談の進め方
2024.10.28
“力を抜くこと”がリーダーにとって重要な理由 「人間の達人」タモリさんから学んだ自然体の大切さ
2024.10.29
「テスラの何がすごいのか」がわからない学生たち 起業率2年連続日本一の大学で「Appleのフレームワーク」を教えるわけ
2024.10.30
職場にいる「困った部下」への対処法 上司・部下間で生まれる“常識のズレ”を解消するには