- 株式会社サイバーエージェント
- Ameba事業本部 エンジニアリーダー
- 常山 貴行
ソーシャルゲーム開発におけるエンジニアの工数減に効く!作業の属人性をなくす、Jenkinsの使い方
今回のソリューション:【Jenkins/ジェンキンス】
ソーシャルゲーム開発においては、他のWEBサービスとは異なる運用上の負荷が開発チームにかかってくる。例えばイベントやキャンペーンなどは日々開催され、またアップデートも頻繁にあるため、他のジャンルに比べて不具合が出やすい。結果として、サーバーサイドエンジニアの開発工数は非常に大きくなりがちだ。
その課題を解決する方法のひとつとして、株式会社サイバーエージェントのAmebaゲームアプリ「天下統一クロニクル」開発チームではJenkinsを活用している。それによって36台あるサーバーにプログラムやデータを上げる作業時間を、以前の5分の1程度に短縮することができた。「天下統一クロニクル」のサーバーサイドエンジニアを担う常山 貴行さんにお話を伺った。
業務委託でサイバーエージェントに参画し、Amebaゲーム部門の社員に
もともとはSIerをしていまして、銀行やFX関連のシステムを構築していました。その後サイバーエージェントに、最初は業務委託という形で2年間程勤務しました。そして色々なところに出向するよりも1つの組織やサービスにコミットしたくなり、サイバーエージェントの雰囲気も好きだったので、2013年1月に中途入社をしました。
業務委託の頃は、ガラケーのゲーム開発を担っていました。スマホになってからは47都道府県カードバトル「天下統一クロニクル」のサーバーサイドエンジニアをしています。
プログラムのリリースにJenkinsを使用
Jenkinsを最初に使ったのは、ちょうどスマホゲームに移った時ですね。Jenkins自体はCIツールとしては有名だったので知っていました。どちらかと言うと昔からあるツールで、今は新しいテストツールがどんどん出てきていますが、それでも一番使われているんじゃないかと思います。
基本的な使い方は、プログラムをリリースして、日々の運用のマスタデータ環境に反映するために使っています。ステージングでも本番でも、反映する時はJenkinsを通しています。使うメンバーはまずはサーバーサイドエンジニアとフロントエンドエンジニアです。主にプログラムをビルドして、上げたい環境にリリースする作業に使います。あとはアプリのレスポンス向上の為にJavaScriptのコンパイルもしているのですが手間なのでそこもJenkinsに任せています。
プランナーもJenkinsを使うことで、エンジニア工数を削減
特徴的かなと思うのは、僕のチームではプランナーもJenkinsを使っているんです。これがJenkinsのいいところだと思うんですが、エンジニアがやりたい作業を登録しておけば、技術を知らない人でもボタンひとつで同じ事ができるんです。誰がどんなことをやったかのログも残るので、後でエンジニアが調べることもできますし。
プランナーが上げるのは主にマスタデータですね。ゲームで言ったらガチャやイベントのマスタデータや、どこにどのバナーを出すかとか。例えばプランナーがユーザーにお知らせを上げたい時に、お知らせの内容が保存されているエクセルからデータベースに登録するためのSQLを出力して、そのSQLをgitに保存して、Jenkinsでgitからチェックアウトしてきて、上げる。これがボタンひとつでできるようになっています。
マスタデータっていうのは、全部最初に登録していないといけないんです。その登録作業自体はアシスタントプランナーにお願いしていて、でも社員ではないので本番にはアップできないんです。ステージングまでです。そのマスタデータを本番に上げる作業を以前はエンジニアが行っていて、すごく手間だったんです。それをプランナーもできるようになったことでエンジニアの工数が空いたことが1番の利点かなと。
他ツールとの連携で、Javaのコードチェックにも活用
あとはコードのチェック、レビューにもJenkinsと他のツールを連携させています。いわゆる静的コードの検査ツールとして、Checkstyleを使っているんですが、もともとはJavaの便利ツールです。Jenkinsと連携させることで、予め設定しておけばボタンひとつでチェックできるようになりましたし、エラーの履歴も残すことができるようになったのがメリットですね。
Checkstyleが、コードがJavaのコーディング規約に沿っているか自動でレビューしてくれて、基本的な間違いがないか調べてくれるんです。これのおかげでコードをいちいち見返さなくてもよくなりましたし、簡単なミスはすごく減りました。
Jenkinsを使うことで、以前はいちいち手動で確認していた繰り返し作業が非常にラクになったんです。例えばデータベースのテーブルがないのにそのテーブルにデータを追加しようとして怒られるようなケースだと、以前はデータベースにログインして見ないといけなかったんですがその手間がなくなりました。今はJenkinsログに出てくるのですぐにわかるんです。
事業部全体でJenkinsを使うことで、リソースを共有し作業の属人性を減らす
また非常に大きいのは、作業の属人性が減ったことですね。この人しかわからない、作業できない、ということが減りました。出来る人が設定しておけばその人が作ったジョブを他の人は動かせばいいだけなんです。
特に本番のデータベース操作することってハードルが高いんですよね。それを出来る人がシェルスクリプトを作ってJenkinsに設定しているので、他の人でも作業できるようになりました。それにJenkinsは他の事業部でも使っているので、これからやりたい事と同じことをやっているチームがいればそれをコピーして持ってくるだけで速攻できてしまう。Ameba事業部内でも似ている業務フローがあれば、お互いに共有しているんです。
サーバー36台にデータを上げる作業が大幅効率化!
不具合が起こった際や、緊急リリースの歳の対応も非常に楽になりました。手動でそれをやっていた時は、不具合を直して本番に上げるまでに膨大な手順があったんです。もちろん作業によるんですが、サーバー1台あたり20分くらいはかかっていたイメージです。
ガラケーの時代はサーバーは6台だったので、それでもどうにかなっていました。でも今はスマホの時代になって、アクセス数が増えて、でもレスポンスを良くするためにサーバーを増やしていって今は36台あるんですよ。これを1台1台上げていくと合計で12時間くらいかかるわけです。これでは無理なので、今はJenkinsを使って18台ずつ上げています。36台分が2時間以内でできるので、本当に作業効率は上がりましたよね。
今後の期待は、より多くの人に使いやすいUI/UXと、機能
新しいテストツールがたくさん出ているのも知っているんですが、今のところ特にJenkinsから乗り換えたいとは考えていないです。ただ敢えて改善点を上げるとするなら、見た目の部分でしょうか(笑)。もう少しUI/UXも使いやすくなってもいいのかなとは思います。
あとは使い方を覚えるのが少し大変かもしれないです。機能が細かくて設定項目が大量にあるので、学習コストがかかるんですね。全体的にもっと使いやすくなればデザイナーやプランナーにももっと使ってもらえるかもしれないので、今後に期待です!(了)