JavaScriptを有効にしてください

【Elixir】Livebook でサクッと遊ぼう!

 ·  ☕ 2 分で読めます

【Elixir】Livebook でサクッと遊ぼう!

動かす方法

動かす方法は色々ある模様です。
(僕はDockerで動かしています。

公式サイト Livebook.dev

Livebook アプリをインストール

Livebook.dev #install の左側からアプリをダウンロードしてインストールする。

Fly.io で使う

Livebook.dev #install から Fly.io にデプロイして使う方法があります。
こちらは GitHub と連携してサクッとデプロイできました。

Docker

  • Dockerが入っている必要があります。
docker run -p 8080:8080 -p 8081:8081 --pull always livebook/livebook

起動すると http://0.0.0.0:8080/?token=XXXXXXXXXXXXXXXXX が出てくるので 0.0.0.0localhost にすると Livebook に入れます。

ローカル環境にインストール

  • Elixirが入っている必要があります。
mix do local.rebar --force, local.hex --force
mix escript.install hex livebook
livebook server

Livebook を使ってみる

まずは初期画面の右上の New notebook で実行画面に移ります。
Livebook

とりあえず Hello world の表示確認をしてみます。
以下のコードを Section 部分入れて実行してみます。

1
IO.puts "Hello world"

入力したら左上の再生ボタン(▶)を押して実行してください
そうすると実行されます。
Helloworld

かっこよくリアルタイムに表示されるグラフを書いてみる

こちらの記事のコードを利用させていただきました。
Livebookを楽しむ (Elixir) - Qiita

コードブロック下にマウスを当てると「+Code」と出てくるので別々にコードブロックを追加してください。

  1. グラフを表示する
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Mix.install([
  {:vega_lite, "~> 0.1.3"},
  {:kino, "~> 0.5.0"}
])

alias VegaLite, as: Vl

memory = [
  total: :red,
  processes: :yellow,
  atom: :green,
  binary: :pink,
  code: :orange,
  ets: :blue
]

layers = 
  for {layer, color} <- memory do
    Vl.new()
    |> Vl.mark(:line)
    |> Vl.encode_field(:x, "iteration", type: :quantitative)
    |> Vl.encode_field(:y, Atom.to_string(layer), type: :quantitative, title: "Memory usage (MB)")
    |> Vl.encode(:color, value: color, datum: Atom.to_string(layer))
  end

widget = Vl.new(width: 500, height: 200)
  |> Vl.layers(layers)
  |> Kino.VegaLite.new()
  1. グラフに現在の値をリアルタイム更新させる
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Kino.VegaLite.periodically(widget, 200, 0, fn i ->
  point =
    :erlang.memory()
    |> Enum.map(fn {type, bytes} -> {type, bytes / 1_000_000} end)
    |> Map.new()
    |> Map.put(:iteration, i)

  Kino.VegaLite.push(widget, point, window: 1000)
  {:cont, i + 1}
end)
  1. for文で負荷を与えてみる
1
2
3
for i <- 1..1_000_000 do
  :"atom#{i}"
end

これらを実行するとこうなります。
memory

Livebookを使ってみての感想

通常のオンラインエディタと違って図や表をリアルタイムで表示されるのがとてもいい感じ。
リアルタイム共同編集もできるようでチーム内でサンプルコードなどを置くにはとても良いと思います。

Qiitaなどを見ててLivebookを使用しているのが図や表が多かったのは一々環境を作ったり面倒だったり、オンラインエディタ上では通常できないためものがLivebookのみで実行、確認ができるためだったのだと感じました。

参考

共有

こぴぺたん
著者
こぴぺたん
Copy & Paste Engineer