JupyterLabのおすすめ拡張機能9選

## はじめに
Jupyter notebookの進化形、Jupyter Lab。見た目が綺麗で使いやすいです。
今回は2021年6月現在で使用できる便利な拡張機能をご紹介します。

**各拡張のインストール方法については、それぞれの拡張機能名のリンクからgithubに飛び、公式が案内している方法に従ってください。お使いのjupyterlabのバージョンによって必要な手順が変わる拡張もあります。**

(余談:実際にこれらの拡張機能を使ってみて、個人的に特に便利だと思ったのは
・3.コード自動整形
・4.Vim風キーバインド
・5.TensorBoard管理
の3つでした。時間がなければこの3つだけでも十分かも知れません。)

※JupyterLab,Node.jsが既にインストールされていることが前提です。
※拡張機能によっては最新版のjupyterlabに対応していないものもあり、きちんと動作するかは自環境で試してみてください。


これからJupyterLab,Node.jsを導入する人は以下を実行してください。

```console
# Jupyterlabの導入(anacondaを入れている人は既に入っている可能性があります。)
$ pip install jupyterlab 

# Node.jsの導入
$ brew install node
```

## [1.Variable Inspector](https://github.com/lckr/jupyterlab-variableInspector)
変数名や型、内容を常に横に表示しておけるようになります。
いちいちprint文を打つ手間が省けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233586/16b6c441-4a65-5805-dfaa-dba88ec35d13.png)


##[2.Table of Contents](https://github.com/jupyterlab/jupyterlab-toc)
Markdown記法で書いた見出しが一覧で表示され、目的の見出しにワンクリックで飛べるようになります。
**※2021年6月追記**
jupyterlab v3.0系ではデフォルトでこの機能は入っている模様です。

![Apr-11-2019 18-01-18.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233586/155f31ef-e43b-0637-8d20-012c472541ea.gif)


## 3.[コード自動整形](https://github.com/ryantam626/jupyterlab_code_formatter)
Pythonの自動整形ツールであるBlack,YAPF,Autopep8を使用してコード整形を行えるようにする拡張です。
ショートカットを登録すれば任意のキーを押すことで整形させられるようになります。

#### 導入手順
1.使用したい自動整形ツールをインストール

```
pip install (black or yapf or autopep8)
```

2.拡張機能の導入、有効化 

お使いのjupyterlabのバージョンによって手順が変わるので、[公式ドキュメント](https://jupyterlab-code-formatter.readthedocs.io/en/latest/installation.html#installation-step-1-installing-the-plugin-itself)をご覧ください。

3.ショートカットキーの登録
settings→Advanced Settings Editor→Keyboard Shortcutsを開き、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233586/bf6c9136-54bc-afba-4430-73463067268f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233586/617fee26-f552-d9eb-11aa-958cf389e143.png)

User Overridesに以下を記入。"Ctrl K","Ctrl M"を変更することで任意のショートカットを作成できる。

```json
{"jupyterlab_code_formatter:black":{
    "command": "jupyterlab_code_formatter:black",
    "keys": [
        "Ctrl K",
        "Ctrl M"
    ],
    "selector": ".jp-Notebook.jp-mod-editMode"}
}
```
導入時にエラーが出た場合は[公式](https://jupyterlab-code-formatter.readthedocs.io/en/latest/faq.html)に対処法が書いてあります。


## [4.Vim風キーバインド](https://www.npmjs.com/package/@axlair/jupyterlab_vim)
vimライクなカーソル移動やコマンドが打てるようになります。
**※2021年6月追記**
[従来この記事で案内していたvimキーバインド拡張](https://github.com/jwkvam/jupyterlab-vim)はjupyterlabのv2.0までしか対応しておらず、最新版のv3.0系には未対応です。このため、この拡張機能をforkして作成された、v3.0系に対応しているリポジトリにリンクを書き換えています。

## [5.TensorBoard管理](https://github.com/chaoleili/jupyterlab_tensorboard)
JupyterLabのファイルディレクトリからTensorBoardが起動できたり、起動中のTensorBoardを一覧化できます。
![tensorboard.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233586/79a2c4eb-4d2b-38a3-29ef-05a2c804784c.gif)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233586/8f91961a-62d2-8bac-edbc-b6d60d9a3470.png)


## [6.git連携](https://github.com/jupyterlab/jupyterlab-git)
JupyterLabのGUI上からcommit,push,pull,ブランチ切り替え,変更箇所の比較などができるようになります。
![preview.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233586/d45bcc0a-375d-bcb7-421f-38c2e383d87d.gif)


## [7.ipywidgets使用](https://github.com/jupyter-widgets/ipywidgets)
tqdmなどをlab上で表示できるようになります。

## [8.各種リソース監視](https://github.com/jacobtomlinson/jupyterlab-nvdashboard)
![resourse_mod.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233586/b4953f83-2815-ea76-552d-ada01d3e2d2b.gif)

GPU計算量使用率、GPUメモリ使用率、CPU計算量使用率、メモリ使用率などを監視するタブを出せます。
拡張機能を入れると以下のようにサイドバーに項目が追加され、見たいタブを選ぶとワークスペースにタブが追加されます。
<img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233586/cc50fc2f-f6a4-e95c-2de8-9518e1bf4726.png">


## [9.jupyterlab-lsp(定義ジャンプ/文法チェック/リファクタリング)](https://github.com/jupyter-lsp/jupyterlab-lsp)
関数定義へのジャンプ、文法チェック、リファクタリングだけでなくオートコンプリートも可能になります。
**※(私の環境ではこの拡張を入れてからjupyterLabが重くなったため、現在は使用を中止しています。動作速度が低下したら、この拡張をOFFにすれば直るかも知れません。)**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233586/9b5b4a0c-4e27-1a38-cb2d-38b65561b031.png)




## 動作未確認だけど役立ちそうな拡張
私の環境ではうまく動かなかったり試していなかったりで動作未確認ですが、今後対応される可能性もあるので一応紹介しておきます。
・[debugger](https://github.com/jupyterlab/debugger)
デバッグ実行できるようになる
公式がcondaを推奨しており、condaが入っていない自環境でインストールを試みたところ、拡張機能自体は入れられたのですが依存パッケージであるxeus-pythonが入らずインストールを断念しました。

・[elyra](https://github.com/elyra-ai/elyra)
notebook同士でパイプラインを作れたり、バッチ化できたり、snippetsを作れたりする。

・[neptune.ai](https://docs.neptune.ai/keep-track-of-jupyter-notebooks/index.html)
notebook上での実験管理ができる。詳しくは公式参照。

・[jupyterlab-flake8](https://github.com/mlshapiro/jupyterlab-flake8)
flake8のコードチェック機能が使えるようになる

~~・[jupyterlab_voyager](https://github.com/altair-viz/jupyterlab_voyager)~~
~~csvをきれいなグラフで可視化してくれる~~
→一年以上更新が無く、最新版のJupyterlabに対応していません。

・[dask-labextension](https://github.com/dask/dask-labextension)
Pandasライクな使い方で分散処理ができるdask dataframeのメモリ使用状況やタスク進捗状況をモニタリングできる


・Jupyterlabの拡張機能を42個紹介している海外記事
https://awesomeopensource.com/projects/jupyterlab-extension

## 最後に
そのままでも結構便利に使えるJupyterLabですが、拡張機能を入れることで自分好みにカスタマイズできます。
気になる拡張があったらぜひ入れてみてください。