LoginSignup
1

More than 1 year has passed since last update.

posted at

updated at

Organization

驚くべきことですが、リレーショナルデータベースなしにEctoの一部の機能を使うことができます (Elixir)

よいものを安く、より新しいものを早く。

Advent Calendar 2022 35日目1の記事です。
I'm looking forward to 12/25,2022 :santa::santa_tone1::santa_tone2::santa_tone3::santa_tone4::santa_tone5:
私のAdvent Calendar 2022 一覧


はじめに

Elixirを楽しんでいますか:bangbang::bangbang::bangbang:

まさしく文字通り待ち望んでいた、
$\huge{待望}$
Elixir関連イベントの開催日を確認できるサイトがリリースされました :tada::tada::tada:

この記事では、私なりの視点で解説をいたします。

Elixir関連イベントの開催日を確認できるサイト

作者の@koga1020 さんによる解説記事ソースコードが公開されています :pray::pray_tone1::pray_tone2::pray_tone3::pray_tone4::pray_tone5:

個人的に興味をそそられた事項

私が興味をそそられた事項は次の3点です。

  1. データベースは使用しないのに、Ectoを使用:interrobang:
  2. fly.ioへのデプロイ
  3. Quinn Hexの使用

他にも興味は尽きないのですが、「データベースは使用しないのに、Ectoを使用:interrobang:」を深掘りしたいとおもいます。

@koga1020 さんの記事中、以下の記載がありますし、リポジトリをみてもマイグレーションファイルはありません。

DBなしのシンプルな作りです。最近好きなやり方です。


mix phx.new elixir_jp_calendar --no-ecto でゼロからスタート


リレーショナルデータベースなしにEctoの一部の機能を使うことができます

Programming Ectoという本:book:で聞いたことがあります。

And, perhaps most surprising, you can use parts of Ecto without a relational database.

順番が前後しますが、Ectoを知らない方のために説明をすると、EctoElixir製のデータベースライブラリです。

EctoElixirは、Phoenixのデフォルトデータベースライブラリとして採用されています。
Ectoは2013年に開発がスタートしています。
Elixirの誕生は2012年ですので、Elixir界では重鎮ライブラリです。
Elixir作者のJosé Valimさんが積極的に開発にコミットし続けている点も見逃せません。

話を戻します。
おそらくもっとも驚くべきことは、リレーショナルデータベースなしにEctoの一部の機能を使うことができます
この具体例を探訪してみたいとおもいます。

ElixirJpCalendarWeb.Event.IndexParams

ここが該当します。

lib/elixir_jp_calendar_web/params/event/index_params.ex
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

呼び出しているのはここです。

lib/elixir_jp_calendar_web/controllers/event_controller.ex
  def index(conn, params) do
    index_params =
      params
      |> IndexParams.from(with: &IndexParams.changeset/2)
      |> Params.to_map()

外部から与えられるデータソースからEcto.Changesetを使って、必要な要素のみを取り出す実例です。
Programming Ecto:book:の中では、CHAPTER4の「Creating Changesets Using External Data」で解説されているものと同じ内容です:rocket:

/events?awesome=1&source=keyword
などにアクセスをして、周辺のコードにIO.inspect/2を入れて値をみるといろいろと楽しめます!!!

Wrapping up :lgtm::lgtm::lgtm::lgtm::lgtm:

Enjoy Elixir:bangbang::bangbang::bangbang:
$\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で、ElixirPhoenixの特集がでますよ〜


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のことを知りたい方へオススメの書籍 :books:

コミュニティ

  • elixir.jp Slack workspaceに参加してみてください
    • マヂ、やさしい人ばっかりのコミュニティ
    • あなたの困ったをきっと解決してくれるでしょう
  • NervesJP Slack workspaceでは、NervesやIoTが好きな愉快なfolksたちがあなたの訪れを歓迎します :tada:
  • たくさんのコミュニティがあります FCOvBkAUYAE6mL8.jpeg (EDI/fukuoka.ex/kokura.exLiveView JP@piacerex さん作 :pray::pray_tone1::pray_tone2::pray_tone3::pray_tone4::pray_tone5:)

Elixirコミュニティに初めて接する方は下記がオススメです

Elixirコミュニティ の歩き方 -国内オンライン編-

https://speakerdeck.com/elijo/elixirkomiyunitei-falsebu-kifang-guo-nei-onrainbian
image.png
(piyopiyo.exエリジョ の nakoさん(@kn339264) 作、素敵な資料:clap::clap_tone1::clap_tone2::clap_tone3::clap_tone4::clap_tone5:)


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!

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
What you can do with signing up
1