アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

VSCode の Jupyter で Ruby を使う

morishitaです。 今回は小ネタを1つ。

VSCode の Jupyter 拡張は手軽に Jupyter Notebook が使えて便利です。
Python さえインストールされていれば、必要なライブラリがインストールされていなくても拡張子 .ipynb の Notebook ファイルを開いたときにダイアログが表示され、指示に従うとインストールしてくれます。 その後は Notebook ファイル内でコードを実行することが可能になります。
ローカルで Jupyter サーバを動かすよりも手軽に Notebook ファイルを利用できます。

Jupyter Notebook で Ruby を使いたい

Juypter Notebook は Juypter kernel と呼ばれるライブラリが必要で、 Python を利用するときには ipython kernel を利用します。
Juypter kernel は各種言語用のものが実装されており、次のページに一覧があります。

実に様々な言語向けの kernel がありますが、アクトインディでは主に Ruby を用いて開発しているので、 Ruby を使えるようにしたいと思いました。
前述のリストで調べると IRuby という kernel があるようです。
IRuby の README をざっと見ると Docker イメージがあるようなので、これを使ってみようと思います。

VSCode + Remote - Containers で IRuby 環境を作る

VSCode には Docker コンテナ環境をあたかもローカル環境のように利用できる Remote - Containers 拡張があります。 これを使って、 IRuby を使える Jupyter 環境を作ります。

必要なソフトウェアは次の通りです。

devcontainer.json を作る

適当なディレクトリ(ここでは仮に jupyter-ruby という名前とします)を作って、そこを VSCode で開きます。

その中に .devcontainer というディレクトリを作り、更にその中に devcontainer.json というファイルを作り、次の内容を書き込み保存します。

// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.205.2/containers/ruby
{
  "name": "rubydata/datascience",
  "image": "rubydata/datascience-notebook:latest",

  // Set *default* container specific settings.json values on container create.
  "settings": {},

  // Add the IDs of extensions you want installed when the container is created.
  "extensions": [
    "rebornix.Ruby",
    "ms-python.python",  
    "ms-python.vscode-pylance",
    "ms-toolsai.jupyter",
    "ms-toolsai.jupyter-keymap",
    "julialang.language",
    "Ikuyadeu.r"

  ],
  "mounts": [
    "type=bind,src=${localWorkspaceFolder}/notebooks,dst=/notebooks"
  ],
  "workspaceFolder": "/notebooks",
  "initializeCommand": "mkdir -p notebooks"
}

次のような構成になったかと思います。

jupyter-ruby
  └ .devcontainer
        └ devcontainer.json

この.devcontainer/devcontainer.json ファイルは Remote - Containers の設定ファイルで接続するコンテナのイメージやコンテナ側にインストールする VSCode の拡張などを設定します。

ここまで準備できたら、VSCode の左下の赤い部分をクリックします。

f:id:HeRo:20211112015844p:plain
Remote Container

コマンドパレットが開き、いくつかメニューが表示されると思います。
その中の Reopen in Container を選択します。

f:id:HeRo:20211112020127p:plain
Reopen in Container を選択

すると、必要なイメージが pull され、コンテナが起動し、それに接続した状態で VSCode が開き直します。

もしかすると右下に Pylance をインストールしろとかダイアログが表示されるかもしれません。素直に指示に従ってください。

これで準備完了です。

もし、コンテナでなくローカルファイルシステムで VSCode を開き直したい場合には再び、左下の赤い角をクリックして、Reopen Folder Locally を選択します。

Ruby の Notebook を作ってみる

試しに sample.ipynb というファイルを作ってみましょう。

右上の方に「Python 3.x.x 64-bit」というような表示があるのでクリックするとコマンドパレットが表示されます。その中から Ruby を選択します。

f:id:HeRo:20211112015922p:plain
Rubyを選択

あとはコードブロックに Ruby のコードを書いて実行ボタンをクリックすると実行結果が表示されます。

f:id:HeRo:20211112015951p:plain
Ruby を実行

pandas も使える

利用したイメージの Dockerfileを見ると、Pandas の Ruby ラッパーなどもインストールされており、利用できるようです。

f:id:HeRo:20211112020016p:plain
Pandas も使える

他の言語も使える。

利用しているイメージでは Ruby の他に Python ももちろん使えますし、 Julia や R のカーネルもインストールされているようなのでこれらも利用できます。

まとめ

VSCode の Jupyter 拡張と Remote - Container 拡張を利用して、Ruby が利用できる Jupyter 環境の作り方について紹介しました。

本気でデータを集計したりするにはライブラリが揃っているし、情報量も多いので Python を使うほうがいいと思います。Pandas が使えると言っても所詮はラッパーで中で Python 使っているわけですし。

よく開発中にこのメソッドってどんな動きだったっけ ? と調べる場合に irb などで実際に実行してみたりすると思います。そんなとき代わりに jupyter を使うと、実行結果が保存できて便利かなと思います。

最後に

アクトインディではエンジニアを募集しています。

actindi.net