【旅する勉強会】Grani & カヤックで合同勉強会を開催しました!

こんにちは、藤田です。

2/24(金)に『神獄のヴァルハラゲート』を提供していることで有名な株式会社グラニさんのオフィスにお邪魔して合同勉強会を開催しました!

今回は当日の発表内容を簡単にご紹介します。

f:id:fjt_dentyu:20170227141041j:plain

Golang x gRPC の話

トップバッターは、カヤックの矢吹から Golang × gRPC の技術検証についての発表を行いました。

f:id:fjt_dentyu:20170227141045j:plain

カヤックのゲーム開発で用いている Baal などの開発現場の背景について紹介させていただきつつ、gRPC の検証についてお話しました。

社内検証の結果、protobuf は json と比べて最大で25倍エンコード/デコードが高速で低スペック端末ほど効果が大きいものの、 gRPC は .NET Framework 4.5+ を要求するのに対して、Unity に搭載されているバージョンは 3.5 である点が最大の課題となりました。

その他にも AWS 上で運用する際に ACM の恩恵を受けられない点やアプリケーション内でアクセスログを吐く必要がある点など運用上の課題なども踏まえ、gRPCをそのまま採用するのは見送る方針となった経緯についてお話しました。

とはいえ、protobuf の恩恵は偉大なので、定義ファイルは .proto を使用し、HTTP の body に json ではなく protobuf を指定、C# と golang のインターフェイスの雛形を自動生成するツールを開発中であることなど、今後の方針についてお話しました。

gRPC + Unity + C#

続いては、グラニCTOの河合さんから C# x gRPC に全面移行中のお話をしていただきました。

f:id:fjt_dentyu:20170227141101j:plain

グラニさんでは、gRPC を Unity ではそのまま使用できないという課題に対して、NET 3.5 + IL2CPP で動くように gRPC の C# クライアントの調整や C Core をそのまま iOS/Android で動くように調整。protobuf の部分は、シリアライズのレイヤーを ZeroFormatter に置き換えて使用できるようにするなどして、gRPC を Unity で扱えるように開発をすすめているそうです。

また、サーバー側で gRPC を導入にあたって、gPRC の切断検知に関する知見や、その際にグレースフルビリティが低くなる点を運用上どう解消するかなど、カヤックの社内検証でも課題として挙がっていた点についてお話いただきました。

gRPC を Unity で扱うにはまだ難易度がかなり高い現状ですが、 gRPC を Unity にインポートした部分も含めた gRPC ベースのフレームワーク MagicOnion を公開しており、 その特徴や具体的な使い方などについてご紹介いただきました。

gRPC を Unity で扱う事例はおそらくこれが世界初であることや、自分たちが Next Standard をつくっていくんだ!というグラニさんの本気の姿勢がみえたお話でした。

アセットパイプライン、ビルドパイプラインの話

3番手は、カヤックの清水から Unity のバイナリ(ipa,apk)のビルドパイプライン、Unity のアセットバンドルのビルドパイプラインについてお話しました。

f:id:fjt_dentyu:20170227141104j:plain

カヤックでは、開発者がビルドすることの負担低減と実機確認の頻度を上げる目的から、Unity のビルドを Jenkins で行う仕組みを構築しており、 バイナリのビルドパイプライン、アセットのビルドパイプラインについて、それぞれの具体的なワークフローと Jenkins のジョブの内容などについてお話しました。

両社ともに試行錯誤をしている部分だけに具体的な運用イメージに近い質問が飛び交い、良い知見のシェアができたのではないかと思います。

Git LFS 移行のお話

最後は、グラニの齋藤さんから Git LFS 移行のお話をしていただきました。

f:id:fjt_dentyu:20170227141107j:plain

アセット管理などで容量が圧迫されがちな Github リポジトリの運用を Github Enterprize やその他サービスなどと比較して、移行や運用にかかるコストの観点から Git LFS を採用したという経緯。 そして、移行時のLFS化や容量削減(過去履歴の消去)の手順についてや運用を始めてみての所感などについてお話いただきました。

とくに、

  • 比較的大規模なリポジトリでは、git-lfs-migrate はまだ不安定で、git lfs コマンドでLFS化する対象を選んで実行していく必要がある点
  • Pull Request の参照を管理する .git/refs/pull は github support に連絡してファイルの差分情報を削除してもらうことが出来る点(PRのコメントなどはそのまま残してもらえる)

などは、実際に大規模なリポジトリの移行を経験しているからこその知見だったので、大変参考になりました。

また、SouceTree などの GUI ツールを利用していたり、非エンジニアも多い環境の中で git lfs に移行した点について、結果的に最小限のフロー変更で Github をそのまま使えてる点は大きなメリットでだった!という言葉に勇気をもらいました。

まとめ

発表終了後はグラニさんに軽食や飲み物などをご馳走になり、懇親会をさせていただきました。

f:id:fjt_dentyu:20170227141111j:plain

両社で検証を行った gRPC についての知見の共有、ゲーム運用時に生じる問題の解決策、その他にもゲーム開発全般についての意見交換ができ、両社にとってプレミアムなフライデーになったのではないかと思っています。

グラニさん、ありがとうございました!

尚、グラニさんの技術ブログでも本勉強会の内容を公開しておりますので、ぜひ合わせてご覧ください。

グラニ x カヤック合同勉強会レポート。ネイティブ開発をテーマに gRPC, Unity, アセット管理, GitLFS について - Grani Engineering Blog

さいごに

カヤックでは、今後も様々なテーマでこうした合同勉強会を開催していきたいと考えていますので、カヤックの"ヨコハマ展望台"支社まで遊びにいってもいいよ!という企業様、カヤックに出張してきて欲しいという企業様がいらっしゃいましたら、是非お気軽に @fjt_dentyu or 最寄りのカヤック社員にお声がけください。

そして、カヤックでは一緒に働きたい!というプレミアムな仲間を募集しています。こちらもドシドシご応募ください!

関連記事

techblog.kayac.com