Javaソースコードのナビゲーションと編集
Visual Studio Codeは、何よりもまず、豊富な編集機能を備えたソースコードエディターです。このドキュメントでは、Javaでの作業に役立つ、いくつかのJava固有の機能について説明します。
以下の機能を使用している際に問題が発生した場合は、issueを送信して私たちに連絡してください。
コード ナビゲーション
アウトラインビューを使用すると、現在のファイル内のメンバーを簡単にナビゲートできます。プロジェクトビューも、プロジェクトの全体像を把握するのに最適です。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) を押します。または、コンテキストメニューから 定義をここに表示 を選択することもできます (右クリックして 定義をここに表示 を選択)。
定義へ移動
また、「定義へ移動 (Go to Definition)」機能を使用すると、シンボルが定義されている場所にすばやく移動できます。
シンボルの定義へ移動するには、ソースコード内のそのシンボルが使用されている任意の場所にカーソルを置き、F12 を押します。または、コンテキストメニューから 定義へ移動 (Go to Definition) を選択することもできます (右クリックして 定義へ移動 を選択)。シンボルの定義が1つしかない場合は、その場所に直接移動します。そうでない場合は、前のセクションで説明したように、競合する定義がピークウィンドウに表示されるため、移動先の定義を選択する必要があります。
スーパークラスの実装に移動 (Go to Super Implementation)
ホバー時に表示される Go to Super Implementation リンクをクリックすることで、クラスの実装やオーバーライドされたメソッドを追跡できます。

呼び出し階層 (Call Hierarchy)
「呼び出し階層 (Call Hierarchy)」ビューには、関数からの呼び出しまたは関数へのすべての呼び出しが表示され、呼び出し元の呼び出し元や呼び出し先の呼び出し先まで掘り下げることができます。関数を右クリックし、覗き見 (Peek) > 呼び出し階層のぞき見 (Peek Call Hierarchy) を選択します。

また、関数本体を右クリックして 呼び出し階層の表示 (Show Call Hierarchy) を選択することもできます。

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

Javaのセマンティック ハイライトの詳細については、Java Language Support拡張機能のWikiを参照してください。
Spring Bootによるコードのナビゲーション
Spring Boot Tools拡張機能は、Spring Bootプロジェクトの高度なナビゲーションとコード補完サポートを提供します。
@/は、定義されているすべての要求マッピング (マッピングされたパス、要求メソッド、ソースの場所) を表示します。@+は、定義されているすべてのBean (Bean名、Bean型、ソースの場所) を表示します。@>は、すべての関数 (プロトタイプ実装) を表示します。@は、コード内のすべてのSpringアノテーションを表示します。

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

ショートカットの完全なリストを以下に示します
コードスニペットのショートカット
| ショートカットキー | 説明 |
|---|---|
| ctor | パブリック コンストラクター |
| dowhile | do-while 文 |
| foreach, iter | 配列またはIterableの反復 |
| fori | 配列の反復 |
| if | if 文 |
| ifelse | if-else 文 |
| ifnull | nullをチェックするif文 |
| ifnotnull | not nullをチェックするif文 |
| main, psvm | public static main メソッド |
| new | 新しいオブジェクトの作成 |
| private_method | private メソッド |
| private_static_method | private static メソッド |
| prf | private フィールド |
| protected_method | protected メソッド |
| public_method | public メソッド |
| public_static_method | public static メソッド |
| switch | switch 文 |
| syserr, serr | 標準エラー出力への出力 |
| sysout, sout | 標準出力への出力 |
| systrace, soutm | 現在のメソッド名を標準出力に出力 |
| try_catch | try/catch ブロック |
| try_resources | try-with-resources 文 |
| while | while 文 |
接尾辞 (Postfix) スニペットのショートカット
| ショートカットキー | テンプレートの内容 | 説明 |
|---|---|---|
| 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ループを作成します |