Pythonの開発環境をRstudioっぽくしてみよう



開発環境としてRstudioってすばらしいですよね!!

- `ctrl + Enter`で選択範囲を実行ができる
- Debugがシンプルで使いやすい
- ショートカットキーが充実してる
- plotが表示範囲があって、plotを保存できる
- `#`を使って自動的に目次がつけられる  
, etc.



しかし、残念ながらPythonでRstudioのような開発環境は私の知る限り存在していません・・・


そこで、
この記事では

- [Pythonの開発環境としてよく使われているJupyter notebookの利点](#pythonの開発環境)

- [Rstudioと比べたJupyter notebookの欠点](#rstudioと比べたjupyter-notebookの欠点)

に触れつつ、


- [Pythonの開発環境をRstudioっぽくしてみよう](#pycharmをrstudioっぽく使ってみよう)

と思います

##Pythonの開発環境
Pythonの主な開発環境としては

- VS(Visual Studio) Code
-  atom
- Jupyter notebook
- Spyder
- PyCharm

などがあります。


最近では、Google ColabのようにJupyter notebookで書かれたコードをよく見ます。
Jupyter notebookの利点としては

- 結果を可視化して残しておいたり、Markdownでの説明を入れることができ、
結果を確認しやすい
- 拡張機能があり、目次を自動で作成できたり、入力時に関数の定義を表示させたり、セルごとの実行時間を表示できたり・・・
- Jupyter notebookというより[Google Colab](#google-colabとは)では開発環境が整えられており、手軽にコードを書くことができる


### Google Colabとは
[Google Colab](https://colab.research.google.com/notebooks/welcome.ipynb)では無料でGPUが使用でき、PyTorch、Tensorflowなどがあらかじめインストールされています。面倒な環境構築をせずともGPUを使った深層学習のコードを実行できるので試しに実行したいときには便利です！！


![google_colabo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254458/8970ef58-fb8a-f466-fd0e-c4f052cb01a1.png)



詳しくは[こちら](https://qiita.com/clocker/items/ebeb5ea9ce216e1d6205)とか、[こちら](https://qiita.com/shoji9x9/items/0ff0f6f603df18d631ab)が参考になります


## Rstudioと比べたjupyter notebookの欠点

Jupyter notebook見やすくて良いんですが、ちょっと長めのコードを書いたり、`git clone` して他の人が書いたコードを読むときに関数内の変数が何を表しているかわかなくなることがあります
Jupyter notebookでは変数を確認するには新たなセルで実行して確認しなくてはいけません
debuggerもありますが、Jupyter notebookのdebuggerは使いづらい・・・

つまり、
Rstudioと比べてJupyter notbookの欠点としては

- 部分実行(ドラッグした範囲のみを実行する）ができない
- Debuggerが使いづらい(慣れの問題のような気がしますが）
- コードの１行コピーなどのショートカットキーが使えない





## PycharmをRstudioっぽく使ってみよう
### Pycharmのインストールと使い方
これらを解決するのに今ところ一番良いのがPyCharmです！！
（Visual Studio Codeも多分同じように使えると思いますが、個人的にDebuggerの使い方がPycharmに比べて分かりづらいです）

![pycharm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254458/be397088-9ab9-0f6b-fd2a-3bf885f28368.png)

インストール方法とかは[ここ]((https://qiita.com/m0p1nt/items/3c4cb0796f09fce0b591))で

#### 少しだけ補足
Anacondaなどで仮想環境を作っていて、仮想環境を指定して実行したいときには
File >> Settings >> Project Interpreter
で指定できます

![pycharm2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254458/3ce010be-837e-df3d-efaf-54c0aaebc234.png)

それぞれの仮想環境でインストールされているパッケージ等もここで表示されます
 
---

### Pycharmで行う設定

>Rstudioと比べてJupyter notbookの欠点としては

>- 部分実行ができない(ドラッグした範囲のみを実行する）
- Debuggerが使いづらい(慣れの問題のような気がしますが）
- コードの１行コピーなどのショートカットキーが使えない


Pythono実行環境の上記の欠点を解決するため、

1.Rstuioと同じショートカットキーを登録する
2.Debuggerを使えるようにする

を行います


#### 1.Rstuioと同じショートカットキーを登録する

File >> Settings >> Keymap
で変更したいショートカットを検索しましょう   

例えば

- 選択範囲のコード実行する  
`Execute Selection in Console` で検索


![pycharm3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254458/3fedc712-808c-898f-1eb2-8e3e2de082ff.png)



`Add Keyboard Shortcut`で
![pycharm4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254458/917612ec-b570-98b0-944c-ab5be6f47d9d.png)

`ctrl + Enter`
で登録します。
このときすでに`ctrl + Enter` は他のショートカットーキーに割り当てられていて削除するか聞いてきます。
そのまま残しておいても良いのですが、新しく登録したショートカットキーが動作しないことがあったので削除したほうが良いかと

また、
新しくショートカットキーを登録したら、すでに登録されているショートカットキーがある場合も削除しましょう


同様にして下記の部分についても登録していきます

- コードを１行上げる
`Move Line Up` で検索
`Alt + Up`で登録
<br>

- コードを１行下げる
`Move Line Down` で検索
`Alt + Down`で登録
<br>

- 選択範囲をコピーして貼り付け
`Duplicate Line or Selection`で検索
`Alt + Shift + Up` で登録
<br>

- コードを1行削除する
`Delete Line` で検索
`Ctrl + D`で登録
<br>

- カーソル位置より上をすべて選択
`Move Caret to Text Start with Selection` で検索
`Ctrl + Shift + Up`で登録

- カーソル位置より下をすべて選択
`Move Caret to Text End with Selection` で検索
`Ctrl + Shift + Down`で登録
<br>

- 前の単語までを選択範囲にする
`Move Caret to Previous Word with Selection`で検索
`Alt + Shift + Left`で登録


- 次の単語までを選択範囲にする
`Move Caret to Next Word with Selection`で検索
`Alt + Shift + Right`で登録
<br>

- コメントアウトを入れる
`Comment with Line Comment` で検索
`Ctrl + Shift + C`で登録


**選択範囲を広げる
Pycharmではデフォルトで範囲を広げるのに
`Up with Selection`　   →　   `Shift + up`
`Down with Selection`　 →　 `Shift + Down`
`Right with Selection`　→　`Shift + Right`
`Left with Selection`　 →　 `Shift + Left`
のショートカットキーが設定されています。
PycharmをインストールしたときのVimの設定によってはこれらのショートカットキーが動かないことがあるそうです。
その場合には、Tools >> Vim Emulatorのチェックを外すしましょう。


ショートカットについて@ZaKamaさんにアドバイスをいただきました
ありがとうございます
(要望があれば更に追記します）

これでRstudioと同じショートカットキーを使えるようになりました



#### 2.Debuggerを使えるようにする

Debuggerの設定はいらないですが、使い方だけ解説しておきます
<br>

Debuggerで主に使うのは

- Break point<br>
任意の部分でプログラムの実行を停止させる
停止した部分からStep overなどを使い順次実行させていく。<br>
このときコンソールを使うことができ、
Break pointを設定した関数内のローカル変数を表示できるようになります

<br>
Step ◯◯◯はBreak pointから順次実行させていくのに使用します

- Step over
実行する行に関数が含まれていてもその関数に移らずに実行を行う

- Step into
実行する行に関数が含まれているとその関数に移る

- Step out
実行部分が関数内にあるときに使用する
関数内の処理をすべて実行して、関数から出る

詳しくは[こちら](https://pleiades.io/help/pycharm/debug-tool-window.html#steptoolbar)


[Jupyter notebookでもDebbugerは使える](https://qiita.com/makopo/items/170c939c79dcc5c89e12)のですが、
Breakpointを

```
from IPython.core.debugger import Pdb; Pdb().set_trace()
```
で登録します。

これが結構面倒で、どこにBreakPointを置いたのか一目でわからなくなります。


Pycharmだと１クリックでBreakPointを設置でき、設定した位置が赤丸で表されます。


![pycharm5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254458/76a28e89-ffd9-0aee-8e06-eb37682bf9bd.png)



Pycharmでの具体的なDebuggerの使い方は[こちら](https://it-engineer-lab.com/archives/143)を見てください



ポイントだけいうと
Break Pointを設定する
Step ◯◯◯ で１行ずつ実行して
(下記画像の矢印のアイコンがStep ◯◯◯）
![pychram7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254458/efdd3287-2f61-6075-b1fd-1ccec4543dc0.png)


VariablesもしくはShow Python Promt(下記画像だとpythonアイコン部分）でコンソールを開いて変数を確認
![pycharm6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254458/643403d8-0984-ea8e-a67d-2db8513a9987.png)


---



これでRstudioに近づけたでしょう！！
といってもショートカットキーしか設定していませんが・・・
Rstudioと同じショートカットキーを使えて、部分実行ができて、Debuggerも簡単にGUIで行えるなら十分でしょう！！


さらに、PycharmのScientific モードを使えばRstuioのようにplotを表示させ、保存させることができるそうです
![scientific](https://pleiades.io/help/img/idea/2019.1/py_matplotlib_debug.png)


有料ですが・・・