脳波解析をがんばる
Analysis
Experiment
Math
Physics
Simulation

Jupyter Notebookのカスタム

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

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

見た目の変更

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

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

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

jupyter_contrib_nbextensionsのインストール

1
conda install -c conda-forge jupyter_contrib_nbextensions

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

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

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

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

jupyter-themeのインストール

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

1
conda install -c conda-forge jupyterthemes

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

1
jt -l

で表示できます.

選ぶ際には,

1
jt -t chesterish

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

1
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 をいれます.

1
jupyter --data-dir

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

1
2
3
4
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

を編集しました.

コードは

詳細
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 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 {

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

1
2
3
4
5
6
7
8
/* 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

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

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