Jupyter Notebook を使っていると「バージョン管理がしにくい」と感じることがある.当然ながら Jupyter Notebook (.ipynb
) は JSON なので diff を取ることはできるけど,Notebook 自体のメタデータも含まれてしまって見にくすぎる.今回はそんな課題を解消できる nbdime (Jupyter Notebook Diff and Merge tools) を紹介する.
導入する
詳細な手順はドキュメントに載っている.今回は以下のコマンドを使った.環境によっては依存する JupyterLab も必要になるかも.
$ pip install nbdime
$ pip install jupyterlab
$ nbdime extensions --enable
導入後に Jupyter Notebook にアクセスすると,以下のように nbdiff
ボタンが表示される.
nbdime「GUI」を試す
nbdime は「GUI」と「コマンド」で使うことができる.まずは「GUI」を試す.
適当に「scikit-learn の load_iris()
でデータセットを取得して train_test_split()
で分割するコード」を書いて GitHub(リモート側)に push しておく.次にコードを書き換えてから nbdiff
ボタンを押すと,以下のように表示される.コード/表示結果/セルなど,コードに関係する部分に限定して diff を取ることができる.便利〜👏
nbdime「コマンド」を試す
次に「コマンド」を試す.nbdime を導入すると nbdiff
コマンドが使えるため,実行すると以下のようにシンプルに diff を取ることができる.追加したセルは YAML フォーマットっぽく表示されていて少し見にくいかも?それでも便利〜👏
$ nbdiff sandbox-nbdime.ipynb (中略) ## modified /cells/2/outputs/0/data/text/plain: - 120 + 105 ## modified /cells/2/source: @@ -1,2 +1,2 @@ -X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) len(X_train) ## inserted before /cells/3: + code cell: + execution_count: 4 + source: + len(X_test) + outputs: + output 0: + output_type: execute_result + execution_count: 4 + data: + text/plain: 45
nbdime「コマンド」は他にもある
個人的に使う機会は多くなさそうだけど,nbdime には nbdiff
コマンド以外も使える.Notebook をうまく merge できるのは便利そう!
nbmerge
: Notebook を merge する(3-way-merge)nbdiff-web
Notebook の差分を GUI で表示する(Notebook でnbdiff
ボタンを押すのと同じ)nbmerge-web
: Notebook を GUI で merge する(3-way-merge)nbshow
: Notebook をターミナル用に表示する(YAML フォーマットに近かった)
まとめ
Jupyter Notebook でコードに関係する部分に限定して diff を取ることができる nbdime を試した.「GUI」で diff を確認できるのは頻繁に使うことになりそう!