2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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 インストールの流れ

  1. WSLのマシンへのUbuntuのインストール(インストール済の人は無視をしてください)
  2. Elixir/ErlangOTPのインストール(インストール済の人は無視をしてください)
  3. libncurses5-dev libncursesw5-devのインストール
  4. プロジェクトの作成(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

2
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?