clojure.spec
Clojureに型っぽいのを書くライブラリ
型というかvalidatorを作るライブラリか

基本的な使い方
スペックの定義
例えば、特定のキーワードが整数であることを定義します。
データの検証
データの生成
s/genを使ってスペックに従ったデータを生成します。
サンプルコード
以下は、ユーザー情報をスペックとして定義し、それを検証するサンプルコードです。
clojure(ns user
(:require [clojure.spec.alpha :as s]
[clojure.spec.gen.alpha :as gen]))
;; 1. スペックの定義
(s/def ::name string?)
(s/def ::age (s/and int? #(<= 0 % 120)))
(s/def ::email (s/and string? #(re-matches #".+@.+\..+" %)))
(s/def ::user (s/keys :req-un [::name ::age ::email]))
;; 2. データの検証
(def sample-user {:name "John Doe" :age 30 :email "john.doe@example.com"})
(println (s/valid? ::user sample-user)) ;; true
(def invalid-user {:name "John Doe" :age 150 :email "john.doe@example.com"})
(println (s/valid? ::user invalid-user)) ;; false
;; 3. データの生成
(def user-gen (s/gen ::user))
(println (gen/sample user-gen 3))
解説
1. **スペックの定義**
clojure(s/def ::name string?)
(s/def ::age (s/and int? #(<= 0 % 120)))
(s/def ::email (s/and string? #(re-matches #".+@.+\..+" %)))
```
- ::name
は文字列であることを定義しています。
- ::age
は整数であり、0以上120以下であることを定義しています。
- ::email
は特定の正規表現にマッチする文字列であることを定義しています。
2. **データの検証**
clojure(s/valid? ::user sample-user)
- s/valid?
はデータがスペックに従っているかを検証します。 sample-user
は正しいデータなので true
を返します。
- invalid-user
は年齢が範囲外なので false
を返します。
3. **データの生成**
- s/gen
はスペックに従ったデータを生成します。 gen/sample
を使って3つのユーザーデータを生成しています。
これで、Clojureの clojure.spec
を使った基本的なデータの定義、検証、生成の方法がわかりました。 clojure.spec
は強力なツールなので、さらに詳細な機能やカスタマイズについても学ぶと良いでしょう。