次の方法で共有


Visual Studio で Python コードをリファクタリングする

既存のコードの再利用とコードの更新は、開発者にとって一般的なタスクです。 既存のコードを別の目的でリファクタリングし、すべての新しいコードを記述しないことで時間を節約したい場合があります。 未使用の項目を削除したり、インポートやメソッドを最新のバージョンに更新したりするために、コードをクリーンアップすることができます。

Visual Studio には、Python ソース コードを自動的に変換してクリーンアップするのに役立ついくつかのコマンドが用意されています。

[前提条件]

  • Visual Studio。 製品をインストールするには、「 Visual Studio のインストール」の手順に従います。
  • 既存のコードを使用して Python コード プロジェクトにアクセスします。

クラス、メソッド、または変数の名前を変更する

Rename コマンドを使用すると、クラス、メソッド、変数など、特定の識別子の名前を変更できます。 Visual Studio では、識別子のすべてのインスタンス、または指定した特定のインスタンスのみを更新できます。

次の手順では、コードで Rename コマンドを使用する方法を示します。

  1. コードで、名前を変更する識別子を右クリックし、[ 名前の変更] を選択します。 また、識別子にキャレットを配置し、メニューから [編集>Refactor>Rename ] を選択するか、キーボード ショートカット Ctrl+R を使用することもできます。

  2. [ 名前の変更 ] ダイアログで、識別子の新しい名前を入力し、その後に Enter キーを 押します

    Visual Studio 2022 で識別子に別の名前を指定する方法を示すスクリーンショット。

import ステートメントを追加する

コード内に定義がないか、型情報をサポートしていない識別子がある場合は、Visual Studio が問題の修正に役立ちます。 情報がない識別子にキャレットを配置すると、コードの左側にスマート タグ (電球) が表示されます。 タグには、対応する識別子に必要な import または from ... import ステートメントを追加するコマンドが一覧表示されます。

次の手順では、スマート タグを使用してコードにインポートを追加する方法を示します。

  1. コードで、Visual Studio でスマート タグ (電球) が表示される識別子にキャレットを配置します。 この例では、数学モジュールの呼び出しに対してスマート タグが表示されます。

    Visual Studio 2022 で追加された import ステートメントが必要な識別子のスマート タグを示すスクリーンショット。

  2. スマート タグ メニューで、コマンドを選択して、必要なモジュールまたは入力情報をコード ファイルに追加します。 この例では、 import math ステートメントを追加するコマンドが選択されています。

    Visual Studio には、現在のプロジェクトと標準ライブラリの最上位レベルのパッケージとモジュールの import コード補完が用意されています。 Visual Studio では、サブモジュール、サブパッケージ、およびモジュール メンバーの from ... import 補完機能も提供されます。 補完機能には、関数、クラス、またはエクスポートされたデータが含まれます。

  3. オプションを選択した後、予想される変更がファイルに加えられたかどうかを確認します。

    Visual Studio は、他のインポート後にコード ファイルの先頭に import ステートメントを追加するか、同じモジュールが既にインポートされている場合は既存の from ... import ステートメントに追加します。 この例では、 import math ステートメントは、他のインポート後にファイルの先頭に追加されます。

    Visual Studio 2022 でスマート タグからコマンドを実行した後に追加された import ステートメントを示すスクリーンショット。

Visual Studio は、モジュールで定義されていないメンバーを除外しようとします。 たとえば、インポートモジュールの子ではない別のモジュールにインポートされるモジュールです。 多くのモジュールでは、import sysではなく from xyz import sys ステートメントが使用されます。 sys モジュールを除外する__all__ メンバーがモジュールに存在しない場合でも、他のモジュールからsys モジュールをインポートする完了は表示されません。

同様に、Visual Studio は、他のモジュールまたは組み込みの名前空間からインポートされた関数をフィルター処理します。 モジュールがsettraceモジュールからsys関数をインポートする場合、理論上、そのモジュールから関数をインポートできます。 ただし、 import settrace from sys ステートメントを直接使用することをお勧めします。そのため、Visual Studio では具体的にそのステートメントが提供されます。

最後に、モジュールは通常は除外されますが、モジュールに値が割り当てられた名前のように含まれている他の値があるとします。 Visual Studio では引き続きインポートが除外されます。 この動作では、別のモジュールで値が定義されているため、値をエクスポートしないことを前提としています。 別の割り当ては、エクスポートされないダミー値である可能性があります。

未使用のインポートを削除する

コードを記述すると、まったく使用されていないモジュールのimport ステートメントが簡単に紛れ込むことがあります。 Visual Studio はコードを分析するため、インポートされた名前がステートメントの発生後にスコープ内で使用されているかどうかを調べることで、 import ステートメントが必要かどうかを自動的に判断できます。

次の手順では、コード内の未使用のインポートを削除する方法を示します。

  1. コードで、Visual Studio でスマート タグ (電球) が表示される import ステートメントにキャレットを配置します。 この例では、使用されていないモジュールの binascii、array、glob に対してスマート タグが表示されます。

    Visual Studio 2022 で未使用のインポートを削除するためのオプションにアクセスする方法を示すスクリーンショット。

  2. 選択したモジュールのみを削除するには、[ 未使用のインポートをすべて 削除する] または [未使用のインポート を削除する] オプションを選択します。

  3. オプションを選択した後、ファイルに変更が加えられたか確認します。 この例では、使用されていない 3 つのモジュール (binascii、配列、glob) が Visual Studio によって削除されます。

    Visual Studio 2022 で [未使用のインポートをすべて削除] コマンドを使用した結果を示すスクリーンショット。

リファクタリング コマンドを使用する場合の考慮事項

リファクタリング コマンドを使用する前に、次の考慮事項を確認してください。

  • リファクタリング コマンドを実行した後、 編集>Undo コマンドを使用して変更を元に戻すことができます。 [名前の変更] コマンドにはプレビュー機能が用意されているため、変更を適用する前に確認できます。

  • Visual Studio では、コード内の制御フローは考慮されません。 サポート定義がコード内に存在する前に識別子 ( import ステートメントなど) を使用した場合でも、Visual Studio は使用した識別子を処理します。 Visual Studio は、呼び出しと割り当てを行う前に、識別子のサポート定義を見つけることを想定しています。

  • Visual Studio では、すべての from __future__ インポート ステートメントが無視されます。 これらのステートメントは、クラス定義内または from ... import * ステートメントを使用して実行されるインポートです。