📚

カカリアスタジオの社内共通ライブラリ開発の取り組みについて

2022/12/11に公開

はじめに

メルクストーリア」チーム ゲームエンジニアの 岸本 です。

本日は、カカリアスタジオの社内共通ライブラリ開発の取り組みについてお話させていただきます。
よろしくおねがいします!

簡単な自己紹介

カカリアスタジオには、2019年に入社しました。

何本かオリジナルタイトルや他社 IP タイトルの開発・運用を経て、オリジナルタイトルに集中して挑戦できる会社が良いと思い、カカリアスタジオを選択しました。

「メルクストーリア」チームでは主にクライアントサイドの開発を担当しつつ、昨年導入した リアルタイムサーバーの開発 なども担当しています。
また本記事でお話させていただく社内共通ライブラリの開発などの全社横断的な業務も担当しています。

社内共通ライブラリ開発の取り組みについて

さて本題ですが、本日は所属チーム以外の全社横断的な開発への取り組みとして、社内共通ライブラリ開発についてお話させていただきます。

昨年の弊社チーフエンジニアのアドベントカレンダー記事 でも紹介しておりますが、インフラチームを除き、基盤チームのような全社横断的なソフトウェアを開発するチームはありません。

とはいえ、複数タイトルを開発・運用しているので、全タイトルで共通的に扱える部分については、開発効率や品質の向上に加えて、社内知見蓄積の観点からも、社内共通ライブラリのようなものも欲しくなってきます…。

今回は、いくつかある社内共通ライブラリのうち、私が担当している「課金ライブラリ」の取り組みについて簡単にご紹介させていただきます。

開発の経緯

新規タイトルの課金部分の実装を進めるにあたり、せっかくなので全社で共通的に扱える部分については、ライブラリ化しておきたいという想いがあったので、開発したい旨の声をあげました。

今回、ライブラリの中身の実装などには詳しく触れませんが、ライブラリの内容としては、クライアントサイドとサーバーサイドでそれぞれライブラリ化しており、クライアントサイドは UnityIAP の薄いラッパーで、サーバーサイドは Ruby on Rails で動くレシート検証部分のモジュールという感じで構成されています。
各タイトルでゼロから課金まわりを実装するのではなく、共通的に実装できる部分はライブラリ側で吸収し、各タイトル側ではなるべく個別仕様の実装に集中しやすいことを目的としています。

開発フェーズ

開発にあたっては、なんでも自由に開発できる形ではなく、所属チームとの相談を経て、社内エンジニアで必要性などを検討します。
また、各チームの要望などもこの段階でヒアリングします。

要望に無いような部分は、開発側の設計や思想になりますが、今回は導入・実装のしやすさやをかなり重視しました。

例えば、最近のタイトルであれば async/await で非同期的な実装しているタイトルも多く、できれば課金処理部分も非同期メソッド一発で書けるとよいのですが、UnityIAP で素のままだと IStoreListner でコールバックを受け取るような実装になるため、若干相性が悪いかと思います。
そのあたりの事情も踏まえ、課金処理に必要なメソッドを自然なタイミングでコールするだけでいいようにライブラリ側で吸収しています。

また、実機での動作確認になりがちな課金関連で、ライブラリ導入時に Unity エディタであっても、アプリクライアント側で環境差分的な部分を意識することなく、なるべく実機に近い動作になるように意識して作り込みました。

開発フェーズは、事前に挙がっていた懸念事項などの検証もあったので1ヶ月ほど集中して開発に取り組み、その後社内レビューを経て、リリースしました。

保守フェーズ

リリース後不具合等あればすぐにアップデートするようにしていますが、基本的に年1~2回程度の頻度でアップデートしています。
また、ライブラリを導入したいチームへのサポートであったり、トラブル等があった場合、都度都度サポートするようにしています。

基本的には、私の方でメンテナンスを行い、各チームのエンジニアにレビューやアップデート確認をお願いする形で保守しています。
また、「あんさんぶるスターズ!!」チームで ESプレミアムパス を導入する際は、「あんさんぶるスターズ!!」チームのエンジニアの方で現状でも想定する動作か検証いただき、修正が必要なところについてはプルリクエストをいただいて、私の方でレビューするような形でも取り組めています。

専属チームでの開発・保守ではないので、頻繁なアップデートやサポートが少し取りずらい側面もありますが、各チームのエンジニアと相談や調整して、業務の合間などを利用していい感じに取り組めてるかと思います。

おわりに

リリースして3年ほどが経過しましたが、リリース以降大きなトラブルもなく安定的に利用できており、現在ではグループ会社のグリモア社含め、アプリ内課金のある全タイトルで利用しています。

UnityIAP のアップデート対応であったり、毎年のようにある GooglePlayBillingLibrary のアップデート対応なども社内共通ライブラリにしていることで、全社的に足並みを揃えながら対応できているかと思います。

開発を通した個人的な経験値として、課金関連の知見をより深めることができましたし、UnityPackageManager まわりのことや、Ruby の gem の作り方についても触れることができたのは良かったと思います。

個人的な経験からも複数チーム掛け持ちのような兼業はあまり上手くいかない印象がありますが、所属チームの業務を優先しつつも、落ち着いたタイミングを見計らって集中的にライブラリ側の作業したりもできますし、毎週特定曜日に作業するような動きも取ることができていて、今のところ上手く取り組めてるのではないかと思います。

稼働的にも所属チーム業務80%+ライブラリ開発20%のような配分で、なるべくオーバーしないようにチームと相談でき、個々人の裁量でこうした取り組みにもチャレンジしやすい環境かと思います。

ということで、カカリアスタジオ内での社内共通ライブラリ開発の取り組みについて、一例のご紹介でした!
最後までお読みいただきありがとうございました!

2019年の記事のため情報的に若干古かったりする部分もありますが、過去のアドベントカレンダーで 10年以上過ごした関東を離れ、京都のカカリアスタジオに転職した話 という記事も掲載しておりますので、遠方からのご転職などをお考えの方は是非ご参考にしていただけますと幸いです!

GitHubで編集を提案
Happy Elements

Discussion