Unix系オペレーティングシステム(OS)にはfortuneというプログラムがあります。引用句データベースからランダムに取り出して表示するだけのシンプルなプログラムです。
実はElixirにも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により異なりますが、その場所さえわかれば、そこにお好みの元氣になる励ましの言葉などを含めたりすることも可能です。
fortuneファイルの置き場所
- macOS(Apple Silicon):
/opt/homebrew/share/games/fortunes
- Debian GNU/Linux:
/usr/share/games/fortunes
- Arch Linux:
/usr/share/fortune
fortuneファイルの扱いにはいくつかルールがあります。
fortuneファイルの作法
- 二種類のファイルを用意する。
- 二種類のファイルを両方ともfortuneファイル置き場に置く
Elixirのfortune
Elixirでもfortuneパッケージを使うと同様のことを実施することが可能です。
早速、Elixir対話シェル(IEx)を用いて試してみましょう。
iex
Elixir言語ではMix.install/2関数を用いて第三者パッケージをダウンロードすることができます。
Mix.install([{:fortune, "~> 0.1"}])
Fortune.random!()
OSのfortuneで使用されている引用句が表示されると思います。
万一こんなエラーが出る場合は、なんらかの理由で引用句のファイルが見つからなかったということです。
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に渡す依存関係にtag
やenv
など細かな指示を出すことが可能です。
iex
Mix.install([{:fortune, git: "https://github.com/fhunleth/elixir-fortune.git", tag: "v0.1.1", env: :dev}])
Fortune.random!()
これらの引用句はfortuneパッケージの開発者がテスト用に使用しているファイルから来ています。
応用
他にも使い道がありますが、今回は基本的な使い方に留めておき、またの機会にしようと思います。
さいごに
本記事は autoracex #260 の成果です。ありがとうございます。