こんにちは!
プログラミング未経験文系出身、Elixirの国に迷い込んだ?!見習いアルケミストのaliceと申します。
今回は2月24日に発売された「Elixirによる高速なWeb開発! 作って学ぶPhoenix」を読んで、プログラミング歴3ヶ月、Elixirひよっこの私が学んだことをまとめます。
内容まとめ
Elixirとは?
今年でバージョン1.0のリリースから10周年になる、関数型プログラミング言語1です。
Erlang VMという仮想化環境下で動くプログラミング言語ですが、母体のErlangにはない非常に便利なライブラリがたくさんあります。
その一つが今回特集になったPhoenixというフレームワークです。
再現してみた(第1章)
実行環境
- ・Windows 11 Home(バージョン 21H2, OS ビルド 22000.613)
- ・Ubuntu v18.04 ※WSL2環境下
- ・Elixir v1.13.0 (compiled with Erlang/OTP 24) ※WSL2環境下
- ・Phoenix v1.6.7 ※WSL2環境下
- ・psql (PostgreSQL) 10.19 ※WSL2環境下
本紙では生のElixirをローカルにダウンロードする方法や、Dockerを使用した方法で進めていますが、私は今回はWSL2環境下で「作って学ぶPhoenix」のRealworldを再現してみたいと思います。
WindowsのCLIはUNIX系と違って使いづらいのです...
事前準備
こちらの記事を参考に、PhoenixとPostgreSQLを準備。
iexで遊ぶ
iex()> IO.puts("Hello, World!")
Hello, World!
:ok
iex()> "Hello, World" |> IO.puts()
Hello, World
:ok
iexもpsqlと同じ対話型コンソール。逐一「:ok」と言ってくれる姿が可愛らしい。
多彩なMixコマンド
今の私のお気に入りはmix testとmix test.watch
ちなみに、mix testにもオプションがあるそうで。
mix test --failed
「直近でエラーになったものだけ」のオプション、使いやすくていい感じです!
mix test.watchはソースコードが編集されるたびにmix testをかけてくれる優れものです。
Mixコマンド実行時の注意点はmix.exsのファイルがカレントディレクトリでないと動きません。
パターンマッチ2
test "pattern match" do
x = 1
2 = x
|> IO.inspect()
end
#実行結果
# 1) test pattern match (HogeTest)
# test/hoge_test.exs:10
# ** (MatchError) no match of right hand side value: 1
# 2 = x の「2」が右辺におけるx, つまりその行より前で定義されたx =「1」という値と異なります。というエラー。
これがどのようなことに役に立つかというと、
「ユーザーのログイン情報のIDと、投稿された記事に紐づけられた著者のIDとがマッチすれば記事の変更や削除が可能なページに遷移することができる」とか、
「入力されたパスワードとパスワードに大文字が入っていないことという条件式がマッチすれば、『パスワードには大文字を1文字以上入れてください』と表示させる」とかいうことができる」とか、
割となんにでも使えるような気がします。
※パターンマッチは別記事化予定。関数パターンマッチを理解するための型や基本的な関数を理解してからまた書きます。
本紙の購入はこちらから
終わりに・感想
次回は第2章で学んだことをまとめたいと思います。
本記事の著者の皆様、技術評論社の皆様のご尽力に感謝いたします。頑張って再現します。
~Elixirの国のご案内~
※Elixirって何ぞや?と思ったらこちらもどぞ。未来がぎゅっと詰まった、Elixirは今年で生まれて10周年です
We Are The Alchemists, my friends!3
Elixirコミュニティは本当に優しくて温かい人たちばかり!
私が挫折せずにいられるのもこの恵まれた環境のおかげです。
まずは気軽に話しかけてみてください。
-
関数型プログラミング言語は近寄りがたいイメージがあるらしいですが、私は他言語と比較できないのでその感覚は分かりません。でも、未経験文系の私がマスターできるなら難しくはないはずです、たぶん。 ↩
-
追加記事1本分どころじゃない沼が見える... ↩
-
@torifukukaiouさんのAwesomeな名言をお借りしました。Elixirコミュニティを一言で表すと、これに尽きます。 ↩