0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ひとりカレンダー】ClojureAdvent Calendar 2024

Day 13

Clojure: RingでTodoアプリを作る - DB接続

Last updated at Posted at 2024-12-12

advent_calendar_2024.png

Advent Calendar 2024 Day 13

昨日からTodoアプリをClojureで作り始めています
今日はpostgresqlのDBと接続し、データを取得したいと思います

next-jdbcというライブラリを使って実現していこうと思います

next-jdbc

まずはライブラリをプロジェクトに追加します

project.clj
  :dependencies [[org.clojure/clojure "1.11.1"]
                 ; ...
                 [com.github.seancorfield/next.jdbc "1.3.967"]
                 [org.postgresql/postgresql "42.7.4"]]

次に、DBの接続情報を作っていきます

一応この記事の最後にpostgresql dbの構築方法も載せておきます

database.clj
(ns todo.database
  (require '[next.jdbc :as jdbc]))

(def db-spec
  {:dbtype "postgresql"
   :dbname "todo"
   :host "localhost"
   :port 5432
   :user "todo-user"
   :password "todo-password"})

DBの接続を返す関数と、それを使ってTodoの一覧を取得する関数を書いてみます

database.clj
(def db (jdbc/get-datasource db-spec))

(defn select-todos
  []
  (jdbc/execute! db ["SELECT * FROM todos"]))

実行してみます

(select-todos)
; => [#:todos{:id 1, :title "朝食を食べる", :completed false}]

うまくデータを取得できていそうです。

これで準備ができました。

明日は実際に作っていこうと思います

番外編 - postgresql dbの構築方法

今回はClojureに焦点を当てているため、dockerを用いて簡単に構築しました

Dockerfile
FROM postgreql:latest

ENV POSTGRES_DB=todo
ENV POSTGRES_USER=todo-user
ENV POSTGRES_PASSWORD=todo-password

ADD ./init.sql /docker-entrypoint-initdb.d/
init.sql
-- テーブル作成
create table todos (
  id serial primary key,
  title text not null,
  completed boolean not null
);

-- テストデータ挿入
insert into todos (title, completed) values ('朝食を食べる', false);
0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?