GameWith Engineering Blog

GameWith のエンジニア、デザイナーが技術について日々発信していきます。

GameWithアプリ と GameWithアプリチームについてのご紹介

はじめまして!

GameWithアプリのiOS版の開発を担当をしている @peka3 と申します。

blogは初投稿となります。

最近は、ドラクエ10で夜な夜な聖守護者の闘戦記に通い続けています。 聖守護者の闘戦記ではバトル面で今までの常識を覆すパラダイムシフトが起きました。 ああいうのにすぐに対応出来る人は、エンジニアに向いているのではないかなぁ、と思ったりしてます。

本題に移ります!

最近は部内で情報をオープンに伝える動きがあるのですが、GameWithアプリに関しては全然オープンにできていませんでした。 今回はGameWithアプリが、どういう環境で、どういうプロセスで開発されているのかをお伝えできればと思います。

iOSアプリエンジニアなので、iOS寄りの観点になってしまいますが、ご了承ください 🙇

GameWithアプリ について

f:id:peka3:20180829120038p:plain:w200

GameWithをより便利に使えるアプリとなっています。

メインとなる機能としては

  • 攻略情報や新作ゲーム情報を閲覧するためのブラウザ
  • 攻略情報、イベント情報のpush通知
  • SNS機能

があります。

詳しくはぜひ AppStore からインストールして使っていただきたいです!

GameWithアプリのミッション

GameWithアプリは、ゲームユーザーの第一想起を取る、ということをミッションに掲げてやっています。

この第一想起を取っている状態がどんな状態なのか、というのはチーム内で議論の末、

攻略情報を見るのもゲームを探すのも、真っ先にGameWithアプリを使ってくれる状態

という共通認識でやっています。

GameWithアプリ チーム構成

2018年8月23日現在のチーム構成ですが、

  • PO兼デザイナー: 1名
  • iOSアプリエンジニア: 2名
  • Androidアプリエンジニア: 1名
  • サーバサイドエンジニア: 1名

となっています。

またiOS、Androidそれぞれ1名ずつ業務委託でお手伝いしていただいています。

施策によってはWeb面への影響もあったりで、関係者に話を通しに行くことはありますが、基本的には施策を生み出すところからリリースまで、全てをこのチームで行っています。

開発プロセス

軽めのスクラム開発を行っています。

リファインメント等のセレモニーはセオリー通りですが、朝会や作業時間の記録などはしていません。 今のコミュニケーションの取り具合からすれば、特に時間を決めて朝会をしたり、細かく作業ログをつける必要はないだろうという判断からです。

POが描いたKPI達成のための大きめのロードマップを、チーム内で揉んで具体的な施策として形にしてプロダクトバックログに落とし込み、スプリントごとにプロダクトバックログの優先順に計画をして開発しています。

カンバン等のツールにはJIRAを使っています。

f:id:peka3:20180829124307p:plain

毎週金曜日にスプリントレビューとKPTを行ってます。まだまだスピード感を出してどんどん新しい施策をやっていきたいので、どこかがネックになっていないかなどを洗い出して、トライに繋げていきます。

今は各エンジニアの技術領域がはっきりと分かれてしまっていて、APIの進捗がクライアントに影響するような状態です。

今後は学習コストを適切に払いつつ、複数領域触れるエンジニアを増やしていきたいと思っています。

施策の生み出し方

ロードマップはあくまでざっくり案なので「○○機能強化」などざっくりしたものも多いです。

そういったものはチーム内でブレストを行って案出しをし、それぞれ効果と工数のマトリックスにマッピングして、やることを決めます。

決まったものはプロダクトバックログに追加されていきます。

エンジニアの思いつきからでも、実際に形になり、アプリに反映されることが多くあります。

働き方

エンジニアは裁量労働制なので、勤務時間等は基本的に個人の裁量に任せられています。

自分の場合は大体1日8時間勤務で見てます。周囲もそのようにしている人が多いようです。

またリモートワークの導入も進めていて、iOSアプリエンジニアは週2回までリモートワーク可能となっています。

iOSアプリのアーキテクチャ

レイヤードなMVVMで行っており、各層はRxSwiftのObservableで連携しています。

大雑把に書くと、

View -> ViewModel -> Repository/UseCase -> Infrastructure

という構成になっています

RepositoryとUseCaseを同一レベルの層にする(ViewModelがどちらにも依存しうる)のは議論があったのですが、現状のアプリの機能であればここを切り離して別の層にしても、メリットよりも一層間にかます作業工数のほうが取られるだろう、という考えで同一層で取り扱うことになりました。

また、この大まかなアーキテクチャの方針は iOS / Android とも共通にしています。

どの層にどういった実装が必要か?といった会話をする際に、共通認識を得やすくするのが目的です。

開発環境

PCは選択制なのですが、自分はMacbook Pro13インチがいいと入社時に伝えたら、なぜか iMac Pro と Macbook Proが支給されました。

Xcode は重いので iMac Proでの作業が最高に捗っています!

終わりに

ざっと広く浅く、GameWithアプリがどういう風に作られているのかを書いてみました。

個人的にはチームの心理的安全性が担保できてれば、大体のことはうまく回るんじゃないかなぁと思っています。(それが難しいのですが)

事業的な成長にあわせて人員も増えているため、最近は開発部内で「エンジニアリング組織論への招待 ~不確実性に向き合う思考と組織のリファクタリング」という本をテーマにした社内勉強会も行うなど、皆で組織やチームをより良くしていこうとしています。

gihyo.jp

もしGameWithアプリチームに興味を持ってくださった方、もっと詳しい話を聞いてみたい方がいましたら、下記からご連絡いただけるとありがたいです🙇

www.wantedly.com