インターフェースや抽象クラスを用いたソースコードを書いているときの問題点として、コードを読んだときにどの具象クラスが実行されるのか、パッと見たときわからない、という問題があります。 DI を用いている場合は、特にインターフェースをゴリゴリ使うことになるので、コードレビューで人のコードを眺めるのも結構めんどくさいんですよね。 参照されている個所一覧を見て、力業で探し出すというやり方が個人的には一般化していました。
Visual Studio 2019 で、ついにこの問題に対する解決策が提示されました。 インターフェースやメソッドを実装しているクラス、メソッドを一覧表示してくれるようです。 まだプレビューの機能ではありますが、使ってみた感じは非常に良いです。 インターフェースを活用したプロジェクトを触っているなら、ぜひ使ってみてください。
環境
- Visual Studio 2019 16.10.1
- C#
設定方法
この機能はプレビュー機能であり、設定で明示的に有効にしないと使えません。 まず [ツール] > [オプション] を選択して [オプション] ダイアログを開きます。 左側ペインで [テキストエディター] > [C#] > [詳細] を選択します。 右側ペインの下部にある [継承の余白を表示する] というチェックをオンにします。
日本語翻訳が意味不明ですが、多分「継承の範囲を表示する」という意味なんだと思います。 英語表記だと「Show inheritance margin」となっていますね。 いずれにせよこのチェックをオンにすると使えるようになります。
動作確認
今回は簡易な動作検証を目的とするため、以下のようなクラス構造、プロジェクト構造とします。
プロジェクトとしては 3 つあります。
CoreLib プロジェクトにインターフェース(IBookRepository
)を定義します。
CoreLib プロジェクトを参照する Infra プロジェクトに、 IBookRepository
を実装した BookRepositoryImpl
クラスを定義します。
ShowInheritMarginTest プロジェクトは Infra プロジェクトと CoreLib プロジェクトを参照しており、 IBookRepository
を実装したテスト用の TestBookRepository
クラスを定義します。
こんなシナリオで、 IBookRepository
インターフェースを Visual Studio 2019 上から参照すると、以下のようになります。
コードファイルの左側に、見慣れないアイコンが表示されています。 このアイコンを押下すると、そのインターフェースまたはメソッドを実装しているクラスやメソッドの一覧を表示できます。
インターフェースの部分のアイコンを押下すると、以下のようになります。
またメソッドの部分のアイコンを押下すると、以下のようになります。
ちゃんと継承しているクラスやメソッドを一覧表示してくれます。 そしてこの表示されているリストから移動したいものを押下すると、そのメソッドやインターフェースに移動してくれます。
プロジェクトが別のものであっても、ちゃんと検索して表示してくれます。 クリーンアーキテクチャを採用して、プロジェクト構造をしっかり作りこむと、こういう構成って割と普通になりますよね。 そんなケースでも問題なく使えるのは非常に助かります。
ちなみに [Ctrl] + [F12] のキーボードショートカットでも同じような機能が使えます。 どちらもできることはほぼ同じですので、使いやすい方を選べばよいと思います*1。
まとめ
Visual Studio 2019 に追加された個人的に超おすすめの新機能をご紹介しました。 これでインターフェースを活用したプログラムのコードリーディングがはかどりそうです。
*1:私はすぐにキーボードショートカットを忘れてしまうので、マウス操作できるとありがたいです。