/ #tech 

ソーシャルゲーム開発のサーバプログラマーの実態と仕事内容

プログラマーってどんな仕事をしているの?
ゲーム系のサーバー側の仕事をしてみたいけどどんな環境なの?
サーバープログラムの一日の作業の流れってどんな感じ?

今回はサーバーサイドプログラミングの実態と仕事内容について
知りたい人向けに実際の現場環境を紹介したいと思います。

自分はゲーム系の案件は合計5年ほど経験がありまして、
現在はインフラエンジニア兼サーバサイドプログラミングをしています。

自分の経験の見地から最近の仕事内容や作業環境を紹介しようと思います。

記事の概要は言語とインフラについて何を使っているかを紹介して、
開発環境でどんなツールを使用しているのかを話します。

最後に、自分の一日の作業を紹介するので、サーバプログラマーの
仕事ぶりの雰囲気を感じて頂ける内容になっています。

目次

  1. 仕事内容
  2. 言語について
  3. インフラについて
  4. 作業環境
  5. 実際の一日の作業の流れ

1. 仕事内容

現在の仕事内容について軽く説明します。 ジャンルはよくあるソーシャルゲームで、 仮にパズドラや星のドラゴンクエストようなゲームを作っているとします。

役割としてはGCPを使ってインフラ構築をする、いわゆるインフラエンジニアです。

もう一つはPHPを使ってサーバー側プログラムを作っているサーバーサイドプログラマーです。

主にこの二つの役割として仕事をしています。

割と最新の環境を整えて作業しているチームなので、
最近のサーバサイドプログラミングの現場の雰囲気をお伝えできるかと思います。

2. 言語について

php

言語はPHPを採用しています。

Laravelフレームワークのような機能の独自フレームワークを使用しています。

PHPの良い所としましては、入り口が優しい言語ですので、使えるエンジニアが多い点が一つのメリットです。

モジュールやフレームワークが成熟していてComposerで管理できる所もいい所です。

アーキテクチャ設計ではMVCのレイヤーをもっと細かく分けて、クラスの役割を単一にしています。

設計手法としてドメイン駆動設計を取り入れて開発しています。

ORMはDoctrineを採用していてます。

開発でよく使う処理でテストDBデータ作成、DB構造構築、単体テスト、
featureテスト、コード成型、コード解析などの処理を
簡単にコマンドで実行できる仕組みにして効率化しています。

3. インフラについて

gcp

インフラはGCPを採用しています。

なぜGCPを採用したかと言うと、理由は特に無く、
お客さんの要望を受けてGCPを採用しています。

GCPを使ってみての感想ですが、
AWSと比べてどうなのかを知りたい人が多いと思うので
使った感想を少し言います。

まずはアカウント管理が楽ですね。

アカウント管理はGoogleアカウントを利用するので、
AWSみたいにIAMの管理が複雑じゃなくて良いです。

アカウントにプロジェクトを紐づけるので、GCPのほうが簡潔に設定できます。

ネットワークの考え方もAWSに比べて、
特にリージョンをしっかり区別して意識する必要がないので、
そのへんが楽ですね。

そしてGCPがAWSよりも後発のサービスなので、
AWSでは使いにくかったり、機能が弱い部分を
GCPは高機能で使いやすいサービスにして強みと特色を出していると思います。

例えばLoad balancerはプレウォーミングが必要無いなど、
細かい部分で使いやすくなっていることが多いと感じました。

ソーシャルゲームの環境を作りたい場合も、
過不足ないインフラサービスが用意されていますので、
AWSじゃなくても十分に作りきることができると思います。

主に使っているサービス

  • GCE
  • ロードバランサー
  • ストレージサービス
  • データベース
  • BIG query
  • PubSub
  • StackDriver
  • DNS

上記のサービスを主軸にゲーム環境を構築しています。

現状デプロイも早いし特に不満な部分は無いです。

4. 作業環境について

開発環境は自分の場合はWindows10でCentOSの仮想サーバーを
Vagrantで立ち上げて作業しています。

このCentOSに開発用のアプリケーションと
モジュールをインストールして開発します。

インストールはJenkinsを使って自動化していますね。

jenkins

jenkinsビルドの中身はAnsibleを使ってサーバ構築をソース化しています。

AnsibleではソースのPullとcomposer update、
ミドルウェアのインストール等を自動化していますね。

バージョン管理はgitを使ってgitlabでリポジトリ管理しています。

gitではhookを利用してPushする前にコード整形、コード規約チェック、
単体テスト、フィーチャーテストこれらを実行して
成功したらPushができる仕組みです。

gitlabではMRが作成されるとJenkinsがそのソースの単体テスト、
フィーチャーテストを行って成功しないとマージできないルールにしています。

こうすることによって綺麗なソースが保たれる工夫をしていますね。

チームのコミュニケーションはSlackでしています。

チャットで連絡を取り作業を進める文化ですね。

やり取りが長くなりそうな時は直接話して質問したりもします。

実際の一日の作業の流れ

ではソーシャルゲーム開発のサーバプログラマーの
仕事ぶりの雰囲気を感じていただく為に、
自分の平均的な一日の作業を紹介します。

  1. 10時:出社、朝のルーティーン(トイレ、コーヒー、使用ツール立上げ)
  2. 10時30分:ソースレビュー開始
  3. 12時:自分担当の実装部分調査、仕様の確認、質問投げる
  4. 13時:昼休憩、弁当か外でランチ
  5. 14時:PHP or GCPで実装作業開始
  6. 17時:チームミーティング
  7. 18時:次のタスク確認、情報収集
  8. 19時:定時退社

だいたいこんな感じです。

今のチームでは午前中に全員でコードレビューをするルールになっています。

この方法は一見コードレビューの時間が多いように感じますが、
スイッチングコストがかからないので超効率的にレビューできて、
MRが溜まらないメリットがあるので、おすすめと思います。

詳しくはこの記事に書いているので、
興味あるかたはこちらも見てみてくださいませ。

その発想はなかった!超効率化できる新しいコードレビューのやり方

まとめ

以上、ソーシャルゲーム開発のサーバプログラマーの実態と仕事内容でした。

サーバサイドプログラマーって何してるの?と思っている方に少しは仕事内容が伝わったのではないでしょうか?

特に開発環境なんかは実際にそこで働いてみないと、どんなツールや環境なのかが分かりにくいですよね。

少しはお役に立てたのであれば幸いです。

このブログではフリーランス情報やプログラミング情報の発信を続けていこうと思うのでぜひ応援お願いします。また、Twitterでも日々の為になる技術情報やフリーランスについての有益な情報をつぶやくので、いいなと思ったかたはTwitter 札幌のフリーランス@クラウドランス望月フォローをお願い致します。

フォローする