LoginSignup
3
3

More than 5 years have passed since last update.

「ISUCON4 オンライン予選問題」をローカル環境に構築(Webサーバー:Go)

Posted at

はじめに

IT勉強会にて「ISUCON4 オンライン予選問題」をやってみることになり、自分用メモとしてローカル環境で動作させるための手順書を作成してみました。

「データベース」と「ソースファイル」の章は全言語共通、「Webサーバー」の章はGoを対象としています。

自分用メモの都合上、以下のOSとコマンドを使用しています。必要に応じて各自の環境に読み替えて下さい。

OS

  • Mac OS X 10.8.5

コマンド

  • homebrew(パッケージ管理:MySQLのインストールに使用)
  • vim(テキストエディター:文字列の追加と置換に使用)

MySQLは触った事がないため、ユーザーやセキュリティなどの各種設定は出来ておりませんm(__)m

データベース

MySQLをインストール

最初、公式サイトのdmgファイルでインストールしようとしたのですが、インストール後のファイル容量が大きそうだったので断念。tar.gzファイルもあるのですが、展開後の設定方法などがわからなかったのでhomebrewにてインストールしました。

$ brew update
$ brew install mysql

MySQLのバージョンを確認

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.21, for osx10.8 (x86_64) using  EditLine wrapper

MySQLサーバーの起動と停止の方法

以下、手動による操作です。

起動

$ mysql.server start
Starting MySQL
. SUCCESS! 

停止

$ mysql.server stop
Shutting down MySQL
. SUCCESS! 

設定ファイル(my.cnf)を修正

後述のinit.shを実行した時、以下のエラーになります。

ERROR 2006 (HY000) at line 1: MySQL server has gone away

MySQLでは、クライアントからサーバーにデータを送信する時のパケットサイズがデフォルトで1Mらしいのですが、今回はそれでは足りないらしく最大値の16Mで設定しました。(ちなみに8Mでもダメでした。)

テキストエディター(ここではvim)にてmy.cnfを開く。

$ vim /usr/local/Cellar/mysql/5.6.21/my.cnf

以下の一行を追加。

max_allowed_packet = 16M

ソースファイル

GitHubからisucon4のリポジトリーを取得

カレントディレクトリーを移動。

$ cd $GOPATH/src/github.com

今回はgit cloneにてソースを取得。

$ git clone https://github.com/isucon/isucon4
Cloning into 'isucon4'...
remote: Counting objects: 269, done.
remote: Total 269 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (269/269), 20.02 MiB | 480 KiB/s, done.
Resolving deltas: 100% (22/22), done.

サンプルデータ(dummy_log.sql)を修正

カレントディレクトリーを移動。

$ cd isucon4/qualifier

後述のinit.shを実行した時、以下のエラーになります。

ERROR 1292 (22007) at line 1: Incorrect datetime value: '2014-02-22 00:00:00 +0900' for column 'created_at' at row 1

ファイル内のデータ値は'2014-02-22 00:00:00 +0900'ですが、datetime型は'2014-02-22 00:00:00'までらしいので' +0900'を削除します。

テキストエディター(ここではvim)にてdummy_log.sqlを開く。

$ vim sql/dummy_log.sql

コマンドモードにて、文字列の置換を実行。

:%s/ +0900//g

データベースの作成&データのセットアップ

MySQLサーバーを起動。

$ mysql.server start

init.shを実行して、データベースの作成とデータのセットアップを実施。

$ ./init.sh
+ set -e
++ dirname ./init.sh
+ cd .
+ myuser=root
+ mydb=isu4_qualifier
+ myhost=127.0.0.1
+ myport=3306
+ mysql -h 127.0.0.1 -P 3306 -u root -e 'DROP DATABASE IF EXISTS isu4_qualifier; CREATE DATABASE isu4_qualifier'
+ mysql -h 127.0.0.1 -P 3306 -u root isu4_qualifier
+ mysql -h 127.0.0.1 -P 3306 -u root isu4_qualifier
+ mysql -h 127.0.0.1 -P 3306 -u root isu4_qualifier

Webサーバー

関連パッケージの取得&コンパイル

カレントディレクトリーをGoのディレクトリーに移動。

$ cd webapp/go

build.shを実行すると、martini(Webフレームワーク)やMySQLドライバーがgo get(ダウンロード)された後、go build(コンパイル)が実行されます。

$ ./build.sh

Webサーバーを起動

golang-webappコマンドが生成されるので、それを実行。

$ ./golang-webapp

動作確認

Webブラウザーにて、以下のURLにアクセス。

http://127.0.0.1:8080/

トップページが表示されれば、Goの設定が完了していることを確認できます。

isucon4_login.png

データベースの設定が完了しているかどうかは、ログインして確認します。

ご契約ID:isucon1
パスワード:isuconpass1

次のページが表示されれば、データベースの設定が完了していることを確認できます。

isucon4_mypage.png

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3