昨日から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);