2024.12.10
“放置系”なのにサイバー攻撃を監視・検知、「統合ログ管理ツール」とは 最先端のログ管理体制を実現する方法
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.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
2024.12.09
10点満点中7点の部下に言うべきこと 部下を育成できない上司の特徴トップ5
2024.12.09
国内の有名ホテルでは、マグロ丼がなんと1杯「24,000円」 「良いものをより安く」を追いすぎた日本にとって値上げが重要な理由
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.12.10
職場であえて「不機嫌」を出したほうがいいタイプ NOと言えない人のための人間関係をラクにするヒント
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.06
嫌いな相手の行動が気になって仕方ない… 臨床心理士が教える、人間関係のストレスを軽くする知恵
PR | 2024.11.26
なぜ電話営業はなくならない?その要因は「属人化」 通話内容をデータ化するZoomのクラウドサービス活用術
2024.12.11
大企業への転職前に感じた、「なんか違うかも」の違和感の正体 「親が喜ぶ」「モテそう」ではない、自分の判断基準を持つカギ
PR | 2024.11.22
「闇雲なAI導入」から脱却せよ Zoom・パーソル・THE GUILD幹部が語る、従業員と顧客体験を高めるAI戦略の要諦