LoginSignup
5
0

More than 1 year has passed since last update.

Phoenixの学習時にはデータベースにSQLite3を使おう

Last updated at Posted at 2022-01-30

経緯

学習中に先人たちのブログやQiitaの記事のサンプルコードを試してみたり、
ライブラリを試してみたりする度に、新たにPhoenixのプロジェクトを作り、
その都度PostgreSQLのDBも作ってたら、結構な数のDBができてしまって。。

それに試したコードの大半がSQLを直接書く必要もなかったんで、
ポスグレである必要ないなと。。

使いまわせばいいんだけなんですけどね

ということで

候補に上がったのが、SQLite3。あんまりゴリゴリ使ったことないけど。定番なのは知ってる。

前提

Elixirだけ入ってればいいです。

$ elixir -v
Erlang/OTP 24 [erts-12.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [jit] [dtrace]

Elixir 1.13.1 (compiled with Erlang/OTP 24)

設定方法は?

mix phx.new時にオプション指定するだけ。

$ mix phx.new my_app --database sqlite3

昔からサポートされてはいたけど、
古いバージョンだと自分でライブリ追加したり、しなきゃならなかったみたいですが、
嬉しいことにPhoenix1.6.xではオプションで指定するだけで使える。
それならば使わない手はないですね。

これだけで終わってしまっては記事としては寂しいので
一応画面立ち上げまでつづけてやっていきます。

↓途中で聞かれるこれは"Y"で。

Fetch and install dependencies? [Yn] Y

終了したら、案内に従って以下を実行

$ cd my_app
$ mix ecto.create

ectoが終了したら、my_app_dev.dbというファイルが出来上がってる。
スクリーンショット 2022-01-28 22.48.49.png

シンプルな画面作って動作を確認してみましょう。

mix phx.gen.html People User users name:string age:integer

lib/my_app_web/router.exに一行追加

  scope "/", MyAppWeb do
    pipe_through :browser

    get "/", PageController, :index
    resources "/users", UserController # この行を追加

  end

migrate実行

$ mix ecto.migrate

終了したら、ブラウザでアクセス

画面が表示されていますが、データがありません。
スクリーンショット 2022-01-28 23.28.53.png

適当に追加してみます。
スクリーンショット 2022-01-28 23.31.13.png

一覧を再表示。追加したデータが表示されてます。
スクリーンショット 2022-01-28 23.31.45.png

再度フォルダを見てみると

この時点で、my_app_dev.dbmy_app_dev.db-shmmy_app_dev.db-wal
三つのファイルが出来上がっている。サイズも軽量。
スクリーンショット 2022-01-28 23.49.15.png

  • db-shmファイル: トランザクション開始から終了までの更新内容が書き込まれる
  • db-walファイル: コミットした時に更新内容が書き込まれる とのこと。
5
0
1

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
  3. You can use dark theme
What you can do with signing up
5
0