この記事は Hello World あたたたた Advent Calendar 2025 の記事です。
今日は Elixir(エリクサー) で Hello World あたたたた を実装して解説していきます。
そもそも「Hello World あたたたた」が何かは 1日目の記事 をご覧ください。
コーディング例
paiza.io で実際に動かしてみることができます。
defmodule Atatatata do
def main do
# 乱数初期化
:rand.seed(:exsplus, {
System.monotonic_time(),
System.unique_integer(),
:erlang.phash2(self())
})
loop("")
end
defp loop(hako) do
# 0 または 1 をランダムに決める
bit = :rand.uniform(2) - 1
# char を決める(A or Ta)
char =
case bit do
0 -> "A"
_ -> "Ta"
end
# 画面に char を出力
IO.puts(char)
# char を hako に追加
new_hako = hako <> char
# 末尾が "ATaTaTaTa" なら終了
if String.ends_with?(new_hako, "ATaTaTaTa") do
IO.puts("OMA E WA MOU SHINDEIRU")
else
loop(new_hako)
end
end
end
Atatatata.main()
コードと文法の解説
変数の宣言・代入
Elixir の変数は Erlang と同様に イミュータブル(再代入不可) です。
bit = :rand.uniform(2) - 1
new_hako = hako <> char
- 小文字始まりが変数名
- 一度値を束縛(代入)したら変更できない
繰り返し
Elixir には while はありません。
再帰関数で繰り返しを表現します。
loop(new_hako)
終了条件を満たさない限り、自分自身を呼び出します。
条件判定
条件分岐は case や if を使います。
case bit do
0 -> "A"
_ -> "Ta"
end
if String.ends_with?(new_hako, "ATaTaTaTa") do
...
else
...
end
-
caseはパターンマッチ -
ifはシンプルな真偽判定に便利
文字の出力
標準出力は IO.puts/1 を使います。
IO.puts(char)
- 自動で改行が入る
- Erlang の
io:formatより直感的
文字列の連結
デフォルトのエンコード方式は UTF-8 です。
new_hako = hako <> char
-
<>が文字列連結演算子 -
++はリスト用
文字列の末尾判定
String.ends_with?(new_hako, "ATaTaTaTa")
- 標準ライブラリで判定できる
- UTF-8 を意識せず使える
乱数生成
Erlang VM 上で動くため、乱数 API は Erlang と共通です。
:rand.uniform(2) - 1
seed の初期化も同様に行います。
:rand.seed(:exsplus, {...})
Elixir の概要と歴史
Elixir の特徴
- Erlang VM(BEAM)上で動作
- 並行処理・分散処理に強い
- 標準ライブラリが読みやすく高機能
- Web フレームワーク Phoenix が有名
Elixir の歴史
- 開発者:José Valim
- 誕生:2011年
- 名前の由来:特にないそう。Erlangにいろんな制約があったので自分でプログラミング言語を作成することにした。
個人的なコメント
これまで名前しか聞いたことなかった。
Phoenix というElixirで書かれたWeb 開発フレームワークがあり、高性能・スケーラブルなWebアプリケーションの開発ができるそう。