Web

GitHub 上の Jupyter Notebooks を Binder で(実行可能な状態で)共有する

投稿日:2020年4月7日 更新日:

1. Binder とは?

JupyterLab と Notebooks

Web上でプログラムを書いて実行することができる JupyterLab という ツールがあります。このツールを使うと、プログラムコード(Python)・テキスト・画像などを1つの画面内に記述することができ、しかもプログラムコードを実行してその出力結果も画面上に表示させることができます。そのため、プログラムコードを使って何かを説明する場合にとても便利です。

このプログラムコード・テキスト・画像などは、Notebooks と呼ばれるファイル (拡張子 .ipynb) にまとめて保存されます。JSONフォーマットなので、テキストエディタで開くことができます。

JupyterLab の画面

Binder

既に書いたように、JupyterLab は Webページとして利用するツールですが、基本的にはローカルで実行して使います。これをインターネット上に公開できるサービスが Binder です。

Binder はいろいろなリポジトリサービスに対応していますが、GitHub を使った例で、簡単に動作を説明すると、

  1. GitHub で管理しているリポジトリに .ipynb ファイルを含めておく(ローカル上で JupyterLab を使って作成したファイル)。
  2. Binder 側から、GitHub上のそのファイルのURLを指定する。
  3. Binder はそのファイルを取得し、内部で仮想マシンを起動して環境を整え、1の .pynb ファイル(Notebook)を実行可能な状態で公開してくれる。

ということをやってくれるサービスが Binder です。Binder 側でアカウントを作るわけではありません。

また、上記の動作は BinderHubと呼ばれるオープンソースなツールにより実現されているのですが、この BinderHub は以下の2つのツールを利用しています。

  • JupyterHub:ユーザー認証機能を備え、ユーザー毎に環境を構築して Jupyter Notebook を提供するツール
  • Repo2Docker:インターネット上の Git リポジトリを使って Docker イメージを生成するツール

2. Binder 利用の流れ

ここでは GitHub を例に、Binder を使う流れについて説明します。詳細については省きますが、該当する公式マニュアルへのリンクを貼っておきます。

※ あくまで一例です。

(1) ローカル上で Jupyter Notebook を作成する

まずローカル上で、JupyterLab を導入し、Jupyter Notebook を作成します。

JupyterLab 導入の詳細については、Installation — JupyterLab documentation を参照してください。いろいろな導入方法があります。

導入できたら、JupyterLab を起動して Notebook を作成します(詳細は、Starting JupyterLab — JupyterLab documentation を参照してください)。

作成した Notebook は .ipynb ファイルとして保存されます。

パッケージを使っている場合には、environment.ymlrequirements.txtといった設定ファイルも必要になります。

(2) Jupyter Notebook を含むリポジトリをGitHubで管理する

(1) で作成したファイル群を、GitHub を使ったリポジトリで管理します。

(3) Binder上で Jupyter Notebook のURLなどを指定する

Binder にアクセスし、各項目を入力します。

リポジトリのURLを入力します。

ブランチ名もしくはタグ名を入力します。

Notebook ファイルへの相対パスを入力します(任意)。

このボタンを押すと、仮想マシンの作成が開始されます。

作成されるページのURLです。

作成されるページURLへのリンクを持ったバッジです。GitHub側の README.mdに貼り付けておくと、そのバッジから Binder のページを開くことができ便利です。

(4) Jupyter Notebook のウェブページが生成される

しばらく待つと、仮想マシンが作成され、指定したリポジトリ(のNotebook)が実行可能な状態で表示されます。

(3) で「Notebook ファイルへの相対パス」を入力していなかった場合は、以下のようにファイル一覧が表示されます。

使い方は、ローカルとだいたい同じです。

(5) 出力部分をクリアする

コードの実行結果をすべてクリアしたい場合は、[Cell]メニュー – [All Output] – [Clear] を選択します。

3. その他

Bind側でのURLについて

2-(3) で、Bind 側に生成されたページのURLが表示されていましたが、実際にこのURLにアクセスすると、その場で仮想マシンが立ち上がり、別のURLにリダイレクトされます。つまり、利用者1人1人に、別の仮想マシンが作成されるということです。2-(3) のURLは、その Notebook への入り口のようなものです。

そのため、既に誰かがアクセスしているページのURLに、別の環境からアクセスすると、以下のようなエラーになります。2-(3) で表示されたURLにアクセスしてくださいということです。

メモリについて

1GBのメモリが保証されます(最大2GB)。もし2GBを超えた場合は、仮想マシンが再起動するそうです。少しこわいですね。

参考:Frequently Asked Questions — Binder documentation

稼働時間について

ブラウザのウィンドウを閉じてから10分が過ぎると、仮想マシンはシャットダウンします。

参考:Frequently Asked Questions — Binder documentation

4. おわりに

ページを開いて内容を理解したりコードを試したりするのに、あまり長い時間が掛かるようなものには適していないようです。

あくまで、自分(もしくは第三者)の作成した少なめの内容の Notebook を誰かにさっと見て貰う・試して貰う、もしくは誰かの Notebook を自分が見る・試すという使い方が適しています。

5. 参考

📂-Web

執筆者:labo


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

HTTPレスポンスヘッダとブラウザキャッシュの関係を調査

目次1. はじめに2. 使用したツールWebサーバー側クライアント側3. 使用する HTML (PHP) ファイル4. 実験パターン1HTML (PHP)のヘッダ出力部分1回目のアクセス2回目のアクセ …

no image

Webサイトのスタイルガイド作成

参考 Webデザインのスタイルガイドの作り方 | UX MILK

Web

window.opener を使って元ウィンドウの情報が取得できるかどうかの実験

ウェブブラウザでウェブページを表示している場合、ブラウザのウィンドウを表す window というオブジェクトが存在しており、JavaScript から利用することができます。 window.opene …

Web

URLリダイレクトの動作

URLリダイレクトの動きについて説明します。

Web

ブラウザをキーボードで操作するための拡張機能 Vimium

ブラウザをキーボードで操作するための拡張機能 Vimium について説明します。