9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VSCodeのRemote Developmentを使ってリモートのRuby(Sinatra)をデバッグする

Last updated at Posted at 2019-09-08

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

開けました。ターミナル、エディタ、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

うまくいくと上の図のようにfooterの色が変化します。

※ 今回は前段のnginxがupstreamの8000ポートにリクエストを渡すので8000ポートでsinatraを起動しています。

4. ステップ実行する

任意の止めたい場所にブレイクポイントを入れ、該当箇所が通るようなコードを実行します。

web_rb_—_webapp__SSH__s1__and_Extension__Remote_-_SSH_—_isucon9q.png

ブレイクポイントで処理が止まり、変数の確認やコードの実行、ステップ実行が可能になります。

おわりに

VSCode便利すぎて最近RubyMineからVSCode一本にしようかなと考えたりしてます。来年こそはISUCONなんとかしたい。

9
5
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
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?