1. Overview
さて、端末の画面を操作するライブラリ、Cursesの話をしたいと思います。
無茶苦茶伝統のあるCurses, その後に更新されて、現在はnCursesとなっております。
こいつを、Elixirから操作するのが、ExNcursesとなります。
現時点で、Windowsで動かない。不便なので、ちょっとWSLでの環境を構築してみよう、と
言うのが今回の記事となります。
環境:
Windows11 Pro 24H2
WSL2/Ubuntu "22.04.3 LTS (Jammy Jellyfish)"
2. WSL Linux環境の準備
2.1 インストールの流れ
- WSLのマシンへのUbuntuのインストール(インストール済の人は無視をしてください)
- Elixir/ErlangOTPのインストール(インストール済の人は無視をしてください)
- libncurses5-dev libncursesw5-devのインストール
- プロジェクトの作成(mixコマンドですね)と実行
と言う流れになっております。
2.2 WSLのマシンへのUbuntuのインストール(Windowsで実行)
管理者モードでPowerShellを開いて、以下を打ちます。
僕は「再インストールですので、Ubuntu は既にインストールされています」と表示されます。
PS C:\WINDOWS\system32> wsl --install Ubuntu
Ubuntu は既にインストールされています。
Ubuntu を起動しています...
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: onodera <---ここでユーザ名を入れております。
New password: <--password
Retype new password: <--password
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 5.15.167.4-microsoft-standard-WSL2 x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
System information as of Wed Jan 1 13:07:00 JST 2025
System load: 0.45 Processes: 51
Usage of /: 0.1% of 1006.85GB Users logged in: 0
Memory usage: 12% IPv4 address for eth0: 172.21.228.196
Swap usage: 0%
This message is shown once a day. To disable it please create the
/home/onodera/.hushlogin file.
2.3 Elixirのインストール(WSLのLinux上)
さて、WSLへのインストールは、Elixirのホームページから、install.shを落としてくる
やり方が、一番楽そうです。
インストールには、自分のユーザ(ondera)を使用しております。
https://elixir-lang.org/install.html#install-scripts
curlでスクリプトを取得し、実行します。
onodera@NucBoxG5:~$ curl -fsSO https://elixir-lang.org/install.sh
onodera@NucBoxG5:~$ sh install.sh elixir@1.18.1 otp@27.1.2
downloading https://builds.hex.pm/builds/otp/amd64/ubuntu-24.04/OTP-27.1.2.tar.gz
unpacking OTP-27.1.2.tar.gz to /home/onodera/.elixir-install/installs/otp/27.1.2...
downloading https://github.com/elixir-lang/elixir/releases/download/v1.18.1/elixir-otp-27.zip
unpacking elixir-otp-27.zip to /home/onodera/.elixir-install/installs/elixir/1.18.1-otp-27...
checking OTP... 27 ok
checking Elixir... 1.18.1 ok
Run this (or add to your ~/.bashrc or similar file):
export PATH=$HOME/.elixir-install/installs/otp/27.1.2/bin:$PATH
export PATH=$HOME/.elixir-install/installs/elixir/1.18.1-otp-27/bin:$PATH
画面にメッセージがでておりますが、.bashrcに上記のパスを追加してくださいね。
onodera@NucBoxG5:~$ vi .bashrc
onodera@NucBoxG5:~$ source .bashrc
iex
onodera@NucBoxG5:~$ iex
iexが起動すればおしまいです。
2.4 libncurses5-dev libncursesw5-devのインストール(WSLのLinux上)
以下の様に、apt-getで取得します。
onodera@NucBoxG5:~$ sudo apt-get update
onodera@NucBoxG5:~$ sudo apt-get install libncurses5-dev libncursesw5-dev
[sudo] password for onodera:
.
(中略)
Need to get 9261 kB of archives.
After this operation, 35.7 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Yを入力して、インストールスタート。
次に、cursesのコンパイルに必要なbuild-essentialも入れます。
え?make入れるれんだよ、make。
onodera@NucBoxG5:~$ sudo apt-get update
onodera@NucBoxG5:~$ sudo apt-get install build-essential
onodera@NucBoxG5:~$ sudo apt-get install erlang-dev
onodera@NucBoxG5:~/curtest$ sudo apt-get update
2.5 プロジェクトの作成と実行
さて、ここは次回に延々とやるので、さくっと行きましょう。
まずは、mix newでプロジェクトを作成します。
onodera@NucBoxG5:~$ mix new curtest
onodera@NucBoxG5:~$ cd curtest
mix.exsを編集します。
defp deps do
[
{:ex_ncurses, "~> 0.3"} <---こいつを追加します。
mixで依存関係を確認し、ライブラリを取得します。
"./lib/curtest.ex"を編集します。
今回のサンプルソースはこちら。
defmodule Curses do
def run do
Application.ensure_started(:ex_ncurses)
:ok = ExNcurses.initscr()
ExNcurses.printw("Hello, world!")
ExNcurses.refresh()
ExNcurses.getch()
ExNcurses.endwin()
end
end
Curses.run()
依存関係を解決し、ex_ncursesを取得します。
onodera@NucBoxG5:~/curtest$ mix deps.get
* creating /home/onodera/.mix/archives/hex-2.1.1
Resolving Hex dependencies...
Resolution completed in 0.048s
New:
elixir_make 0.9.0
ex_ncurses 0.3.1
* Getting ex_ncurses (Hex package)
* Getting elixir_make (Hex package)
コンパイルしましょう。
onodera@NucBoxG5:~/curtest$ mix compile
実行されましたか?
Hello worldと表示されていれば、成功です。
あ、プログラムはCTRL-Cで終わらせてください。
…え?サンプル見たけど、簡単じゃーねか、お前の説明要らねーよって?
うん。要らんかもな。まじに今回、インストール手順を整理したくらいしか、記事の価値無さそうw