jupyter labで最低限これだけは入れとけっていう拡張機能の紹介！

jupyterをちょっとでも触ってると、ちょこちょこ不便だなぁと思うところが出てきます。（どんなツールでもそうですが…）

でもjupyterくらい有名なプロダクトだと世界中の方が本当にさまざまな拡張機能を作ってくれているので、有効活用させていただきましょう！

anacondaやjupyter labのインストールが終わっていない方はこちらから導入してみてください！

[MacでGISデータ分析を始めるためにサクッとAnacondaとjupyter labをインストールしてみる](https://qiita.com/nokonoko_1203/items/3b5ceb911af6b22a449f)

## ひとまず仮想環境を作ってみる

仮想環境はプロジェクトごとに立ち上げるのが一般だと思いますが、jupyterのようなデータ分析基盤的なツールは1つだけ仮想環境を作って、すぐさま分析に入れるようになんでもかんでも突っ込んじゃうのが案外いいかもしれないと思っています。

なので、ホームディレクトリにでもjupyter_labのようなディレクトリを作って、そこに仮想環境を立ち上げていきましょう！

まずはディレクトリを作成します。

```bash
% pwd
~
% mkdir jupyter_lab
% cd jupyter_lab
```

仮想環境を作ります。

```bash
conda create -n jupyter_lab
```

その後、アクティベートします。

```bash
conda activate jupyter_lab
```

最後に、jupyter labをインストールします

```bash
conda install jupyterlab
```

これで準備完了！

## jupyter labの拡張機能を色々インストール

この状態で一旦jupyter labを起動してみましょう

```bash
jupyter lab .
```

起動後に画面左のパズルみたいなマークをクリックすると、「installed」の箇所にはpygmentsしかインストールされていないことがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/96c9163e-806e-aad0-cef3-aaa5692a057a.png)

とりあえずごそっと拡張機能をインストールしましょう！

拡張機能はpipやcondaからインストールできるものや、jupyter labextensionでインストールできるものなど色々ありますが、大抵はnode.jsが必要になるので、まずこちらをインストールしましょう

```bash
conda install -c conda-forge nodejs
```

ちょっとマイナーなパッケージや拡張機能は公式のリポジトリだと存在しないこともあるので、コマンド中に-cオプション（channelの指定）をつけ、conda-forgeを指定してインストールしましょう！

```bash
conda install -c conda-forge jupyterlab-language-pack-ja-jp jupyterlab_code_formatter black isort ipywidgets jupyterlab-lsp 'python-lsp-server[all]'
```

ただし、conda-forgeに存在しないものもありますので、その時は普通に公式とか別のchannelからインストールしましょう…（大抵、公式のリポジトリやドキュメントに情報があります。）

後ほど紹介するjupyterlab_variableinspectorは普通にインストールすると存在しないバージョンがインストールされてしまうバグがあるっぽいので、バージョンを指定してインストールします。

参考: [https://note.com/kksatotanaka/n/nf5f8af49426a](https://note.com/kksatotanaka/n/nf5f8af49426a)

```bash
jupyter labextension install @lckr/jupyterlab_variableinspector@3.0.7
```

インストールが終了した後に、拡張機能を再読み込みすると増えていますね！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/ed5477d1-e964-1f3e-23e4-aea47daf5dc5.png)

それではめんどくさいですが一個ずつ設定していきましょう！

### jupyterlab-language-pack-ja-jp

まずは日本語化。

SettingsからLanguageの項目があるので、日本語に設定するだけで切り替わります！

変わらない場合は、ページの再読み込み、それでもダメならjupyter labの再起動で切り替わると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/4a6dad0a-1423-50ee-97a8-394a67db7720.png)

### ドキュメントの自動保存・ブラケットの自動閉じ

このまま、「ドキュメントの自動保存」・「Auto Close Brackets」にチェックをつけときましょう！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/442f3810-8dfc-d0cf-56c7-00a8d9bdf245.png)

### jupyterlab_code_formatter

次にフォーマッターの設定です。

フォーマッターは他のメンバーと共同で開発するわけではないので設定変更を行わなくてもいい感じにしてくれる「Black」を利用していきます！

Settingsから詳細設定エディタを開きましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/f3662518-2cd7-91fa-7db9-8b89d13784a1.png)

まずは画面右上の`JSON Settings Editor`をクリックしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/94acbfd2-c6a8-b7e3-a6aa-897f6627fbcf.png)

するとこんな画面がでてきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/88b1d999-fb9c-e1a7-a9e7-335e9ff3a089.png)

検索窓から`formatOnSave`と検索し、検索結果をクリックするとユーザー設定が出てきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/f3660eb7-0e7d-7835-7027-9e890dba5e99.png)

画面右のユーザー設定を以下のようにして保存しましょう。

```bash
{
    "formatOnSave": true
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/adafef95-63d5-1701-e54a-9120a26042c7.png)

今後、詳細設定を行うときはこのように行ってください。

ここまでの設定でファイル保存時に自動フォーマットされるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/9a219a80-c108-2b1b-217c-f083c077ef87.png)

↓保存

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/b641040e-02ca-2b85-b4ca-5e30aa21cdce.png)

### 行番号の表示

拡張機能の設定ではありませんが、このまま詳細設定エディタから行番号表示の設定を行っていきましょう。

codeCellConfigを検索し、codeCellConfig内のlineNumbersをTrueに変更して保存しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/f26dce68-1ddc-0ca7-2587-dc3c244f82f1.png)

こうすることでnotebookに行番号が表示されるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/b0723ee9-74ac-a68c-c11f-f9b12b9f74b0.png)

### jupyterlab-lsp

こちらは、コードの参照先やDocstringに記載された引数や利用方法の説明を表示してくれるなどコードを書く上で便利な機能が揃っています！

あとコード補完なんかもしれくれます！

詳細設定エディタを開き、`language_servers`と検索しましょう。

その後、ユーザー設定の欄に以下のように書き込みます。

```json
{
  "language_servers": {
    "python": {
      "version": 1,
      "argv": [
        "python",
        "-m",
        "pyls"
      ],
      "languages": [
        "python"
      ]
    }
  }
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/3fd9f5dc-6385-dae5-72dd-c83109bbf060.png)

### jupyterlab_variableinspector

導入すると変数の中身をリアルタイムに確認することができます！

簡単な変数を定義して、セルを実行したのちに右クリックメニューからOpen Variable Inspectorを選択してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/c551aed5-3013-f810-890f-a4e565791246.png)

するとこんな感じで変数の方やサイズ、値などが確認できます！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/2d7b4d62-f8ae-8e0d-89ed-4ae2b0725069.png)

## インストールした拡張機能を確認する

最後に、インストールした拡張機能の一覧をみてみましょう！

以下のコマンドで確認できます！

すべての拡張機能が`enabled OK`になってますね！

```bash
% jupyter labextension list
JupyterLab v3.4.2
~/opt/anaconda3/envs/jupyter_lab/share/jupyter/labextensions
        jupyterlab_pygments v0.2.2 enabled OK (python, jupyterlab_pygments)
        @krassowski/jupyterlab-lsp v3.10.1 enabled OK (python, jupyterlab-lsp)
        @ryantam626/jupyterlab_code_formatter v1.4.11 enabled OK (python, jupyterlab-code-formatter)
        @jupyter-widgets/jupyterlab-manager v3.1.0 enabled OK (python, jupyterlab_widgets)

Other labextensions (built into JupyterLab)
   app dir: ~/opt/anaconda3/envs/jupyter_lab/share/jupyter/lab
        @lckr/jupyterlab_variableinspector v3.0.7 enabled OK
```

お疲れ様でした！

拡張機能は他にもさまざまありますので、お好みのIDEに仕上げてみてください！