個人的なPythonを書くためのツール使い分け〜Jupyter notebook Colaboratory Atom Pycharm

[学生LT Advent Calendar 2018](https://qiita.com/advent-calendar/2018/student-lt) 21日目の記事です。
他の方の素晴らしい記事に比べるとド素人記事...な上に学生LTの正式メンバー？ではないけど学生です...大丈夫かな...


最近研究やらお仕事やらでPythonを使うことが多いです。流行ってるんですかね。
コードを書くためのツールはたくさんありますし、文字さえ書ければメモ帳でも良いわけですが、自分が使ってみての感触と使い分けについて紹介したいと思います。
あくまで個人的な感想です！結局のところは自分が好きなものを使えばいいと思います！
~~そもそもそんなに沢山ツール使う必要ないでしょ手出し過ぎ~~

この記事ではJupyter notebook、Colaboratory、Pycharm、Atomについて書きます。
細かい、Jupyter notebookってなんぞや、みたいな話はすでにすばらな記事がいっぱいあるのでほぼしてないです！ 

#ざっくり比較

ざっくり表にまとめると、このような形で使い分けています。

| ツール       |    Jupyternote & Colabo     |    Atom (エディタ)|Pycharm  (IDE) |   
|:-----------------|------------------:|:------------------:|:------------------:|
|種類|Jupyter notebook| エディタ|統合開発環境|
|コードの量|短め or 短いのが沢山|短い or 長いけどIDE使うほどではない|多い。プロジェクトレベル|
|長所|全体をドキュメントにできる。共有しやすい。|コード補完。プラグイン。|プロジェクト管理。コーディングアシスト。|
|短所|大量の行数になるコードには向いてない|特にないかも|小規模のコードには大げさ|

# Jupyter notebook & Colaboratory

有名どころJupyter notebookはブラウザ上で動くコードを書けるノートブックです。
cellというコードを書く部分で構成されます。

便利なのは書いて！すぐ実行！が実行ボタンを押すだけでできるところや、Markdownでドキュメントを書いて、コードとテキストの両方が入った綺麗なドキュメントを作ることができる辺りです。
<img width="278" alt="スクリーンショット 2018-12-20 17.56.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/245054/026f9f84-7ccd-a177-361a-3c0f06d520bb.png">
↓
<img width="364" alt="スクリーンショット 2018-12-20 17.57.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/245054/c09959cf-c9af-a8fc-ea90-8ae65e287f88.png">

こんな風にブラウザ上で可視化もできます。([Jupyter公式　使用例　The Lorenz Differential Equationsより](https://jupyter.org/try))
<img width="1411" alt="スクリーンショット 2018-12-20 18.02.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/245054/7f7c823e-145c-2d6c-0318-f8c9cfceadd3.png">

対してColaboratoryというのはGoogleが提供する、ブラウザ上で動くJupyter notebook環境です。基本的な操作方法は同じです。
<img width="1442" alt="スクリーンショット 2018-12-21 14.45.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/245054/a0102abd-0cdb-8ec2-6d94-040cf5b46c1b.png">

## Jupyter notebookとColaboratoryの良いところ
- 手軽。
- cell単位で処理を書ける。段階的に処理をする必要があるときに便利。
- Markdownが書ける。
- 見た目が綺麗。
- 他の人と共有しやすい。

## Jupyter notebookの良いところ
IPython-notebook-extensionsという拡張機能を使うと勝手に見出し番号振ってくれたり、目次作ってくれたりとドキュメント作成にとても便利。

## Colaboratoryの良いところ
- Google側の用意してくれたGPUに無料でつなげる。（最近機械学習人気ですよね。インスタンスの制限はあります。）
- オンラインならいつでもどこでも。（Jupyterもサーバーにつなげば良いけど）環境構築がいらない。
- Googleアカウントで他の人と共有して編集しやすい。

## Jupyter notebookとColaboratoryを使う状況
####1. 工程を細かく分けたいとき
上にも書きましたが段階的に処理をして、途中経過を見る必要があるような処理の時はcell単位で処理を書けるので便利です。データの加工とか。
####2. Jupyter note形式で構わなくて、他の人に渡したり、共有したりする必要があるとき
   綺麗なドキュメント形式で書ける＝読む側の負担が減る　ので引き継ぎとか楽になると思います。
あとColaboratoryなら同時に見て編集とかできるのが便利です。

####3. 最初からJupiter notebook形式で書いてあるとき
そのまま使うのが楽です。

### Jupyter notebookとColaboratoryの向いてない状況
####1. コードが長い。
1つのcellあたりのコードが長くなると読みにくい気がします...

####2. 巨大プロジェクト
上に同じ。
あと、call hierarchyとかないときつくないですか...

####3. 高機能なエディタが欲しい
多分この辺は個人的な好き嫌いの問題でJupyterのextensionsにはコード補完もありますし、行番号表示とかももちろんできますが、Jupyter notebookのシンプル＆お手軽さが好きな私としてはあんまりごちゃごちゃ足すとうーん...ってなります。そういうときはもうAtom使います。


# Atom
<img width="536" alt="スクリーンショット 2018-12-20 18.51.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/245054/298b1641-c831-2ebb-4efa-d7bc9428c1aa.png">

テキストエディタの一種です。圧倒的なプラグインの多さとカスタマイズ性から高い人気を誇るテキストエディタだと思います。拡張性の高さによるコーディングのサポート機能はIDEに匹敵します。

## Atomの良いところ
- プラグインが豊富すぎて大体何でもできる。
- コード補完が優秀。
- ほんとに大体何でもできる。

## Atomの向いてない状況
####1. メモリとCPUに余裕がない
もしかすると多少メモリとCPUを使うかもしれないです。
軽いのが良い！という方はVimとかEmacsの方が良さげ。
でも状況によるので一概に重いとは言えないです。

####2. IDEでないと困るとき
優秀すぎて忘れがち...ですがAtomはテキストエディタであってIDEではないのでIDEに求めてることを全部Atomに求めると厳しい。

####3. カスタマイズが面倒な人 or 急いでる
プラグインは豊富ですが、インストール時点ではまっさら！な状態なので、コード補完やら差分比較やらターミナル表示やら色々な機能を使うためには自分でプラグインを一個一個インストールしてカスタマイズしなければなりません。カスタム終われば最強ですが、インストール時点からある程度の機能を...という方には向いてないような気がします。

# Pycharm
<img width="1501" alt="スクリーンショット 2018-12-21 14.51.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/245054/afb9d583-d914-bd79-bb80-cde3562ad61b.png">

JetBrains提供のPython統合開発環境。優秀なIDE。
Professional版は有料ですが学生は無料で使えます。ありがとうJetBrains。

## Pycharmの良いところ
- 統合開発環境であること。プロジェクト開発するときにはコード補完、コード改善提案、関数のdoc表示、call hierarchy、実行、デバッグと至れり尽くせりでとても快適。
- PEP8というPythonのコーディングスタイル規約のチェックをしてくれる。（Atomにもプラグインがありますがこっちの方が使いやすい気がします。）
- doc、git、teminalとありとあらゆる機能が揃っているので大抵の作業は他のウィンドウを見る必要がなくなる。ウィンドウ遷移の手間が省けて効率アップ。

## Pycharmの向いてない状況＆許せないところ
####1. 後置補完が苦手な人
Pycharmはpostfixという後置補完でコードを補完します。
どういうことかというと、後置補完ではない他のエディタでは`if`などを打つと`if condition :`などと出てくると思うのですが、後置補完ではまず条件文に使いたい変数などを打ちその後ろにドットを打つことで候補が出てきます。`変数.if`とすると`if 変数:`などと補完してくれる感じです。
単なる慣れの問題なのですが、今まで使っていたエディタの補完が後置補完でなかったために今だにpostfixに慣れません。結果、ほぼ使わずに書いてます...なので私と同じく後置補完が苦手な方には向いてないかもです。

####2. postfixにforがない！が許せない
なぜかコード補完にfor文がないです。なぜ....? カスタマイズして追加しようとしましたがいまだに上手くいかず...Atomはfor eachとか勝手に出してくれてたことを考えると許せないです...

####3. 小規模なコードのとき
わざわざ統合開発環境を使う理由はありません

# まとめ
Pythonで使っているツールの個人的な紹介でした。
少しでも何使おうか迷っている方の助けになれば幸いです！
（急いで書いてるんで間違っているところとかはコメントとかリクエスト下さい...m(--)m）
それではカレンダーお邪魔しました〜