LoginSignup
0

Elixir で fortune を楽しむ

Last updated at Posted at 2023-12-01

Unix系オペレーティングシステム(OS)にはfortuneというプログラムがあります。引用句データベースからランダムに取り出して表示するだけのシンプルなプログラムです。

unix-fortune-demo.gif

実はElixirにもfortuneパッケージがあります。今日は、それで遊んでみたいと思います。

Unix系のfortune

まずはUnix系fortuneを楽しみます。

やりかた

やりかたはOSにより異なりますが、いくつか参考までにご紹介します。

macOS(Apple Silicon)

  • fortuneコマンドへのパス: /opt/homebrew/bin/fortune
ターミナル
# パッケージリストを最新に更新
brew update

# fortuneコマンドをインストール
brew install fortune

Debian GNU/Linux

  • fortuneコマンドへのパス: /usr/games/fortune
ターミナル
# パッケージリストを最新に更新
sudo apt update --yes

# fortuneコマンドをインストール
sudo apt install --yes fortune-mod

Arch Linux

  • fortuneコマンドへのパス: /usr/bin/fortune
ターミナル
# パッケージリストを最新に更新
sudo pacman -Syy

# fortuneコマンドをインストール
sudo pacman -S fortune-mod

パスがOSにより異なるのが興味深いですね。ややこし。

fortuneファイル

fortuneコマンドで表示する引用句の置き場所はOSにより異なりますが、その場所さえわかれば、そこにお好みの元氣になる励ましの言葉などを含めたりすることも可能です。

unix-fortune-files.png

fortuneファイルの置き場所

  • macOS(Apple Silicon): /opt/homebrew/share/games/fortunes
  • Debian GNU/Linux: /usr/share/games/fortunes
  • Arch Linux: /usr/share/fortune

fortuneファイルの扱いにはいくつかルールがあります。

fortuneファイルの作法

  • 二種類のファイルを用意する。
    • テキストファイル
      • 拡張子 なし(例、my_favorite_quotes
      • 引用句を%文字のみを含む行で区切る
    • インデックス
      • 拡張子 .dat(例、my_favorite_quotes.dat
      • テキストファイルをstrfileコマンドでコンパイルしたもの
  • 二種類のファイルを両方ともfortuneファイル置き場に置く

Elixirのfortune

Elixirでもfortuneパッケージを使うと同様のことを実施することが可能です。

早速、Elixir対話シェル(IEx)を用いて試してみましょう。

terminal
iex

Elixir言語ではMix.install/2関数を用いて第三者パッケージをダウンロードすることができます。

IEx
Mix.install([{:fortune, "~> 0.1"}])

Fortune.random!()

OSのfortuneで使用されている引用句が表示されると思います。

万一こんなエラーが出る場合は、なんらかの理由で引用句のファイルが見つからなかったということです。

IEx
iex> Fortune.random!()
** (RuntimeError) Fortune.random failed with no_fortunes
    (fortune 0.1.1) lib/fortune.ex:117: Fortune.random!/1
    iex:2: (file)

「Ctrl + C」を2回押して一旦IExを停止します。

fortuneパッケージの開発環境に良い言葉があるので、今度はそれらを表示してみたいと思います。
Mix.install/2に渡す依存関係にtagenvなど細かな指示を出すことが可能です。

terminal
iex
IEx
Mix.install([{:fortune, git: "https://github.com/fhunleth/elixir-fortune.git", tag: "v0.1.1", env: :dev}])

Fortune.random!()

elixir-fortune-demo.png

これらの引用句はfortuneパッケージの開発者がテスト用に使用しているファイルから来ています。

応用

他にも使い道がありますが、今回は基本的な使い方に留めておき、またの機会にしようと思います。

nerves-tips-demo 2023-11-29 at 19.46.22.gif

さいごに

本記事は autoracex #260 の成果です。ありがとうございます。

toukon-qiita-macbook_20230912_091808.jpg

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
0