Windows環境でGoogle Colab. をローカルランタイムに接続するための手順

基本的には、[こちらの公式HPの設定手順](https://research.google.com/colaboratory/local-runtimes.html)に沿ったものになります。

>Colaboratory では、Jupyter を使用してローカル ランタイムに接続することで、ローカル ハードウェアでコードを実行したり、ローカル ファイル システムにアクセスしたりできます。

ローカルPCに超強力なGPUが搭載されており、なおかつ、処理時間が12時間を超えるプログラムを走らせたい場合にのみ、利用する手段になると思います。

Windows 10 環境に、https://www.python.org/ から持ってきたインストーラーで Python3.7 が導入済みであることを前提とします（virtualenv と virtualenv wrapper でPython仮想環境を管理）。<font color='red'>注意: Anaconda は利用していない環境です。</font>

# Jupyter（本体）をインストール＆設定ファイル作成

コマンドプロンプトを開き、Jupyter をインストールします。

```sh:Jupyterのインストール
pip install jupyter
```

Jupyter の設定ファイルを作成します。


```sh:Jupyter設定ファイルの作成
jupyter notebook --generate-config
```

作成されたファイルは、`C:\Users\xxxx\.jupyter\` に `jupyter_notebook_config.py` という名前で保存されます。Jupyter notebook 起動時に読み込まれます。

# 拡張機能 jupyter_http_over_ws をインストール＆有効化

Jupyter の拡張機能 jupyter_http_over_ws をインストールします。

```:jupyter_http_over_wsのインストール
pip install jupyter_http_over_ws
```

jupyter_http_over_ws を**有効化**します。

```:jupyter_http_over_wsの有効化・実行結果
C:\Users\xxxx>jupyter serverextension enable --py jupyter_http_over_ws
Enabling: jupyter_http_over_ws
- Writing config: C:\Users\xxxx\.jupyter
    - Validating...
      jupyter_http_over_ws 0.0.7 ok
```

# 設定ファイルの編集

Jupyter の**設定ファイル** `C:\Users\xxxx\.jupyter\jupyter_notebook_config.py` **を編集**します。`#` でコメントアウトされているので、解除して次のように設定します。

```py:jupyter_notebook_config.py
#  Takes precedence over allow_origin_pat.
c.NotebookApp.allow_origin = 'https://colab.research.google.com'

## The port the notebook server will listen on.
c.NotebookApp.port = 8888

## The number of additional ports to try if the specified port is not available.
c.NotebookApp.port_retries = 0

```

# Jupyter Notebook の起動

Jupyter Notebook を起動します。

```:JupyterNotebookの起動
C:\Users\xxxx>jupyter notebook
jupyter_http_over_ws extension initialized. Listening on /http_over_websocket
[I 09:33:03.054 NotebookApp] Serving notebooks from local directory: C:/Users/xxxx/Documents/Python
[I 09:33:03.055 NotebookApp] The Jupyter Notebook is running at:
[I 09:33:03.055 NotebookApp] http://localhost:8888/?token=afd9b93664......................................
[I 09:33:03.055 NotebookApp]  or http://127.0.0.1:8888/?token=afd9b93664......................................
[I 09:33:03.055 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 09:33:03.396 NotebookApp]

    To access the notebook, open this file in a browser:
        file:///C:/User/xxxx/AppData/Roaming/jupyter/runtime/nbserver-3744-open.html
    Or copy and paste one of these URLs:
        http://localhost:8888/?token=afd9b93664......................................
     or http://127.0.0.1:8888/?token=afd9b93664......................................
```

このときに出力される「`http://localhost:8888/?token=afd9b93664...`」をコピーしておきます。

# Google Colab. に接続

ウェブブラウザ（Chrome）で [Google Colab.](https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja) にアクセス＆ログインして、適当なノートブックを開きます。

画面右上の `接続▼` をクリックして `ローカルランタイムに接続...` を選択します。
![fig1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152805/083a1423-fbb1-42be-6e86-d552c34aafab.png)

ダイアログが表示されるので、注意事項をよく確認したうえで、`バックエンドURL` の欄にコピーしておいた「`http://localhost:8888/?token=afd9b93664...`」を貼り付けて、`接続` をクリックして完了です。
![fig2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152805/eaf1f428-10bb-4f25-304a-73817c46da45.png)


ステータスが、次のように `接続済み（ローカル）` となれば成功です。

![fig3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152805/c6fffd81-b3a7-afee-5dcd-fc694a6bc395.png)

これで、90分ルールや、12時間ルールに縛られずに利用することができます。