無償のコードエディタVSCode、実行中のJavaアプリのコードを動的に書き換えて修正できる「Hot Code Replacement」(ホットコード置換)を実現
VSCodeで、JavaのHot Code Replacement(ホットコード置換)がサポートされた。ホットコード置換を用いると実行中のアプリケーションのコードを実行したまま動的に修正できるため、トライアンドエラーが容易になる。
アプリケーションのコードを修正した場合、その修正を反映させるためには、コンパイル型の言語であれば再コンパイルする必要があり、インタープリタ型の言語であればアプリケーションの再実行が必要となります。
しかしコードを書き換え、実行し、動作を確認するということを何度も繰り返す開発作業では、いちいち再コンパイルをしたり、再実行する手間はなんとも面倒です。
そこでJavaには、「Hot Code Replacement」(ホットコード置換)と呼ばれる機能が用意されています。これはコードを再コンパイルすることなく変更した内容をJavaVMに転送し、反映できるというものです。
アプリケーションが実行中であっても修正内容が動的に反映できます。再コンパイルどころかアプリケーションの再スタートも必要ありません。
(追記 2018/2/7 実際にはHot Code Replacementはクラスファイルを入れ替えるもので再コンパイルも必要でした。上記の「再コンパイルすることなく」などの表現は誤りでした。お詫びして訂正します。Eclipseでは自動的に再コンパイルし、ファイルをJavaVMに転送することで下記のデモのような動的な変更を実現しています)
例えば、実行中のアプリケーションにループのコードがあったとして、ループカウンタの増分を変更するとアプリケーションに動的に反映されて、ループが早く終了する、といったことが可能になります。
下記はJavaのHot Code Replacementを紹介する動画です。ゲームを実行したままスペースインベーダーの動きを制御するコードを書き換えており、書き換えるたびに実行中の画面内のインベーダーが下がったり上がったりする様子を見ることができます。
Java HCR - In Game from CodeSlayer on Vimeo.
Visual Studo Codeがホットコード置換に対応
ホットコード置換は、Java開発環境として知られるEclipseでは以前から対応していましたが、その機能がマイクロソフトがオープンソースで開発しているVisual Studio Code(以下VSCode)にも搭載されたことが、Visual Studio Blogの記事「Hot Code Replacement for Java comes to Visual Studio Code | The Visual Studio Blog」で紹介されました。
With this new feature in Visual Studio Code (VS Code), you can start a debugging session and change a Java file in your development environment, and the debugger will replace the code in the JVM running your code. This is the faster and easier way in Java to facilitate experimental development and to foster iterative trial-and-error coding.
Visual Studio Code(VS Code)のこの新機能を使うことで、デバッギングセッションを開始し、開発環境でJavaファイルを書き換えると、デバッガはJVMで実行されているあなたのコードを置き換えてくれる。これは実験的な開発やトライアンドラーを繰り返す開発を発展させていく、迅速かつ容易な手段だ。
最新のVSCodeでは、そのほかにもJavaの単体テストのためのフレームワーク「JUnit」サポート機能やTomcat対応、Maven対応の強化なども盛り込まれており、Javaの開発環境が強化されています。
参考:Visual Studio CodeがJUnitに対応。エディタ上で単体テストの実行、テストのデバッグなどが可能に
参考:Visual Studioを、VSCodeのコード補完や文法チェックを実現するLanguage Server Protocol対応にする拡張機能が登場
参考:[速報]「Visual Studio Live Share」発表。複数のプログラマがリアルタイムにコードの編集、ブレークポイント、デバッガ操作などを共有。Connect(); 2017
あわせて読みたい
Mac版OfficeがWindows版とソースコード一本化/脆弱性対策でAzureの計画メンテを前倒し/WSLがLinuxのdaemonもサポート、ほか。2018年1月の人気記事
≪前の記事
デルの再上場もしくはVMwareとの合併、デルが正式に検討中と認める。米証券取引委員会へ提出した書類で