無償のコードエディタVSCode、実行中のJavaアプリのコードを動的に書き換えて修正できる「Hot Code Replacement」(ホットコード置換)を実現

2018年2月5日

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

あわせて読みたい

プログラミング言語 Visual Studio




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本