【Python】Pylanceとは?mypy・Pyrightとの違いや使い方を解説!

PythonをVS Codeで開発していると、「Pylance」という名前を目にすることがあります。

Pylanceを使用すると、Pythonコードの入力補完や型情報の表示、型チェックなど、Pythonのプログラミングを支援するさまざまな機能をVS Codeで利用できます。

しかし、PythonにはmypyやPyrightといった型チェックに関係するツールもあるため、

  • Pylanceとは何?
  • Pylanceでは何ができるの?
  • mypyとは何が違うの?
  • PyrightとPylanceは何が違うの?

と疑問に思うこともあるでしょう。

この記事では、Pylanceの基本的な意味や使い方から、mypy・Pyrightとの違いまで、わかりやすく解説します。

Pylanceとは?

Pylanceとは?

Pylanceとは、VS CodeでPythonを開発するときに、コード補完や型チェックなどを行ってくれるMicrosoftの拡張機能です。

Pylanceを利用すると、主に次のような機能を使用できます。

  • コードの入力補完
  • 関数や変数の型情報の表示
  • 関数の引数などの情報表示
  • 定義へのジャンプ
  • 参照箇所の検索
  • 型の間違いの検出

Pylanceは、Microsoftが開発しているPythonの静的型チェッカー「Pyright」をベースにしています。

Pylanceの型チェック機能について理解するときは、「Pylanceの内部ではPyrightの型チェック機能が利用されている」と考えるとわかりやすいでしょう。

例えば、次のPythonコードを見てみましょう。

def add(a: int, b: int) -> int:
    return a + b

result = add("10", 20)

add()の引数aとbには、どちらもintが指定されています。

しかし、add("10", 20)では、第1引数にstr型の"10"を渡しています。

Pylanceの型チェックを有効にしていると、このような型の不一致をVS Code上で確認できます。

Pylanceの型チェックを有効にしていると、型の不一致をVS Code上で確認できる

画像では、add("10", 20)の"10"に赤い波線が表示され、Pylanceが型の不一致を検出しています。add()の第1引数aにはint型を指定していますが、実際にはstr型の"10"を渡しているためです。

赤い波線にマウスカーソルを合わせると、「Literal['10']はintに割り当てることができません」といったメッセージが表示されます。Literal["10"]は、簡単にいうと「文字列の"10"」という意味です。

つまり、Pylanceによって、int型を受け取る引数にstr型の値を渡していることが検出されています。

このように、Pylanceは、Pythonコードを書いているときに、コード補完や型チェックなどをリアルタイムで行い、開発を支援してくれるVS Codeの拡張機能です。

Pylanceで型チェックを有効にする

Pylanceでは、Pythonコードの型チェックを利用できます。ただし、Pylanceをインストールしただけでは、型チェックが有効になっていない場合があります。

まず、VS Codeの設定を開き、Python › Analysis: Type Checking Modeを確認します。

この設定がoffになっている場合、本格的な型チェックは無効です。型チェックを利用するには、basic、standard、strictのいずれかに変更します。

Pylanceで型チェックを有効にする

主な設定値は次のとおりです。

設定値内容
off本格的な型チェックを行わない
basic基本的な型チェックを行う
standardbasicより多くのルールでチェックする
strictより厳しいルールで型チェックする

初心者の場合は、まずbasicから使用すると分かりやすいでしょう。

例えば、VS Codeの設定画面でPython › Analysis: Type Checking Modeをbasicに変更すると、基本的な型チェックが有効になります。

設定ファイルから変更する場合は、.vscode/settings.jsonに次のように記述します。

{
    "python.analysis.typeCheckingMode": "basic"
}

これで、Pylanceによる基本的な型チェックを利用できます。

offでも、未定義の変数や解決できないimportなど、一部の基本的な問題は検出されます。

Pylanceをインストールする

PylanceはVS Codeの拡張機能として利用します。

VS CodeでMicrosoftのPython拡張機能をインストールすると、通常はPylanceもあわせてインストールされ、PythonのLanguage Serverとして利用されます。

Language Serverとは、プログラムのコードを解析し、コード補完や型情報の表示、定義へのジャンプ、エラーの検出などの機能をエディタに提供する仕組みです。

Pylanceがインストールされているか確認する場合は、VS Codeの左側にある「拡張機能」を開き、「Pylance」と検索します。

Pylanceがインストールされていない場合は、「Pylance」を選択してインストールします。

Pylanceは、Pythonコードを書いているときにVS Code上で動作するため、mypyのように次のようなコマンドを毎回実行する必要はありません。

mypy sample.py

PythonファイルをVS Codeで開いて編集すると、Pylanceがコードを解析し、補完や診断などを行います。

あわせて読みたい

『mypy』については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。

Pylanceでコード補完を利用する

Pylanceの代表的な機能の1つが、コードの入力補完です。

例えば、次のように文字列を変数へ代入します。

message = "Hello"

message.

message.まで入力すると、VS Code上に文字列で利用できるメソッドの候補が表示されます。

Pylanceでコード補完を利用する

Pylanceはコードからmessageがstr型であることを解析し、その型で利用できるメソッドなどを補完候補として表示します。

このように、型情報は型チェックだけでなく、コードを入力するときの補完にも利用されています。

Pylanceで型情報を確認する

Pylanceを使用すると、変数や関数などにマウスカーソルを合わせて型情報を確認できます。

例えば、次のコードを見てみましょう。

name = "Taro"
age = 30

nameやageにマウスカーソルを合わせると、Pylanceが解析した型をVS Code上で確認できます。

Pylanceで型情報を確認する

画像では、nameはLiteral['Taro']、ageはLiteral[30]と表示されています。

Literal['Taro']は「値が文字列の"Taro"である」、Literal[30]は「値が整数の30である」という意味です。

このように、Pylanceでは単にstrやintと表示されるだけでなく、代入されている具体的な値まで含めた型として表示される場合があります。

戻り値の型もチェックできる

Pylanceでは、関数の引数だけでなく、戻り値の型についてもチェックできます。

例えば、次のコードを見てみましょう。

def get_price() -> int:
    return "1000"

get_price()では、戻り値の型としてintを指定しています。

しかし、実際に返している"1000"はstr型です。

型チェックを有効にしている場合、Pylanceはこのような戻り値の型の不一致も検出できます。

戻り値の型もチェックできる

次のようにint型を返せば、型の指定と実際の戻り値が一致します。

def get_price() -> int:
    return 1000

型ヒントを利用すると、「この関数は何を受け取り、何を返す関数なのか」をコード上で明確にできます。

Pylanceは、その型情報を利用して型の間違いを見つけやすくしてくれます。

Noneになる可能性もチェックできる

Pylanceは、値がNoneになる可能性についても型情報から確認できます。

例えば、次のコードを見てみましょう。

def get_name(data: dict[str, str]) -> str:
    return data.get("name")

dict.get()は、指定したキーが存在しない場合にNoneを返します。

そのため、data.get("name")はstrだけでなく、Noneになる可能性があります。

しかし、この関数では戻り値を-> strと指定しています。

このような場合、型チェックを有効にしていると、Pylanceによって型の問題を確認できます。

Noneになる可能性もチェックできる

Noneを返す可能性がある仕様であれば、次のように記述できます。

def get_name(data: dict[str, str]) -> str | None:
    return data.get("name")

str | Noneは、「strまたはNoneになる可能性がある」という意味です。

型チェックを利用すると、「必ず値があると思っていたのに、実際にはNoneだった」といった問題に気付きやすくなります。

Pylanceは型ヒントがなくても型を推論できる

Pylanceでは、型ヒントが記述されていないコードでも、コードの内容から型を推論できる場合があります。

例えば、次のコードを見てみましょう。

name = "Taro"
age = 30

このコードには、

name: str
age: int

のような型ヒントを記述していません。

それでも、代入されている値からnameはstr、ageはintであるとPylanceが推論できます。

関数についても、コードから戻り値の型などを推論できる場合があります。

ただし、Pylanceがすべての型を必ず正確に推論できるわけではありません。

関数の引数や戻り値など、コードの意図を明確にしたい場所では型ヒントを記述すると、型チェックだけでなくコードの読みやすさも向上します。

Pylanceとmypy・Pyrightの違い

Pythonの型チェックについて調べていると、「Pylance」「mypy」「Pyright」という3つの名前を目にすることがあります。

どれもPythonの型に関係するツールですが、それぞれ役割が異なります。

簡単に整理すると、次のようになります。

項目PylancemypyPyright
主な用途VS CodeでのPython開発支援Pythonの静的型チェックPythonの静的型チェック
型チェック○○○
コード補完○基本的には行わないLanguage Serverとして利用可能
型情報のホバー表示○基本的には行わないLanguage Serverとして利用可能
VS Codeとの統合○拡張機能で利用可能可能だがPylanceが推奨
コマンドラインから実行×○○
関係Pyrightを型チェック基盤として利用独立した型チェッカーPylanceの型チェック基盤

mypyは、Pythonの代表的な静的型チェッカーの1つです。

例えば、次のようにコマンドを実行してPythonコードをチェックします。

mypy sample.py

mypyは、型ヒントなどの型情報を利用して、型の間違いがないかをチェックします。mypyはデフォルトでは型ヒントのない関数内部のチェックを限定的に行うため、型ヒントを追加しながら段階的に導入できるようになっています。

一方、PyrightもPythonの静的型チェッカーです。PyrightはMicrosoftによって開発されており、高速な型チェックを目的として設計されています。コマンドラインツールとしても利用できます。

例えば、Pyrightをインストールしていれば、次のように実行できます。

pyright

Pylanceは、このPyrightの型チェック機能を利用したVS Code向けの拡張機能です。

PylanceではPyrightによる型解析に加えて、コード補完、シンボルの検索、セマンティックハイライトなど、VS CodeでPythonを書くための機能が提供されています。

そのため、初心者の場合は次のように考えるとわかりやすいでしょう。

  • mypy
    • Pythonの型をチェックするツール
  • Pyright
    • Pythonの型をチェックするツール
    • PyrightにもLanguage Serverとしての機能がありますが、VS CodeでPythonを開発する場合は、Pylanceの利用が推奨されています。
  • Pylance
    • Pyrightの型チェック機能を利用
    • コード補完
    • 型情報の表示
    • 定義へのジャンプ
    • VS CodeでPythonを書くためのさまざまな支援機能

PylanceとPyrightは完全に別々の型チェッカーというわけではなく、Pylanceの型チェック部分にはPyrightが利用されています。一方、mypyはPyrightとは別に開発されている静的型チェッカーです。

Pylanceとmypyは併用できる?

Pylanceとmypyは併用できます。

例えば、普段VS CodeでPythonコードを書くときはPylanceを使用し、プロジェクト全体の型チェックにはmypyを使用するという構成もできます。

イメージとしては次のようになります。

コードを書いているとき
 ↓
Pylance
 ↓
VS Code上で補完・型チェック

コミット前やCIなど
 ↓
mypy
 ↓
プロジェクト全体を型チェック

PylanceはVS Codeでコードを書いている最中のフィードバックに向いています。

一方、mypyは次のようにコマンドとして実行できるため、開発者のPCだけでなくCIなどでも利用できます。

mypy src

なお、Pyrightを使用する場合も、コマンドラインから型チェックできます。

Pylance自体はVS Code拡張機能であり、PylanceをそのままCI用のコマンドとして実行することはできません。Pylanceと同じ系統の型チェックをCIで行いたい場合は、PyrightのCLIを利用できます。

そのため、

  • VS Code上ではPylance、CIではmypy
  • VS Code上ではPylance、CIではPyright

という構成も可能です。

Pylanceを使用するメリット

Pylanceを使用する大きなメリットは、Pythonコードを書いている最中にさまざまな情報を確認できることです。

例えば、型に問題があるコードを書いた場合、コマンドを実行してから確認するのではなく、VS Code上で問題に気付きやすくなります。

また、型情報を利用してコード補完が行われるため、クラスや関数、変数などが増えても、利用できるメソッドや引数を確認しながらコードを書けます。

特に、以下の場合に便利です。

  • PythonをVS Codeで開発している
  • 型ヒントを使用している
  • コード補完を利用したい
  • 型の間違いを早い段階で見つけたい

Pylanceは単なる「型チェックツール」ではなく、型情報を利用してVS CodeでのPython開発全体を支援する拡張機能と考えるとわかりやすいでしょう。

本記事のまとめ

この記事では「Pylance」について、以下の内容を説明しました。

  • PylanceはVS CodeでPython開発を支援するMicrosoftの拡張機能
  • コード補完、型情報の表示、定義へのジャンプ、型チェックなどを利用できる
  • Pylanceの型チェック機能にはPyrightが利用されている
  • python.analysis.typeCheckingModeで型チェックの強さを設定できる
  • mypyとPyrightは静的型チェッカーで、Pylanceとは主な役割が異なる

Pylanceを利用すると、Pythonコードを書いている段階で型情報やコード補完を確認できるため、VS CodeでのPython開発を効率的に進めやすくなります。

また、mypyやPyrightとの違いを理解しておくと、「エディタ上で使用するツール」と「コマンドラインやCIで型をチェックするツール」の役割を整理しやすくなります。

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

スポンサーリンク