はじめに
SwiftUIでフォームを作る際、バリデーション処理を毎回書くのが面倒だと感じたことはありませんか?
- 入力中にリアルタイムでバリデーションしたい
- 数値, メールアドレス, パスワード等のルールを毎回書きたくない
- フォーカスが外れたタイミングでバリデーションしたい
- 複数フィールドをまとめてバリデーションしたい
これらをSwiftUIで簡単に実現できるライブラリ ValidationLibrary を作りました!
デモ
| シンプルな例 | 複数フィールド |
|---|---|
![]() |
![]() |
特徴
-
宣言的なAPI
- SwiftUIらしいモディファイアで直感的に記述
-
リアルタイムバリデーション
- 入力中にリアルタイムで検証(debounce対応)
-
豊富な組み込みルール
- email, password, numeric, regex などを用意
-
カスタムルール対応
- クロージャで独自のバリデーションロジックを定義可能
-
複数フィールド管理
-
ValidationContainerで複数フィールドを一括管理 ( 単一フィールドはValidationStateで管理 )
-
インストール
Xcode の File → Add Package Dependencies から以下のURLを追加:
https://github.com/Ryosuke1025/ValidationLibrary
または Package.swift に追加:
dependencies: [
.package(url: "https://github.com/Ryosuke1025/ValidationLibrary.git", from: "1.0.0")
]
使い方
基本的な使い方
例えば、以下のような実装で10〜11桁の数字のみを許可するバリデーションが実装できます。なお、デモを完全再現したい場合は、Quick Startをご参照ください!
import SwiftUI
import ValidationLibrary
struct PhoneNumberView: View {
@State private var phoneNumber = ""
@State private var validationState = ValidationState()
var body: some View {
VStack {
TextField("Phone Number", text: $phoneNumber)
.keyboardType(.phonePad)
.validation(
text: $phoneNumber,
state: validationState,
rule: .numeric(minLength: 10, maxLength: 11)
)
if validationState.hasBeenValidated {
Text(validationState.isValid ? "Valid" : "Invalid")
.foregroundStyle(validationState.isValid ? .green : .red)
}
}
}
}
複数フィールドの管理
ValidationContainer を使うと、複数のフィールドをまとめて管理できます。なお、デモを完全再現したい場合は、Advanced Usageをご参照ください!
struct SignUpForm: View {
@State private var email = ""
@State private var password = ""
@State private var container = ValidationContainer()
var body: some View {
VStack {
TextField("Email", text: $email)
.validation(
text: $email,
container: container,
id: "email",
rule: .email
)
SecureField("Password", text: $password)
.validation(
text: $password,
container: container,
id: "password",
rules: [.required, .password(minLength: 8)]
)
Button("Register") {
container.validateAll()
if container.isFullyValid {
// 登録処理
}
}
}
}
}
動作環境
- iOS 17.0+ / macOS 14.0+ / watchOS 10.0+ / tvOS 17.0+
- Swift 6.0+
- Xcode 16.0+
おわりに
SwiftUIでバリデーションをシンプルに実装できるライブラリを紹介しました。
ぜひ使ってみてください!フィードバックやスターを頂けると励みになります!
使い方の詳細は、READMEに記載しております🙏

