【画像付き解説】Visual Studio Codeでatomのhydrogenの機能を再現してみた

今回は、pythonをVisual Studio Code(VS Code)で開発してる方に向けた

便利なデバック環境構築の方法を紹介します

よくあるブレイクポイントを使用したデバッグ作業ではなく

atomのHydrogenのような選択した行のコードを

都度実行できるようなデバック環境の構築方法を解説します

今回構築するデバック環境はこんな感じ・・・

Visual Studio Code (VS Code)・・・Microsoftが開発した無料のソースコードエディタ

この記事を読むとわかること・・・

  • Visual Studio Codeでのデバッグ環境の構築方法
  • Atomのhydrogenに限りなく近い機能の再現方法

Atomのサポートが終了になりhydoronの代替え機能を使用したい!

という方には必見の記事になっていると思います!

実際に私もhydrogenの代替機能を探しましたが

納得のいく代替え機能はなく

結局自分で実現しました


1. 環境構築前のVisual Studio CodeのPython開発環境のセットアップ

今回の記事を解説する前にVisual Studio Codeで

pythonを開発するための下準備をしておく必要があるので

説明しておきます


拡張機能のインストール

Visual Studio Codeにいくつか拡張機能を

インストールしておく必要があります

インストール済みだよ!って方はこの部分は読み飛ばしてください

インストールしておく拡張機能はこちら

  • python
  • jupyter

拡張機能のインストール画面

おへんじ
拡張機能は左側のバーにある四角いアイコンをクリックするとダウンロードページに移動できるよ


Pythonのversionの設定

VS CodeでPythonコードを実行するためには

ローカルまたはdocker等によりセットアップしている

Pythonのversionを選択しておきましょう

設定方法は以下のとおり

  • VS Codeの右下部に表示されている「Python」部分をクリックします
  • 利用可能なPythonのversion一覧が表示されるので、使用するversionを選択します
pythonはすでにローカルやdockerで構築してある
pythonのバージョンが表示されます

以上で下準備は完了です


2. デバック環境構築に必要な機能の紹介

Visual Studio CodeでHydrogenの代替え機能を実装するためには

いくつかの機能を組み合わせます

必要な機能をそれぞれ解説していきます


2-1. Python Interactive Windowsについて

Python Interactive WindowsはVisual Studio Codeの

拡張機能であるJupyterが提供する機能の1つです

機能は以下のとおり

  • 選択した部分のコードを実行できる
  • 関数やクラスなどの複数行選択して実行できる
  • コードを都度修正できるのでデバッグ作業が効率的になる
おへんじ
この機能を使用するためにjupyterをインストールしてるよー

hydrogenの機能を再現するにはぴったりの機能となっています


Python Interactive Windowsの使い方

Python Interactive Windowsの使い方は以下のとおり

  1. 適当なPythonファイルを開く
  2. 実行したいコードを選択
  3. Shift + Enterキーを押す

選択したコードがPython Interactive Windowsで実行されその結果が表示されます

vs codeの設定によってはShift + Enterではない可能性があります

ショートカットキーの割り当て方法については次で説明します

Python Interactive Windowsでは、コードの実行・保存・停止・再開などもできます


python Interactive Windowsのコマンドパレットからのショートカットキーの割り当て方法

今回の記事ではkeydindings.jsonファイルから直接ショートカットキーを
割り当てるため
コマンドパレットからのショートカットキーの割り当て手順は必要ありません(参考に書いておくだけです)

ショートカットキーの割り当ては2通りの方法があります

  1. コマンドパレットからショートカットキーを割り当てる
  2. keybindings.jsonファイルを直接編集する

①のコマンドパレットからショートカットキーを割り当てる方法が

スタンダードでほとんどはこの方法で行います

今回はマクロを使用するため②keybindings.jsonファイルを

直接編集する方法でショートカットキーを割り当てます(この方法は後ほど解説しています)

①のコマンドパレットからショートカットキーを

割り当てる方法についても説明しておきます

コマンドパレットからのショートカットキーの割り当て方法

手順は以下のとおり

  1. コマンドパレットを表示(mac:shift + command + p, windows: shift + ctrl + p)
  2. >run interactive window』で検索
  3. jupyter:対話型ウィンドウで選択範囲/行を実行』を選択
  4. 右側の設定⚙️マークをクリックして設定画面に移動
  5. 『+』マークを押してショートカットキー設定画面を表示
  6. 実際に使用したいコマンド押してをショートカットキーを設定する(Enterで確定)
おへんじ
コマンドパレットはvs codeでできる操作一覧を検索・実行できる便利な機能だよ
後ほどkeydindings.jsonファイルに直接ショートカットキーを割り当てるため
今回の記事ではこのショートカットキーの割り当ての手順は必要ありません


2-2. マクロについて

マクロとは複数の操作を1つのコマンドにまとめるための機能です

今回はマクロを使用して以下の2つの操作を合体させます

  • python Interactive Windowsを実行する機能
  • カーソルを1行下に移動する機能

このマクロの設定をすることで

python INteractive Windowsを実行すると

コード実行と同時にカーソルが1行下に移動するので

shift + Enter連打で連続でコードを実行できます


マクロの導入方法

まずはじめに、マクロ機能を使用するために

必要な拡張機能「macros」のインストール方法を説明します

インストール方法はjupyterやpythonと同様の方法でインストールしてください


settings.jsonとkeybindings.jsonの設定方法

次にマクロの定義とキーバインディング(ショートカットキー)の設定を行います

ここから少し難しい話がでてきますが頑張ってください

以下の2つファイルに設定を追記します

  1. settings.json(←マクロを設定)
  2. keybindings.json(←作成したマクロのショートカットキーを割り当てる)

settings.jsonの設定

  • コマンドパレットを開く(mac:shift + command + p, windows: shift + ctrl + p)
  • open user settings (json)」を検索して選択してsettings.jsonを開く
  • settings.jsonに以下の内容を追記します。

settings.jsonの設定前と設定後の内容はこちら

設定前


{
    "[python]": {
        "editor.formatOnType": true
    },
    "git.autofetch": true,
    "python.terminal.activateEnvironment": false,
    "window.zoomLevel": 1,
    "extensions.experimental.affinity": {
        "ms-toolsai.jupyter": 1,
        "ms-toolsai.jupyter-renderers": 1,
        "ms-python.python": 1,
        "ms-python.vscode-pylance": 1
    },
    "jupyter.interactiveWindow.textEditor.executeSelection": true,
    "macros": null
}

設定後


{
    "[python]": {
        "editor.formatOnType": true
    },
    "git.autofetch": true,
    "python.terminal.activateEnvironment": false,
    "window.zoomLevel": 1,
    "extensions.experimental.affinity": {
        "ms-toolsai.jupyter": 1,
        "ms-toolsai.jupyter-renderers": 1,
        "ms-python.python": 1,
        "ms-python.vscode-pylance": 1
    },
    "jupyter.interactiveWindow.textEditor.executeSelection": true,
    "macros": {
        "jupyterExeSelThenCursorDown": [
            "jupyter.execSelectionInteractive",
            "cursorDown"
        ]
    }
}

設定前後で変えたところを抜粋すると・・・

設定前


    "macros": null

設定後


    "macros": {
        "jupyterExeSelThenCursorDown": [
            "jupyter.execSelectionInteractive",
            "cursorDown"
        ]
    }

nullの部分を変更しています

今回変更していない部分はvscodeの設定次第で異なる場合があります

この設定で”jupyterExeSelThenCursorDown”という名前のマクロが定義され

「コードの実行」「カーソルの下移動」の2つの機能が割り当てられます。

おへんじ
マクロの名前は任意だから好きな名前をつけてね

keybindings.jsonの設定

  • コマンドパレットを開く(mac:shift + command + p, windows: shift + ctrl + p)
  • Open Keyboard Shortcuts (JSON)」を検索して選択してkeybindings.jsonを開く
  • keybindings.jsonに以下の内容を追記します

keybindings.jsonの設定前と設定後の内容はこちら

設定前

// 既定値を上書きするには、このファイル内にキー バインドを挿入しますauto[]
[
    {
        "key": "ctrl+shift+w",
        "command": "debug.jumpToCursor"
    },
    {
        "key": "shift+cmd+f9",
        "command": "workbench.debug.viewlet.action.removeAllBreakpoints"
    },
    {
        "key": "shift+space",
        "command": "jupyter.runFileInteractive"
    },
    {
        "key": "shift+alt+enter",
        "command": "python.execSelectionInTerminal",
        "when": "editorTextFocus && !findInputFocussed && !jupyter.ownsSelection && !notebookEditorFocused && !replaceInputFocussed && editorLangId == 'python'"
    },
    {
        "key": "alt+cmd+'",
        "command": "workbench.action.moveActiveEditorGroupRight"
    },
    {
        "key": "cmd+k right",
        "command": "-workbench.action.moveActiveEditorGroupRight"
    },
    {
        "key": "alt+cmd+;",
        "command": "workbench.action.moveActiveEditorGroupLeft"
    },
    {
        "key": "cmd+k left",
        "command": "-workbench.action.moveActiveEditorGroupLeft"
    }
]

設定後

// 既定値を上書きするには、このファイル内にキー バインドを挿入しますauto[]
[
    {
        "key": "ctrl+shift+w",
        "command": "debug.jumpToCursor"
    },
    {
        "key": "shift+cmd+f9",
        "command": "workbench.debug.viewlet.action.removeAllBreakpoints"
    },
    {
        "key": "shift+space",
        "command": "jupyter.runFileInteractive"
    },
    {
        "key": "shift+alt+enter",
        "command": "python.execSelectionInTerminal",
        "when": "editorTextFocus && !findInputFocussed && !jupyter.ownsSelection && !notebookEditorFocused && !replaceInputFocussed && editorLangId == 'python'"
    },
    {
        "key": "alt+cmd+'",
        "command": "workbench.action.moveActiveEditorGroupRight"
    },
    {
        "key": "cmd+k right",
        "command": "-workbench.action.moveActiveEditorGroupRight"
    },
    {
        "key": "alt+cmd+;",
        "command": "workbench.action.moveActiveEditorGroupLeft"
    },
    {
        "key": "cmd+k left",
        "command": "-workbench.action.moveActiveEditorGroupLeft"
    },
    {
        "key": "shift+enter",
        "command": "macros.jupyterExeSelThenCursorDown",
        "when": "editorTextFocus && isWorkspaceTrusted && jupyter.ownsSelection && !findInputFocussed && !notebookEditorFocused && !replaceInputFocussed && editorLangId  'python'"
    }
]

設定前後で最後の行に以下の文を追記しています


    {
        "key": "shift+enter",
        "command": "macros.jupyterExeSelThenCursorDown",
        "when": "editorTextFocus && isWorkspaceTrusted && jupyter.ownsSelection && !findInputFocussed && !notebookEditorFocused && !replaceInputFocussed && editorLangId  'python'"
    }

おへんじ
追加するときに頭に” , “(カンマ)をつけるのを忘れないでね

この設定により、shift + enterが押されたときにsettings.jsonに追加した

jupyterExeSelThenCursorDown(任意)という名前のマクロが実行され

python Interactive Windowsが起動して実行されカーソルが1行下へ移動します

実行するマクロは起動に条件をつけています

起動条件は以下のとおり設定しています

以下の起動条件を全て満たしている場合にマクロが起動します

  1. editorTextFocus: エディターのテキストを編集可能な状態のとき
  2. isWorkspaceTrusted: 現在のワークスペースが信頼されているとき(VS Codeのセキュリティ設定により設定可能)
  3. jupyter.ownsSelection: 現在選択されているテキストがJupyterのコードセルによって制御されているとき
  4. !findInputFocussed: 検索入力欄にフォーカスがないとき
  5. !notebookEditorFocused: ノートブックエディター(Jupyter notebookなど)にフォーカスがないとき
  6. !replaceInputFocussed: 置換入力欄にフォーカスがないとき
  7. editorLangId == ‘python’: 現在のエディターがPythonのコードを編集しているとき

以上がマクロの導入方法と設定方法になります

これにより、Pythonのコードを実行してカーソルを下に移動するという操作を

shift + Enterの一つのキーバインディングにまとめることができました

これにより、VS CodeでHydrogenと同等の機能を実装できました


3. 設定後の挙動と出力の設定について

設定後の使い方を動画にしておきます

基本的には実行したい行を選択してshift + Enterです

関数やクラスなどは複数行を選択する必要があります

私の場合vimを使用していますが

vimを使用していない場合はshiftを押しながらカーソルを

移動することで選択することができます

おへんじくん
vimをおすすめだよー

出力行の設定について

最後にpython interactive windowの出力についての設定方法を説明しておきます

出力される行数が多い場合に一部が省略されたり

出力結果を表示する行数を多くしたいなー

なんてときがあると思います

設定方法はこちらです

  1. 設定画面へ移動(mac: command + ,(カンマ))
  2. 設置検索画面に『notebook output textline limit』と記載して検索
  3. Notebook > Output: Text Line Limit の設定項目の数字を出力結果で表示したい行数に変更
  4. 一度再起動する

Output: Text Line Limit 30の場合

Output: Text Line Limit 50の場合

こんな感じで出力できる行数を変更することができます

出力結果が長くて省略されてしまう場合は

output scrollingの項目にチェックを入れます

設定方法は以下のとおり・・・

  1. 設定画面へ移動(mac: command + ,(カンマ))
  2. 設置検索画面に『notebook output scrolling』と記載して検索
  3. Notebook > Output: Scrolling の設定項目にチェックを入れる

この設定を行うことで出力結果が省略されずに出力されて

スクロールすることで全ての出力結果を確認することができます

設定は以上です

これで最大限atomのhydrogenの機能を再現できたのではないかと思います

考え抜いた結果この結論に至りました

もっといい方法を知っている方はぜひ教えていただけると喜びます


4. まとめ

  • python, jupyter, macrosのインストール
  • python Interactive Windowsのショートカットキーの割り当て
  • settings.json, keybindings.jsonの設定

以上がVS CodeでHydrogenと同等の機能を実現する方法のまとめです

これからもVS codeを使った便利な開発環境の構築方法や

拡張機能があれば記事にしていきますので

参考にしてみてください

おつかれさまでした

最新情報をチェックしよう!