最強のPython統合開発環境PyCharm

# 最強のPython統合開発環境PyCharm

新しい言語を習得するにあたって良きIDEというのは最良の師匠となるのでケチらず積極的に使うべきと思っています。
というわけで、Python における最強の統合開発環境である PyCharm について紹介します。
一番多いとは思うので Django による WebApplication 開発を想定して書いています。

機能や価格体系等については 2015年12月15日 の PyCharm 5.0.2 時点のデータです。

## 概要

https://www.jetbrains.com/pycharm/

PyCharm は高品質なIDEで有名なチェコの JetBrains s.r.o. が出している Python 向けIDEです。
Widows / OS X / Linux で動作可能。

JetBrains のIDEは IntelliJ IDEA という Java IDE がベースとなっており
PyCharm はその Python プラグインとして開発されています。
他にも Ruby, PHP, JS, C++, Objective-C/Swift などのIDEも開発しています。

PyCharm にはこのうちJS、CSS、HTMLなどのWeb開発関連のプラグインも付属しているのでフロントエンド開発も同じ環境で出来ます。

## 価格

有償の Professional Edition と無償の Community Edition があります。
Community Edition は Python 自体の解析機構など同一ですが、前述のWeb開発関連のプラグインや
WebApplicationFramework への対応やDB、SQL対応などが省かれている点に注意が必要です。

Web開発を行いたいのであれば Professional Edition を使うのが良いです。

30日間のフリートライアルがあるのでまずはお試しを。

## 価格体系

JetBrains の製品は月額/年額のサブスクリプション制になっています。
初年度が一番高く、継続していくと徐々に安くなって3年目以降は同じ金額です。

購入ページにいくと PyCharm のみのプランと IntelliJ IDEA Ultimate 等、他の言語のIDEをすべて含めた All Products Pack の二つがあります。
iOSアプリ開発をしたり Ruby, PHP, Java, C++ などを使う人は All Products Pack が検討に値するかもしれません。

PyCharm には Web周辺の機能は付属するので、クライアントサイドのコードを書くだけなら WebStorm を別に買う必要は無いです。


## インストール

https://www.jetbrains.com/pycharm/download/
にいけば自分のプラットフォームにあったイメージがダウンロードできます。
あとは指示通りにインストールするだけ。OS X 版は Java も同梱されるようになったのでそのまま動きます。


## Project

![スクリーンショット 2015-12-15 21.16.45.png](https://qiita-image-store.s3.amazonaws.com/0/14510/95821a88-0e1f-96a9-131c-68595ca5855a.png)

PyCharm は Project という単位でコードと設定を管理します。
スタート画面からのプロジェクト作成にも対応していますし、既存のコードの読み込みやgitなどのVCSから取ってくる事も可能です。

次以降では、プロジェクト設定について、そのあとオススメ機能を紹介します。

![スクリーンショット 2015-12-15 21.19.11.png](https://qiita-image-store.s3.amazonaws.com/0/14510/d7e965a6-a352-eb52-51ec-7046c3959bf3.png)


### virtualenv管理

Python では virtualenv で環境を分けている事が多いので作成した Porject 用の virtualenv 環境を作成して設定します。
プロジェクト作成時か Preferences -> Project -> Project Interpreter で既存の virtualenv 環境の指定や新規作成が可能です。
インストールされているライブラリの一覧や最新バージョンも出るのでライブラリ更新の一括チェックにも便利。

![スクリーンショット 2015-12-15 21.25.47.png](https://qiita-image-store.s3.amazonaws.com/0/14510/1fcc5544-232b-5fc7-efab-0b7a8c0125d7.png)


### PEP8警告を warning に上げる

Python 標準コーディング規約である PEP8 違反の警告レベルが低いので1段あげて warning にするのが良いです。
PEP8 違反のコードは見ていて吐き気を催すのでPEP8違反するメリットは無いですね。

Preferences -> Editor -> Inspections 内の Python -> PEP8 coding style violation から week warning を warning に上げましょう。
その下の naming conversion violation のレベルも一緒にあげておくといいです

![スクリーンショット 2015-12-15 21.25.29.png](https://qiita-image-store.s3.amazonaws.com/0/14510/dc5a5ad9-dd37-be26-45de-d6a1663dae40.png)

### ファイルエンコーディング記述のチェックを変更する

Python はファイルのエンコーディングが ascii 以外の場合はコードの先頭にそれを示すルールになります。その記述スタイルとチェックの為に以下を追加します。
Preferences -> Editor -> Inspections 内の Python -> File contains non-ASCII character で Encoding comment format を好みのものに。
コメント部分などに日本語がある場合も必要なので全ファイルにデフォルトでいれてしまうのが良いです。

![スクリーンショット 2015-12-15 21.25.25.png](https://qiita-image-store.s3.amazonaws.com/0/14510/799c5774-ac60-df8a-d6d5-1813beb4d15e.png)

### Project Structure

検索パスやTemplate、画像等の参照パスのルートを追加できます。
コード補完で出てこなかったり Template にジャンプ出来なかったりした場合は確認しましょう。


### Django Setting

Django を使う場合は settings の位置や Django project としてのルートの位置を指定します。

![スクリーンショット 2015-12-15 21.26.28.png](https://qiita-image-store.s3.amazonaws.com/0/14510/98797256-10fd-3fca-ee22-ec2ba81e8191.png)


### Docstring format

Docstring で使用するフォーマットです。
コメントによる type hinting を使用する場合に効果を発揮します。
reStructuredText を選択しておけば問題ないです。

![スクリーンショット 2015-12-15 22.37.51.png](https://qiita-image-store.s3.amazonaws.com/0/14510/8750a84f-ccba-783f-bc0c-11c458e60830.png)


### Template Language

Django 以外にも Jinja2, Mako, Chameleon等にも対応しています。
使用する Template 言語を指定しましょう。

![スクリーンショット 2015-12-15 21.34.55.png](https://qiita-image-store.s3.amazonaws.com/0/14510/6baca1e8-bc3c-1d22-5050-038519587399.png)


### VCS

Git, Mercurial, Subversion などの VCS に対応しています。
設定してあると変更などがエディタから確認でき、部分復元にも対応しています。

git submodule や Project 外がVCSのルートの場合にも、ここに設定を追加すると認識してくれます。


### 行番号表示、空白文字表示、

Preferences -> Editor -> General -> Appearance にあります。
全般的に PyCharm の検索は非常に優秀なので、とりあえず左上の検索ボックスに入れると良い感じに表示してくれます。

![スクリーンショット 2015-12-15 21.46.43.png](https://qiita-image-store.s3.amazonaws.com/0/14510/de85db07-afa8-c421-001e-07fac44f7be1.png)


### ファイルテンプレート

ファイル新規作成時のテンプレートを指定できます。
Preferences -> Editor -> File and Code Templates です。

Python2.x を使う場合は以下の二つくらいはつけておくと良いです。

absolute_import は import 時のルールが Python2.x だと相対参照で混乱するので絶対参照のみにしましょう。
相対参照したい場合は明示的に記述出来、その方が望ましいのでつけておくと余計な心配が無くて良いです。Python3.x のデフォルト動作と同じです。

unicode_literals はデフォルトの文字列型を unicode にします。
説明すると長くなるのでしょっぴきますが、これも Python3.x の動作に会わせた方が混乱が無いので良いです。

```python:
from __future__ import absolute_import
from __future__ import unicode_literals
```

![スクリーンショット 2015-12-15 21.25.35.png](https://qiita-image-store.s3.amazonaws.com/0/14510/3c648d6d-4117-4bbf-4029-0bf67682679c.png)


### (複数バージョンのPythonに対応させるコードを書く場合)

Preferences -> Editor -> Inspections 内の Python -> Code compatibility inspection でチェック対象のバージョンを複数選択できます。
ライブラリ開発などで効果を発揮します。
2.x系で動くコードを書く場合、極力3.4以上に合わせたコードを書くのが良いです。

![スクリーンショット 2015-12-15 21.25.18.png](https://qiita-image-store.s3.amazonaws.com/0/14510/83dcdf72-4be9-95f8-1b54-be5a4aedebf3.png)


# 機能紹介

## Search everywhere

Shift 2度押しで出てくるサーチバーです。
ファイル名やシンボル、アクションなど Project に関わるたいていの物をインクリメントサーチしてくれます。
メソッド名やファイル名は大文字小文字、アンダースコアなどの区切りを無視して検索してくれるのでうろ覚えでも良いのがうれしい所。
これに依存しているPyCharm使いはかなり多い気がしますね。

![スクリーンショット 2015-12-15 22.06.36.png](https://qiita-image-store.s3.amazonaws.com/0/14510/00276d5f-affd-e1b5-c666-16526af13c01.png)


## コード解析

Cmd + クリックやショートカットで定義に飛べます。
ライブラリの中まで見てくれるのでちょっと動作や引数に疑問に思ったら気軽に読みにいける。
メタ操作などで対象が特定出来ない場合でも候補を表示してくれるのでコードリーディングが相当楽になります。

ToolWindow の Project や Structure では指定しているエディタ側との連動を設定できます。
右上の歯車マークで以下を選ぶと動作を指定可能です。(Structureではアイコン)

<dl>
  <dt>Auto Scroll to code </dt>
  <dd>ToolWindow で選択したファイル(行)をエディタ側で表示させる</dd>
  <dt>Auto Scroll from code</dt>
  <dd>エディタで表示しているファイル(行)を ToolWindow で表示させる</dd>
</dl>

好みで設定しておくと良いでしょう。
ちなみにエディタの上部に現在フォーカスのあたっているファイルのパスは出ているので途中のディレクトリのファイル参照はそちらから可能です。

![スクリーンショット 2015-12-15 22.18.13.png](https://qiita-image-store.s3.amazonaws.com/0/14510/1a962fe6-db44-689d-1eec-0a908fb219ad.png)


## コード補完

一般的なコード補完で可能は事は全部してくれます。
しかも Search everywhere と同じロジックで動いてくれるのでメソッド名の後ろ半分とかでも補完してくれるのがうれしい。
正直これがかなり強い。

また import していなくても動作するので、クラス名や関数名を覚えてる場合はとりあえず書いてしまい Alt + Enter で候補を選んで import 文の自動追加なども出来ます。

警告が出ている箇所で Alt + Enter から出るメニューには色々つまっていて

- ダブルクオーテーションとシングルクオーテーション等の変換。
- 自動追加系はコンテキストに応じて様々な候補を出してくれます。以下は一例。
  - import
  - 関数/クラス/引数定義
  - ライブラリインストール
  - docstring
  - test
- 表現形式の変更。tuple -> list や {} -> dict() 

などなど。

![スクリーンショット 2015-12-15 22.13.53.png](https://qiita-image-store.s3.amazonaws.com/0/14510/179ca0b9-9b24-5a08-ae3b-6eece8961d1c.png)


## TypeHinting

最近 Python3.5 で入って話題になった型ヒントですね。
PyCharm は数年前からコメントによる TypeHinting 機能がついていて Python3.5 でなくても TypeHinting によるコード補完やリファクタリングが出来ます。

メタ操作などで型情報が失われる場合は TypeHinting で追加してあげれば補完も効くし引数エラーなども見つかるので積極的に使っていきましょう。
TypeHinting について語っていると終わらないので別の記事に任せるとして PyCharm で使える TypeHinting の Syntax は以下にまとまっています。　

https://www.jetbrains.com/pycharm/help/type-hinting-in-pycharm.html


## Database連携

MySQLなどのRDBに接続してデータ閲覧/操作などがGUIから出来ます。
私は SequelPro を主に使ってるのであまり使ってないですが ORM を使ってない場合は重宝すると思います。


## Django/SQL Alchemy対応

Django/SQL Alchemy の ORM の補完に対応しています。
これらの内部実装はメタ操作が多く、単に静的コード解析しただけでは補完は難しいのですが補完や定義へのジャンプが可能です。

![スクリーンショット 2015-12-15 22.42.38.png](https://qiita-image-store.s3.amazonaws.com/0/14510/4ec4ab40-6753-272d-1c81-d364f6f69da9.png)


## Template & HTML & JS

View から Template にシームレスに移動が可能で、HTML/CSS/JSの補完もばっちり。
Template 間の依存関係や画像などのパスもきちんと解析してくれている。

TypeScript や CoffeeScript にも対応しているのでサーバーサイドを書かないクライアント担当の場合でも PyCharm は非常に有用。

![スクリーンショット 2015-12-15 22.03.47.png](https://qiita-image-store.s3.amazonaws.com/0/14510/2b6cb4c7-b39e-b2fe-619a-d9df47069d40.png)

![スクリーンショット 2015-12-15 22.04.00.png](https://qiita-image-store.s3.amazonaws.com/0/14510/77fa6277-0eec-81b0-8f0d-053183e5f2d3.png)


## デバッガ

PyCharm にはデバッガが付属していて、ステップ実行やブレークポイントの設定、停止させての変数変更、 Watch など、一般的なデバッガで可能なことは大抵可能です。
このデバッガは Template 内も捕まえられます。当然ステップ実行可能です。
Template 内のスタックトレースは見づらいので複雑な Template の場合はかなりありがたい。


## リモートデバッガ

ssh でつないでリモートのサーバーにある環境のでの実行をデバッガで追いかけられます。
環境特有の問題の調査などでかなり効果を発揮します。


# 他にもいろいろ

機能が多すぎて書ききれませんがコード解析と補完の精度がかなり良い事や、最初から一通りの機能入っており環境構築が要らない事が PyCharm をおすすめする大きな理由です。
最初のプロジェクト読み込み時のインデックス作成さえ終わってしまえば、検索や置換、自動リファクタリングもかなり高速に動作しますし、それぞれがそつなく連携していてストレスフリーに使用できます。

よく機能の一部分だけ取り出して代替可能だとか、機能リストだけの比較を見ますが、開発環境の場合、一番使うコード解析周りと検索が高速で気持ちよく動いてくれる事が最も重要だと思います。
その点において PyCharm は何事にも代え難い体験を与えてくれるでしょう。