Visual Studio で Python コードをリファクターする
既存のコードの再利用とコードの更新は、開発者の一般的なタスクです。 既存のコードを別の目的でリファクターし、コードをすべて新しく記述しないことで時間を節約することもできます。 コードをクリーンして未使用の項目を削除したり、インポートやメソッドを最新のバージョンに更新したりできます。
Visual Studio には、Python ソース コードの変換とクリーンを自動的に実行するためのいくつかのコマンドが用意されています。
- [名前の変更] は、選択したクラス、メソッド、または変数の名前を変更します。
- [インポートの追加] は、不足しているインポートを追加するためのスマート タグを提供します。
- [使用されていないインポートの削除] は、使用されていないインポートを削除します。
前提条件
- 見ることができます。 製品をインストールするには、「Visual Studio のインストール」の手順に従います。
- 既存のコードを使用して Python コード プロジェクトにアクセスします。
クラス、メソッド、または変数の名前を変更する
[名前の変更] コマンドを使用すると、クラス、メソッド、変数など、特定の識別子の名前を変更できます。 Visual Studio では、識別子のすべてのインスタンス、または指定した特定のインスタンスのみを更新できます。
次の手順では、コードで [名前の変更] コマンドの使用方法を説明します。
コードで名前を変更する識別子を右クリックし、[名前の変更] を選択します。 識別子にキャレットを配置して、メニューから [編集]>[リファクター]>[名前の変更] の順に選択するか、キーボード ショートカット Ctrl+R を使用することもできます。
[名前の変更] ダイアログに識別子の新しい名前を入力し、Enter を押します。
import ステートメントの追加
定義またはサポートされている型情報が指定されていない識別子がコードにある場合は、Visual Studio が問題の修正に役立ちます。 情報が指定されていない識別子にキャレットを配置すると、Visual Studio ではコードの左側にスマート タグ (電球) が表示されます。 タグには、対応する識別子に必要な import
または from ... import
ステートメントを追加するコマンドが一覧表示されます。
次の手順では、スマート タグを使用してコードにインポートを追加する方法を説明します。
コードに、Visual Studio でスマート タグ (電球) が表示される識別子にキャレットを配置します。 この例では、math モジュールの呼び出しに対してスマート タグが表示されています。
スマート タグ メニューでコマンドを選択して、必要なモジュールまたは型情報をコード ファイルに追加します。 この例では、
import math
ステートメントを追加するコマンドが選択されています。Visual Studio では、現在のパッケージの最上位のパッケージとモジュール、および標準ライブラリについて
import
の入力候補を表示できます。 Visual Studio では、サブモジュール、サブパッケージ、およびモジュール メンバーについてfrom ... import
の入力候補も表示されます。 入力候補には、関数、クラス、またはエクスポートされたデータが含まれます。オプションを選択した後、必要な変更がファイルに加えられているかどうかを確認します。
Visual Studio では、他のインポート後に
import
ステートメントをコード ファイルの上部に追加するか、同じモジュールが既にインポートされている場合は既存のfrom ... import
ステートメント内に追加します。 この例では、import math
ステートメントが他のインポート後にファイルの上部に追加されています。
Visual Studio は、モジュールで定義されていないメンバーを除外しようとします。 たとえば、インポート モジュールの子ではない別のモジュールにインポートされるモジュールです。 多くのモジュールでは、from xyz import sys
ではなくimport sys
ステートメントが使用されます。 sys
モジュールを除外する __all__
メンバーがモジュールにない場合でも、他のモジュールから sys
モジュールをインポートするための入力候補は表示されません。
同様に、Visual Studio は他のモジュールまたは組み込みの名前空間からインポートされる関数を除外します。 モジュールが sys
モジュールから settrace
関数をインポートする場合、理論的にはそのモジュールから関数をインポートすることもできます。 ただし、最適な方法は import settrace from sys
ステートメントを直接使用することであるため、Visual Studio はそのステートメントを明確に提示します。
最後に、通常は除外されるモジュールに、モジュールの値で代入された名前のように含まれている他の値があるとします。 それでも、Visual Studio ではインポートが除外されます。 この動作は、その値が別のモジュールで定義されているため、エクスポートする必要がないことを想定しています。 別の代入は、同様にエクスポートされていないダミー値である可能性があります。
使用されていないインポートの削除
コードの作成では、モジュールの import
ステートメントが最終的にまったく使われないことがよくあります。 Visual Studio はコードを分析するので、インポートされた名前が import
ステートメントの出現箇所より後のスコープ内で使用されているかどうかを調べて、このステートメントが必要かどうかを自動的に判断できます。
次の手順では、コード内の使用されていないインポートを削除する方法を説明します。
エディター内の任意の場所を右クリックし、[インポートの削除] を選択します。 インポートは、[すべてのスコープ] または [現在のスコープ] から削除できます。
Visual Studio は、使用されていないモジュールがコードにあるかどうかを判断し、対応する
import
ステートメントを削除します。オプションを選択した後、必要な変更がファイルに加えられているかどうかを確認します。 この例では、使用されていない 3 つのモジュール (binascii、array、glob) が Visual Studio によって削除されます。
コードで、Visual Studio でスマート タグ (電球) が表示される
import
ステートメントにキャレットを配置します。 この例では、使用されていないモジュールの binascii、array、glob に対してスマート タグが表示されます。[未使用のインポートをすべて削除する] を選択するか、[使用されていないインポートの削除] オプションを選択して、選択されたモジュールのみを削除します。
オプションを選択した後、ファイルに変更が加えられているかどうかを確認します。 この例では、使用されていない 3 つのモジュール (binascii、array、glob) が Visual Studio によって削除されます。
リファクタリング コマンドを使用する場合の考慮事項
リファクタリング コマンドを使用する前に、以下の考慮事項を確認してください。
リファクタリング コマンドを実行した後は、[編集]>[元に戻す] コマンド使用をして、変更を元に戻すことができます。 [名前の変更] コマンドには [プレビュー] 機能が用意されているため、変更を適用する前に確認できます。
Visual Studio では、コード内の制御フローは考慮されません。 コード内に
import
ステートメントなどのサポート定義が存在する前に識別子を使用する場合、Visual Studio は識別子を使用済みとして処理します。 Visual Studio は、呼び出しおよび代入を行う前に、識別子のサポート定義を検索することを想定しています。Visual Studio では、すべての
from __future__
import ステートメントが無視されます。 これらのステートメントは、クラス定義内またはfrom ... import *
ステートメントを使用して実行されるインポートです。