AnacondaでJupyter Notebookにnbextensionsをインストールする

#はじめに
Jupyter Notebookは、そのままでは、タイプしても候補が出ない（自動補完しない）為、エディターとしては使いにくい印象があります。
ここでは、Jupyter Notebookに自動補完（入力候補）機能を追加する為に、Anacondaを前提として、よく使われるnbextensionsをインストールする方法を説明します。

Anacondaの場合、「『pipは使うな』と書いてある、でも、『pipでインストールする記事しかない』」、ことが多く、未知のパッケージはインストールが怖い、というのが正直な所ではないでしょうか。

正確を期すため、英語のnbextenstionsの公式サイトを見ながら、実際にやってみました。
当該ページの日本語訳も、筆者が行いましたので、参考までに載せておきます。

【nbextenstions(英語)】
https://jupyter-contrib-nbextensions.readthedocs.io/en/latest/install.html

#前提条件
* Anacondaがインストールされている
* AnacondaからJupyter Notebookをインストールしている

尚、筆者の場合、バージョンはPython3.7.6　/ Anaconda 4.10.1 / jupyter-notebook 6.3.0 で、Windows10です。

バージョンはアナコンダ・プロンプトで それぞれ
`python --version`、`conda -V`、`jupyter-notebook --version`
とタイプして確認できます。

#内容
* 1. [Anacondaは原則condaを使う。pipは可能な限り使わない。](#1-Anacondaは原則condaを使う。pipは可能な限り使わない。)
* 2. [nbextensionsのインストール方法](#2-nbextensionsのインストール方法)
 * 2.1 [conda-forgeから jupyter_contrib_nbextensions をインストール](#21-conda-forgeからjupyter_contrib_nbextensionsをインストール)
 * 2.2 [Javascriptとcssのインストール](#22-javascriptとcssのインストール)
 * 2.3 [nbextensionsの有効化](#23-nbextensionsの有効化)
* 3. [nbextensionsの公式ページの抄訳](#3-nbextensionsの公式ページの抄訳)
* 4. [参考ページ](#4-参考ページ)
* 5. [変更履歴](#5-変更履歴)

#1. Anacondaは原則condaを使う。pipは可能な限り使わない。
パッケージをインストールする場合、よく見るコマンドが `pip install` です。しかし、よく言われるように、Anaconda環境では、可能な限り`pip install`は避けるべきです。

詳しくは、以下のリンクを参照してください。（**※Python公式サイトではありません**）
>https://www.python.jp/install/anaconda/pip_and_conda.html
ですから、Anaconda環境では、pip ではなく、conda コマンドを使うようにしてください。

**【注意: リンク先運営者のコメント】**
>Pythonの公式サイトではなく、Pythonを開発する Python Software Foundation とも無関係です。
（中略）
当サイトは、もともと Pythonドキュメント翻訳プロジェクト が翻訳した日本語版Pythonドキュメントを公開するために運用していましたが、翻訳ドキュメントが python.org 本家で公開されることになり、現在は公開しておりません。

#2. nbextensionsのインストール方法
この先、Anaconda環境（つまり、コマンドはcondaでインストールする。pipは使わない。）点に注意してください。

##2.1 conda-forgeからjupyter_contrib_nbextensionsをインストール

Anaconda Prompt(アナコンダ・プロンプト）で以下を入力し、`Enter`。

```
conda install -c conda-forge jupyter_contrib_nbextensions
```
最後に[y/n]ときいてくるので、yを入力し`Enter`。完了すると、doneと表示される。
（"**conda-forge**"は、condaのdefaultsにはない、パッケージが集積されたコミュニティです。)

***
注意：
DOSのコマンドプロンプトではありません。Anacondaをインストールすると、DOSと似たようなアイコンのAnaconda Promptがインストールされます。Anaconda Promptを起動すると、(base)と各行のはじめに表示されるはずです。(base)と出ていなければ、DOSを開けているのではないでしょうか？
***

**jupyter-nbextensions-configuratorのインストールは必要か？**
自分でインストールする必要ありません。これは、後で日本語訳の中にあるように、jupyter-contrib-nbextensionsをインストールすれば、自動でインストールされます。仮に、インストールを`conda install`で試みても、「既にインストール済み」と返してくるだけです。

##2.2 Javascriptとcssのインストール
同じく、Anaconda Prompt(アナコンダ・プロンプト）で以下を入力し、`Enter`。

```
jupyter contrib nbextension install --user
```

##2.3 nbextensionsの有効化
Jupyter Notebookを起動すると、新しくNbextensionsというタブが表れます。

![Jupyter_Nbextensions_tab3b.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2027725/4c482f43-8772-2ada-953a-8a90b5cc5d70.png)


左上のチェックボックスのチェックを外します。
（全てのチェックボックスがグレーアウトされているのは、これは、今の時点では、全てが無効になっているからです。）


尚、チェックボックスの英語は、以下のように言っています。

***
**英語**：*disable configuration for nbextensions without explicit compatibility (they may break your notebook environment, but can be useful to show for nbextension development)*

**邦訳**：明確な互換性のないnbexntensionsの（各機能の）設定を無効にする。（notebookの環境を破壊するかもしれないが、nbextensionの効果を示すには有効である。）

**筆者の解釈**：
海外サイトも調べましたが、免責と思われます。「nbextensionsの機能を同時に使う（複数チェックする）と、機能がうまく動かないかもれないし、それはnotebookの環境をおかしくするかもしれない。けれど、nbextensionsの便利な機能を利用できる。」ということだと思います。
しかし、チェックを外さない限り、機能を利用できません。よくあるパターンですよね。
***

左上の"dsiable..."のチェックを外したら、Hinterlandにチェックを入れます。
![Jupyter_Nbextensions_tab3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2027725/aed35e96-8fcf-4ef9-0e5c-e93f5813b031.png)

これで、新しいnotebookを作成すれば、候補が出るようになります。
![Jupyter_Nbextensions_note_after_installation2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2027725/07f0d284-9525-0a4e-1161-4ee3a3be45fe.png)


#3. nbextensionsの公式ページの抄訳
以下、英語のnbextensionsの公式ページの参考日本語訳です。一部省略しています。**[*]マーク**のある項目は全て以下のnbextensionsのサイトの日本語訳です。

https://jupyter-contrib-nbextensions.readthedocs.io/en/latest/install.html

**注意：公益性が高いと判断し、筆者が勝手に翻訳したもので、公式なものではありません。**自動翻訳も一切使用していません。


## [*] jupyter_contrib_nbextensionsをインストールする
`jupyter_contrib_nbextensions`をインストールするには、3つのステップが必要です。まず、Python pipパッケージのインストールが必要です。次に、notebook extensionsをJupyterのデータ・ディレクトリにコピーします。最後に、notebook extensionsを有効にします。有効化は、Jupyterのコマンドを使うか、より便利な方法として`jupyter_nbextensions_configurator`を使う方法があります。

## [*] 1. pyhonパッケージをインストールする

###PIP
nbextensionsはpyhonパッケージとして提供されます。インストールは、`pip`または`setup.py`スクリプトを実行する、通常の方法で行います。PyPiからインストールする場合は、シンプルに

```
pip install jupyter_contrib_nbextensions
```
とタイプします。あるいは、マスターブランチから直接インストールすることもできます。

```
pip install https://github.com/ipython-contrib/jupyter_contrib_nbextensions/tarball/master
```
インストールには、`--upgrade flag`や `-e`などのpipの通常のオプションが指定可能です。 

###Conda
"notebook extensions"と"[jupyter_nbextensions_configurator](https://github.com/Jupyter-contrib/jupyter_nbextensions_configurator)"のcondaパッケージは、[conda-forge](https://conda-forge.org/)から利用可能です。以下で、**両方をインストールできます**<sup>※2</sup>。

```
conda install -c conda-forge jupyter_contrib_nbextensions
```

これを実行すると、JavascriptとCSSファイルが自動でインストールされるので(`jupyter contrib nbextension install --sys-prefix`を使います)、以下のインストール手順の第２ステップは省略できます。

※2 : (筆者追記) "jupyter_contrib_nbextensions"をすれば、"jupyter_nbextensions_configurator"が自動でインストールされるので、後者を自らインストールする必要はありません。

#[*]リポジトリをCloneしてインストール
リポジトリからcloneしてインストールすることも可能で、開発には有効な方法です。以下でcloneする事が可能で、

```
git clone https://github.com/ipython-contrib/jupyter_contrib_nbextensions.git
```

次に、pipを実行します。

```
pip install -e jupyter_contrib_nbextensions
```

##[*] 2. javascriptとcssファイルをインストールする

このステップで、nbextensionsのjavascriptとcssファイルをjupyterのディレクトリにコピーし、jupyterのconfigファイルを編集します。なお、jupyterのサブコマンドが用意されています。

```
jupyter contrib nbextension install --user
```

コマンドは次の2つを実行します。nbextensionファイルをインストールし、nbconvertのconfigファイルを編集します。最初の部分は、本質的にはnotebookが提供する`jupyter nbextension install`のラッパーであり、関連するjavascriptとcssファイルを適切なjupyterのディレクトリにコピーします。2番目の部分は、configファイルである、`jupyter_nbconvert_config.json`と `jupyter_notebook_config.json`を以下に述べるオプションで編集します。コマンドの大部分は、jupyterが提供するものと全く同じコマンドです。オプションには以下を含みます。

* `--user` ユーザーのjupyterのホームディレクトリにインストールします。

（他のオプションは省略）

`uninstall`コマンドも用意され、全てのnbextensionのファイルをjupyterのディレクトリから削除します。

# [*] 3. 機能の有効化、無効化
nbextensionを使う為には、更に、機能を有効化する必要があります。これは、notebookインターフェースがロードできるようにするということです。その為に、Jupyterのサブコマンドが使用可能です。

```
jupyter nbextension enable <nbextension require path>
```

例えば、

```
jupyter nbextension enable codefolding/main
```

無効化するには、以下を使います。

```
jupyter nbextension disable <nbextension require path>
```

**他の方法として**、そしてより便利な方法として、"jupyter_nbextensions_configurator"を使う事ができます。これは、このリポジトリ(筆者追記：jupyter_contrib_nbextensionsのこと)に付属してインストールされます。これにより、（筆者追記：コマンドで）オプションで設定するのと同じように、個々のnbextensionsの機能を有効化、無効化できます。`nbextensions`タブがnotebookのページに表示され、そこからチェックボックスにより有効化、無効化が可能となります。さらに、それぞれの機能についての短い説明が表示され、設定のオプションも表示されます。

# [*] 4. 更に複雑なセットアップ
殆どのnbextensionsの機能はjupyterhubで動くはずです。しかし、jupyterlabでは動きません。複雑あるはカスタマイズされたインストールをする場合は、[Jupyter homepage](https://jupyter.org/)にあるドキュメントを参照してください。

[installing Jupyter](https://jupyter.readthedocs.io/en/latest/install.html) もご参照ください。


#4. 参考ページ
* 実践で使うPythonの技術が掲載されている弊社のページです。書籍のように構成されています。
https://shilabo.com/python/web_self/

* pipとcondaの関係：
https://www.python.jp/install/anaconda/pip_and_conda.html

* nbextensionsのインストール : 
https://www.soudegesu.com/post/python/jupyter-autocomplete/
https://qiita.com/simonritchie/items/d7dccb798f0b9c8b1ec5
https://qiita.com/SaitoTsutomu/items/1326e05eb992a8aa849d

#5. 変更履歴
* 2021/10/14 : 設定後のJupyter Notobookの図を分かりやすいものに変更。