個人的にkotlinを勉強していくのでその作業記録をつけたい
筆者はwebエンジニア歴10年だが内製ばっかやってる弱小
昔php + FuelPHP、今Java + spring boot、DDDをちょっとかじる
最近の新卒の子がElixir使いだったけどナニソレ?関数型プログラミング全然わからん
じゃあ遊んでみるしかないな
kotlinはjavaに似ててオブジェクト指向的にも関数型プログラミング的にも書けるらしいな、とりあえず触ろう
そのうちscala → Elixirみたいに手を広げるゾ!
そして体を壊して休職したのでこれ幸いと手を出す
春コミの原稿やってました。時間が空いてしまったのですが続き。
src/main/application.yamlを作成して以下を記入
spring:
datasource:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://db:5432/example
username: postgres
password: ****
ここでは仮置きとしてpasswordを直接書いちゃってますが、
危ないので本当はやってはだめです。
中身の確認用にcompose.yamlに以下を追加。
これを入れておくと、postgresの中身をそのまま見ることができます。
# servicesの下
adminer:
image: adminer
restart: always
ports:
- 8082:8080
初期化用のSQLを作り、
db/init.sql
DROP TABLE IF EXISTS tamesi;
CREATE TABLE IF NOT EXISTS tamesi (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER NOT NULL
);
それを初期化用に設定
volumes:
- db-data:/var/lib/postgresql/data
# ↓を追加
- ./db/init.sql:/docker-entrypoint-initdb.d/init.sql
docker-entrypoint-initdb.dに置くと初期化してくれるらしい。
で、エラーとか起きるので都度修正して、
plugins {
id("org.springframework.boot") version "3.2.2"
id("io.spring.dependency-management") version "1.1.4"
kotlin("jvm") version "1.9.22"
kotlin("plugin.spring") version "1.9.22"
kotlin("plugin.jpa") version "1.9.22" # 追加
}
https://spring.io/guides/tutorials/spring-boot-kotlin
@Entity
@Table(name = "tamesi")
data class TamesiTableData(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) # 追加
val id: Int?, # Int型に変更
val name: String,
val age: Int
)
以下で実行。
$ docker compose up -d --build
$ curl -X POST -H "Content-Type: application/json" -d '{"name":"taro", "age":11}' localhost:8081/save
レスポンスはこれ
{"name":"taro","age":11}
Adminerからも見てみる
取得の方も叩いてみる
$ curl "localhost:8081/get/1"
レスポンス
{"name":"taro","age":11}
OK!
終了時は以下コマンドで
$ docker compose down -v
ところでこれって関数型プログラミングとか全然触れてないですね。