よいものを安く、より新しいものを早く。
Advent Calendar 2022 35日目1の記事です。
I'm looking forward to 12/25,2022
私のAdvent Calendar 2022 一覧。
はじめに
Elixirを楽しんでいますか
まさしく文字通り待ち望んでいた、
$\huge{待望}$
のElixir関連イベントの開催日を確認できるサイトがリリースされました
この記事では、私なりの視点で解説をいたします。
Elixir関連イベントの開催日を確認できるサイト
作者の@koga1020 さんによる解説記事とソースコードが公開されています
個人的に興味をそそられた事項
私が興味をそそられた事項は次の3点です。
他にも興味は尽きないのですが、「データベースは使用しないのに、Ectoを使用」を深掘りしたいとおもいます。
@koga1020 さんの記事中、以下の記載がありますし、リポジトリをみてもマイグレーションファイルはありません。
DBなしのシンプルな作りです。最近好きなやり方です。
mix phx.new elixir_jp_calendar --no-ecto でゼロからスタート
リレーショナルデータベースなしにEctoの一部の機能を使うことができます
Programming Ectoという本で聞いたことがあります。
And, perhaps most surprising, you can use parts of Ecto without a relational database.
順番が前後しますが、Ectoを知らない方のために説明をすると、EctoはElixir製のデータベースライブラリです。
EctoはElixirは、Phoenixのデフォルトデータベースライブラリとして採用されています。
Ectoは2013年に開発がスタートしています。
Elixirの誕生は2012年ですので、Elixir界では重鎮ライブラリです。
Elixir作者のJosé Valimさんが積極的に開発にコミットし続けている点も見逃せません。
話を戻します。
「おそらくもっとも驚くべきことは、リレーショナルデータベースなしにEctoの一部の機能を使うことができます」
この具体例を探訪してみたいとおもいます。
ElixirJpCalendarWeb.Event.IndexParams
ここが該当します。
defmodule ElixirJpCalendarWeb.Event.IndexParams do
@default_source "community"
use Params.Schema, %{
source: [field: :string, default: @default_source]
}
import Ecto.Changeset
def changeset(ch, params) do
ch
|> cast(params, [:source])
|> ignore_invalid_source()
end
def ignore_invalid_source(%Ecto.Changeset{changes: %{source: source}} = ch) do
case source in ~w(#{@default_source} keyword) do
true ->
ch
false ->
change(ch, source: @default_source)
end
end
def ignore_invalid_source(ch), do: ch
end
呼び出しているのはここです。
def index(conn, params) do
index_params =
params
|> IndexParams.from(with: &IndexParams.changeset/2)
|> Params.to_map()
外部から与えられるデータソースからEcto.Changeset
を使って、必要な要素のみを取り出す実例です。
Programming Ectoの中では、CHAPTER4の「Creating Changesets Using External Data」で解説されているものと同じ内容です
/events?awesome=1&source=keyword
などにアクセスをして、周辺のコードにIO.inspect/2を入れて値をみるといろいろと楽しめます!!!
Wrapping up
Enjoy Elixir
$\huge{Enjoy\ Elixir🚀}$
驚くべきことですが、リレーショナルデータベースなしにEctoの一部の機能を使うことができます。
本記事ではその実例をご紹介しました。
以上です。
付録
以下、付録です。
Elixirの誕生日は、2012年5月24日です。
そのため、今年の2022年5月24日は10周年を迎えます。
iex> Date.diff(~D[2022-05-24], ~D[2022-02-04])
109
そうそう!
2月24日発売予定のWEB+DB PRESSで、ElixirとPhoenixの特集がでますよ〜
We, @tamanugi @torifukukaiou @the_haigo @mokichi_s12m including me, wrote featured articles for WEB+DB PRESS Vol.127 about Elixir and Phoenix! It's being published on 24, Feb.https://t.co/UPNiVU1zG9
— 栗林健太郎 (@kentaro) February 4, 2022
Elixir
最後の最後に、Elixirについて紹介します。
- |>でスイスイ、プログラミングしていくことができる素敵なプログラミング言語です
- さっそくプログラムの例を示します
-
Qiita APIを使わせていただいて、
Elixir
タグがついた最新の記事を20件取得しています - ここでは雰囲気をつかんでいただければ大丈夫です
Mix.install [{:req, "~> 0.2.1"}]
"https://qiita.com/api/v2/items?query=tag:Elixir"
|> URI.encode()
|> Req.get!(finch_options: [pool_timeout: 50000, receive_timeout: 50000])
|> Map.get(:body)
|> Enum.map(& Map.take(&1, ["title", "url"]))
Webアプリケーションを楽しむなら
IoTを楽しむなら
AIを楽しむなら
もっとElixirのことを知りたい方へオススメの書籍
- プログラミングElixir(第2版) -- オーム社
- Elixir実践ガイド -- インプレス
- アルケミスト − 夢を旅した少年 -- KADOKAWA
コミュニティ
-
elixir.jp Slack workspaceに参加してみてください
- マヂ、やさしい人ばっかりのコミュニティ
- あなたの困ったをきっと解決してくれるでしょう
- NervesJP Slack workspaceでは、NervesやIoTが好きな愉快なfolksたちがあなたの訪れを歓迎します
- たくさんのコミュニティがあります
(EDI/fukuoka.ex/kokura.ex & LiveView JP の @piacerex さん作 )
Elixirコミュニティに初めて接する方は下記がオススメです
Elixirコミュニティ の歩き方 -国内オンライン編-
https://speakerdeck.com/elijo/elixirkomiyunitei-falsebu-kifang-guo-nei-onrainbian
(piyopiyo.ex & エリジョ の nakoさん(@kn339264) 作、素敵な資料)
I organize autoracex.
And I take part in NervesJP, fukuoka.ex, EDI, tokyo.ex, Pelemay.
I hope someday you'll join us.
We Are The Alchemists, my friends!