インターンシップ体験記
8月1日~31日の間、Aiming大阪スタジオのインターンシップに参加させていただきました。
オンラインゲームの開発現場を見られるなんて機会は滅多にないので、デバッグ作業と称しながらゲームで遊んだり、オンラインゲーム開発に使われている技術を毎日教えて頂いたりと、とても良い経験をすることができました!
h2. インターンに参加するまで
そもそも今回、Aimingさんのインターンシップに参加できたのは、関西ゲームプログラミング勉強会の時に(事前にサイトを見て大阪スタジオではインターンシップを募集してないのを確認しながらも)お願いしたのがきっかけで、忙しい中対応してくださって本当にありがとうございました。
ゲームプログラミング勉強会の主催をしているという点や、RailsとかC++0xとか、新しい技術をどんどん取り入れているという話を聞いていたため、ここに行ってみたい!という気持ちが強く、無理矢理お願いしました。迷惑かけてしまってすみません。
h2. 会社の雰囲気
複数のプロジェクト、そしてプログラマーからデザイナーさんまで全員が同じフロアに集まっていて、開発室には壁が無い!なので、質問しに行きやすくてよかったです!くだらない質問にまで丁寧に答えてくださって、ありがとうございました。
昼休みの時間は自由なときに1時間という風になっているため、自分の作業のキリがいいときに自由に出ることができます。自動販売機とか、冷蔵庫とか、ここで生活できそうなレベルで物がそろっていました。便利。
あと、駅がすごく近い。(しかし、駅自体は広いので迷うと大変なことになる。)
h2. やったこと
オンラインゲームの開発というのは、クライアントとサーバーに分かれています。このインターン中は、ある開発中のゲームのサーバー側で作業を行いました。
h3. 前半2週間:プロジェクトのコードに慣れる
実際に仕事で書いているようなソースコードを見るのは始めてだったので、まずはコードに慣れる作業から。慣れる以前の問題で、環境構築だけで1週間ぐらいかかってしまいました。
個人で小規模なゲームを作ることはあっても、実際に販売するようなゲームのコードを見るなんていうのはもちろん初めてで、こんなちゃんとしたゲームでコードをいじったらテストプレイでちゃんと反映される、というのがすごく楽しかったです!
サーバープログラムなので基本的にはLinux(CentOS)上での作業でした。普段はWindows環境でIDE使って開発していたので、慣れるまでが大変でした。Linuxの知識はCygwin触っていた程度にしかなかったので1から教えて頂いて、tmuxやzshell、そしてvimの操作方法を覚えて1か月間やっていました。
サーバーのプログラム自体は全てC++で、Boostはもちろん、C++0x(11)まで使える環境でした。スマートポインタは今回のプロジェクトではダメなようで少し残念。
↑こんな感じで作業していました。
h3. 後半2週間:課題プログラム(ログインチェッカー)の作成
後半2週間で課題プログラムの作成を行いました。
課題プログラムのログインチェッカーというのは、クライアントを装ってゲームサーバーに対してログインプロトコルの送信など、ログインの手順を踏んで、正常にログアウトするというところまでサーバーが動いているかを定期的に確かめる、そして異常があればメールでお知らせするというツールです。
開発はサーバーと同じC++、これは完全にゲームプログラムとは独立していて、個人で組むものということで、スマートポインタでもなんでもありで組ませてもらいました。
ログインプロトコルの送信などは、クライアント、サーバーで使っているエンジンをそのまま使うため、とくに苦労はない・・・はずだったのですが、設定周りで躓いて最初のほうはずっとネットワークと戦っていました。(クライアントを装ってデータ送信を行うプログラムのため、クライアントのコードを見ればいいやと思ったら、このゲームはクライアントが別言語なためそのまま適応できない個所が・・・)データが送れないとか、データが届いたら落ちるとか・・・。そのたびに質問して教えてもらって、というのを繰り返して、なんとか基本的なデータの送受信部分が完成。
ここさえできてしまえば、後は自分の技術でということで、がりがりコーディング。”一応動く”というものは割と早く完成したのですが、ここからが本番。コードを見て頂いて、アドバイスをもらってコードのリファクタリングを行って、また見て頂いて、というのを繰り返していました。自分に複数人でコードを組むという経験があまりなかったため、綺麗なコードというのをあまり意識していなかったことがよくわかり、「ここ、このデザインパターン適応したほうが綺麗にかけるよね」など、技術面でもまだまだだなと感じました。もっと勉強しないと!
後、Google Testを利用したテストコードの作成も行いました。テストも必要なのはわかっていながらも今まで個人で書いたことがなかったため、1から教えてもらいながら、手探りでやっていました。
インターン最終日にはコードレビューも行って、たくさんの意見を頂きました。言われてみれば確かにそうで、なんで思いつかなかったのだろう。というものもあり、これを実装するときにとっさに思いつくかどうかがプロとの差だなと思いました。テストコードを作ることで、テストを行って動作を保てるというだけでなく、他人のコードを読むときにテストコードから読むとわかりやすいというメリットがあることも勉強になりました。
そんなこんなで、最終日までに課題プログラムは完成!ネットワーク周りの仕様の変更が入ったり、ログインチェッカーの機能自体の仕様変更が入ったり、苦労する点もありましたが、無事にできて良かったです。
Google Testによるテストの図。グリーンバーの安心感。
h2. 感想
とても楽しみながら勉強になった1か月間でした!
ゲームを作っている人たちに直接、質問したり、話を聞いたりして、プログラミングの技術だけではなく、ゲームに関するたくさんのことを学ぶことができました。朝会や会議にも参加させていただき、会社の雰囲気もつかむことができました。
新しい技術を積極的に取り入れている点や、社内勉強会/社外勉強会でアウトプットを大事にしている点など、この会社では新しい技術を勉強し続けることができる環境が整っているなと感じました。
1か月間、ありがとうございました。
-
前の記事
Rails Best Practices を CI (Jenkins) で確認する 2011.09.15
-
次の記事
RSpec を使い始める人が読むべき N 個のドキュメント 2011.09.28