はじめに
2018年になり、データ分析を行うプログラミング言語は、従来のRとPythonの二強に加えて、Juliaが台頭してきたように思えます。また最近ではこれらの言語で記述可能なノートブックを提供するJupyterプロジェクトにおいても、総合開発環境としての面を強化したJupyterLabが発表されました。
さて話題が変わりますが、皆さんは普段一緒に作業するメンバー以外と分析・開発環境を共有する際、どのような手段を使っているでしょうか。ソースコードやデータはGitでのバージョン管理かと思います。では個人のコンピュータ内でのライブラリ等の環境はどのように脚を揃えているのかが気になるところです。ソースコードが共有できていても、実行環境での依存ライブラリ等のバージョンを揃えるのは難しいですよね。差分を確認するのも面倒です。
また勉強会やワークショップのために用意したコードが当日になって動かせないと残念です。こうした問題を解決する一つの方法としてDockerの利用が考えられますが、Dockerなんてインストールしたくない・できないという人も、あるいはインストールで失敗したりつまづいたり、ということがあるかもしれません。
dockerの話は以前書いたこちらも参照ください
データ分析環境の構築にDockerを利用しよう - Qiita
コンテナで暮らそう / So everybody, just follow me // Speaker Deck
そのような場合、言語のインストールや環境構築の手間を省略し、オンライン上でコードを実行させるサービスを利用すると良いでしょう。こうしたサービスを提供する言語、会社は増えてきており、Juliaには、GitリポジトリやGoogle Driveからプロジェクトを展開可能なオンラインノートブックのJuliaBoxが、RにはRStudio社が提供するRStudio Cloud、またこの他にJupyer Notebookをオンラインで編集するMicrosoft Azure Notebooksもあります。実際にJuliaBoxはCoursera等のMOOCのコースで利用されており、チュートリアルの充実なども含めて初めての方への導入や初心者が慣れていく環境としては優れているように感じました。
Binder
ですがこの記事で紹介したいのはbinderです(以前から存在していましたが、最近知りました。)。binderは、Gitリポジトリを指定したURLを共有することで、対象のリポジトリ内にあるファイルをJupyter notebook上で実行するサービスです。BinderもGitリポジトリ(GitHubの他GitLab)にソースコードが置かれていることを前提としており、さらにDockerfileを用意することで、好みの機能を拡張したり、パッケージの追加も容易です。
Binderと既存のサービスを比較すると次のようになります。
サービス | 基盤 | Git連携 | Julia | Python | R | JupyterLab対応 | 特色 |
---|---|---|---|---|---|---|---|
JuliaBox | Jupyer | ✅ | ✅ | ❌ | ❌ | ❌ | Juliaに特化。Git連携に加えて、Google Driveとの同期も可能。 |
Azure Notebooks | Jupyter | ✅ | ❌ | ✅ | ✅ | ✅ |
F# にも対応。MS社のCognitive Servicesのためのツールキットが整備されている |
RStudio Cloud | RStudio Server | ✅ | 🔺 | 🔺 | ✅ | ❌ | RStduioのプロジェクトでの起動。URLで共有可能。Julia, Pythonにさんかくをつけたのは、Rから各言語を動かすためのライブラリが提供されているためです(RStudio Cloudで実行可能かどうかは検証していません)。 |
Binder | Jupyer, RStduio Server | ✅ (ブランチ、コミットハッシュの指定も可能) | ✅ | ✅ | ✅ | ✅ (?urlpath=lab をつけて起動) |
GitHub, GitLabリポジトリ内での細かな指定が可。Dockerファイルによる拡張ができる |
デモンストレーションのためのリポジトリを用意しました。ボタンをクリックするとbinderによるビルドが実行され、ちょっと待つとJupyer Notebookが立ち上がります。(READMEに貼れるバッジが提供されているのもgoodです。)
立ち上がったら、jpmesh_demo.ipynb
を開いて実行してみてください。用意したパッケージがインストールされた状態で起動していることがわかります。
このようにbinderではGitHubのリンクおよびバッジを用意すれば、すぐに第三者が再現可能な環境を提供することが可能です。またbinderではrequirements.txt
などの設定ファイルを用意することで、再現に必要な依存ライブラリをバージョンを指定した状態でインストールできます。このデモリポジトリではRの実行を想定しているためinstall.R
に必要なパッケージを指定しています。
binderでは、Jupyerの実行環境としてPython2系など多様な状況を想定したサンプルが豊富に用意されているので、そちらを見るとより利用時のイメージがつかめると思います。。
一方でBinderの気になる点(ネガティブな視点)は以下です。
- ユーザを管理しないため、セッションを保持できない
- 各種形式 (
.ipynb
,.r
など)への出力が可能
- 各種形式 (
- Gitリポジトリをクローンするのに時間がかかる
- 同時に接続した際の負荷が心配
@kozo2 さんの記事でも強調されていますが、「あくまで「計算環境再現の保証」と「誰もが試用できる計算環境の提供」を目的としている」のが特徴で、この点を生かしてセミナーやブログ記事等を再現させるのに良いのではないかなと思っています。
RStudio Serverモード
Rユーザ(私)の皆さんに朗報です。BinderはJupyet Notebookを起動させますが、なんとRStudio Serverを立ち上げることも可能です。これには2つの方法があり、Dockerイメージのrocker/binder
(こちらはgeospatialな解析に必要なパッケージも備えています)を使うか、起動時のURLに?urlpath=rstudio
を指定するかです。URLの方は公式なサポートで、最近行われたようです。
次のgif画像で示していますが、起動したJupyer Notebookの右側にあるNew
ボタンをクリックし、RStudio Sessionを選択するとRStudioに切り替わります。ファイルはそのまま引き継がれています。感動!
RStudioを直接起動するブランチを用意しました。こちらのバッジをクリックで起動します。
というわけで、勉強会等の場所で、自分の環境では再現できたんや!なんでや!!とならなくてすみそうです。積極的に導入していきたいですね。
参考URL
Binderの紹介記事はQiitaや他のサイトにもいくつかの日本語記事がありました。この記事を書くために参考にした記事とともに掲示しておきます。
- 無料JupyterサービスのBinderの紹介 - Qiita
- binder の紹介 - Qiita
- Azure Notebooks 活用の tips - Qiita
- Binder: an awesome tool for hosting Jupyter notebooks - Julia Evans
- Binder 2.0, a Tech Guide – Jupyter Blog
- Running Executable Jupyter/IPython Notebooks Directly from Github With Binder | OUseful.Info, the blog...
Thanks @alt :)