LoginSignup
1
1

More than 1 year has passed since last update.

JupyterにPython以外のカーネルを導入する

Last updated at Posted at 2022-01-29

この記事の前提条件

誰でも無料で利用できる、カスタマイズ可能なJupyterであれば、自分が推している言語でカーネルを導入しない手は無いと思い、色々チャレンジしてみました。

ここでは以前投稿した下記の環境で話を進めていきます。

すでに利用可能な処理系のカーネルを導入

まずは、言語本体はすでに利用可能な状態で、カーネルさえインストールすればよいパターンから着手してみたいと思います。

【Bashカーネル編】

手始めに容易に導入出来るBashから行います。こちらカーネルはPython3で実装されているので、pipコマンドでモジュールをインストール出来ます。

Jupyterへのカーネルのインストールも、Pythonモジュールの関数を実行するだけです。

$ pip3 install --user bash_kernel

$ python3 -m bash_kernel.install

後はページをリロードすればBashカーネルがLauncherに追加されます。
image.png

コンソールを起動してみました。
image.png

【JavaScriptカーネル編】

こちらはnode.jsのパッケージで提供されているIJavascriptyarnコマンドでインストールします。
専用のフォルダにインストールすることもできますが、ホームディレクトリにインストールする方法が簡単です。

カレントディレクトリがホームディレクトリであることとして、下記のコマンドを実行します。

$ yarn add ijavascript

少し時間がかかりますが、ホームディレクトリ直下のnode_modulesディレクトリにインストールが完了します。

次はJupyterへのインストールは専用のコマンドが設けられています。仮に~/node_modules/.binが環境変数PATHに追加されていなければ、フルパスか、npxコマンドで実行しなければなりません。

$ npx ijsinstall

$ ~/node_modules/.bin/ijsinstall

同じく、インストール後の設定ファイルも、PATHの設定によっては修正が必要です。
ホームディレクトリ直下の~/.local/share/jupyter/kernels/javascriptというフォルダにkernel.jsonという設定ファイルが作成されています。

もし実行ファイルijskernelPATHが通っていないのであればこれをフルパスに書き直さなければなりません。

ホームディレクトリにインストールした場合はnpxを挿入することでも解決します。
npxコマンドを追記する例を下記に示します。なお読みやすいようにコードを整形しています。

kernel.json
{
    "argv":[
        "npx",
        "ijskernel",
        "--hide-undefined",
        "{connection_file}",
        "--protocol=5.1"
    ],
    "display_name": "Javascript (Node.js)",
    "language": "javascript",
    "interrupt_mode": "message"
}

ここまででページをリロードするとJavaScriptカーネルが起動可能となっています。
image.png

コンソールを起動した画面です。
image.png

【Typescriptカーネル編】

今やWeb開発において最もスタンダードな言語であるTypescriptにもカーネルが提供されています。node.jsで開発するなら、Typescriptは確実に必要になるはずなので、ぜひ導入しましょう。

こちらもnode.jsのパッケージなので、ほぼ同じ手順です。

$ yarn add itypescript

$ PATH=${HOME}/.local/bin:${PATH} npx its --install=local

image.png

image.png

【Goカーネル編】

GoもCloudShellには組み込み済みなので、少ないステップでカーネルを利用開始できます。Goで実装されており、Goのパッケージ管理機能でインストールします。

今回は専用のディレクトリを作成してからインストール作業を進めた後、不要になったディレクトリのクリーンアップも実施しておきます。

まず下記のコードでパッケージのインストールを行います。

$ GOPATH=~/gophernotes GOBIN=~/go/bin GO111MODULE=on go install -x github.com/gopherdata/gophernotes@latest

インストール時に大量のログが出力されるのが煩わしければ-xオプションは省略できます。ビルドした実行ファイルgophernotesはホームディレクトリ直下のgo/binディレクトリに配備されるので、残しておきます。

引き続きJupyterへのインストールですが、特にインストーラーは提供されていないので、手作業です。

$ mkdir -v ~/.local/share/jupyter/kernels/gophernotes

$ cp ~/go/pkg/mod/github.com/gopherdata/gophernotes@v0.7.4/kernel/* ~/.local/share/jupyter/kernels/gophernotes/

$ chmod u+w ~/.local/share/jupyter/kernels/gophernotes/kernel.json

$ GOPATH=~/gophernotes go clean -x -modcache -cache; rm -rfv ~/gophernotes

後は~/go/binPATHに含まれていなければ、やはりkernel.jsonの修正が必要です。~/.local/share/jupyter/kernels/gophernotesディレクトリに配備されます。

kernel.json
{
    "argv": [
        "gophernotes",
        "{connection_file}"
    ],
    "env": {
        "PATH": "${PATH}:${HOME}/go/bin"
    },
    "display_name": "Go",
    "language": "go",
    "name": "go"
}

envプロパティで環境変数を設定しています。ページをリロードしましょう。
image.png

コンソールの起動画面です。
image.png

【Javaカーネル編】

おなじみのJavaです。Jupyterでカーネルを利用するにはバージョン9以降が必要ですが、Cloud Shellではバージョン8と11が利用可能なので、大丈夫です。

カーネル本体はJavaで実装されたjarファイルになっています。

$ /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-8u252-b09-1~deb9u1-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)

$ /usr/lib/jvm/java-11-openjdk-amd64/bin/java -version
openjdk version "11.0.13" 2021-10-19
OpenJDK Runtime Environment (build 11.0.13+8-post-Debian-1deb10u1)
OpenJDK 64-Bit Server VM (build 11.0.13+8-post-Debian-1deb10u1, mixed mode, sharing)

では作業用にディレクトリを作成してダウンロードから実施します。

$ mkdir -pv ~/IJava; cd ~/IJava

$ curl -L https://github.com/SpencerPark/IJava/releases/download/v1.3.0/ijava-1.3.0.zip | jar xv

インストーラーはPythonスクリプトです。いくつかオプションがありますが、カーネルの応答待ち時間の上限が、既定で3秒なのがちょっと短すぎると感じたので、ここでは10秒に延長しました。

$ python ./install.py --user --timeout 10000

$ rm -rfv ~/IJava

インストールが終わったら、不要になった作業用ディレクトリは、一括削除で構いません。

これで自動的に生成されるkenel.jsonをそのまま使う場合はバージョン11のほうを既定のJavaに設定しなければなりません。次のコマンドを実行しておきます。

$ sudo update-java-alternatives --set java-1.11.0-openjdk-amd64
update-alternatives: エラー: mozilla-javaplugin.so の alternatives がありません

エラーが出ますが問題ありません。必要であれば、これを.bash_loginなどに追記しておきます。

自分でkernel.jsonを作成して対処することもできます。別のアカウントでも共用できるよう自作したものを掲載しておきます。

kernel.json
{
    "argv": [
        "/usr/lib/jvm/java-11-openjdk-amd64/bin/java",
        "-jar",
        "~/.local/share/jupyter/kernels/java/ijava-1.3.0.jar",
        "{connection_file}"
    ],
    "env": {
        "IJAVA_TIMEOUT": "10000"
    },
    "display_name": "Java",
    "language": "java",
    "interrupt_mode": "message"
}

image.png

image.png

終わりに

今回は比較的導入作業が容易なものを解説してみました。今後、もう少しハードルが高い言語もやってみたいと思っています。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1