私はPython歴はかれこれ7年程になり、PyScripterやVimなど色々な開発環境を変遷してきた。
その中でPyCharmが最強のPython開発環境であると断言する。
開発はIntelliJ IDEAのJetBrainsで、最近はGo言語用IDEのGoglandを発表している。
動作環境はWindows/OS X/Linuxのマルチプラットフォームである。
PyCharmは無償版と有償版があるが、普通の開発ならば無償版で充分すぎるほど機能が備わっている。
PyCharmがいかに便利であるか紹介してみよう。
リアルタイムのコードチェックと修正機能
PyCharmはリアルタイムにコードをチェック(PyFlakes使用)してくれるが、Vimでも同様の事ができるので目新しい事ではない。
PyCharmの素晴らしい所は、警告個所を適切に修正してくれる機能があることだ。
例えば、このようなコードを書いたとしよう。
member = {}
member["name"] = "Tim"
member["age"] = 32
member["sex"] = "men"
PyCharmはダメな部分に波線を出して警告してくれる。
何を言っているかわからないが、波線部分にカーソルを移動し「Alt+Enter」(Windowsの場合)を押してみよう。
警告の解決方法を提示してくれるので、「Replace dictionary creation」を選択してみよう。
members = {"name": "Tim", "age": 32, "sex": "men"}
複数行にわたる冗長な変数宣言と初期化が、1センテンスに最適化された。
このようにPyCharmは困ったときに「Alt+Enter」を押せば、だいたいなんとかしてくれるのである。
あと地味に便利なのが、英辞書を搭載しており単語のスペルミスや複数形の間違いを指摘してくれる。
上図は「property」の複数形を「propertys」(正しくは「properties」)と書こうとして指摘されている例である。
私はこの警告機能のお陰で、何回か恥ずかしい英単語ミスをコミットせずに済んでいる。
すべてのコードを一括でインスペクト(検査)したい場合は、メニュー「Code」→「Inspect Code...」を選択して一括検査することができます。
強力なタイプヒンティング
Pythonは言わずと知れた動的型付き言語である。
動的型付き言語であるがゆえに補完が効きにくかったり、引数に無効な型を指定してしまいエラーが出たりするのも事実である。
PyCharmではタイプヒンティングにより、まるで静的型付け言語のように事前に型チェックさせる事ができる。
例えば数字の桁を求める関数get_digit
を定義したとしよう、引数はint
またはfloat
を受け付ける。引数にstr
やlist
を指定すると、TypeErrorとなる。
def get_digit(x):
digit = 0
while x > 0:
x //= 10
digit += 1
return digit
get_digit(130)
>>> 3
get_digit(130.0)
>>> 3
get_digit("text")
>>> TypeError
PyCharmのタイプヒンティングを記述してみよう、引数または関数にカーソルを合わせ「Alt+Enter」を押すと、タイプヒンティングのひな形を生成してくれるので、記述は非常に楽である。
タイプヒンティングを記述したコードは以下の通り。
def get_digit(x):
"""
:type x: int or float
:rtype: int
"""
digit = 0
while x > 0:
x //= 10
digit += 1
return digit
タイプヒンティングを記述したあと、get_digit
に文字列を渡そうとすると警告が出るようになる。
私は関数のコメントは書かないが、タイプヒンティングだけは書くようにしている。(命名が適切であればコメントは不要の精神)
ちなみにクラスメンバにタイプヒンティングを設定したい場合は、以下のように書く。
class A(object):
"""
:type name: basestring
:type description: basestring or None
"""
def __init__(self, name):
self.name = name
self.description = None
PyCharmを使えばPythonが動的型付け言語と静的型付け言語のおいしいとこ取りの最強言語と化すのである。
なお、Python3.5から導入された型アノテーションにも対応している。
タイプヒンティングの詳しい情報は、下記のJet Brainsのヘルプを参照されたい。
Type Hinting in PyCharm
便利なコード検索機能
Shift
を2回押すと出てくる検索ウインドウがかなり便利。
これだけで、ファイル、クラス、メソッド、メンバ、変数まで、すべての検索がここに集約されている。
Ctrl + Shift + F
のグレップ検索もある、コードの検索はたった2つの機能さえ覚えれば良い
地味に便利なTODO一覧機能
メニューの「View」→「Tool Windows」→「TODO Alt+F6」でソースに書いたTODOコメントの一覧も集約して表示してくれる。
Jenkinsなどを使ったCIでTODO一覧を出してくれる機能があるが、これはサーバーを用意せずともローカルで実行できるので地味に便利だ。
リファクタリング機能
リファクタリングの機能も充実している。
動的型付け言語ながら、変数名やメンバ名のリネームなどはスコープなどを考慮して良い感じにリネームしてくれる。
もちろん、動的型付け言語なのでメンバ名のリネームは正確に行われない場合もある。リファクタリングの確度を上げるためにも、タイプヒンティングは出来るだけ記述しておくべきである。
ファイルテンプレート
よく使うファイルのひな形も用意されている。
標準でUnitTestとSetupScriptのテンプレートも用意されているため、UnitTestやsetup.pyの作成負荷が大幅に軽減される。
もちろん、独自のテンプレートも設定可能である。
右クリックメニューから「New」->「Edit File Templates...」から編集できる。
もちろんテンプレート変数も用意されているため、日付や作成者など自動で挿入可能である。
私はPySide/PyQtの開発で、UIフォームファイルを登録している。
詳しくは「最強のPySide/PyQt開発環境もPyCharmである#ファイルテンプレートに「Qt UI Designer Form」を追加する」を参照してほしい。
ファイルテンプレートの詳しい情報は、下記のJet Brainsのヘルプを参照されたい。
Creating and Editing File Templates
豊富なデバッグ機能
デバッグ機能も豊富で基本的な事はほぼ出来ると思って良い。
- ブレイクポイントの設置
- 条件付きブレイクポイントの設置
- ウォッチ式
- スタックトレース
- カーソル行まで実行(Alt+F9)
下図はデバッグ時のエディター表示である、変数の横に現在の値が表示されるため情報が非常に見やすくなっている。
ちなみに条件付きブレークポイントの設定方法だが、ブレイクポイントを右クリックで設定画面が出るので「Condition」に条件式を記述するだけである。
やはりデバッガがGUIで操作できると、デバッグ効率が格段に上がる。
ある程度の大規模のプロジェクトになるとデバッガが必須となるので、PyCharmは手放すことができない。
VCS(バージョン管理システム)との連携
Git、MercurialなどのVCS(バージョン管理システム)と連携しており、ファイルの追加など簡単な操作はPyCharm上で行える。
特に追跡済み、未追跡、未コミットのファイルがそれぞれ色分けされるので、コミット状況が一目でわかるのは便利だ。
簡単なVCSの履歴確認くらいなら下図のようにPyCharm上から確認ができる。
Anaconda仮想環境に対応
PyCharmではAnacondaの仮想環境にも対応している。
メニュー「File」->「Settings」->「Project Interpreter」
プロジェクトごとにPython環境を設定できる。
私の環境はMiniconda(Anacondaの最小構成版)で、Python2.7/3.4/3.5と3つのPython仮想環境が混在している。
そこでPythonルートディレクトリを作成し、各Pythonバージョンごとにプロジェクトを作成している。サンプルコードや各プロダクトはサブプロジェクトとして管理している。
今まで書き溜めたプロダクトやサンプルコードを、PyCharm上でツリー状に閲覧できるため便利である。
Python/
├ Python35/
| ├ project a
| ├ project b
| └ moules
|
├ Python34/
| ├ project a
| ├ project b
| └ moules
|
└ Python27/
├ project a
├ project b
└ moules
こうすることにより「activate/deactivate」コマンドを打たずに、PyCharmプロジェクトを切り替えるだけで仮想環境も切り替える事ができる。
プロジェクト構造化の設定は、ディレクトリの右クリックメニュー「Mark Directory as」→「Sources Root」で設定できる。「Sources Root」に設定すると、そのディレクトリをサブプロジェクトのルートとして扱ってくれる。
プロジェクトの構造化に関しての詳しい情報は、下記のJet Brainsのヘルプを参照されたい。
Jupyter Notebookとの連携
PyCharm上からJupyter Notebook(IPython)と連携も可能で、右クリックメニュー「New」->「Jupyter Notebook」で作成できる。
コード補完はPyCharmのものが使われるので、ブラウザ実行よりも快適である。
ただし、Jupyterで出来たキーボードショートカットが使えないのは残念。
私はPILを使った画像処理をテストするのにJupyter Notebookをよく使うのだが、Windowsでコマンドラインから「Jupyter Notebook」を起動すると、使いもしないMicrosoftEdgeが立ち上がる現象から開放された。
Jupyterとの連携については、下記のJet Brainsのヘルプを参照されたい。
Using IPython/Jupyter Notebook with PyCharm
便利なプラグイン
PyCharmのベースとなっているIntelliJ IDEAには豊富なプラグインが用意されており、PyCharmでもそのプライグインを使うことができる。
私がPyCharmで便利に使っているプラグインはFile Watchers
というプラグインだ。ファイルを監視して更新時に自動でコマンドを走らせるタスクランナーである。
私はPySide/PyQtのuiファイルを自動でコンバートさせている。
詳しくは「最強のPySide/PyQt開発環境もPyCharmである#uiファイルを自動的にpyファイルに変換」を参照してほしい。
下記のJet Brainsのヘルプも参照されたい。
まとめ
PyCharmは、ここで紹介しきれないほど機能が沢山ある、おそらく私の知らない便利機能もまだまだある事だろう。Pythonを使いながらPyCharmを使っていない人は非常に損をしていると思う。
特にコード補完が素晴らしいので、Python初心者こそPyCharmを使ってほしい。
本当に素晴らしいツールである。
記事の続きを書きました、「私が実践しているPyCharmの運用ルール」。
リンク(随時更新)
その他、PyCharmの魅力を伝える記事を追記していく。
【PyCharm5.0新機能】async/awaitのスレッド実行状況を可視化してデバッグする
「PythonでJupyterノートブック「.ipynb」を生成する」