VSCodeで定義や参照先へジャンプする方法

採用はこちら

VSCode(Visual Studio Code)には、関数・変数・クラス・メソッドなどの定義元や参照先へ素早く移動できるコードナビゲーション機能があります。

大規模なプロジェクトでは、エクスプローラーからファイルを1つずつ探すよりも、定義や参照先へ直接ジャンプしたほうが効率的にコードを読み進められます。

特に覚えておきたいのは、「定義へ移動」「参照を表示」「定義をPeek表示」「実装へ移動」の4つです。

ただし、これらの機能は使用しているプログラミング言語やLanguage Server、拡張機能の対応状況によって利用できる範囲が異なります。

目次

VSCodeで定義元へジャンプする方法

F12で定義へ移動する

VSCodeで最も基本的なコードナビゲーション機能が「Go to Definition(定義へ移動)」です。

調べたい関数名や変数名、クラス名などにカーソルを合わせて、

F12

を押します。

例えば、JavaScriptで次のようなコードがあるとします。

function calculateTotal(price, quantity) {
    return price * quantity;
}

const total = calculateTotal(1000, 3);

下側のcalculateTotalにカーソルを合わせてF12を押すと、

function calculateTotal(price, quantity) {

という定義部分へジャンプできます。

関数の処理内容を確認したい場合や、クラスがどこで定義されているのか調べたい場合に便利です。

Ctrl+クリックでも定義へ移動できる

マウスを使って定義へ移動することもできます。

WindowsやLinuxでは、

Ctrl + クリック

macOSでは、

Cmd + クリック

を使用します。

シンボルにカーソルを合わせながら修飾キーを押すとリンクのように表示され、そのままクリックすると定義元へ移動できます。

キーボード操作に慣れていない場合は、まずこの方法から使い始めてもよいでしょう。

右クリックメニューから定義へ移動する

ショートカットを覚えていなくても、右クリックメニューから定義へ移動できます。

関数名やクラス名などを右クリックし、

Go to Definition

または日本語表示の場合は「定義へ移動」に相当する項目を選択します。

ショートカットを忘れた場合にも使いやすい方法です。

定義を移動せずに確認する方法

Peek Definitionを使う

定義元の内容を少し確認したいだけの場合、毎回別ファイルへ移動すると作業の流れが途切れやすくなります。

そのような場合は「Peek Definition」を使うと便利です。

Windowsでは、

Alt + F12

を使用します。

macOSでは、

Option + F12

Linuxではデフォルト設定で、

Ctrl + Shift + F10

が使われます。

Peek Definitionを実行すると、現在のエディター内に小さなウィンドウが表示され、定義内容をその場で確認できます。

定義へ移動とPeek Definitionの違い

「Go to Definition」と「Peek Definition」は似ていますが、用途が異なります。

Go to Definitionは定義元へ直接移動します。

一方、Peek Definitionは現在の画面を大きく離れずに、定義内容だけを確認できます。

処理内容を少し見るだけならPeek Definition、定義側のコードを編集したい場合はGo to Definitionという使い分けが便利です。

VSCodeで参照先を確認する方法

Shift+F12で参照を表示する

関数や変数がどこで使われているのか確認したい場合は「Go to References」を使用します。

対象のシンボルにカーソルを合わせて、

Shift + F12

を押します。

例えば、次のようなコードがあるとします。

function calculateTotal(price, quantity) {
    return price * quantity;
}

const total1 = calculateTotal(1000, 3);
const total2 = calculateTotal(500, 5);
const total3 = calculateTotal(2000, 2);

calculateTotalにカーソルを合わせてShift + F12を押すと、その関数が使われている場所を一覧で確認できます。

「参照へ移動」ではなく「参照を表示」と考える

Shift + F12は、1か所の参照先へ直接ジャンプする機能というより、対象シンボルがどこで使用されているかを一覧表示する機能です。

そのため、「参照へ移動」というよりも「参照を表示する」「参照箇所を検索する」と理解したほうが実際の動作に近いでしょう。

関数を修正する前に参照箇所を確認しておけば、変更による影響範囲も把握しやすくなります。

実装先へジャンプする方法

Ctrl+F12で実装へ移動する

インターフェースや抽象メソッドの具体的な実装先を確認したい場合は「Go to Implementation」を使用します。

WindowsやLinuxでは、

Ctrl + F12

macOSでは、

Cmd + F12

を使用します。

例えばTypeScriptで、

interface UserRepository {
    findUser(id: number): User;
}

というインターフェースがあり、

class DatabaseUserRepository implements UserRepository {
    findUser(id: number): User {
        // データベースから取得
    }
}

という実装があるとします。

UserRepositoryや対象メソッドからGo to Implementationを実行すると、具体的な実装先を確認できます。

インターフェースを多用するTypeScriptやJava、C#などでは特に便利です。

型定義へジャンプする方法

Go to Type Definitionを使う

変数そのものの定義ではなく、その変数がどの型として定義されているか確認したい場合は「Go to Type Definition」を使用します。

例えばTypeScriptで、

const user = getUser();

というコードがあり、userの型が、

interface User {
    id: number;
    name: string;
}

だった場合、Go to Type Definitionを使うことでUser型の定義へ移動できます。

標準では専用ショートカットが割り当てられていないため、右クリックメニューやコマンドパレットから実行する方法が分かりやすいでしょう。

必要であれば、Keyboard Shortcutsから自分でショートカットを設定することもできます。

定義と宣言の違いにも注意する

Go to DefinitionとGo to Declarationは別の機能

プログラミング言語によっては、「定義」と「宣言」が別々に存在します。

例えばC++では、

int calculate(int a, int b);

が宣言で、

int calculate(int a, int b) {
    return a + b;
}

が定義です。

VSCodeや対応拡張機能では、「Go to Definition」と「Go to Declaration」が別々の機能として用意されている場合があります。

特にCやC++などを扱う場合は、定義と宣言の違いも理解しておくとコードを追いやすくなります。

ジャンプしたあと元の場所へ戻る方法

WindowsではAlt+←で戻れる

定義へ何度もジャンプしていると、元のコードへ戻りたくなることがあります。

Windowsでは、

Alt + ←

で前の場所へ戻れます。

反対に、

Alt + →

で次の位置へ進めます。

例えば、

main.js
↓
service.js
↓
repository.js

と移動した場合、Alt + ←を押すことで、1つ前の位置へ順番に戻れます。

F12とAlt + ←はセットで覚えておくと非常に便利です。

Linuxではショートカットが異なる

Linuxでは、ナビゲーション履歴の標準ショートカットがWindowsと異なります。

そのため、記事やマニュアルを見る際は、使用しているOSのショートカットを確認することが重要です。

VSCodeのショートカットは設定から変更できるため、自分が使いやすいキーに割り当てる方法もあります。

ファイル内の関数やクラスへジャンプする方法

Ctrl+Shift+Oでファイル内シンボルを検索する

現在開いているファイルの中から関数、クラス、メソッドなどを探したい場合は「Go to Symbol in File」を使用します。

WindowsやLinuxでは、

Ctrl + Shift + O

macOSでは、

Cmd + Shift + O

です。

例えば、数千行あるソースコードでも、検索欄に関数名を入力すれば目的のシンボルへすぐ移動できます。

「:」でシンボルを種類ごとに整理できる

Go to Symbolを開いたあと、

:

を入力すると、クラスやメソッドなどの種類ごとにシンボルをグループ化して確認できます。

大きなファイルの構造を把握したい場合にも役立ちます。

プロジェクト全体からシンボルを探す方法

Ctrl+Tでワークスペース内を検索する

現在のファイルだけではなく、プロジェクト全体から関数やクラスを検索したい場合は「Go to Symbol in Workspace」を利用できます。

WindowsやLinuxでは、

Ctrl + T

macOSでは、

Cmd + T

です。

例えば、UserControllerというクラスがどのファイルにあるか分からない場合でも、Ctrl + Tを押してクラス名を入力すれば検索できます。

ただし、この機能も使用している言語やLanguage Serverがワークスペース内シンボル検索に対応している必要があります。

コマンドパレットからジャンプ機能を実行する方法

Ctrl+Shift+Pでコマンドを検索する

ショートカットを忘れた場合は、コマンドパレットから各機能を実行できます。

WindowsやLinuxでは、

Ctrl + Shift + P

macOSでは、

Cmd + Shift + P

を押します。

コマンドパレットを開いたら、例えば次のようなコマンドを検索できます。

Go to Definition
Go to References
Go to Implementation
Go to Type Definition

日本語表示のVSCodeでは、日本語に翻訳されたコマンド名が表示される場合があります。

ショートカットを覚えていない段階では、コマンドパレットから検索する方法も便利です。

VSCodeで定義へジャンプできない原因

対象言語がコードナビゲーションに対応していない

VSCodeの定義ジャンプは、単純な文字列検索で動作しているわけではありません。

使用しているプログラミング言語のLanguage ServiceやLanguage Server、拡張機能などがソースコードを解析し、その解析結果をもとに定義や参照先を特定します。

そのため、使用している言語がコードナビゲーションに対応していなければ、F12を押しても定義へジャンプできない場合があります。

必要な拡張機能が入っていない

言語によっては、VSCodeに拡張機能を追加する必要があります。

代表的な例としては、Python、C/C++、Java、Go、Rustなどがあります。

一方、JavaScriptやTypeScriptについては、VSCodeに標準搭載されている言語機能を利用できます。

定義ジャンプが動作しない場合は、まず対象言語に必要な拡張機能が導入されているか確認するとよいでしょう。

ファイル単体ではなくプロジェクトフォルダーを開く

複数ファイルにまたがるプロジェクトでは、ファイルを1つだけ開くのではなく、プロジェクトのルートフォルダーをVSCodeで開くほうが適切です。

単一ファイルでも定義ジャンプできる場合はありますが、複数ファイル間の依存関係やインポート関係を正しく解析するには、プロジェクト全体をワークスペースとして開いたほうが安定します。

プロジェクト設定を確認する

言語によっては、プロジェクト設定ファイルがコード解析に影響します。

例えば、

tsconfig.json
jsconfig.json
pom.xml
build.gradle
CMakeLists.txt

などです。

TypeScriptの場合、対象ファイルがtsconfig.jsonの解析対象から外れていると、期待どおりに定義や参照先を検索できない場合があります。

インポートエラーを確認する

例えば、

import { calculateTotal } from "./utils";

というコードがあり、"./utils"が正しく解決できていなければ、calculateTotalの定義元も正常に特定できない場合があります。

エディター上に赤い波線やエラーメッセージが表示されていないか確認しましょう。

Language Serverの解析が終わっていない

大規模なプロジェクトを開いた直後は、Language Serverや言語サービスがソースコードを解析している場合があります。

解析が完了する前は、一時的に定義や参照先が見つからないことがあります。

プロジェクトを開いた直後だけ動作しない場合は、解析の完了後にもう一度試すと改善することがあります。

ショートカットを変更する方法

Keyboard Shortcutsから変更できる

標準ショートカットが使いにくい場合は、自分好みに変更できます。

WindowsやLinuxでは、

Ctrl + K
Ctrl + S

の順番でキーを押すと、Keyboard Shortcutsを開けます。

これは同時押しではなく、

Ctrl + K

を押したあとに、

Ctrl + S

を押す連続入力形式のショートカットです。

検索欄から、

Go to Definition
Go to References
Go to Implementation

などを検索し、自分が使いやすいキーに変更できます。

VSCodeで覚えておきたいジャンプ系ショートカット

Windowsでよく使うショートカット

Windowsを中心に、特に利用頻度の高いものをまとめると次のとおりです。

操作ショートカット用途
定義へ移動F12関数・変数・クラスなどの定義元を開く
定義をPeek表示Alt + F12現在の画面内で定義を確認する
定義を横に開くCtrl + K → F12定義を横のエディターに表示する
参照を表示Shift + F12シンボルが使用されている場所を確認する
実装へ移動Ctrl + F12インターフェースなどの実装を確認する
ファイル内シンボルCtrl + Shift + O現在のファイル内から関数やクラスを探す
ワークスペース内シンボルCtrl + Tプロジェクト全体からシンボルを検索する
前の位置へ戻るAlt + ←ジャンプ前の場所へ戻る
次の位置へ進むAlt + →戻る前の場所へ進む
シンボル名を変更F2対応言語でシンボルをリネームする

OSによって標準ショートカットが異なる場合があるため、macOSやLinuxを使用している場合はKeyboard Shortcutsから現在の設定を確認すると確実です。

VSCodeでは定義・参照・実装を使い分けることが重要

定義は「どこで作られているか」を調べる

定義へ移動したい場合は、

F12

を使用します。

「この関数はどこで定義されているのか」「このクラスの中身を確認したい」といった場合に使用します。

参照は「どこで使われているか」を調べる

参照箇所を調べたい場合は、

Shift + F12

を使用します。

「この関数を呼び出している場所はどこか」「この変数はどこから使われているのか」といった確認に向いています。

実装は「具体的にどこで処理されているか」を調べる

インターフェースや抽象メソッドの具体的な実装を確認する場合は、

Ctrl + F12

を使用します。

定義、参照、実装の違いを理解しておくと、複雑なコードでも構造を追いやすくなります。

VSCodeではF12とShift+F12から覚えるのがおすすめ

VSCodeのコードナビゲーション機能をすべて一度に覚える必要はありません。

まずは、

F12
→ 定義を確認

Shift + F12
→ 参照箇所を確認

Alt + ←
→ 元の場所へ戻る

という3つを覚えるだけでも、コードを読む効率は大きく向上します。

慣れてきたら、

Alt + F12
→ 定義をその場で確認

Ctrl + F12
→ 実装を確認

Ctrl + Shift + O
→ 現在のファイル内を検索

Ctrl + T
→ プロジェクト全体からシンボルを検索

といった機能も使ってみるとよいでしょう。

特に規模の大きなプロジェクトや他人が書いたコードを読む場合は、「F12で定義を確認する」「Shift + F12で参照箇所を確認する」「戻る操作で元のコードへ戻る」という流れを使いこなすことで、ソースコードを効率的に追えるようになります。

以上、VSCodeで定義や参照先へジャンプする方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次