Eclipse/Che のエディタとして Jupyter Notebook を使う

# まくら

Eclipse/Che は、他のクラウド IDE と比して、極めてモジュラリティの高い内部構成になっています。

Che7 になって Kubernetes/OpenShift 対応を鮮明にしたので、API サーバとしてブラウザと通信する workspace master と、Language Server 等を司るサイドカーコンテナ群、ビルド・実行・デバッグを司るワークスペースコンテナが、それぞれ協調して動くことは知られてきたかと思います。(…まだ知られていないですかね…日本語の情報が足りていないので…)

加えて、Che ではエディタ (IDE の UI 部分)も差し替えることができます。たとえば Che6 までは独自のエディタを使っていました。Che7 以降は、Eclipse/Theia ベースのエディタがデフォルトになっています。
エディタに関してだけ言うなら、workspace master は、エディタ用のコンテナを管理し、HTTP(S) や WebSocket を使ってエディタ・コンテナとお手元の web ブラウザとの通信を取りつないでいるだけです。

…ということは、任意の web アプリを Che のエディタとして使えるはずです。
実際のところ、エディタ用のコンテナには、事前のお約束に合わせた構成にする必要がありますが、差し替えは可能です。

本稿では、Eclipse/Che 公式がサポートしている Jupyter Notebook を Eclipse/Che のエディタとして立ち上げてみます。

# 手順

## Eclipse/Che の dashboard にアクセス

公式がサポートしているので、どの Che インスタンスを用いていただいても構いません。
本稿では、[PizzaFactory/Camino](https://che-banco.camino.pizzafactory.jp) でスクリーンショットを撮っていきました。Red Hat がホスティングしている che.openshift.io でも可能だと思いますが、使用できる RAM が少ないかもしれません。
もちろんお手持ちの Kuberntetes や OpenShift 環境に Che をデプロイしていただくのでも結構だと思います。

こんな感じの画面になります。

![Screenshot 2019-09-19 at 12.23.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5414/437e8ea3-daf2-06b4-dc4d-96252640939e.png)

ロゴが PizzaFactory になっていますが、気にしなくて大丈夫です。他の環境なら Eclipse/Che となっているはず。

## 新規 Workspace 作成

上記スクリーンショットにもある青色の `Create Workspace` ボタンを押します。

![Screenshot 2019-09-19 at 12.27.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5414/0de21368-a8b6-99c6-9e92-60b33ef84db3.png)

`NAME` は適当で構いません。

`SELECT STACK` も、今回は適当でよい(エディタ用コンテナ内に Python が存在するので)のですが、なんとなく Python 3.6 が載っている Django を選んでみました。

設定が終わったら作るのですが、右上の `CREATE & OPEN` という緑色ボタンは押さず、その右にある逆三角(▽)を押してドロップダウンリストの `Create & Proceed Editing` を選んでください。

![Screenshot 2019-09-19 at 12.29.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5414/961f4030-2a76-0037-4177-1584ceb77872.png)


## エディタの入れ替え

![Screenshot 2019-09-19 at 12.31.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5414/c0423f65-e847-2278-3132-4262f7ff3bbb.png)

編集画面に遷移します。

勘の良い方ならここから先の説明は要らないような気もしますが、続けます。

画面上中央あたりの `Editors` を押します。

![Screenshot 2019-09-19 at 12.33.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5414/cab0d8d7-7441-331e-7a58-20eb5a52c2bd.png)

はい、`Jupyter Nodebook` という項目ありますね。`Enable` のスイッチを押して、青色にします。

![Screenshot 2019-09-19 at 12.34.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5414/560d41b1-93cc-7128-5661-c6a97430628e.png)

設定変更後は、忘れずに画面右下にある緑色の `SAVE` ボタンを押して設定を確定してください。

![Screenshot 2019-09-19 at 12.37.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5414/56f6a82c-8ba0-59ff-90d8-caccc5d192da.png)

## ワークスペースを開く

さて、次は、設定したワークスペースを開きます。

右上にある緑色の `OPEN` ボタンを押してください。

![Screenshot 2019-09-19 at 12.40.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5414/5f5b1d0c-c867-4340-64b0-ea8f9bbaa15d.png)

ワークスペースのロードが始まります。
複数の docker コンテナをダウンロードしインスタンスを作成しますので、クラスタノードの状態が良い場合でも、数分待たされます。
カップラーメンにお湯を入れて食べごろになるくらいの時間は覚悟してください。クラスタオートスケーラが新しいノードを建てる場合には、もっとかかるかもしれません。

![Screenshot 2019-09-19 at 12.46.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5414/d9649fee-799a-d1ba-ac30-94c3a5b7e7a3.png)

ロード中は、適宜ログが出ます。赤い文字が出た場合はエラー終了ですが、そうでない場合は、表示が止まっていても裏では作業が進んでいます。

# Jupyter Notebook の起動

待ちくたびれた頃(?)に、Jupyter Notebook を見慣れた人にはお馴染みの画面が表示されます。

![Screenshot 2019-09-19 at 12.50.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5414/d8f914db-b17d-0aab-9f6f-397f991b6932.png)

あとは Eclipse というよりも Jupyter の領域なので、読者の皆さんのほうがお詳しいかもしれません。

![Screenshot 2019-09-19 at 13.00.38.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5414/43977487-c019-ead7-419d-4c27a9cb421c.jpeg)

# [Q&A] 役に立つの?

うーん。
思いつく限りのデメリットを先に挙げるなら…

* デフォルトでは GPU が使えない
  * 使えるようにするには Eclipse/Che 側へのパッチが要るかも
* 欲しいライブラリがデフォルトでインストールされていないかも
* SaaS 版では、実行時間の制約が厳しいかも

PizzaFactory/Camino や che.openshift.io では、ブラウザとの通信を監視していて、一定時間の無通信だった場合ワークスペースを落としています。 Jupyter では、この検出が、現行のバージョンでは上手く行っていないようで、思ったよりも短い時間でワークスペースが落とされてしまうようです。
これはおそらくバグなので、治せるはずです。(興味あるかたは本家に issue を投げてください)

"欲しいライブラリ" については、現行では matplotlib さえ入っていないようなので、かなり苦しいかなと思いつつ、単にエディタ用コンテナに含めればよいだけなので、本家に issue を投げれば対応してくれると思います。pull request なら確度が高くなるかも。

GPU が使えないのは、複合要因です。たぶん各 SaaS では、ノード用のインスタンスが高価になるので、対応を渋るかなと思います。サービス提供者とのご相談案件です。自前で立てている場合でも、Eclipse/Che へのパッチは必要になると思います。こちらは本家開発チームとのご相談案件です。[^1]

[^1]: 私見ですが、GPU を使いたい場合、Google 魔改造版 Jupyter である Colabolatory の使用を検討したほうが良いのでは、という気もします。

逆説的に、列挙したデメリットが気にならないケースでは、使い物になるかもしれません。

初学者向けのハンズオンセミナー等は、適切なユースケースの一つでしょう。クラウドのクラスタ・オートスケーラと併せれば、ノードを維持するためにかかるコストを抑制できます。

# まとめ

Eclipse/Che で Jupyter Notebook を使うための手順を紹介しました。

本稿で紹介した手順は、本稿執筆時点の、標準的なデプロイを行った場合のものです。今後 `SELECT STACK` の一覧に Jupyter 用の項目が増える可能性はありますし、お手元の Che の管理者が独自に追加している可能性もあります。