Javaソースコードのナビゲーションと編集
Visual Studio Codeは、豊富な編集機能を備えたソースコードエディターです。このドキュメントでは、Javaの作業に役立ついくつかのJava固有の機能について説明します。
以下の機能の使用中に問題が発生した場合は、イシューを登録してご連絡ください。
コード ナビゲーション
アウトラインビューを使用すると、現在のファイル内のメンバーを簡単にナビゲートできます。プロジェクトビューもプロジェクトの概要を把握するのに役立ちます。Javaエディターとして、コール階層、型階層、定義ナビゲーション、ワークスペース内の型の検索などもサポートしています。
シンボルの検索
現在のファイルまたはワークスペースでシンボルを検索して、コードをより迅速にナビゲートできます。
ワークスペース内のシンボルの検索
現在のワークスペースでシンボルを検索するには、⌘T (Windows、Linux Ctrl+T) を押してから、シンボルの名前を入力します。以前と同様に、一致する可能性のあるリストが表示されます。まだ開いていないファイルで見つかった一致を選択すると、一致の場所に移動する前にファイルが開かれます。または、クイックオープン (⌘P (Windows、Linux Ctrl+P)) を使用して、'#' コマンドを入力して現在のワークスペースを検索することもできます。⌘T (Windows、Linux Ctrl+T) は '#' コマンドのショートカットなので、すべて同じように機能します。
現在のファイルでシンボルを検索
現在のファイルでシンボルを検索するには、クイックオープン (⌘P (Windows、Linux Ctrl+P)) を使用して、'@' コマンドを入力し、探しているシンボルの名前を入力します。一致する可能性のあるリストが表示され、入力するとフィルタリングされます。一致するリストから選択して、その場所に移動します。
定義をピーク
Peek Definition機能を使用すると、シンボルがどのように定義されているかをすばやく確認できます。この機能は、定義の近くにある数行のコードをピークウィンドウ内に表示するため、現在の場所から移動せずに確認できます。
シンボルの定義をピークするには、ソースコード内のシンボルが使用されている任意の場所にカーソルを置き、⌥F12 (Windows Alt+F12, Linux Ctrl+Shift+F10) を押します。または、コンテキストメニューから Peek Definition を選択することもできます(右クリックし、Peek Definition を選択)。
定義へ移動
Go to Definition機能を使用すると、シンボルが定義されている場所にすばやく移動することもできます。
シンボルの定義に移動するには、ソースコード内でシンボルが使用されている任意の場所にカーソルを置き、F12 を押します。または、コンテキストメニューから Go to Definition を選択することもできます(右クリックし、Go to Definition を選択)。シンボルの定義が1つしかない場合は、その場所に直接移動します。それ以外の場合は、競合する定義が前のセクションで説明したピークウィンドウに表示され、移動したい定義を選択する必要があります。
スーパースーパー実装へ移動
ホバー時に Go to Super Implementation リンクをクリックすると、クラスの実装とオーバーライドメソッドを追跡できます。

コール階層
コール階層ビューには、関数からの、または関数へのすべての呼び出しが表示され、呼び出し元の呼び出し元や呼び出しの呼び出しをドリルダウンできます。関数を右クリックし、Peek > Peek Call Hierarchy を選択します。

関数本体を右クリックして Show Call Hierarchy を選択することもできます。

型階層
型階層ビューには、Javaオブジェクト間の継承関係が表示されます。型を右クリックし、Show Type Hierarchy を選択できます。
領域の折りたたみ
領域の折りたたみにより、コードスニペットを折りたたんだり展開したりして、ソースコードを見やすくすることができます。
スマートセレクション
スマートセレクション(セマンティックセレクション)を使用すると、ソースコード内のキャレット位置のセマンティック情報に基づいて選択範囲を拡大または縮小できます。
- 選択範囲を拡大するには、⌃⇧⌘→ (Windows、Linux Shift+Alt+Right) を使用します。
- 選択範囲を縮小するには、⌃⇧⌘← (Windows、Linux Shift+Alt+Left) を使用します。
セマンティックハイライト
構文ハイライトは、コードをより効率的に読むための重要な機能です。セマンティックハイライトの助けを借りて、VS CodeはJava言語サービスからのシンボル情報に基づいて、より正確なソースコードの色付けを提供できます。
以下はその一例で、左はセマンティックハイライトを有効にした後の動作、右は構文ハイライトのみの動作です。

Javaセマンティックハイライトの詳細については、Java言語サポート拡張機能のwikiで学ぶことができます。
Spring Bootを使用したコードナビゲーション
Spring Boot Tools拡張機能は、Spring Bootプロジェクト向けの強化されたナビゲーションとコード補完サポートを提供します。
@/は、定義されているすべてのリクエストマッピングを表示します(マッピングされたパス、リクエストメソッド、ソースロケーション)。@+は、定義されているすべてのBeanを表示します(Bean名、Bean型、ソースロケーション)。@>は、すべての関数を表示します(プロトタイプ実装)。@は、コード内のすべてのSpringアノテーションを表示します。

Visual Studio CodeでのSpring Bootサポートの詳細については、Visual Studio CodeでのSpring Bootを参照してください。
コード編集
コードの編集も、スマートなコード補完とシグネチャの詳細のためのIntelliSenseで簡単です。コードスニペットや、Getters/Settersの生成、インポートの整理などのさまざまなコードアクションを使用して、生産性をさらに向上させることができます。
Visual Studio CodeのJavaサポートは、コード内の問題を自動的に検出し、Quick Fixの提案を提供します。
リファクタリングとコードアクションの詳細については、リファクタリングとソースアクションを参照してください。
IntelliSense
Visual Studio Code for Javaのコード補完は、Language Support for Java™ by Red Hatによって提供されます。この拡張機能は、Eclipseの背後にある同じJava開発ツール (JDT)を搭載しているため、同レベルのサポートが期待できます。
さらに、IntelliCodeと呼ばれるAI支援IntelliSenseもあります。これは、最も使用する可能性の高いものを補完リストの最上位に配置することで、時間を節約します。IntelliCodeの推奨事項は、100以上のスターを持つGitHub上の数千のオープンソースプロジェクトに基づいており、高品質のプロジェクトの最も一般的な使用方法でトレーニングされています。コードのコンテキストと組み合わせることで、補完リストはそれらのプラクティスを促進するように調整されます。Java用IntelliCodeの動作はこちらです。
IntelliCodeは、Java SEやSpringなどの一般的なJavaライブラリやフレームワークとうまく連携します。モノリシックなWebアプリを作成する場合でも、最新のマイクロサービスを作成する場合でも役立ちます。
新しいファイルの作成
VS Codeは、Javaソースファイルを作成する際にテンプレートを適用するのをサポートしています。ファイルエクスプローラーで.javaファイルを作成すると、言語サーバーは自動的にクラス本体を生成し、パッケージ情報を入力します。
コードスニペット
Visual Studio Codeは、class/interface、syserr、sysout、if/else、try/catch、static main methodなど、生産性を向上させるための幅広い人気のJavaコードスニペットをサポートしています。Java言語サーバーからの情報を使用して、選択中にコードスニペットのプレビューも提供します。
例えば、「sout」または「sysout」と入力すると、System.out.println()のコードスニペットが生成されます。
同様に、「main」または「psvm」と入力すると、public static void main(String[] args) {}のコードスニペットが生成されます。

ショートカットの完全なリストは以下の通りです。
コードスニペットのショートカット
| ショートカットキー | description |
|---|---|
| ctor | パブリックコンストラクタ |
| dowhile | Do-while文 |
| foreach, iter | 配列またはIterableを反復処理する |
| fori | 配列を反復処理する |
| if | If文 |
| ifelse | If-else文 |
| ifnull | nullをチェックするIf文 |
| ifnotnull | nullではないことをチェックするIf文 |
| main, psvm | Public static mainメソッド |
| new | 新しいオブジェクトを作成 |
| private_method | プライベートメソッド |
| private_static_method | プライベート静的メソッド |
| prf | プライベートフィールド |
| protected_method | プロテクテッドメソッド |
| public_method | パブリックメソッド |
| public_static_method | パブリック静的メソッド |
| switch | Switch文 |
| syserr, serr | 標準エラー出力に表示 |
| sysout, sout | 標準出力に表示 |
| systrace, soutm | 現在のメソッドを標準出力に表示 |
| try_catch | Try/catchブロック |
| try_resources | Try-with-resources文 |
| while | While文 |
接尾辞スニペットショートカット
| ショートカットキー | テンプレートコンテンツ | description |
|---|---|---|
| cast | ((SomeType) expr) | 式を新しい型にキャストする |
| else | if (!expr) | 否定のif文を作成する |
| for | for (T item : expr) | for文を作成する |
| fori | for (int i = 0; i < expr.length; i++) | 配列を反復処理するfor文を作成する |
| forr | for (int i = expr.length-1; i >= 0; i--) | 配列を逆順に反復処理するfor文を作成する |
| if | if (expr) | if文を作成する |
| nnull | if (expr != null) | 式がnullに解決されないかをチェックするif文を作成する |
| null | if (expr == null) | 式がnullに解決されるかをチェックするif文を作成する |
| sysout | System.out.println(expr) | 影響を受けた文字列をSystem.out.println(..)呼び出しに送信する |
| throw | throw expr | 指定された例外をスローする |
| var | T name = expr | 新しい変数を作成する |
| while | while (expr) {} | whileループを作成する |