ISUCON9予選おつかれさまでした。惨敗しました。せっかくなので今回の開発環境を備忘録で残しておきます。
Remote Development
VSCode 1.35.0からstable版でも使えるようになりました。今回はRemote SSH を使ってSSHでリモートサーバー内のファイルをVSCodeから直接編集します。また ruby-debug-ideを使ってステップ実行できるようにします。
Remote SSH でサーバー内のファイルを編集する
1. Remote SSH Extensionをダウンロード
2. ~/.ssh/configの設定
例えばこんな感じにします
Host s1
User isucon
HostName xxx.xxx.xxx.xxx
Host s2
User isucon
HostName xxx.xxx.xxx.xxx
Host s3
User isucon
HostName xxx.xxx.xxx.xxx
3. Remote SSHでログインする
コマンドパレットから Remote-SSH: Connect to Host
を選択、リモートのサーバーを選択するとエディタが開きます。開いたら任意のフォルダを開きます。(今回は~/isucari/webappにします)
![web_rb_—_webapp__SSH__s1__and_Extension__Remote_-_SSH_—_isucon9q_and_____zsh_.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F28262%2F85564a5b-cab3-401e-5794-637291f7dde4.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=ce663f425c8c0fe169e64754f4abb242)
開けました。ターミナル、エディタ、Gitが扱えるのでこれでも大体操作できます。
Ruby(Sinatra)でruby-debug-ideを使ってステップ実行なデバッグを行う
ついでにステップ実行できるデバッグ環境を作ります。
1. Gemfileにgemを追加
group :development do
gem 'ruby-debug-ide'
gem 'debase'
end
bundle installをお忘れずに。
2. VSCodeの Ruby Extensionをリモートにインストール
VSCodeのRemote Developmentではリモートの環境にExtensionを入れることになるのでそうします。ダウンロードしたらVSCodeの再起動が必要です。
https://marketplace.visualstudio.com/items?itemName=rebornix.Ruby
3. 構成の追加でrdebug-ide環境を構築
デバッグ > 構成の追加 > Ruby > Listen for rdebug-ide の順に選択していくと、開いているフォルダの直下に .vscode/launch.json
が作成されます。出来たlaunch.jsonにuseBundleのオプションを追加します。
※ Ruby Extensionを入れていないと構成の追加でRubyが選択できません。
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Listen for rdebug-ide",
"type": "Ruby",
"request": "attach",
"remoteHost": "127.0.0.1",
"remotePort": "1234",
- "remoteWorkspaceRoot": "${workspaceRoot}"
+ "remoteWorkspaceRoot": "${workspaceRoot}",
+ "useBundle": true
}
]
}
3. rdebug-ide を使ってSinatraを起動する
VSCodeのDebugを実行し、以下のコマンドを実行する。
cd /home/isucon/isucari/webapp/ruby
bundle exec rdebug-ide --host 127.0.0.1 --port 1234 -- ~/local/ruby/bin/bundle exec rackup -p 8000
![web_rb_—_webapp__SSH__s1__and_Extension__Remote_-_SSH_—_isucon9q_and_____zsh_-2.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F28262%2F88391770-ee8d-5e53-8424-a6c5adeba957.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=915b58494a45b88a7641f3b2160eae51)
うまくいくと上の図のようにfooterの色が変化します。
※ 今回は前段のnginxがupstreamの8000ポートにリクエストを渡すので8000ポートでsinatraを起動しています。
4. ステップ実行する
任意の止めたい場所にブレイクポイントを入れ、該当箇所が通るようなコードを実行します。
![web_rb_—_webapp__SSH__s1__and_Extension__Remote_-_SSH_—_isucon9q.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F28262%2F9fd1c2cc-439c-6547-66ec-d87f8a734765.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=7f15456280b1a774f42072095c76de11)
ブレイクポイントで処理が止まり、変数の確認やコードの実行、ステップ実行が可能になります。
おわりに
VSCode便利すぎて最近RubyMineからVSCode一本にしようかなと考えたりしてます。来年こそはISUCONなんとかしたい。