読者です 読者をやめる 読者になる 読者になる

開発合宿の題材としてISUCON3を使ってみる

会社の同僚たちで開発合宿(というかまぁ普段業務であんまりプログラミングできないやつもいるし、温泉でプログラミングしようぜ!)をやってるんだけど、その題材を何にしようかなという話。 スキルもバラバラだし、新人や普段プログラミング業務ができない人もいて、まだみんなが同じレベルで開発できる訳ではないので、ISUCONを題材にしてみようと思った。

そもそもなんでISUCONにしようと思ったか

まず、次で開発合宿は3回目なんだけど、今まではこんな感じだった。

開発合宿1回目

普段業務でみんなの前で発表することもあまりないから、題材は何でもいいからLT×5分をみんなやってみようということで、これを人数分やる。その後、みんなで作りたいWebアプリについて案を出してChatWorkみたいなWebアプリをNode.jsで作ってみようとなった。

けど、結局、何から始めていいか分からないのと、誰にどう担当を割り振るかとかもうまくできなくて、みんななんとなくサンプルを動かしてみたり、Node.js初めてでよく分からない人はアド街を見たり、Google音声検索で遊びだしたりと、かなりグダグダになった。あと、ネットワークがしょぼくて、node.jsをインストールするところで時間がかかるとか、お風呂入ってお酒飲んで楽しんでしまったみたいな感じになり、プロダクト開発はまだ早かったかなという感じで反省。

開発合宿2回目

前回の失敗をふまえ、開発じゃなくてある程度テーマを決めようとなった。 なので何かの言語で数学的な問題を解くテーマをやろうとなった。Project Euler みたいなやつね。 エンプラ系SIerの会社だし、言語はJava8でやることになった。

このプログラミングで問題を解くというやつは新人さんも楽しんでて、結構よかったんだけど、IDEでやる人、テキストエディタでやる人、WindowsMacが入り乱れ、なんかコンパイルできないとかそういうので時間もかかってしまった。 プログラミングする環境は、ある程度そろえた方がよかったなーという反省につながった。

そこで第3回

第3回は前回の反省も生かしつつ、もうちょっとレベルをあげたないなという思いでISUCONを選んでみた。ISUCONならAMIも用意されてるので、同じLinuxサーバーに対して実行できるから実行環境も揃えられるし、まぁ困ったら、またAMIから立ち上げればいいっていうのもいい。色々な言語の実装も用意されてるからそれも楽しそう。各チームで色々な言語試してみたりね。普段は、エクセルで設計書書いてパートナーさんのレビューして1日が終わるみたいな人もいるし、ベンチマークとかWebアプリの作り方とか勉強になるかなって。

ということで試しに動かしてみる

ISUCON3 本選のソースコードとAMIを公開しました : ISUCON公式Blog を見ながら動かしてみる。

  • Tokyo Regionでamiを探してインスタンスたてる。m3.xlargeを選ぶとのことでそれにする。

f:id:masato47744:20140608005609p:plain

f:id:masato47744:20140608010143p:plain

Host isucon3
    HostName        <EC2 Public IP>
    IdentityFile    ~/.ssh/xxxx.pem
    User            ec2-user
  • sshでログインして、ISUCONのページの通りコマンドをうつ。エラーもなくうまくいった。
$ sudo su -
# su - isucon
$ cd isucon3/final/bench
$ ./prepare-images.sh
$ ./init.sh
  • ISUCONのページの通りにPerlのサーバーを起動
$ sudo service supervisord restart
Stopping supervisord: Shut down
Starting supervisord:
isucon_go                        STOPPED    Not started
isucon_node                      STOPPED    Not started
isucon_perl                      STARTING
isucon_python                    STOPPED    Not started
isucon_ruby                      STOPPED    Not started

で、ブラウザでhttp://[ip-address]/でアクセスしてもアクセスできない。Security Group見てみたら、Inboundに80がなかったので、追加したら見れた。

signupっぽい画面が出てきて、適当に名前入れて、signup

f:id:masato47744:20140608011211p:plain

したら、なんか画像が出てきた。とりあえずなんか動いてるっぽい。

f:id:masato47744:20140608011239p:plain

そして、言われたとおり、ベンチマークを実行したら、

$ cd isucon3/final/bench/
$ carton exec perl bench.pl -d /home/isucon/image_source/ http://127.0.0.1/
2014-06-07T16:13:48 [2828] [INFO] starting benchmark: concurrency: 6, time: 60
2014-06-07T16:14:55 [2828] [INFO] done benchmark: score 1812.00510940262, elapsed 66.234 sec = 27.358 / sec

おし、なんかできてるっぽい。とりあえず今日はここまで。次は、Perl以外のアプリケーションを動かすところを調べてみる。