[作業効率化] Jupyterの拡張機能を全部調べてみた

今までも、いくつか拡張機能は使っていたものの、大部分は使わずに過ごしていたため、食わず嫌いはいけないな・・と思いドキュメント読みながら使ってみてまとめます。

<img width="613" alt="20180805_5.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/9cf0551a-f287-023f-5c2e-e076fef5265c.png">

# まえおき

- 拡張機能（nbextensions）自体や、過去の記事で触れたHinterlandやTable of Contents (2)などはそちらの記事（[Jupyter 知っておくと少し便利なTIPS集](https://qiita.com/simonritchie/items/d7dccb798f0b9c8b1ec5)）をご確認ください。
- 結構抄訳などしています。（浅く広く。詳細はドキュメントに任せるとして、こんな拡張機能あるのか、程度にご使用ください）
- nbextensionsを入れたときに最初から入っている拡張機能を対象とします。
    - 全部といっても、nbextensionsの設定画面を表示するための拡張機能だったり、基本的にデフォルトで有効で、且つ変えることがほぼなさそうなものは割愛します。
- 環境は「Python 3.6.5 :: Anaconda, Inc.」のものを使っています。（Win10環境）
- 各拡張機能の有効・無効などを切り替えた場合は一度開いているノートをF5などする必要がありますのでご注意ください。

# (some) LaTeX environments for Jupyter

- マークダウンのセルでLaTeXの拡張機能。
    - ※Jupyterデフォルトでも、\$記号で囲むとある程度LaTeXは書けたりはする。
- 斜体、太字、下線などのLaTeXコマンドが、\$記号など無しにマークダウンのセルで使えます。
    - ※この辺りは、マークダウン記法やHTMLタグでも代替可。

```
\textit{Jupyter}

\textbf{Jupyter} 

\underline{Jupyter}
```

<img width="567" alt="20180805_1.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/39e4159f-8e05-0149-07ca-082c12271720.png">

- 若干、対応していないコマンドや結果の表示が予期せぬものになったりが気になりました。
- LaTeXで使う括弧の閉じ括弧などを自動で記載してくれたり、入力補完的なオプションがあります。
- 独自の拡張設定やCSSによるスタイル設定ができるらしいです。

# A 2to3 converter

- セル内のPython2系のコードを3系に置換できます。
- 追加される、金づちのようなアイコンをクリックすると、現在選択しているセルに対して変換がされます。
    - Shift押しながらクリックすると、全セルが置換されます。

<img width="592" alt="20180805_3.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/4b0c457d-5a24-6167-4e01-4185e52d46ad.png">

- print文や、2系から3系で名称や階層が変更になったモジュールの対応、3系でstr型に統合されたユニコード指定などの除去などがされる模様。

実行前 :

```py
print 'Jupyter'
import urllib2

req = urllib2.Request()
print u'unicode sample'
```

実行後 :

```py
print('Jupyter')
import urllib.request, urllib.error, urllib.parse

req = urllib.request.Request()
print('unicode sample')
```

# AddBefore

- メニューに、現在のセルの上もしくは下に空のセルを追加するメニューを追加する拡張機能。

<img width="505" alt="20180805_4.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/a12f9440-62f6-abbd-51e9-84c90ff0ebf4.png">

- ※Escキーを押してコマンドモードにしてaキーを押してセルの前に空のセルを追加したり、セル実行が可能ならAlt + Enterでセルの後に空のセルを追加したり、といったことができるので、慣れればそういったキーボードショートカットの方が早い・・？という印象も。

# Autopep8

- PEP8（Python自体のコーディング規則）に合わせて、セルのコードを整形してくれます。
- autopep8ライブラリに依存しているようなので、先にそちらをpipで入れておきます。

```
$ pip install autopep8
```

- 他のライブラリ同様、上部のメニューにアイコンが追加されます。他とアイコンが被った場合などに、自分で他のものに変更するオプションが用意されていました。Shift押しながらクリックで、全セルが処理対象になります。

<img width="614" alt="20180805_6.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/c1e70dcd-a63d-214f-ee1e-a731a16ac1d7.png">

- たとえば、配列などでコンマの後にスペースが入っていないとスペースが挿入されます。

反映前 :

```py
['Jupyter','Python','Jupyter','Python']
```

反映後 :

```py
['Jupyter', 'Python', 'Jupyter', 'Python']
```

- 逆に関数のデフォルト値の部分はイコールなどでスペースを入れないのがPEP8準拠なので、スペースが削除されます。

反映前 :

```py
def sample_func(sample_arg = 1):
    pass
```

反映後 :

```py
def sample_func(sample_arg=1):
    pass
```

- ※触って試していた感じ、これを通せばPEP8準拠完璧！というものではなさそうで、補助的に考えて使っておくといいかな、という印象です。

# AutoSaveTime

- 何分ごとにノートを自動保存する？という点を調整できます。（2分が初期値な模様）

# autoscroll

- 私の環境（jupyter==4.4.0）で動かなかったのと、ほかの方（4系や5系など）でも動いていないようなので一旦割愛。
    - 参考 : [Autoscroll extension doesn't seem to work](https://github.com/ipython-contrib/jupyter_contrib_nbextensions/issues/672), [Fix autoscroll extension.](https://github.com/ipython-contrib/jupyter_contrib_nbextensions/pull/683)

# Cell Filter

セルに設定されているタグでフィルタリングできるよ、とドキュメントに書かれているものの、セルのタグってなんだ・・？という状態なので調べてみると、メニューのView -> Cell Toolbar -> Tags を選択すると、セルごとのタグ設定のUIが表示されるようです。（知らなかった・・）

<img width="568" alt="20180805_8.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/10a68be3-5357-2f97-63bb-a43845d367d8.png">

- タグ設定をした状態で、上部の入力フォームに何か入力すると、その文字列でセルの表示がフィルタリングされます。

<img width="251" alt="20180805_9.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/2000b1e9-5227-17c2-6b2e-60f64f631a32.png">

<img width="622" alt="20180805_10.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/9ee2ce46-48ea-104b-8978-341c1febbfd0.png">

- 半角スペースを使って複数文字列を設定するとAND条件でフィルタリングされるようです。

<img width="614" alt="20180805_12.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/28e363fa-8d6f-a0d3-c1c9-434a3a2dfea4.png">

- タグのUIの...ボタンを押すと、既にそのセルに設定されているタグ全体の編集や、改行区切りで複数同時追加などができるようです。（他のセルからコピペなどしやすい）

<img width="617" alt="20180805_11.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/7a61b076-3def-2ba8-0006-45eff19185b7.png">

# Code Font Size

- 入力のセルのコード部分だけ、フォントサイズを一時的に大きくしたりできるようです。
- プロジェクターでノートを映すときなどに便利、といったことが書かれています。スライドモードなどでも相性がいいかもしれません？
- メニューに虫眼鏡アイコンが追加になります。

<img width="506" alt="20180805_13.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/44f2c233-7d75-353d-b05e-2de3a56ce0e5.png">

# Code prettify

- ノートのコードを綺麗に整えてくれます。
- yapfライブラリが必要なので、事前にインストールしておきます。

```
$ pip install yapf
```

- 他と同様、アイコンを設定で変更できます。また、Shiftを押しながらアイコンをクリックすることですべてのセルを対象にすることができます。

<img width="626" alt="20180805_14.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/6c30df4f-6cbb-d87d-29c3-f0627d1b6aad.png">

反映前 :

```py
import numpy as    np
def get_apple_name(apple_id =  3) :
      # sample comment
    name_list=['a','b',   'c']
    pass
def    get_orange_name(orange_id=3):
    pass
```

反映後 :

```py
import numpy as np


def get_apple_name(apple_id=3):
    # sample comment
    name_list = ['a', 'b', 'c']
    pass


def get_orange_name(orange_id=3):
    pass
```

- ※PEP8で、コードの一番上の階層の関数やクラスは2行空けましょう、という記載があります。

# Codefolding

- 以前別記事のコメントでご教示いただいて、触ったりしていた拡張機能。
- コードセルの左側に矢印が表示され、ブロックを非表示にしたり再度表示したりできます。

```py
def get_apple_name(apple_id):
    if apple_id == 1:
        return 'ジョナゴールド'
    elif apple_id == 2:
        return 'つがる'
    else:
        return 'ふじ'
```

<img width="565" alt="20180805_15.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/e53d4513-c995-86c4-d1e8-873fec91ad81.png">

# Codefolding in Editor

- 機能はCodefoldingと同じですが、ノートではなく.pyファイルなどで折り畳みの機能が使えるようになります。

<img width="522" alt="20180805_16.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/71d7d04a-e4dc-99d4-16a3-e7700ce9ee44.png">

# CodeMirror mode extensions

- 使い方の記載がなく把握できなかったため割愛。

# Collapsible Headings

- マークダウンの見出し単位で折り畳みができます。

反映前 :

<img width="564" alt="20180805_17.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/6a51e70f-8d2d-347c-bc6c-d9c83305ae06.png">

小見出し（h2相当の個所）だけ折りたたんだ例 :

<img width="571" alt="20180805_19.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/ee968f15-0221-6c89-38ec-a6bb2d9f972b.png">

- ※見出しと同じセルに記載したマークダウンのテキストなどはそのまま残ります。

# Comment/Uncomment Hotkey

- コメント / コメント解除のキーボードショートカットが設定できます。
- 他のエディタなどで長時間作業した後にJupyterを触ると、癖でCtrl + Qでコメントアウトなどしようとしている時があり、且つJupyterでQがノートを閉じるためのショートカットだったりするので、後で職場の環境で変えておこうと思います。（知れてよかった・・）
- どのキーを割り当てるのかや、コメントアウトする際に行の先頭に\#を挿入するのか、インデントを加味して\#記号を挿入するのかの設定ができます。

<img width="588" alt="20180805_20.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/2d773952-20b9-b85c-ade8-a25fdf621e62.png">

- 複数行選択してコメントアウトしたりもできるようです。
- なお、今回私はCtrl + Qを割り振りましたが、たとえば既にQキーなどが割り振られているとうまく動いてくれません。そのため、メニューのHelp -> Edit Keyboard ShortcutsからQキーの別の割り振りを解除しています。

# contrib_nbextensions_help_item

- 単純に、Helpメニューに「Jupyter contrib-nbextensions」という、拡張機能のヘルプページへのリンクが追加される、というもののようです。

# datestamper

- メニューにアイコンが追加され、セルに現在の日時を挿入できます。

<img width="473" alt="20180805_21.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/78993d54-c877-37cc-83a3-c3f4f6f91f05.png">

# Equation Auto Numbering

- 同じマークダウンのセル内での各数式で、番号が自動で割り振られるようです。

```
\begin{equation}
1 + 1 = 2
\end{equation}

\begin{equation}
1 + 1 = 2
\end{equation}

\begin{equation}
1 + 1 = 2
\end{equation}
```

<img width="565" alt="20180805_23.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/d705feb8-f318-5be3-9434-f733aec75b5b.png">

- ※拡張機能関係ないですが、手動で任意の文字列を付けたい場合は\tag{}と記載します。

```
\begin{equation}
\tag{Equation 4-13.}
1 + 1 = 2
\end{equation}
```

<img width="526" alt="20180805_24.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/d5272a0d-0d3a-f6e5-69ed-552fc200f97d.png">

# ExecuteTime

- timeitのマジックコマンドなどを使わなくても、自動で各セルの実行時間のログを残してくれるようになります。（ノート放置して、あとで見返す際などに便利そうです）

<img width="567" alt="20180805_25.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/f46a9e2a-6a67-7b06-6922-ed39650c0b7f.png">

# Execution Dependencies

- ノートが長くなった際に、後でカーネルを起動しなおした際に、「〇〇のセルを実行するには××のセルの実行が必要」といった状況を解決するための拡張機能なようです。（全セル実行がとても時間かかる場合などに有益そう？）
- セルごとのタグ設定が必要なので、メニューのView -> Cell Toolbar -> Tagsをクリックしてタグ設定のUIを表示しておきます。
- タグ名の先頭に\#を記載して、一意なタグ名を指定します。（今回は、初期化用のセルとして\#initializer-cellとしました。）
- そちらのセルの実行が必要なセルに、=>記号と共に依存しているセルのタグを指定します。（今回は=>initializer-cellというタグ名を指定します。）

\#initializer-cell:

```py
import numpy as np
x = np.array([1, 2, 3])
y = 6
```

=>initializer-cell:

```py
x * y
```

- カーネルを再起動して、x \* yのセルを最初に実行してみると、initializerの方のセルが先に実行され、エラーなく実行できます。

<img width="569" alt="20180805_26.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/bcbf1563-af29-8987-753c-bda100b782ab.png">

# Exercise

- ノート上で問題文をマークダウンで書いて、答えを非表示に、ということができます。
- ハンズオンの社内研修資料作りなどでいいかも・・と少し思いました。
- 以下のように問題文のマークダウンと答案をShift押しながら両方のセルをクリックして選択しておいて、メニューのアイコンをクリックします。

<img width="564" alt="20180805_27.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/8f3e4f8d-10f3-dc13-8ad1-e30d213a39b8.png">

結果の表示（+部分クリックで答案を表示） :

<img width="390" alt="20180805_29.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/a8b74153-4f3a-817a-773b-1fd8dfbacd6e.png">

# Exercise2

- 基本的な機能はExerciseと同じです。
- 相違点は、明示的に答えを表示するラベルのボタンとなることと、この拡張機能とExerciseは同時に使用できるとのことで、1段目にヒントなり数式なりを出して、そののちに答えを出す、みたいな使い方もできるようです。
- ※色々操作していたら、組み合わせ一時的に各要素が非表示になってしまった、といったことがあったのでご注意ください。（さらに色々操作していたら表示を復帰できました）

初期表示 :

<img width="482" alt="20180805_30.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/5c9f0f09-3bbd-bedf-aefc-e84f435da5ab.png">

1段目表示 :

<img width="452" alt="20180805_31.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/ba7b98a6-40b7-8a6b-150a-be70fa054f45.png">

2段目表示 :

<img width="564" alt="20180805_32.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/cdae0576-c356-544c-76a9-3eca1e7ca050.png">

# Export HTML With Embedded Images


- メニューの File -> Download as 内に「HTML Embedded」という選択肢が増えるようです。
- 通常のHTMLのダウンロードだと、画像が埋め込みにはなっておらず（matplotlibのグラフ画像などの、エンコードされてHTML内に埋め込まれるものなどを除いて）、共有の際に画像も一緒に展開しないとですが、この機能を使うとHTMLに画像が埋め込まれた状態でダウンロードできるようです。

<img width="312" alt="20180805_33.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/994328a0-5034-a6ef-47ca-fb5574fa73ad.png">

- ※ノート上でマークダウン形式で画像を表示しているものが対象になるようです。（!\[<画像名>\]\(<画像のパス>\)形式のもの）

ノート上 :

```
![cat](cat.jpg)
```

<img width="562" alt="20180805_34.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/110da090-5e98-c746-7ac5-3e3a7cca2385.png">

普通のHTMLダウンロードだと、指定のパスに画像がないとリンク切れになります :

<img width="519" alt="20180805_35.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/8dcc6824-6fb8-f67c-2e98-121b6e4a8ed7.png">

この拡張機能を使うと、HTML内に埋め込まれるため、HTMLファイルだけあれば画像のリンク切れなどを気にせずに扱うことができ、チャット上でHTML共有する際などに便利です :

<img width="519" alt="20180805_36.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/09cefee1-67e5-219f-6617-f2321947ecae.png">

- ※フリー素材お借りしました。https://www.pakutaso.com/20180641165post-16503.html

# Freeze

- セルの編集のロックなどの機能が使えるようになります。
- メニューに、解除（左）・read-only（真ん中）・freeze（右のアスタリスク）のアイコンが追加になります。

<img width="535" alt="20180805_37.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/0393c7d6-62db-9d3a-7c8c-3ef3144f52f7.png">

- コードのセルでread-onlyに設定すると、薄い黄色の背景となり、セルの実行は可能であるものの、内部のコードを編集したりはできなくなります。

<img width="530" alt="20180805_38.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/6c804053-60d7-a61d-4f43-57dafe4fbe12.png">

- freezeアイコンをクリックすると、そのセルは薄い青色の背景となり、編集に加えて実行もできなくなります。

<img width="534" alt="20180805_39.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/c030e749-9d97-5eac-1985-42c5bef02ad3.png">

- ※背景色は設定で変更できます。
- マークダウンのセルの場合には、read-onlyではマークダウンの内容の確認までは可(編集は不可)、freezeにするとマークダウンの内容まで確認できなくなります。

# Gist-it

- GithubのGistへのノート公開用のアイコンが追加されるようです。
- Gistに関してはここでは触れませんので、「[Gistsでソースや文書をシェアする](https://qiita.com/hkusu/items/18cbe582abb9d3172019)」などの記事をご確認ください。

<img width="530" alt="20180812_1.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/6df30c3b-e011-67f2-ecba-f7ea24c264e2.png">

<img width="586" alt="20180812_2.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/3a1ef55c-cfde-9272-5b5d-acf9453429b8.png">

# Help panel

- Jupyterのキーボードショートカットの一覧を表示するアイコンを追加できるようです。

※デフォルトではアイコンが表示されておらず、「add a toolbar button to open the shortcuts dialog/panel」のオプションにチェックを入れたら表示されました。

<img width="637" alt="20180812_3.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/d7838f37-ed9f-1c05-5494-148754fc2102.png">

# Hide Header

- キーボードショートカット（デフォルトではCtrl + H）でヘッダー部分（ノートタイトルや編集メニューやアイコン類など）の表示・非表示を切り替えできるようです。

<img width="603" alt="20180812_5.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/b9e13e1d-844f-adc4-c86f-d9065bc762ec.png">

# Hide input

- 入力のセルを非表示にできるようです。

<img width="557" alt="20180812_7.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/5f1dcfa8-bc49-4cf3-4886-eda9306f01b1.png">

<img width="569" alt="20180812_8.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/5b3a7dee-2001-53a7-4d4e-91a6d743a230.png">

- ※ノートで開いた際には表示・非表示の設定が保持されますが、デフォルトだとHTML出力した場合は全て表示の状態で保存されるようです。
    - もし非表示にした状態を保持したい場合には、以下のように引数を調整しながら直接HTML保存のコマンドを実行します。

```
$ jupyter nbconvert --template=nbextensions --to=html <ノートブックのパス>.ipynb
```

- Jupyter上で実行する例 :

```
!jupyter nbconvert --template=nbextensions --to=html 201808_Jupyterの拡張機能を全部調べてみた.ipynb
```

```
[NbConvertApp] Converting notebook 201808_Jupyterの拡張機能を全部調べてみた.ipynb to html
[NbConvertApp] Writing 263146 bytes to 201808_Jupyterの拡張機能を全部調べてみた.html
```

- こんな感じに、HTMLでもインプットセルが非表示になります。

<img width="609" alt="20180812_10.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/92779b14-62a7-3a97-f2d8-ec045968f1e6.png">


- 下のスクショのように、複数のセルをShiftキーを押しながら選択した場合でも、1つのセルしか非表示設定が反映されず、1つ1つ個別に設定する必要がある？ようです。

<img width="566" alt="20180812_9.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/a2df68c1-af11-0239-da26-eed63c62ba26.png">

# Hide all Input

- インプットのセルをすべて一括で表示・非表示切り替えられるようです。
- 
以前記事でインプット行を非表示にするスクリプトを書いた気がしますが、こちらで良さそうな感じが・・


<img width="568" alt="20180812_11.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/79828ead-bdd6-f41d-ba38-3253e44cbdd5.png">

<img width="570" alt="20180812_12.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/38598f74-dc5d-55b5-f968-7075d5310d83.png">

- Hide input同様、HTML上でも非表示の状態を維持したい場合はコマンド経由で保存を行います。

<img width="605" alt="20180812_13.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/b73f8fda-20dc-7d84-b0c7-9bc460823159.png">

# Highlight selected word

- 現在カーソルが当たっている単語をハイライト（デフォルトでは緑）してくれるようです。
- 対象を同じセル内のみにするかノート全体にするか、マークダウンのセルを対象とするかなとがオプションで調整できます。

<img width="569" alt="20180812_14.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/bc87e156-e32a-0bf8-9354-de8f512cdb8b.png">

# Highlighter

- 選択したマークダウンのテキスト部分、もしくはマークダウンセル全体に対してハイライト設定ができます。

<img width="134" alt="20180812_15.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/b1e597cf-c509-cf66-cd55-2b98562361dd.png">

- 上のアイコンをクリックすると、以下のようにハイライトのアイコンが展開されます。

<img width="555" alt="20180812_16.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/feff98a0-7438-32e4-e5df-97ab5b1050db.png">

- 文字の選択がされた状態などで上記のアイコンをクリックすると、文字のハイライト設定ができます。

<img width="558" alt="20180812_18.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/18e47dbb-4c90-4356-1cd8-2e8e38f226da.png">

- ※HTML側では、あまり表示が保持されないようです。HTMLを見てみると、以下のようにクラス要素は追加になっているようなので、[custom.cssを調整](https://qiita.com/simonritchie/items/d7dccb798f0b9c8b1ec5#%E7%9B%AE%E3%81%AB%E5%84%AA%E3%81%97%E3%81%8F%E3%81%99%E3%82%8B)したりすればそれっぽくできそうな感じではあります。

```html
<span class="burk">ut labore et dolore</span>
...
<span class="mark">esse cillum dolore</span>
```

# Initialization cells

- メニューの View -> Cell Toolbar に Initialization Cell が追加されるので選択します。

<img width="369" alt="20180812_19.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/f08bdb4c-ebc1-82b4-972f-a6cc11eebd1d.png">

- そうすると、各セルにInitialization Cellというチェくボックスが追加されます。

<img width="566" alt="20180812_22.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/59e2fb83-30e6-50ee-44e5-4abce7e3c881.png">

- カーネル起動後、メニューのアイコンを押すと、チェックが入っているセルが実行されます。（import群のセルなどで便利そうですね）

<img width="172" alt="20180812_21.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/be29d635-0ed8-ee95-a88d-c311df238852.png">

# isort formatter

- 同じセル内のimportを、順番をソートしたり、PEP8に合わせた行の空け方（Pythonのビルトインモジュール、サードパーティーのモジュール、自身のプロジェクトのモジュール間で1行空けるなど）に合わせた整形処理をしてくれます。
‐ isortライブラリが必要とのことで、事前にインストールしておきます。

```
$ pip install isort
```

```
Successfully installed isort-4.3.4
```

- 他の拡張機能と同じように、Shiftを押しながらアイコンをクリックすると全セルが対象になるようです。

<img width="246" alt="20180812_23.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/752926ff-16d9-0a0c-dc2f-ff88313c971a.png">

適用前 :

```py
import my_module
import os
import pandas as pd
import sys
import numpy as np
```

適用後 :

```py
import os
import sys

import numpy as np
import pandas as pd

import my_module
```

# Keyboard shortcut editor

- 何やらブラウザでjsのエラーが出ていて使えなかったので割愛。（他のUIからでもキーボードショートカットの編集などはできるので一旦はいいか・・という印象です）

# Launch QTConsole

- Anacondaを使って用意した環境ならQTConsoleが最初から使えるそうなのですが、今記事を書いている環境はminiconda経由だったので、一部ライブラリをインストールしました。pipだけだと最初弾かれたりと、結構エラーが出たりしたので、Anaconda環境で使ったほうがいいかもしれません・・

```
$ pip install pyqt5
$ pip install qtconsole
$ conda install qtconsole
```

- ノート上で起動用のアイコンをクリックすると、コンソールが起動します。

<img width="427" alt="20180812_24.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/03c86443-15f8-c1c8-5129-bcb6b8ada8fb.png">

- 今までQTConsoleを使ってこなかったのですが、コンソール上でプロットなどもできるようです。（ただ、Jupyterがあればそんなに使わないかな？という印象も。）
- 使うとしたら・・ノートで作業している一方で、別のプロセス環境で長時間かかるスクリプトを流し続けたり、といったケースなどでしょうか？

# Limit Output

- 長いアウトプットなどの場合に、一定のしきい値を超えたら表示を省略したりできるようです。
- 設定画面でしきい値の文字数を設定するか、もしくはノートごとに調整したい場合は以下のようにセルで実行します。
- 誤って大量のアウトプット出力をしてしまって、一時的にノートが極端に重いといったケースを避けるための保険としていいかもしれません。

```py
from notebook.services.config import ConfigManager
cm = ConfigManager()
_ = cm.update(section_name='notebook', new_data={'limit_output': 1000})
```

- わざと少ない文字数制限を設定して試したところ、以下のように出力されました。（改行は1文字分とカウントされるようです）

```py
_ = cm.update(section_name='notebook', new_data={'limit_output': 100})
for i in range(2000):
    print(1234567890)
```

```
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1

limit_output extension: Maximum message size of 100 exceeded with 11880 characters
```

# Live Markdown Preview

- マークダウンのセルを編集中に、下にプレビューがリアルタイムで表示されます。
- 少し重たい印象はあります。

<img width="566" alt="20180812_25.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/b6ec9577-6e30-7d2a-223f-e44333b569d2.png">

# Load TeX macros

- 有効にすると、ノートが読み込まれるたびに指定のtexファイルの読み込みとmathjax（ブラウザ環境での数式表示用のライブラリ）の再実行がされるそうです。
- 共通のtexファイルのマクロなどを扱う際に便利、と記載があります。
- ノートと同じディレクトリに、latexdefs.texという名前でファイルを設置することで対象となるようです。
- 詳細はtexファイルを扱ったことがないので省略します。

# Move selected cells

- Alt + ↑キーもしくはAlt + ↓キーで、対象のセルを上下に移動させることができます。
- Shiftを押しながら複数のセルを選択した場合などにも、まとめて動かすことができます。

# Navigation-Hotkeys

- 一部のキーボード操作による挙動が拡張され、より効率的に作業できるようになるようです。
- 使い方が悪いのか、他のショートカットの設定と競合しているのか、ドキュメントに乗っているもの全ての挙動を把握できなかったため、把握できた一部を載せておきます。

**Edit-mode（セル入力中）時の挙動 :**

- Shift + Enter -> セルを実行し、次のセルに**Edit-modeのまま**遷移します。
    - ※通常はCommand-mode（セルの入力がされていない状態）に一旦なります。
- Ctrl + Enter -> セルを実行し、セルの位置は維持したまま、**Edit-modeも維持します**。
    - ※通常はCommand-mode（セルの入力がされていない状態）に一旦なります。
- Ctrl + y -> セルのタイプをコードとマークダウンを切り替えます。
    - ※通常は一旦コマンドモードに切り替えないと、キーボードショートカットで切り替えはできません。

**Command-mode（セルの選択はしているものの、入力していない状態）時の挙動 :**

- Esc -> Command-modeとEdit-modeを、エンターキー無しに切り替えられます。
    - ※通常は、EscキーでEdit-modeからCommand-modeに切り替え、EnterキーでEdit-modeになります。
- home -> スクロールと共に、一番先頭のセルにセルの選択が移ります。
    - ※通常はブラウザのスクロールのみ。
- End -> スクロールと共に、最後のセルにセルの選択が移ります。
    - ※通常はブラウザのスクロールのみ。

# Nbextensions edit menu item

- Editメニューの一番下に、nbextensionsの設定画面へのリンク(nbextensions config)が追加されます。

<img width="181" alt="20180812_26.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/b2067a40-36a9-9292-410c-2b1cdc7d7264.png">

# nbTranslate

- マークダウンのセルを、翻訳した状態のセルを追加してくれます。
- 日本語で書いたノートを、Kaggleでカーネル公開などする際に手っ取り早く英語に変換したりする際に便利かも・・と思いました。
- スパナのアイコンをクリックすると設定のUIが表示されるので、言語を選択します。

<img width="248" alt="20180812_27.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/003ae32a-98d2-b6cf-608e-37fa36939cdd.png">

- 今回は日本語から英語に変換したいので、Primary languageにJapanese、Secondary LanguageにEnglishを選択しました。

<img width="610" alt="20180812_28.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/ebfd102b-51d6-c748-6069-d2643861f9e9.png">

- マークダウンのセルに、「\#テストデータの内容を確認する。」と記載してみて、nbTranslateボタン（もしくはデフォルトではAlt + Tキー）を押してみると、英語のセルが直下に追加されます。

<img width="568" alt="20180812_29.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/2a20fb2d-dd3e-d4f6-cd48-148fab5094cf.png">

- もう少し長文で試してみます。

<img width="544" alt="20180812_30.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/f6c0fe27-bf24-2ab1-d755-e54cce43d38a.png">

- なぜか記号が半角から全角に変換され、マークダウンのリンクが崩れたりしましたが、なかなか良さそうです。
- デフォルトではGoogle翻訳が使われるようです。

# Notify

- 長時間かかる計算などを流した際に、計算が終わってから指定の時間経過したら、ブラウザの通知を飛ばしてくれるようです。
- 有効にしてから、ノートをF5すると通知の許可が求められます。

<img width="274" alt="20180812_31.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/2baf6440-99fc-e43e-8e45-f3c73f68e9cf.png">

- 計算が終わってから何秒間操作をしないままであれば通知を飛ばすのか設定ができます。

<img width="275" alt="20180812_32.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/3abdcd8a-add1-ec75-7768-890dae79f259.png">

- オプションで音を鳴らしたりの指定もできるようで、「計算終わるまで本でも読んでいよう・・」といったときに便利そうですね。

# Printview

<img width="243" alt="20180812_33.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/bdad634a-1d39-5bcc-16d0-74276897e027.png">

- アイコンをクリックするとプリント用の画面が新しいタブで開かれるようです。
- 基本的に一度HTML変換などがされ、余分な部分（空のセル）が削除されたりします。

# Python Markdown

- マークダウンセル内で、コードのセルのPythonの変数を展開することができます。
- 展開する際には、{{<対象の変数>}}といったようにマークダウンのセルに記載します。

例 : 以下のように、コードのセルとマークダウンのセルに記載します。

<img width="565" alt="20180812_36.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/22c73714-37f4-6fe5-8492-8d425572f2df.png">

実行してみると、マークダウンのセルが以下のように表示されます。

<img width="568" alt="20180812_37.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/a393a28c-44d3-270e-9a83-390a5b52ea1e.png">

- マークダウン内の共通の記述（リンク先のURLなど）を変数に持って、DRY風に扱っても面白いかもしれません。
    - ドキュメント見る限り、マークダウンオブジェクトや画像オブジェクト、数式のオブジェクトなども扱えるようです。

コードセル例 :

```py
from IPython.display import Markdown

wikipedia_link = Markdown(
    '[wikipediaへのリンク](https://ja.wikipedia.org/wiki/Python)')
```

マークダウンセル例 :

```
# リンク集

{{wikipedia_link}}
```

結果の表示 :

<img width="561" alt="20180812_38.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/db2fdf1f-3f66-35da-dd9b-4205a84be91c.png">


- 何かの拍子で、右上に「Not Trusted」と表示されていることがあります。その場合マークダウン中のコードは展開できないため、一度そのNot Trustedボタンを押して、実行を許可するようにします。

<img width="238" alt="20180812_34.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/16d34eb4-bc78-d551-77c6-a06dbf5a27e6.png">

<img width="552" alt="20180812_35.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/66b944bf-e394-fc78-901f-fa511849943e.png">

# Rubberband

- Ctrl + Shiftと左クリックしながらドラッグすると、赤い点線が表示され、その領域で複数のセルの選択などを行うことができます。

<img width="529" alt="20180812_40.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/a252db93-5207-de04-9dd5-b824f18a6a7a.png">

# Ruler

- PEP8で、1行辺り半角78文字程度に収めましょう、との記述がありますが、そのあたりの文字数のところに赤い点線を表示してくれます。（文字数はオプションで変更できます）

<img width="573" alt="20180812_41.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/e99a438d-7604-7d5d-e0db-da90f8b4916b.png">

- 他のエディタだったり、Colaboratoryだったりではこういった表示がされており便利に感じていたので、積極的に使いたいところです。

# Runtools

- セルの実行の拡張機能です。
- 既に用意されている機能がメニュー経由などではなく、ノート上のボタンのUIでセル実行関係が実行できるようになります。（Run all cellsなど）
- また、一部この拡張機能しかない？セルの実行方式もあるようです。（エラーを無視しつつ全セルを実行するなど）
- アイコンをクリックすると、拡張されたセル実行関係のUIが表示されます。（ドラッグで位置を調整できます）

<img width="152" alt="20180812_42.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/7c97ce2b-8af1-ca7f-29aa-95d66243a41a.png">

<img width="533" alt="20180812_43.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/7eafd89d-dc14-9b91-e416-32614833d3f8.png">

- （なんだかドキュメントよりもUIのデザインが古っぽく見えましたが、ノートでFirefoxを使っていたので、きっとブラウザの影響？でしょう・・）
- また、セルの左端にクリックできる領域が追加になり、クリックすると緑色、元に戻ったりになったりします。
- この色が付いたセルのみ実行する、といった制御もできます。

<img width="568" alt="20180812_44.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/35eef3a0-5876-739e-ac7f-35d033aa03c5.png">

# Scratchpad

- ノートを汚さずに、確認などで少し内容を確認したい、といった際に使います。
    - ノート上で書いてからセルを消すのと変わりはありませんが、消し忘れなどを避けることができます。
- 拡張機能を有効にした後には、ノートの右下にあるアイコン、もしくはCtrl + Bキーで表示・非表示が切り替わります。

<img width="134" alt="20180812_45.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/0f8038ed-49f0-4e9e-1904-4143ec2df4f4.png">

<img width="605" alt="20180812_46.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/1502d465-ea4c-c3a5-af62-a0628f978f4e.png">

- Scratchpadのセルでは、Shift + Enterでセルを実行することができます。

# ScrollDown

- Autoscrollがエラーになったのでこちらを使う感じでしょうか。
- アイコンをクリックすると、アウトプットが多い場合に、iframeが自動でスクロールしていきます。

<img width="186" alt="20180812_48.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/4d07dea8-f1be-d4e2-f90d-fb98080d7dfb.png">

<img width="554" alt="20180812_47.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/04d2fb2d-148f-bd5e-c691-3f28756b06cd.png">

# Select CodeMirror Keymap

- ドキュメントみる限り、CodeMirrorのキーボードショートカットをJupyterに反映できる、ということでしょうか。（sublimeとかだと[この辺り](https://codemirror.net/demo/sublime.html)でしょうか？）
- Editメニューからデフォルト、emacs、vim、sublimeから選択できるようです。

<img width="319" alt="20180812_49.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/9fe4e8b5-ef15-b60e-98a2-c42a038c8d14.png">

# SKILL for Codemirror

- *SKILL* モードなるものを有効化できる、とドキュメントに書かれていますが、Lispに詳しくないため割愛します・・

# Skip-Traceback

- スタックトレースを省略して、シンプルにエラー内容だけ表示してくれるようです。

<img width="557" alt="20180812_51.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/cd9d01cd-0352-1223-cc35-06552b45cd51.png">

- 三角アイコンをクリックすると、省略した内容を表示してくれます。

# Snippets

- 自分で設定したスニペットを、ドロップダウンで選択してノートに挿入できるようです。
- nbextensions/snippets/snippets.json に定義を追加することで反映されます。（JSONのフォーマットなどは設定画面などのドキュメントをご確認ください。）

<img width="569" alt="20180812_52.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/eea3cad6-70cb-f9c4-c272-6bf40c1b98aa.png">

# Snippets Menu

- こちらはSnippetsの拡張機能と異なり、自身で定義したスニペットではなく有名どころのライブラリのスニペットを挿入できるようです。
- 上部にSnippetsメニューが追加になり、そちらから選びます。

<img width="616" alt="20180812_53.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/fb5fa56b-2628-2cba-e245-bb9a3dc48eff.png">

- ライブラリごと、やりたいことごとに辿っていけるので、うっかり忘れてしまったときなど良さそうですね。

# spellchecker

- マークダウンなどのセルで、英語のスペルミスなどを赤くハイライトしてくれます。

<img width="575" alt="20180812_55.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/6cc939d6-4fd5-ab69-5fc9-04eaf66b114e.png">

# Split Cells Notebook

- アイコンを押すか、Command-modeでShift + Sを押すと、セルを半分のサイズにでき、並べて表示することができます。

<img width="571" alt="20180812_56.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/d44cd7f5-7e8d-d3bc-0127-3147aa19b637.png">

# table_beautifier

- 見栄えが少し変わったり、インデックスやカラムでソートするUIが表示されるます。

```py
import pandas as pd

df = pd.DataFrame(
    data=[{'a': 1, 'b': 2, 'c': 3},
          {'a': 4, 'b': 5, 'c': 6},
          {'a': 7, 'b': 8, 'c': 9}])
df
```

<img width="564" alt="20180812_57.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/71734307-9fe0-42e0-5872-971a94cb59de.png">

# Toggle all line numbers

- 全セルまとめて行番号の表示・非表示の切り替えができるようです。（拡張前でも、セルを複数選択してCommand-modeでLキーを押すと行番号の表示自体はできます）

<img width="503" alt="20180812_58.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/74aac1bc-29c2-e8a6-5108-1dd44e8ed34c.png">

# Tree-filter

- Tree画面（ファイル一覧画面）で、表示するファイルやフォルダをフィルタリングするUIが追加されます。

<img width="597" alt="20180812_59.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/98c31459-c2d5-56a8-0f6f-441f2216c369.png">

# Variable Inspector

- アイコンを押すと、現在ノートのカーネル上で生成されている変数の詳細を確認できるUIが表示されます。（サイズを変えたり、ドラッグで移動したりできます）

<img width="150" alt="20180812_60.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/7fe6b204-d443-43e2-6536-6a3a8bd395a1.png">

<img width="633" alt="20180812_61.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/36590f3b-f39c-6100-eb3a-51ca2e7e441f.png">

# zenmode

- 最後の拡張機能です！（な、長かった・・）
- アイコンをクリックするとコード以外のUIの表示が少なくなります。（背景も突然変わってびっくり・・（しかも背景がランダムというこだわり感・・））

<img width="138" alt="20180812_62.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/cab3033e-8007-25c7-7078-be0bfdad57bb.png">

<img width="717" alt="20180812_63.png" src="https://qiita-image-store.s3.amazonaws.com/0/228778/d7f41e35-a3a6-7f85-35e5-a5e72116613f.png">

# 総評

- 
軽い気持ちで記事を書き始めたら、大分大変でした・・

- これ便利そう！というのも結構あり、仕事などでも役立てていきたいところです:sunny:

---

他にもPythonなどを中心に色々記事を書いています。そちらもどうぞ！
[今までに投稿した主な記事たち](https://qiita.com/simonritchie/private/992f04ef0c56914d25d2)