分123モバゲーから提供されているソーシャルゲーム『魔法少女リリカルなのはINNOCENT』は,企画・開発・運用を(⁠株⁠)ユビキタスエンターテインメントが行っています。このサービスを支えるインフラは物理サーバと仮想サーバのハイブリッド構成となっており,(⁠株)IDCフロンティアのクラウドサービスが採用されています。本稿はこの両社から,人気ソーシャルゲームならではのデータを交えながら,DevOps実現に向けての取り組みを披露してもらいます。前編のおさらいこんにちは。(⁠株)ユビキタスエンターテインメント(UEI)の水野です。2013年11月号に掲載した前編に引き続いて今回は,『⁠魔法少女リリカルなのはINNOCENT』のDevOpsに関して書いていきます。前編では,ソーシャルゲームに重要な目的と特徴は次のとおりであることと,運営の実際についての事例を書きました。目的プレイヤーが常に新鮮だと感じるイベントやシステム,成長素材を提供し,安定してゲームを遊んでもらうこと。リリースが発生すること1ヵ月に数回の中規模開発=「ゲーム内イベント」のリリースが発生すること数ヵ月に一度の大規模開発=「新規ゲームイベント」のリリースが発生すること技術者の調査が必要なユーザサポートへの問い合わせが日に数件~数十件必ず発生すること今回は弊社で行っているDevOpsへの取り組みを,そして,IDCフロンティアの藤城さんからは,これらを支えているクラウドサービスのインフラについてお話しいただきます。(QA⁠)⁠」の3部門から成り立っています。前述の目的を達成するには,上記の3部門が互いの立場を理解してコミュニケーションをより多くとることがとても重要です。そのために,どのようなことを行っているかを解説していきたいと思います。開発するシステムの企画構成をリーンにするソーシャルゲームのDevOpsをスムーズに行うためには,まず「企画構成をリーンにする」という意識が重要です。「⁠リーン」とは「引き締まった」という意味で,基本機能をユーザが楽しむために本当に必要な企画のみに絞り,「⁠あるといいんじゃないかな......」や「機能Aと機能Bが連動していると,ちょっと嬉しいよね?」という程度のものは勇気を持って省きます。本作では,対CPU戦と対人間戦の機能間は,片方の進行度や勝敗の結果が他方に影響を与えることはありません。報酬も経験値とゲーム内マネー,そしてアイテムに限定されています。企画者としては「対人戦で負けたら,同じようなカード組み合わせが対CPU戦に出現して,勝つまでいろいろと試せる機能があったらおもしろいよね」とか言いたくなります。ここはぐっとガマンです。ユーザが本当にそれを求めるのであれば,その内容でイベントを企画・開発すれば良いのです。基本機能を盛りだくさんにしてはいけません。このことは,ゲーム運営に入ったときに大きなメリットとなって効いてきます。機能的に軽く疎結合であるほど修正や機能追加の範囲を狭くできますから,万が一問題が発生した場合の原因も特定しやすくなるからです。それは目的の1つである「プレイヤーが常に新鮮だと感じるイベントやシステムを安定して提供すること」につながります。開発チーム構成を考える企画の次はゲーム運営時のチーム構成を考えます。開発チーム編成が,マイルストーンに対して不足していては新機能を安定して提供していくことはもちろんできません。前述のとおり,本作品では,1ヵ月の間に最低数回のリリースが発生する以上,1チームでマイルストーンをクリアしていくことは難しく,開発チームのマルチライン化が必須です。私たちは開発を3チームに分けて,このスケジュールを次の役割構成で開発を行っています。メインイベントの開発スキル追加とUI/UX改善ユーザサポートこの3つのチームはそれぞれ,企画からの要望による開発ゲーム運営からの要望による開発ユーザからの要望による開発に対応しています。これらの開発の中にイベントなどの振り返りで得られた運用(Ops)からの意見も取り込んでいきます。このチームを数ヵ月ごとにローテーションで役割を変更します。これには次の意味があります。役割が固定されないので飽きにくいそれぞれの役割の相互理解が深まるとくに,ユーザサポートを全員が体験することには大きな意味があります。ユーザサポートチームでは,ユーザの問い合わせによって内容を調査し結果を返答しますが,その調査は単純なものでなく,MySQL内のレコードからApacheログまでマッチングした結果でないと返答できないことも少なくありません。幅広い知識を自然に学習することになります。ユーザの生の声やUI要望を聞くことで,それぞれの開発の役割を担うときに,ユーザが理解しやすく質の高いコンテンツや,より調査や追跡がしやすいシステム設計にフィードバックしようという意識を持つことができます。ファイル構成を分離するサーバ上に配置するファイル構成は,高頻度でデプロイしてもミスを起こさないように設計しておきます。全ファイルを1つのディレクトリ以下にまとめるシステム動作に必要なすべてのファイルを1つのディレクトリ以下に集約します。本作品ではPHPを使用していますが,そのライブラリもシステム側にインストールするのではなく,他のコードファイルと並列に格納しておきます(図1⁠)⁠。システム動作に必要なファイルのディレクトリ構成これにより,コードと同じようにバージョン管理ができますので,ホスト間でのライブラリバージョン違いなどのわかりにくい問題が少なくなります。機能別にディレクトリを分ける本当に基本的なことですが,チームごとに分離して作業しやすくするために機能別にプログラムのディレクトリを分けます(図2⁠)⁠。機能別ディレクトリ構成の例プログラムの設定ファイルをサーバに依存しないようにするプログラムの設定ファイルは各サーバに依存しない記述にしておきます。本案件ではリスト1のように,DBのホスト名などはhostsでの解決にまかせ,設定ファイル上にIPアドレスなどのサーバ固有情報を書かないようにします。"dbname_001"個別の設定ファイルにサーバ固有情報などを書かないでおけば,すべてのサーバで同じ設定ファイルが利用でき,デプロイするすべてのファイルがバージョン管理できることになります。これにより,設定ファイルに記述追加が必要になったときでもデプロイミスを防げます。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。