糟屋郡はいいぞ

ツイッターで書くには文字数が足りないやつ。Amazonのアソシエイトとして、KasuyaMofuは適格販売により収入を得ています。

ISUCON を今すぐにやってみたい Windows ユーザーのための環境構築方法と進め方

このブログは、ISUCON Advent Calendar 2022の24日目の記事です。

お決まり

「ISUCON」は、LINE株式会社の商標または登録商標です。

目次

  1. はじめに
  2. ソフトウェアのインストール
  3. 作業環境の構築、各種設定
  4. 作業環境へのログイン、ベンチ実行
  5. 作業環境の終了、起動
  6. 補足: 作業環境のリセット
  7. おわりに

はじめに

本文書の目的

Windows 10 を実行するユーザーが、ISUCON 12 予選を練習する環境を構築することができるようになります。 また、この文書を参考に、 matsuu / vagrant-isucon に記載のある過去の ISUCON の問題を実施することができ、自主的に過去問に取り組むことができるようになることがねらいです。

執筆時の環境

本記事の執筆は、以下の環境で実施しています。環境構築にあたり、ゲーミングPC程度のスペックが必要となることが予想されますので、性能が足りない場合は、年末年始のセールでPCを買うことも検討しましょう。

  • PC構成
    • CPU Ryzen 7 3700X
    • メモリ 64GB
    • ディスク Intel M.2 SSD 512GB
  • ソフトウェア
    • Windows 10 21H1
    • Git for Windows 2.39.0.2
    • Visual Studio Code 1.74.2
    • Oracle VM VirtualBox 6.1.36
    • Vagrant 2.3.4

概要説明

これから、あなたの Windows PC 上で ISUCON12 の予選問題に取り組める状態を作ります。これには、以下の工程が含まれます。

  • Windows 上に Linux の仮想マシンを構築(以下、作業環境)
  • 作業環境にISUCON12予選問題とほぼ同様の環境をデプロイ
  • Windwos から作業環境へアクセスするための設定
  • ベンチマークの実行方法

ソフトウェアのインストール

以下のソフトウェアが必要となるので、インストールを行います。

a. Git for Windows

公式サイトにアクセスし、ガイダンスに従い、ダウンロード、インストールを行ってください。 各種の設定項目は初期設定のままで問題ありませんが、個人的には Windows Explorer integration をオフにしています。(エクスプローラー上で、あるフォルダを右クリックしたときに、 Bash や Git GUI を起動する出てくるメニューを抑制します。)

b. Visual Studio Code

拡張機能を *remote ssh で検索し、 Remote - SSHRemote Development をインストールしてください。

また、日本語環境が必要な方は、 Japanese Language Pack for Visual Studio Code をインストールしてください。

ファイル編集の時に問題となるため、ファイル -> ユーザー設定 -> 設定 から、 テキスト エディター -> Insert Final Newline にチェックを入れます。

c. Oracle VM VirtualBox

公式サイトにアクセスし、 Windows Installer を選択します。その後はガイダンスに従い、ダウンロード、インストールを行ってください。

d. Vagrant

公式サイトにアクセスし、 Windows タブを選択後、 AMD64 を選択します。その後はガイダンスに従い、ダウンロード、インストールを行ってください。

以上でソフトウェアのインストールは完了です。

作業環境の構築、各種設定

a. リポジトリのクローン

これから、環境を構築するための設定ファイルである Vagrantfile を用意されているリポジトリをクローンします。

github.com

Windows のメニューを出した状態で git bash と入力すると、インストールしたアプリケーションが出てくるので、 Git Bash をクリックします。

Git Bash 上で、以下のように入力していきます。

mkdir isucon
cd isucon
git clone https://github.com/matsuu/vagrant-isucon.git
cd vagrant-isucon/isucon12-qualifier-standalone

このウィンドウは、 c. の手順で使用するのでそのままにしておいて下さい。もし閉じてしまった場合は、 Git Bash を再度起動して、以下のように入力してください。

cd ~/isucon/vagrant-isucon/isucon12-qualifier-standalone

b. ネットワーク設定の変更

エクスプローラーで、以下を開きます。

%USERPROFILE%\isucon\vagrant-isucon\isucon12-qualifier-standalone

ここに、Vagrantfile というものがあるので、 Visual Studio Code を起動し、ドラッグアンドドロップします。 すると、以下のような編集画面になるので、 42行目の

  # config.vm.network "public_network"

  config.vm.network "public_network"

に変更し、上書き保存をしましょう。これを行うことで、これから作成する作業環境が、ルーターからIPを得ることができます。そのため、手元の Windows からもアクセス可能となります。

c. 作業環境の起動

それでは、環境構築の準備が完了したので、最後に、 Git Bash 上で、以下のように入力します。環境にもよりますが、20分~1時間程度、完了まで時間がかかりますので、放置しておきましょう。

vagrant up

これを実行することで、インストールした Vagrant が、Virtualbox に、以下の操作を行います。

  1. VMの作成
  2. VMに Git Bash から vagrant コマンドでアクセスできるように設定
  3. VM上に ISUCON12予選問題の構築

この時、VirtualBoxを起動していると、 vagrant up を実行したディレクトリである isucon12-qualifier-standalone という名前を含んだ仮想マシンが作成される様子が確認できます。

d. IPの確認

vagrant up が完了した Git Bash のウィンドウで、以下のコマンドを実行することで、仮想環境にログインすることができます。

vagrant ssh

ログインすると、 vagrant@ubuntu2204 と表示されるので、以下のように実行します。 同じ設定であれば、 eth1 の部分に、Windowsからアクセスが可能なVMのIPが表示されます。

ip a

e. 作業環境のログイン設定

続けて、作業環境内のユーザ設定を行います。ISUCONという競技では、最終的に isucon ユーザでログインする必要があります。そのため、ログインできるように設定を行います。

vagrant ssh を実行済みである状態で、以下のように実行してください。

sudo cp ~/.ssh/authorized_keys /home/isucon/.ssh/
sudo chown isucon: /home/isucon/.ssh/authorized_keys
sudo ls -l /home/isucon/.ssh/authorized_keys

最終的に、以下のような出力が得られたら成功です。

vagrant@ubuntu2204:~$ sudo ls -l /home/isucon/.ssh/authorized_keys
-rw------- 1 isucon isucon 389 Dec 31 12:29 /home/isucon/.ssh/authorized_keys

その後、以下を実行して、作業環境から抜けましょう。

exit

f. hosts ファイルの編集

Windows 上の hosts ファイルの編集を行います。メモ帳を管理者として実行後、以下のファイルを開きます。 (ファイル名にそのまま入力すると開くことができます)

C:\Windows\System32\drivers\etc\hosts

例えば、私の場合は、IP は 192.168.1.25 と書いてあったため、以下のように追記を行いました。

192.168.1.25 admin.t.isucon.dev
192.168.1.25 isucon.t.isucon.dev
192.168.1.25 kayac.t.isucon.dev

g. ブラウザからアクセスする

ここまでの作業がうまくいっていると、マニュアル上のサイトにアクセスできるようになります。

https://isucon.t.isucon.dev/ に、Chrome等のブラウザでアクセスしてみましょう。

上記のようにエラーが表示されるので、この画面で thisisunsafe と入力すると、エラーを回避してアクセスすることができます。

h. Visual Studio Code の SSH設定

Visual Studio Code から、作業環境の isucon ユーザーにログインする設定を行います。 Visual Studio Code を起動し、左下の >< のようなマークをクリック後、Remote-SSH -> SSH 構成ファイルを開く... をクリックします。

以下のような画面が表示されるので、このの内容で書き換えていきます。

Git Bash の画面に戻り、以下のように入力します。

vagrant ssh-config | sed 's/Host default/Host isucon12-qualifier/g' | sed 's/User vagrant/User isucon/g'

すると、おおよそ以下のような出力が得られますので、Visual Studio Code に入力し、保存します。

Host isucon12-qualifier
  HostName 127.0.0.1
  User isucon
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile C:/Users/<Windows Username>/isucon/vagrant-isucon/isucon12-qualifier-standalone/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

以上で、問題に取り組むための準備は完了です。 Git Bash や、ブラウザ、Visual Studio Code は閉じていただいて構いません。

作業環境へのログイン、ベンチ実行

ISUCON12 予選とほぼ同様の環境が整いました。いよいよ、実際に触っていくことになります。

a. Visual Studio Code の Remote SSH で作業環境にログイン

g. Visual Studio Code の SSH設定 と同様に、左下の >< アイコンをクリックし、今度は Remote-SSH -> ホストに接続する... をクリックします。

これまでの設定がうまくいっていると、 isucon12-qualifier という項目が選択肢に出てくるので、こちらをクリックします。

Visual Studio Code の新しいウィンドウが表示され、左下の表示が以下のようになっていれば、接続が成功しています。

ウィンドウ中央の フォルダーを開く... を押すと、 /home/isucon/ と入力されているので、そのまま OK をクリックします。

その後、上部メニューの ターミナル->新しいターミナル を選択し、Visual Studio Code が以下のような表示になれば、準備完了です。

b. ベンチ実行

matsuu/vagrant-isuconのマニュアルを参考に、ターミナル上で以下のコマンドを入力します。

cd bench
./bench -target-addr 127.0.0.1:443

すると、ベンチが始まります。

しばらく待っていると、 負荷走行を終了しました と共に実行が終了します。

以上で、ベンチの試行が完了です。

作業環境の終了、起動

作業環境は、Windowsの普通のアプリと違い、作業環境自体の電源オン、オフの概念があります。そのため、Windowsを終了するときは、作業環境も電源をオフに、Windowsを起動した後は、作業環境も電源をオンにしましょう。

a. 作業環境の電源オフ方法

Git Bash を起動し、以下のように実行します。

cd ~/isucon/vagrant-isucon/isucon12-qualifier-standalone/
vagrant halt
vagrant status

以下のように表示されていたらOKです。また、VirtualboxのGUI上で電源オフとなっていることを確認しても構いません。

default                   poweroff (virtualbox)

b. 作業環境の電源オン方法

Git Bash を起動し、以下のように実行します。

cd ~/isucon/vagrant-isucon/isucon12-qualifier-standalone/
vagrant up
vagrant status

以下のように表示されていたらOKです。また、VirtualboxのGUI上で電源オンとなっていることを確認しても構いません。

default                   running (virtualbox)

c. 作業環境を電源オン・オフした場合の注意点

作業環境のオン・オフによって、IPが変更されていることがあります。その場合、ブラウザからのアクセスに失敗します。その際は、d. IPの確認f. hosts ファイルの編集 を実行してください。

補足: 作業環境の削除

電源をオフにしてしまう、作業環境が思うように起動しない、といったことが発生する場合があります。その際は、以下のコマンドで、構築した作業環境を削除することができます。 削除後、c. 作業環境の起動 から手順を再実行することで、再構築が可能です。

cd ~/isucon/vagrant-isucon/isucon12-qualifier-standalone/
vagrant destroy
vagrant status

以下のように表示されていたらOKです。

default                   not created (virtualbox)

おわりに

次回は、ISUCON12予選の問題を、実際にどのように解いていくかを解説します。

解説を待てない方は、以下のようなリソースにアクセスすることで、自主的に進めることが可能です。

ISUCON 全般のこと

isucon.net

ISUCON12予選 のこと

www.youtube.com

isucon.net