【Unity】Grpc.coreを使用してgrpcを試してみる
Grpc.Coreは、M1 Macでは動作しません。
また、現在(2022年11月時点)では、非推奨ではないですが、今後廃止になる予定のため、急いで移行する必要はありませんが、今後利用を開始する場合には、grpc-dotnetが推奨されているようです。
詳細は下記をご覧ください。
https://grpc.io/blog/grpc-csharp-future/
※ 現在は、2023年5月までサポートされる予定のようです。
環境
- MacOS Catalina 10.15.5
- Unity 2021.3.13f1(LTS)
gRPCを試してみる
まず、GoがPCにインストールされていない場合には、以下からパッケージをダウンロードし、インストールしてください。
必要なプラグインをインストール
brew install protobuf
以下のリンクの「Go plugins for the protocol compiler:の1, 2」を実行してください。
https://grpc.io/docs/languages/go/quickstart/
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2export PATH="$PATH:$(go env GOPATH)/bin"
※ もし、goをインストールしたばかりで、goコマンドを認識しない場合、ターミナル の再起動を試してください。
正常にインストールが完了したことを確認。
protoc-gen-go --version
protoc-gen-go-grpc --version
Grpc.Coreの取得
以下のリンクから、Grpc.Coreを含むパッケージを取得します。
Daily Builds of master Branch内の取得したBuildIDを選択します。
選択後、C#の「grpc_unity_package.zip」と「Grpc.Tools.zip」を選択し、ダウンロードします。
現時点の最新版だと、上記のようにC#内にunityのパッケージが存在しません。
これは、Grpc.Coreのサポートが終了しかけているため、作成されていないようです。
ひとまず、unityパッケージが含まれている中での最新版にアクセスして取得します。
また、先ほど選択したBundleIDと同時期のコミットを選択し、GitHub上からファイルをダウンロードしておきます。
これは、対象バージョンのexampleソースを利用したいためです。
https://github.com/grpc/grpc/tree/67538122780f8a081c774b66884289335c290cbe
Unityプロジェクトの起動
何でも良いので、Unityプロジェクトを用意します。
私は、2Dテンプレートで、「gRPCSample」という名前のプロジェクトを作成しました。
冒頭にも記載しておりましたが、Unityのバージョンは、2021.3.13f1(LTS)を使用しております。
ダウンロードしたgrpc_unity_package.zipファイルを解凍し、中に含まれていたPluginsフォルダをUnityプロジェクトのAssets以下に配置します。
ちなみにPluginsフォルダに含まれている内容物は以下のような感じです。
先ほど、GitHub上から取得したzipファイルを解凍し、以下の手順を行います。
- UnityプロジェクトAssets内にScriptフォルダを作成。
- 解凍フォルダのexamples/csharp/HelloworldUnity/Assets/Scenes/SampleScene.unityをUnityプロジェクトのAssets/Scenesに移動。
- Unityプロジェクト直下にProtosフォルダを作成。
- 解凍フォルダのexamples/csharp/HelloworldUnity/protos/helloworld.protoを作成したProtosフォルダ内に移動。
- helloworld.protoに「option go_package = "./Pb";」を追記。
- 解凍フォルダのexamples/csharp/HelloworldUnity/Assets/Scriptの中にある、「HelloWorldScript.cs」「HelloWorldTest.cs」をUnityプロジェクトのAssets/Scriptに移動。
※ Script内のHelloWorld.csとHelloWorldGrpc.csは自動生成ファイルであり、生成もこの後の手順で行うため、移動はさせません。
Protoからファイル生成
まずプラグイン配置のために、Grpc.Tools.zipを解凍し、tools/macosx_x64/grpc_csharp_pluginを/usr/local/binに移動します。
ターミナル を起動し、作成したUnityプロジェクトに移動し、以下のコマンドを実行します。
protoc -I. --csharp_out=../Assets/Script --go-grpc_out=. --grpc_out=. --plugin=protoc-gen-grpc=/usr/local/bin/grpc_csharp_plugin ./Protos/*.proto
実行後、以下のファイルの生成が確認できます。
- Assets/Script/HelloWorld.cs
- Assets/Script/HelloWorldGrpc.cs
- Pb/helloworld_grpc.pb.go
動かしてみる
準備ができたので、Unityを実行します。
表示されたボタンをタップすると、「Hello gRPC!!!」と書かれていた文字が「Greeting: Hello Unity 1」のように変化し、その後タップするたびに数値が増加するのが確認できるかと思います。
所感
つまづく箇所がいくつかあり、Hello worldをするだけでも導入が面倒でした。
また、M1 Macが動作しなかったので、Intel Macを引っ張り出してきましたが、今後開発をするのに、M1 Macで動作させたい + Grpc.coreのサポートが終了してしまうため、grpc-dotnetも試してみようと思います。