機械学習といえばJupyter Notebook!! ColabとVS Codeを比較してみた!!

# はじめに

先日、機械学習に取り組んでいるチームへの所属となりました。

大学で少し触れた経験があるだけのわたしは「Jupyter Notebook触ることになるんだろーなー 🤔 」と思っていました。

そこで、Jupyter Notebook環境として考えられるColabとVS Codeについて比較してみました。

# Jupyter Notebookとは？

[Jupyter Notebook](https://jupyter.org/)は、データサイエンスなどの分野でよく使われる、プログラミングとその処理結果を同じ画面でイイ感じに表示してくれるツールです。

画面はこんな感じ↓

![jupyter_notebook.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366158/1a82624c-6bff-217b-0f3e-0a6f9db8c9b3.png)

公式サイトの説明を引用すると、

> Project Jupyterは、数十種類のプログラミング言語に対応した、インタラクティブ・コンピューティングのためのオープンソース・ソフトウェア、オープン・スタンダード、サービスを開発するために存在しています。(DeepL翻訳)

だそうです。

ちなみに、わたしはプログラミング言語にPythonを選定しています。

Jupyter Notebookのファイル（以下、.ipynbファイル）は、実体はJSONです。Python、Markdown、その他メタデータを含んでいます。このJSONが見づらく、また、実行した場合の結果も格納されるので、Gitと相性が悪いです 😱 

素直にJupyter Notebookを使うなら、Jupyter Notebookサーバを自前で立ち上げることになると思います。が、特にメリットがなく、がっつり使っていくなら、後述するColabかVS Codeのどちらかだと思います。

実は、Jupyter Labという機能が増えた後継があるんですが、Jupyter NotebookとJupyter LabはどちらもJupyterプロジェクトが内包しているようなので、今回は違いを気にしないことにします。（現状、Jupyter Notebookサーバを立ち上げて使っていないので）

# 環境その1 Colab

[Google Colaboratory](https://colab.research.google.com/)（以下、Colab）は、Google Driveとの連携が容易な、Jupyter Notebookをベースにした開発環境です。

Googleが提供するColab用のサーバ上で動作するので、ローカルでJupyter Notebookの動作環境を用意するより導入が簡単です。無料で使用を始めることができます。用意しやすいので、いろいろな機械学習のチュートリアルがColab前提だったりします。

ColabアプリをGoogle Driveに追加すれば、Colabのノートブックを作成できるようになります。↓

![colab_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366158/9cd50781-eca1-2951-c15f-00d5cd630419.png)

Colabのノートブックを開くとこんな感じ↓

![colab_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366158/0ac98236-89e7-721e-90b6-a174d9a388d2.png)

## GitHubとの連携

Colabは、**一応** GitHubと連携できます。編集した.ipynbファイルを、ブランチを指定してコミット & プッシュできます。ただ、コミットを追うなどはできず、あくまでも「コードの保存先としてGitHubを使う」程度の使い方しかできません。

# 環境その2 VS Code

## .ipynb

VS Codeは.ipynbファイルをサポートしていて、自分でJupyter Notebookサーバを立ち上げずにJupyter Notebook環境を使うことができます。VS Codeを使うことで、Git関連やそれ以外の拡張機能の恩恵を受けることができ、DXが向上します 💪🏼 

ただし、Colabと違いローカルマシンでの実行になるので、マシンパワーが要る処理の場合は、Colabの方が良いと思います。

VS Codeで.ipynbファイルを開くとこんな感じ↓

![vscode_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366158/360eb48b-0033-c88f-97a8-1e61517efefd.png)

参考 : https://code.visualstudio.com/docs/datascience/jupyter-notebooks

## .py

また、Pythonのファイル（以下、.pyファイル）をJupyter Notebookのように実行することもできます。`# %%`というコメントを用いて、.pyファイルをJupyter Notebookのセルに分割し、セルごとに実行できます。Markdownセルなら、`# %% [markdown]`です。

.pyファイルで扱うことで、差分が見やすくなり、Gitで管理しやすくなります。

実行結果が別ウインドウに表示されるなど、操作感はJupyter Notebookと少々異なります。

VS Codeで.pyファイルを開いて、実行するとこんな感じ↓

![vscode_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366158/f9773408-e6d6-b0bf-21a2-c6d87d03f67d.png)

参考 : https://code.visualstudio.com/docs/python/jupyter-support-py

## jupytext

[jupytext](https://github.com/mwouts/jupytext)は、.ipynbと.pyの変換をイイ感じにやってくれるライブラリです。

VS Codeの拡張機能としても[提供されています](https://marketplace.visualstudio.com/items?itemName=donjayamanne.vscode-jupytext)。.pyファイルを、VS Codeが.ipynbファイルを開く場合と同じように、開くことができるようになります。まだPreviewなので、採用には注意が必要です。

# その他の環境

がっつり機械学習プロジェクトを進める段階になると、[Amazon SageMaker Studio](https://aws.amazon.com/jp/sagemaker/studio/)や[Google Cloud Notebook](https://cloud.google.com/notebooks?hl=ja)が視野に入ってくると思います。Amazon SageMaker Studioは、最近無料で使えるサブセットの[Amazon SageMaker Studio Lab](https://studiolab.sagemaker.aws/)が登場したので、試してみるのも良いかもです。

# 採用したのは…

わたしのチームでは、検討の結果「**VS Codeで.pyファイルを扱う**」で落ち着いています。もともとGit上での開発に親しんだメンバが多く、さらにVS Code愛用者のわたしが布教活動したからです。

ただ、開発マシンのスペックがとても良いわけではないので、今後重いタスクを実行しようとする場合、別の環境に乗り換える必要があるかもしれません。

# おわりに

**Jupyter Notebook初心者、とにかく試してみたい人** → **Colab**

**VS Codeに慣れた人、Gitをフルで使いたい人** → **VS Code**

ではないでしょうか？

# 参考

- https://jupyter.org
- https://colab.research.google.com
- https://code.visualstudio.com/docs/datascience/jupyter-notebooks
- https://code.visualstudio.com/docs/python/jupyter-support-py
- https://github.com/mwouts/jupytext
- https://marketplace.visualstudio.com/items?itemName=donjayamanne.vscode-jupytext
- https://aws.amazon.com/jp/sagemaker/studio
- https://cloud.google.com/notebooks?hl=ja
- https://studiolab.sagemaker.aws
- https://aws.amazon.com/about-aws/whats-new/2021/12/amazon-sagemaker-studio-lab-no-configuration-ml-service
- [Jupyter Notebookを出力を無視してgit管理する方法](https://qiita.com/ctyl/items/bbc04e0b0bd4557d54a6)