目次
Math
Analysis
Experiment
Simulations

03Jupyter Notebookのカスタム

趣味です.ただの趣味.
人によっては全く興味がないと思うのですが,個人的にJupyter Notebookは見た目がださかったり,ちょっと使い勝手が悪いと思うことがあったのでカスタムの仕様と方法を貼っておきます.

備忘録兼,筆者のスクリーンショットを見て気になった人のためのページになります.

▶︎
all
running...

見た目の変更

早速ですが,Jupyter Notebookって背景真っ白でちょっとださいし,何より目が疲れますよね.

なので,ここではそんなJupyterの見た目をおしゃれに,目に優しくしていきます.時代はSDGsです.

こんな感じになりました.色なんかは各自である程度好きに変える事ができます.

jupyter_contrib_nbextensionsのインストール

conda install -c conda-forge jupyter_contrib_nbextensions

で,まずはJupyterの拡張機能をいじるためのnbextensionを追加します.
condaコマンドなことに注意です.

これで,色々といじれるようになります.

上手くいくと,Jupyter notebookのHomeを開くと

のように,Nbextensionsタブが作成されます.

jupyter-themeのインストール

jupyterの見た目を良い感じにしてくれるカラーテンプレートをいれます.

conda install -c conda-forge jupyterthemes

これでいれるのは完了です.選べるカラーテーマの一覧は

jt -l

で表示できます.

選ぶ際には,

jt -t chesterish

などとします.更に,他にも細かい設定を加えることができますので,自分は

jt -t chesterish -T -cellw 90% -f roboto -fs 9 -tf merriserif -tfs 11 -nf ptsans -nfs 11 -dfs 8 -ofs 8

としています.お好みで色々調べてみてください.

Vimキーバインド

jupyter-vim-binding

筆者はvimmerです.Emacsなんてものを使う変人もいるようですが,vimの方が圧倒的に便利です.chromeの拡張機能なんかにもvimをいれているのですが,これがないと作業なんてできたものじゃないので必須です.

jupyter notebookでも,操作をいちいちマウス触らずに,しかもホームポジションから手を動かさずに行いたいので,拡張でvim key-bindをいれます.

jupyter --data-dir

で,jupyterが入っている場所を特定します.表示されたパスを使って

mkdir -p $(jupyter --data-dir)/nbextensions
cd $(jupyter --data-dir)/nbextensions
git clone https://github.com/lambdalisue/jupyter-vim-binding vim_binding
jupyter nbextension enable vim_binding/vim_binding

を続けて実行します.これで,Jupyterでvimのkey-bindが使えるようになりました!万歳.

Vimキーバインドの設定

このままでも結構便利になっている(たとえばhjklでの移動)のですが,モード切り替えのためにEscを押さないといけないのは面倒です.せめてそれくらいはカスタムしておきたい.ということで,

~/.jupyter/custom/custom.js

を編集しました.

コードは

詳細
// Configure CodeMirror Keymap
require([
  'nbextensions/vim_binding/vim_binding',   // depends your installation
], function() {
  CodeMirror.Vim.map("jj", "<Esc>", "insert"); // jj setting!
});

// Configure Jupyter Keymap
require([
  'nbextensions/vim_binding/vim_binding',
  'base/js/namespace',
], function(vim_binding, ns) {
  // Add post callback
  vim_binding.on_ready_callbacks.push(function(){
    var km = ns.keyboard_manager;
    // Allow Ctrl-2 to change the cell mode into Markdown in Vim normal mode
    km.edit_shortcuts.add_shortcut('ctrl-2', 'vim-binding:change-cell-to-markdown', true);
    // Update Help
    km.edit_shortcuts.events.trigger('rebuild.QuickHelp');
  });
});

にまとめました.これによって,とりあえずjjでの挿入モード抜け出しを可能とし,あとはセルのマークダウンとコードモード変更をCtr-2で変更できるようにしました.

色の修正

しかし,vimキーバインド有効にしてしまうと,選択中のセルが白くハイライトされることになってしまい,とても見にくくなります.

なので改めて,ハイライト時の色を設定する必要があります.

~/.jupyter/custom/custom.css

を調整していきます.

div.cell.edit_mode {

という行を見つけ,その直前に下記をいれます.

/* Jupyter cell is in normal mode when code mirror */
.edit_mode .cell.selected .CodeMirror-focused.cm-fat-cursor {
background-color: #000000 !important;
}
/* Jupyter cell is in insert mode when code mirror */
.edit_mode .cell.selected .CodeMirror-focused:not(.cm-fat-cursor) {
background-color: #000000 !important;
}

これで,ハイライトされたセルの色が白く塗りつぶされないようになりました.闇のvim環境の完成です.

その他便利なNbextensions

その他にも導入している機能です.NbextensionsタブからOn/Offを切り替えることが出来ます.

(まとめながら他にも便利なの見つけて導入しているので一貫性がないです)

この画面で,チェックマークを入れているものが有効化されている機能です.先程コードベースで有効化したVIM bindingにもチェックが入っていますね.

Collapsible Headings

Collapsible headings は,マークダウンを使ってメモやタイトルを入れている人にとっては嬉しくなる機能で,マークダウンの#ごとにセルを折りたたむことが出来るようになります.

うれしい

Hinterland

楽しそうな名前.これはコードの自動補完です.

Skip-Traceback

エラーメッセージをみじかく畳みます.

もちろん,ちゃんと見たい際にはプルダウンから

見れます.

Tree filter

Jupyter notebookのHomeでファイルを検索できます.

これ,地味に嫌だったのでとても助かる.

Code font size

コードのフォントサイズを変更するボタンを追加します.

虫眼鏡で調整します.

プロジェクタとかに写すとき助かる.あと眼鏡忘れてきたときとか.

Snippets Menu

頻出のコードをスニペットとして登録しておき,引っ張ってくることが出来ます.デフォルトで色々ありますが,自前のを定義することも可能です.
たとえば

をクリックすると(これまた僕の環境と色が...面倒な...)

こうやっていれてくれます.

Codefolding

コードを折りたたむ機能です.

こういうfor文が...

こうやって折りたためます.

ExcuteTime

各セルの実行時間を出してくれます.コードの速さを追及したい時なんかに便利になります.あとついでに,最後に実行されたのがいつだったかも記録してくれるのでversion管理とかにも役立ちます.

Table of Contents(2)

目次を作成してくれます.

ここを押すと...

このように,マークダウンから目次を引っ張ってきてくれます.なんか僕のだと位置が被っちゃってイラつきますが,調整自体はできるはずです.

設定次第で,1版最初のセルに自動で目次を作るといった事もできます.

Variable Inspector

あまりに便利.変数一覧をだしてくれます.

メニューバーの目次の隣のひし形のマークを押すとでます.型やサイズなども見れるのでとても重宝します.

シミュレーション