ツナ缶雑記

ぐうたらSEのブログです。主にマイクロソフト系技術を中心に扱います。

インターフェースを実装しているクラスやメソッドを楽に探す方法(Visual Studio 2019)

f:id:masatsuna:20210614104456p:plain

インターフェースや抽象クラスを用いたソースコードを書いているときの問題点として、コードを読んだときにどの具象クラスが実行されるのか、パッと見たときわからない、という問題があります。 DI を用いている場合は、特にインターフェースをゴリゴリ使うことになるので、コードレビューで人のコードを眺めるのも結構めんどくさいんですよね。 参照されている個所一覧を見て、力業で探し出すというやり方が個人的には一般化していました。

Visual Studio 2019 で、ついにこの問題に対する解決策が提示されました。 インターフェースやメソッドを実装しているクラス、メソッドを一覧表示してくれるようです。 まだプレビューの機能ではありますが、使ってみた感じは非常に良いです。 インターフェースを活用したプロジェクトを触っているなら、ぜひ使ってみてください。

devblogs.microsoft.com

環境

設定方法

この機能はプレビュー機能であり、設定で明示的に有効にしないと使えません。 まず [ツール] > [オプション] を選択して [オプション] ダイアログを開きます。 左側ペインで [テキストエディター] > [C#] > [詳細] を選択します。 右側ペインの下部にある [継承の余白を表示する] というチェックをオンにします。

f:id:masatsuna:20210614094906p:plain

日本語翻訳が意味不明ですが、多分「継承の範囲を表示する」という意味なんだと思います。 英語表記だと「Show inheritance margin」となっていますね。 いずれにせよこのチェックをオンにすると使えるようになります。

動作確認

今回は簡易な動作検証を目的とするため、以下のようなクラス構造、プロジェクト構造とします。

f:id:masatsuna:20210614095836p:plain

プロジェクトとしては 3 つあります。 CoreLib プロジェクトにインターフェース(IBookRepository)を定義します。 CoreLib プロジェクトを参照する Infra プロジェクトに、 IBookRepository を実装した BookRepositoryImpl クラスを定義します。 ShowInheritMarginTest プロジェクトは Infra プロジェクトと CoreLib プロジェクトを参照しており、 IBookRepository を実装したテスト用の TestBookRepository クラスを定義します。

こんなシナリオで、 IBookRepository インターフェースを Visual Studio 2019 上から参照すると、以下のようになります。

f:id:masatsuna:20210614100311p:plain

コードファイルの左側に、見慣れないアイコンが表示されています。 このアイコンを押下すると、そのインターフェースまたはメソッドを実装しているクラスやメソッドの一覧を表示できます。

インターフェースの部分のアイコンを押下すると、以下のようになります。

f:id:masatsuna:20210614100450p:plain

またメソッドの部分のアイコンを押下すると、以下のようになります。

f:id:masatsuna:20210614100533p:plain

ちゃんと継承しているクラスやメソッドを一覧表示してくれます。 そしてこの表示されているリストから移動したいものを押下すると、そのメソッドやインターフェースに移動してくれます。

プロジェクトが別のものであっても、ちゃんと検索して表示してくれます。 クリーンアーキテクチャを採用して、プロジェクト構造をしっかり作りこむと、こういう構成って割と普通になりますよね。 そんなケースでも問題なく使えるのは非常に助かります。

ちなみに [Ctrl] + [F12] のキーボードショートカットでも同じような機能が使えます。 どちらもできることはほぼ同じですので、使いやすい方を選べばよいと思います*1

まとめ

Visual Studio 2019 に追加された個人的に超おすすめの新機能をご紹介しました。 これでインターフェースを活用したプログラムのコードリーディングがはかどりそうです。

*1:私はすぐにキーボードショートカットを忘れてしまうので、マウス操作できるとありがたいです。