ブログ管理者: 2011年5月アーカイブ

開 発担当のKです。
「ソーシャルゲームの作り方」と いうテーマで、5回に分けてお話ししています。


↑↑ いいね!ボタンを押していただければとってもうれしいです。

今回(第4回め)のテーマは
FLASH 開発の留意点」と開発フェーズでの苦労点
です

FLASH開発の6つの留意点

1: メモリが漏れる

油 断するとすぐメ モリリークしてしまいます。
ライブ ラリプロファイラを うまく使って解消する必要があります。



※「メモリリーク」とは?
プログ ラミングにおけるバグの一種。プログラムが確保したメモリの一部、または全部を解放するのを忘れ、
確保したままになってしまうことを言います。プログラマによる単純なミスやプログラムの論理的欠陥によって
発生することが多いです。気をつくましょう。

※「ライブラリ」とは?

汎用性の高い複数のプログラムを、再利用可能な形でひとま とまりにしたものです。

※「プロファイラ」とは?
動作中のプログラムがどの処理をどういった順序で実行した かを監視するプログラムのことです。


2: マウス向けのインターフェイス

特 にメタルサーガ・ニューフロンティア」は複雑なゲームシステム
のためコマンド数が多くユーザーインターフェースが悪かったです。

より良くするため何度も作り直しをしましたが、結果的に
優れたインターフェースに行き着くことが出来ませんでした

PCゲームの操作は「コントローラ」ではなく「マウス」が基本なので
もっ とPC向けのインターフェース設計をする必要があると実感しました。

mouse.JPG


3: サーバとの通信負荷の軽減

デー タをキャッシュしたり、なるべく1回の通信で処理させるなど
通信負荷の軽減に気をつけました。仕様レベルの改変での通信量の軽減も
検討しました



4: プログラマ、デザイナとの連携

Flash データ内で使われているクラス名やラベル名を分かりやすく
エクセルで管理しプログラマとデザイナの連携を取りやすくしました。

※データを作成するデザイナーがエクセルに記入し、
プ ログラマがそれを参照しながら作成するという形です。



5: 多言語対応

エクセル ファイルで複数言語を記入し、コンバート段階で
言語切り替えをするように作成しました。

た だこの方法では、切り替えのたびにコンパイルの必要が出てしまうため、
今 後はgetText等 を使用するほうが良いと思います。

※「getText」とは?
国際化ライブラリの構成要素の一つであり、多言語対応のソ フトウェアを開発する際に用いられます。

6: データの再利用

よ く使う「ボタン」や「メニュー」「アニメーション」などを簡単に再利用できる
ように基本セットを作成しました。

これによって、新しい画面が追加されてもわりと簡単に作成することが
出来るようになりました。


開発フェーズでの苦労点


1: リソースファイルが隠せない

サー バ側で解決できる問題なのかもしれませんが、
「メ タルサーガ・ニューフロンティア」では
ユーザーが3Dモデルのリ ソースファイルに直接アクセス出来てしまい、
実装前のデータがばれてしまうことがありました。

(今だから言えますが、当時はかなり焦りました。汗)

※「リ ソースファイル」とは?
アプリケーションで使用する非実行可能データ ファイル (イメージ ファイル、ビデオ ファイル、オーディオ ファイルなど) を
表します。


2: ダミーデータは置かない

プ ログラムの不備で表示が壊れてしまった場合などに誤って
ダミーデータが表示されてしまうことがありました。
ダミーデータだからといって著作権が絡んだものや、変なテキストは
使用しないようにしましょう。


3: embedで隠す

「メ タルサーガ・ニューフロンティア」では実装できませんでしたが、
リソースファイルを、embedswf内 に埋め込んでしまえばツールからは
見えなくなることが
分かったの で、次回からは実装したいと思います。

 ※「embed」とは?
データファイルを埋め込むためのタグのことです。

※「swf
」とは?
Adobe Flashを始めとしたアドビシステムズの製品により作成可能なマルチメディアのファイル形式で
「Small Web Format」の略です。(昔は、shockwave Flashといっていた頃もあったような)

4: 通信を減らす

OpenSocial環 境の場合にはなるべく、基環境(mixi、ヤフーmobage)との
通信を減らすような作りにしました。

※基環境との通信が多いと、基環境の通信負荷に引っ張られてしまい、
正常動作が出来ない場合があるため


※「OpenSocial」とは?
ウェブベースのソーシャルネットワークアプリケーションの ための共通の
アプリケーションプログラミングインタフェース(API)群のことです。


5: Subversionが遅くなる

プ ロジェクトごとにリ ポジトリが一つ用意してあり、その中で全てのデータを
入れて運用していました。
その結果、Subversionの 動作が遅くなり、開発時にストレスを感じるように
なってしまいました。リポジトリにどのデータを入れるかを良く考えましょう。

※「リポジトリ」とは?
データの貯蔵庫を意味し、データベースともいえます。ソフ トウェア開発および保守における各工程の様々な情報を
一元管理します。

※「Subversion」とは?
プログラムのソースコードなど を管理する集中型バージョン管理システムの一つです。


これで、第4回は、終了です。次回でいよいよ最終 回となります。
次回の最終回(5回目)は、運用開始後の苦労点
他プロジェクトで活かせた部分
などについてお話いたします。

なお、ご意見、ご質問 などは、こちら(フォーム)から、お願いいたします。

※ご意見、ご質問の本文内に、「ソーシャルゲームの作り方(その4)」について
と、記入いただくとうれしいです。

ソーシャルゲーム虎の 巻Facebookページはこちらです。

ではまた。

開発担当のKです。

「ソー シャルゲームの作り方」というテーマで、5回に分けてお話ししています。


↑↑ いいね!ボタンを押していただければとってもうれしいです。

今回(第3回め)のテーマは
「PHP 実装のポイント」と、「データベース設計での留意点」
です。


PHP実装のポイント

注意した

1:判定について
 NULL,0,FALSEは 「==」では判定対象辺がいずれかの値であれば全て正となります。
 ※別々の判定を行うためには「===」を必ず使用します。
 また、「empty()」 では上記の3つは全て正となります。

Null.JPG



2:特殊なライブラリPECLな ど)を使用する場合には
 インストールが必要な旨を必ず記録、サーバ構築担当者に連絡します。(忘れずに)

3:かなり適当にプログラム書いても動いてしまうので
 些細なエラーログでも多めに出力するようにします。


※ 「NULL」とは?
プログ ラミングで、変数に対して値がまったくない状態や、どのアドレスも指していない
ポインターの値を意味します


※「FALSE」 とは?
UNIX系のオペレーティングシステムにおいて、常に終了コード「1」を返 すコマンドです。

※「empty()」とは?
PHPの関数で、引数で指定された変数の値を検査します。
変数に何もセットされていない場合には「false」を、値が空だった場合には「true」を 返します。


※「ライブラリ」 とは?
汎用性の高い複数のプログラムを、再利用可能な形でひとま とまりにしたものです。

※ 「PECL」 とは?
PECL(ピクル、PHP Extension Community Library)は、PHPで利用できる拡張ライブラリ
(パッケージ)を提供しているサービスです


☆工夫した
1:Intvalで、速度向上
 データベースから取得したデータは基本的に、文字列として扱われるので、
 速度向上のため、数値計算などはなるべくintval()な どを使い、数値化した上で
 行うようにしました。

2:SimpleTestで効率化
 SimpleTestが インストールされていたのでそれを利用。
 これにより、変更が容易になり、後に発生したゲームのマップ追加にともなう作業も
 簡単に行うことができました。


※ 「intval()」とは?
PHPの関数で変数の整数としての値を取得します。

※ 「SimpleTest」 とは?

ユニットテストを行うためのライブラリです。ユニットテストを行うメソッドに対してテスト ケースという、
テスト内容を記述したクラスを作成することで、テストを実行します。


☆PHPアクセラレータの利用(必須)
1:APC eAccelerator  などを利用し高速化を図りました。
2:運用上の問題(更新反映等)は
 ソース配信管理に使用していたCapistranoの ロジック上で限定Sudo権 限で
 アパッチを自動でリスタートし、アクセラレートキャッシュ
(PHPにおけるコンパイル済みスクリプトキャッシュ)を消去していました。


※ 「APC」とは?
PHP:_Hypertext_Preprocessor のモジュールの一つの Alternative PHP Cacheの略。
PHP
の実行コードをキャッシュ(高速化)します


※ 「eAccelelator」とは?
コンパイルされたPHPスクリプトを保存しPHPスクリプトに変化がなければ保存された
ものから
実行してやろうというもので、つまり毎回コンパイルする必要がなくなるので
PHP高速に実行
できるという仕組みです

※「Capistrano」 とは?
複数の環境に同じ処理を同時に実行させるソフト

※ 「Sudo」とは?
UNIXおよびUnix系オペレーティングシステムのプログラムの1つで、
ユーザーが別のユーザー(通常、スーパーユーザーすなわち root)の特権レベルで
プログラムを実行するためのコマンドです


※「アパッチ」とは
人気の高いWebサーバソフトウェアの一つ。1995年にNCSA httpd 1.3をベースに開発が始まり、
UNIX系OSを中心に幅広い人気を獲得した。Apacheはフリーソフトウェアとして無償で公開され、
世界中のボランティアのプログラマたちの手によって長年に渡って開発が続けられています


※「コンパイル」とは?

プログラミング言語を用いて作成したソフトウェアの設計図(ソースコード) を、
コンピュータ上で実行可能な形式(オブジェクトコード)に 変換することです。


データベース設計での留意点


1: データの配置

  ユーザデータについて個別に扱われるデータと他ユーザデータと連携して扱われる
 データについて、配置を考慮して設計を行いました。
(データベース分け、テーブル分けを行うのか。行った場合に何らかの問題が出ないか等)

 

2: 膨大なデータはテーブル分けする

 登録されるデータの種類とそれが運用されたときの最大数を見積もり、
 膨大な量となる場合にはデータベースのテーブルを分ける、またはデータベース自体を
 分けるようにしました。
 また、レコード数ができるだけ多くならないように1アカウントで持てる数が固定である
 データについて、リストデータとして1レコードにデータをまとめるようにしました。
(ただし、1データの大きさにもよりますが)

 

3: 巨大なテーブルは連携しない

 巨大かつレコード数も多いテーブルは、連携を行わないようにしました。
(削除時などに膨大な負荷が掛かるので)

 

4: 巨大なテキストデータは別テーブルに分ける

 巨大なテキストデータを持つテーブルはなるべく別テーブルに分けました。

 

5: ノード分けしたデータベースは一括検索しない

 ノード分 けしたデータベースについて、なるべく一括で検索するような処理を
 避けました。必要な場合は検索したいデータはそれぞれのノードに重複して持たせるか、
 共有データベースに持たせました。

 

※ 「ノード」とは?
ネットワークの接点のことで


第3回は、これで終了 です。
次回(4回目)は、FLASH開発」と「開発フェーズでの苦労点」
などについてお話する 予定です。

なお、ご意見、ご質問 などは、こちら(フォーム)から、お願いいたします。

※ご意見、ご質問の本文内に、「ソーシャルゲームの作り方(その3)」について
と、記入いただくとうれしいです。

ソーシャルゲーム虎の 巻Facebookページはこちらです。

ではでは
開発担当のKです。
「ソー シャルゲームの作り方」というテーマで、5回に分けてお話ししています。



↑↑ いいね!ボタンを押していただければとってもうれしいです。

今回(第2回め)のテーマは「基 本設計」と、「サーバ構成」で す。

基本設計で気をつけた3つのポイント

1:フレームワークの規約に則した開発を行うこと。
フレームワークの規約に則した開発を行うこと。
また、すでにフレームワークに存在する基本機能をなるべく使用するようにすること。
逆にフレームワークでは機能が不十分な部分を見極め、独自開発とすること。


2:拡張、追加をある程度予想した設計を行うこと

後に拡張、追加する可能性のある機能があるかあらかじめ調査を 行い、
なるべく変更が少なくなるよう考慮して設計を行うこと。


3:後からの変更がしやすい設計を行 うこと。
ゲーム中の制限となる数値(かかる時間、使用ポイントなど定数 で定義される数値)は
比率により後から、変更できるように、係数を定数として用意すること。


とりあえず、基本設計では、この3つのポイントを抑えておくことが必須です よ


サーバ構成は?


☆基本的にはLAMP

lamp.jpg.JPG

※LAMPとは?

OSであるLinux、
WebサーバであるApache HTTP Server、
データベースである
MySQL、
スクリプト言語であるPerl、PHP、Python

を総称した頭文字から成るです。

sever.jpg.JPG


※ 「CentOS」とは?
Red Hat Enterprise Linux(以下「RHEL」と呼ぶ)との完全互換を目指した
フリーのLinuxディストリビューション(頒布形態)です


※「64bit」とは?
コンピュータにおいて、連続した64個(桁)のビット(8オクテット)であ り、バイナリで
最大18,446,744,073,709,551,616(16E)までの数を表現できます


※「Apache」とは?
人気の高いWebサーバソフトウェアの一つ。1995年にNCSA httpd 1.3をベースに開発が始まり、
UNIX系OSを中心に幅広い人気を獲得しました。Apacheはフリーソフトウェアとして無償で公開され、
世界中のボランティアのプログラマたちの手によって長年に渡って開発が続けられています


※「PHP」とは?
動的にHTMLデータを生成することによって、動的なウェ ブページを実現することを
主な目的としたプログラミング言語、およびその言語処理系のことです


※ 「APC」とは?
PHP:_Hypertext_Preprocessor のモジュールの一つの Alternative PHP Cacheの略。
PHPの実行コードをキャッシュ(高速化)します


※ 「eAccelerator」とは?
コンパイルされたPHPスクリプトを保存し、PHPスクリプトに変化がなけ れば保存されたものから
実行してやろうというもので、つまり毎回コンパイルする必要がなくなるのでPHPが高速に実行
できるという仕組みです


※「FreeBSD」とは?

UNIXライクなオープンソースのオペレーティングシステ ムです


※ 「MySQL」とは?
オラクルが開発するRDBMS(リレーショナルデータベースを管理、運用す るためのシステム)の実装の一つです

jyochoka.jpg.JPG



ロードバランサとしてPoundを選択

負 荷対策と、冗 長化を考慮した結果、L7ソフトウエアロード バランサとして
「Pound」が良いと考えました。

※冗長化とは?
システムの一部に何らかの障害が発生した場合に備えて、障 害発生後でもシステム全体の機能を
維持し続けられるように予備装置を平常時からバックアップとして配置し運用しておくこと


※L7ソフトウエアロードバランサとは?
レイヤーセブン第7階層)ア プリケーション層でソフトウエ ア的にロードバランス(負荷分散)させるしくみのこと。

Poundを選択した理由

L7ソフトウエアロードバランサとして「Pound」を選択した理由は
1:負荷が非常に低く、低スペックマシンでも処理速度が速いた め。
2:バランシング能力が高い(Squidの キャッシュ機能を必要としない) ためです。


FreeBSDを選択した理

データベースサーバのOSと して、FreeBSDを選んだのは
Linux(特 定のディストリビューション:頒布形態)に固執しての構成検討は行っておらず
用途に応じたOSの選択を柔軟に行っているため


※「Pound」とは?
リバースプロキシ & ロードバランサ(reverse-proxy and load-balancer)で、
1 リバースプロキシ : ブラウザからのリクエストを1台以上のバックエンド・サーバに渡す
  (バックエンド・サーバからは、Pound が動作しているマシンからのリクエストにみえる)。
2 ロードバランサ : 複数台のバックエンド・サーバにリクエストを分配する(優先順位の設定可)。
3 SSLラッパ : ブラウザからのHTTPSリクエストをHTTPでバックエンド・サーバにリクエストする
  (HTTPしかサポートしていないサーバをHTTPS対応にできる)。
4 HTTP/HTTPS サニタイザー : 要求の正当性を確認し、正しいもののみを受け入れる。
5 フェイルオーバー : バックエンド・サーバのヘルスチェックを行い、ダウンしているサーバには
   リクエストを送らない。復帰を検出したら自動的に通信を再開する。
6 リクエスト・リダイレクター : リクエストされたURLやヘッダ情報(正規表現で指定)によって
   どのバックエンド・サーバに渡すか指定できる(バーチャルホストやアクセス拒否も可能)。
   などの機能があり、サイズも小さく、設定も簡単。


但し、以下の機能は持っていません。
1 Webサーバ : 自身ではコンテンツを持ちません。
2 Webアクセラレータ : キャッシングはしません。


※「Squid」とは?
プロキシ (Proxy) サーバ、ウェブキャッシュサーバなどに利用されるフリーソフトウェア。
Squidの用途は重複しているリクエストに対したキャッシュ応答によるウェブサーバの高速動作や、
ネットワーク資源を共有する人々が行うWorld Wide WebやDNSなどの様々なネットワーククエリの
キャッシュなど多岐にわたります。


※「Linux」とは?

一般的にはUNIXライクなコンピュータ用オペレーティン グシステム(OS)の一群を指し、
厳密にはその中核となる部分であるカーネル(階層型に設計されたOSの中核となる部分)のことです。


第2回は、これで終了です。
次回(3回目)は、「PHP 実装のポイント」と「データベース設計で留意点」
についてお話しできればと思います。


なお、ご意見、ご質問などは、こ ちら(フォーム)から、お願いいたします。
 
※ご意見、ご質問の本文内に「ソーシャルゲームの作り 方(その2)」について
と、記入いただけるとうれしいです。


ソーシャルゲーム虎の 巻Facebookページはこちらです。

ではまた。


このアーカイブについて

このページには、ブログ管理者2011年5月に書いたブログ記事が含まれています。

前のアーカイブはブログ管理者: 2011年4月です。

次のアーカイブはブログ管理者: 2011年6月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

カテゴリ

タグクラウド

ご意見ご感想はこちらから
サクセス