atom使いのためのdockerとHydrogenによるお手軽python環境構築

## atomを使いたい
dockerを使うとお手軽にjupyterを使えるpython環境が手に入ります。ただjupyterをそのまま使いたくないという謎のこだわりがある。
pythonを書くときの環境はjupyter notebookが便利。最近だと[jupyterLab](<https://jupyterlab.readthedocs.io/en/stable/>)なんかも拡張機能とかもあって楽しいらしい。(参考:<https://qiita.com/canonrock16/items/d166c93087a4aafd2db4>)

しかし、私はatomを使いたい。特別理由はないがatomを使いたい。

pythonに関してはatomに[Hydrogen](<https://atom.io/packages/hydrogen>)というパッケージを導入すればjupyterライクに出力を得られる。ただ、SSHでリモートマシンに接続したり、dockerコンテナ上のカーネルに接続する場合多少の設定が必要になる。
今回は、いろいろあって環境がぐちゃぐちゃになったので、docker上にpython環境を用意しatom上でHydrogenを使う環境を整えたのでその流れをメモに残します。
## dockerコンテナの起動
docker imageを自分で用意する時間がなかったため、jupyter環境が最初から構築してあるimageを使わせてもらった。docker hubにいろいろあるが、自分は[jupyter/scipy-notebook](<https://github.com/jupyter/docker-stacks/tree/master/scipy-notebook>)を使わせてもらった。
詳細は省かせていただきます。
***1.***docker imageをpull

```
docker pull jupyter/scipy-notebook
```
***2.***docker imageをrun

```
docker run -p 8888:8888 -v ~/hoge:/home/jovyan/work jupyter/scipy-notebook start-notebook.sh --NotebookApp.token='yourtoken'
```

オプションとして、

* -p: コンテナのポートをホスト側に公開してポートフォワーディング。例ではローカルの8888とコンテナの８８８８をポートフォワーディングしている。
* -v: ボリュームをマウント。フォルダの同期のため。例ではローカルのhogeとコンテナ内のhome/jovyan/workとをマウントしています。
* start-notobook.sh: jupyterのコマンドを使用するために必要なオプション.このあとじゃないと下記のNotebookAppというオプションが効かない。
* NotebookApp.token="yourtoken": jupyter側のコマンドで、tokenを指定

tokenは指定しないと毎回変わるので指定することをオススメ。
ここで、

```
Executing the command: jupyter notebook --NotebookApp.token=yourtoken
[I 14:19:25.923 NotebookApp] Writing notebook server cookie secret to /home/jovyan/.local/share/jupyter/runtime/notebook_cookie_secret
[I 14:19:27.362 NotebookApp] JupyterLab extension loaded from /opt/conda/lib/python3.7/site-packages/jupyterlab
[I 14:19:27.362 NotebookApp] JupyterLab application directory is /opt/conda/share/jupyter/lab
[I 14:19:27.365 NotebookApp] Serving notebooks from local directory: /home/jovyan
[I 14:19:27.366 NotebookApp] The Jupyter Notebook is running at:
[I 14:19:27.367 NotebookApp] http://(***):8888/?token=…
[I 14:19:27.367 NotebookApp]
Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
```

とでてきてdockerコンテナ上にjupyter kernelが起動できた。

ここまでできたら、Hydrogenへの設定へ。
## Hydrogenの準備
調べればたくさん丁寧に説明してくれてる記事があるので、Hydrogenのインストール等は省略する。([こことか](<https://qiita.com/Nakashimn/items/856dd45a6c9d42c17b7c>))

atomのpacageからHydrogenの設定画面へ行き、***Kernel Gateway***というところに、こんな感じで記入。

![スクリーンショット 2019-04-14 23.50.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304217/395253d9-cd72-6d63-90a1-98de5368b47c.png)
**name**は自分の好きなものを、**baseUrl**はdockerを起動したときにでてきたurlをコピペ、**token**は自分で設定したtokenを記入。
詳細は[ここ](<https://nteract.gitbooks.io/hydrogen/docs/Usage/RemoteKernelConnection.html>)参照。
## Hydrogenからリモートカーネルへ接続
1. atomの画面からコマンドパレットを開き,Hydrogen:Connect To Remote Kernelを選択。
![スクリーンショット 2019-04-14 23.57.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304217/1d06cc8f-851d-5795-ac5f-6780f76d3d9d.png)
2.remote kernelが見つかれば次のように出てくるので、使いたいカーネルを選択。

 ![スクリーンショット 2019-04-14 23.59.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304217/1ee0175f-17a0-a79b-4299-313acd18bc63.png)
3.セッションを選択。
![スクリーンショット 2019-04-14 23.59.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304217/d28418c7-09d3-5fea-8dce-55cb0c4bde89.png)

ここまできたら、あとは通常のHydrogenと同じように使えるはず。

## まとめ
Hydrogenを使えば、atomのエディタ機能を使いながらjupyterのインタラクティブな機能をふんだんに使える。jupyter用のショートカットを覚える必要もない。docker使えば環境設定の必要もほぼいらない。python使う人はatomとHydrogen使いましょ。
(jupyter labとかは進化が目まぐるしいので、ちょっとさわってもいいかな・・・)

ssh接続でリモートマシン上のカーネルを使いたいときも同じようにできると思います。
## 参考
[Jupyterをブラウザで使うのをやめてAtomのHydrogenに移行した話](https://ensekitt.hatenablog.com/entry/2018/05/24/200000)
[JupyterのDockerイメージまとめ](https://qiita.com/tags/python)
[Hydrogen](<https://nteract.gitbooks.io/hydrogen/docs/Usage/RemoteKernelConnection.html>)
[jupyter docker stacks](<https://jupyter-docker-stacks.readthedocs.io/en/latest/>)