クラウドサービスの比較
以前CyberXで一緒に仕事をさせていただきましたイクバルです。
現在は、CyberXを離れ、自身の会社を切り盛りしています。
自身の会社ではあるサービスを運営していますが、
そのサービスを立ち上げるときにスタートアップコストとランニングコストを控える目的として
クラウドサービスの利用を考えていました。
そのときにAmazonEC2 (EC2)と Google App Engine(GAE)という2つのクラウドサービスをみて比較していましたが、
そのときに分かったことをまとめていきたいと思います。
WEBアプリ(ブラウザでアクセスして何かのサービスを提供する、例: SNSとか)を作って公開する開発者側から考えて比較していきます。
1年前にあるプロジェクトを開始するときに行っていました比較ですが、現在は変わったところがあるかもしれないので、ご了承くださいませ。
利用可能なOSに関して
EC2ではいろんなOSを選ぶことができます。イメージとしてはEC2の共通のハード上で仮想マシン(VM)を使うという。
利用可能なOSとしてはWindowsの他、Red Hat LinuxやUbuntuなどです。
オープンソースのOSに関してはAmazon自身が提供しているではなく、サードパーティが提供するのは一般的にです。(例えば、Ubuntuに関して)
一方、GAEはOSを選ぶことができません。OSやハード層はすべてブラックボックスという存在になっています。
価格
EC2では「従量型」で課金されます。何を課金されるかといと基本的にサーバのアップする時間と外部から、外部へのデータ通信量です。
インスタンスと呼ばれる仮想サーバの「強さ」によって課金のレートが変わってきます。もちろんより大きい処理能力のインスタンスのほうが
高くなります。
GAEの場合、EC2と違ってCPUのアップ時間ではなく、ページビューの数になります。極端の話、自分のWEBアプリがまったく使用されてない状況ですと
(ページビュー0)コストかかりません。EC2と違ってリスクが低いです。
その他GAEに対して大きいなメリットは「無料枠」という設定が存在します。月に500万のページビュー以下、または500MB以下のデータの容量限り、無料になります。
開発用のツール/デプロイメント
EC2の場合、root権限持ちでデータセンターに通常のサーバを運営しているようなことになりますので、ほとんどなんでもできてしまいます。
WEBサーバ一2台、DBサーバ1台、WEBサーバの前にロードバランサーという一般的な小さい構成でもできます。
アプリを開発するためのツールが物理サーバを運営することとまったく同じ形になりますので、制限がありません。
GAEでアプリを開発にはPythonまたはJavaを使用しないといけません。またGAEでは決められたSDKを使用してアプリを開発します。
Python用のSDKとJava用のSDKが用意されています。
Pythonによる簡単なアプリ作成のHOWTOがこちらです。
http://www.youtube.com/watch?v=bfgO-LXGpTM
サーバーメンテ/サポート
EC2は通常のサーバーの運営と一緒ということで、サーバーのシステムメンテも行わないといけません。
運営者側としては、サーバーの管理、ロードバランサーやデータのキャッシュなどを管理する必要があります。
GAEの場合、サーバー側のシステム管理は透明化されているので、運営者側はアプリのロジックに関わるところだけを考えればよいです。
サポートに関しては24/7体制の電話によるサポートなどのサービスはありません。
GAEやEC2の場合、公開されている掲示板やヘルプページでユーザ同士、情報交換しながら関係者混じって
サポートに対応するという感じがいままでのやり方です。
パフォーマンス/スケーラビリティ
自分のアプリをより多くのアクセスを捌くためにEC2でもGAEでもスケーラビリティを拡大するオプションがあります。
GAEの場合、Googleに用意されているツールなどを使ってアプリを監視するなど、拡大の方法なども推薦されてる方法がありますので、それに
従って行えばほとんどの場合問題がありません。
EC2は比較的に自由な形(または手間かかる形?)でスケーラビリティを実現します。
自分で自分が設置したツールなどで監視を行って、必要に応じてインスタンスをもっと投入するかどうか自分で判断します。
プラットフォームロック
決められたSDKの利用、システムの監視もGoogleのツールを使う前提ですので、GAEのほうはプラットフォームにロックされます。
将来に別のクラウドサービスを利用することになりましたら移行コストが高くなるわけです。
その一方自由なEC2と比べると移行することになってもそんなコストが高くありません。
最後に
では、「いろいろの比較をしていましたが、結局どのサービスが一番いいの?」という質問になってくるでしょう。
それはこれから開発して運営していくサービスによって違ってきます。
一つのいいルールとしてはより高レベルなクラウドサービスは開発側の手間が省くことができますが、
もっと専用的なサービス向けになってくるでしょう。
例えば、GAEの場合、OSやVMの作成が必要がないので、ビジネスアップリケーションだけを集中して開発できるが、
その反面WEBアップリケーションのみ利用できる(ポート80に対するサービスのみ)ことになります。
従来のデータセンターにあるサーバーでサービスを提供することでしたら、もっと自由なEC2のほうがいいかもしれません。
以上です。
Flash lite開発におけるサイズの削減
こんにちは
CyberX FlasherのイニシャルHです。
今回はFlash liteを用いて開発をする際のサイズ問題について
お話したいと思います。
まずFlashでもPC版とは違い、Flash lite1.1(ここでは普及率の高いLite1.1に焦点を絞ってお話します)
では100Kという限られた容量の中でコンテンツを作成していかなければなりません。
そうなると必然的にクオリティを極力下げずに容量の削減を行う必要が出てきます。
その有効な手段として、大まかにいくつか紹介。
1) グラフィックの使い分け
例えば携帯ゲーム上で使われる背景。
※モバゲーにて公開中「モリんちゅ」
上図のような比較的パスの少ないグラフィックを使用するなら
ベクターで描くほうが容量は小さく済みます。

※モバゲーにて公開中「きらめき舞子ガール」
上図のような描画の細かいものをベクターで描いた場合
アンカーポイントもかなりの数になってしまい画像として
使用するより容量を大きく食うことに。
どちらもその時の使用する素材によって使い分けることが大事です。
ベクターで描くならパスをなるべく少なくする、画像にするなら
PhotoshopやIllustratorで保存する際にあらかじめ画質調整など
しながら容量の削減を行うとより効果的でしょう。
2) ムービークリップ(インスタンス)の使いまわし
Flashにおいて最も有効的でFlashの特徴ともいえる1つではないでしょうか。
例えば同じ素材を違うシーンで使うからといって毎回インスタンス化していては
そのたびに容量を食ってしまいます。
※Mixiモバイルにて公開中「星空バータウン」
上図のような左右対称の素材があったとします。
これをそのままインスタンス化するのではなく、
Flashで左部分をまずインスタンス化、その後右側に
左側の作成したインスタンスを反転させ配置。
これでこの素材をそのままインスタンスした場合より
実質半分くらいのサイズでSWF化することができます。
グラフィック以外にアクションスクリプト部分においても幾分か削減することができます。
ほんの少しの減量ですが、
:変数名は短く 例)/:enemy_weapon → /:e_w など。
※ラベル名も同じく
:Flash liteはfunctionが使えない代わりにcallを。
同じような処理をする場合はcallで呼び出して実行
と、PC版Flashや他の言語を使って開発をする時など、普段気にしない部分にまで
配慮してliteのコンテンツは作る必要があります。
また携帯端末での動作となると、端末によってFlashコンテンツの再生速度に
バラつきがあったりましす。
コンテンツを利用する者皆が最新の端末を持っているとは限りません。
PCでのFlashコンテンと違い、携帯端末の小さい画面からでは
演出にも限界があります。
しかしだからこそ細部に至るまでこだわって、
携帯でここまでやれるか!?といった作り込みを自然に演出する。
どのユーザにも軽快に、ストレスなくFlashコンテンツを遊んでもらうために
グラフィック面からAS面まで、ありとあらゆる工夫をし作りこむ。
これが作り手の、私のliteで開発を行う上での楽しみにもなっています。
ゲーム制作の入門としてもFlash liteはとっつきやすい分野とも
思いますので、これを機にゲーム作ってみたいなぁて方は是非勉強してみては!?
そんな装備で大丈夫か?
CyberXに常駐させていただいているフリーランスのプログラマをしている高木 誠@2celebといいます。
外部から来ている人間にもかかわらず、社内勉強会で発表させて頂く機会がありましたので、発表資料をblogにまとめさせてもらいました。
ぱらぱらっと読めば5分ぐらいで読めると思います。
内容的にはPHPとCakeをdisりつつRubyとRailsを持ち上げるというとんでもない内容なのです。
PHPで開発している会社でPHPのお仕事をもらってるのに
そんな発表で大丈夫か?
という声が聞こえてきそうです。
大丈夫だ。問題ない。
CyberXでは便利なものは率先して使うという考え方なのでPHP Cakeより便利なツールがあれば
それらを活用してソーシャルアプリの開発を行っていこうという試みもあります。
そういうわけでいろんなところで利用されている先進的なフレームワークの Ruby on Railsについての解説です。
スライド資料をどうぞ。
そんな感じでPHPの至らない所を盛大にdisったりRubyの優れたところなどいろんなことを
Ruby最高!PHPはイケテないという意見に思えますが、
技術者であれば単に好きとか嫌いとかではなく便利な言語や新しいフレームワークを学ぶ必要があるということをみんなに使えたかったのです。
自分が仕事で使っている以外の言語も試してみようよ!
勉強会でみんなに本当に伝えたかった事は↑これなんです。
RubyやPythonやScalaなどの言語はグングン進化しています。
PHPは使う人が多すぎて5.3で停滞してしまっているし、cake php はPHP4を引きずっています。
僕的な持論としては言語やフレームワークは何かを実現する為の道具であるので、
より便利な道具が出てきた場合は新しい道具を使うのも一つの手段だと思います。
確かに手に馴染んだ道具(言語、フレームワーク、OS)などで開発したほうが楽かもしれませんが、
技術者として新しい道具にチャレンジするのも大事だとです。
Ruby,Scala,Pythonなどの勉強会もたくさん開催されていますので足を運んでみてはいかがでしょうか?
偉そうなことを行っていますが僕もまだまだRuby,PHPともにまだまだですし、
Scalaなどはコップ本を読み始めたばかりです。
にも関わらずこういう発表の機会を与えてくれるCyberXさんにすごく感謝をしています。
また開発なども「Redminを活用しよう!」、「このほうがイベントが盛り上がると思う!」、「こうしたほうがドキュメントの保存がまとまっていい」等の提案をすると、
「そっちのほうが便利だね、やってみよう」、「試しにやってみようか」と取り入れてくれたりします。
CyberXではほとんど外部から来たエンジニアと社内のエンジニアやプロデューサーに隔たりがありません。
そんな感じで便利なツールや便利な開発手法などはどんどん取り入れる風習の有る職場なので、
技術や開発手法の効率化に自信の有る方にCyberXに来るといいと思うよ!