6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[FormKit] Vue3, Nuxt3 で使える便利なフォームライブラリ「FormKit」を簡単に紹介するよ

Last updated at Posted at 2022-07-05

FormKitってなに?

  • Vue3, Nuxt3 でフォームを作るときに便利なライブラリだよ
  • FormKitひとつあれば、フォームに関すること(バリデーションやテーマ設定、国際化など)をすべて対応できるよ
  • JSONにシリアライズできるオブジェクト(スキーマ)で、フォームを生成できるよ

まだ日本語の記事をほぼ見かけないけれど、実際に使ってみて便利だなと思ったから、今回紹介してみる。

何が良いの?(個人的な感想)

  • JSONにシリアライズできる簡潔なオブジェクトでフォーム生成できるのがとっても好き
  • TailwindCSSとの噛み合わせも良い
  • バリデーションもシンプル
  • 公式ドキュメントがとてつもなく分かりやすい(大事)
  • カスタムinputも簡単に作れる

実際にコード見せてよ

じゃあ、下記の条件を満たすフォームを作ってみるよ。

  • 名前を入力して、submitで関数を実行できる
  • 必須バリデーションあり
  • 名前は30文字まで

こんな感じ

<script setup lang="ts">
import { FormKitSchemaNode } from '@formkit/core';

// 名前を入力するスキーマを定義(前述のJSONにシリアライズできる云々はこれ)
const nameFormSchema: FormKitSchemaNode = {
  $cmp: "FormKit",
  props: {
    type: "text",
    label: "名前",
    name: "nameForm",
    // 必須 + 文字列の長さは 0文字から30文字 まで
    validation: "required|length:0,30",
    // 検証タイミングはユーザがinputの値を変更した後
    validationVisibility: "dirty",
    // バリデーションの内容によってエラーメッセージを出しわけ
    validationMessages: {
      required: "名前を入力してください",
      length: "名前は30文字以内で入力してください。",
    }
  }
};

// 表示させたいフォームのスキーマを登録(複数可)
const schema = [nameFormSchema];

const submit = async (e: {nameForm: string}) => {
  // 好きな処理を実装してね (フォームのname属性をキー、入力値がvalueのオブジェクトが手に入る)
  console.log(e);
};
</script>
<template>
  <FormKit
    type="form"
    @submit="submit"
    submit-label="登録する"
    incomplete-message="入力内容に不備があるよ">
    <FormKitSchema :schema="schema"/>
  </FormKit>
</template>

これだけで、前述の条件を満たすフォームができた。

kdswq-pyjsl.gif

コード中の FormKitSchemaNode は見ての通りフォームのname属性やラベル、バリデーションの内容を定義するスキーマになっていて、これが冒頭で書いた「JSONにシリアライズできるオブジェクトでフォームを生成できる」機能だよ。

シリアライズ可能だから、JSONに変換してフォームそのものをユーザごとに個別でDBに保存するなんてこともできるね。

あとがき

今回は簡単な紹介だからここまでだけど、FormKitはカスタマイズも自在で、デザインをいじったり、 FormKitSchemaNode として扱える自作Inputもコンポーネントとして作れるから、要件に合わせた柔軟かつ迅速な実装を進めていくことができるよ。

▼ FormKitでカスタムInputを作るドキュメントはここ

よかったら使ってみてね!(使う人が増えたら、きっともっと良くなっていくと思うから)

著者プロフィール

faable01です。かつては創作仲間と小説を書いたり、製菓業界で楽しくやっていたはずが、紆余曲折を経て、サーバーレス技術を触るのが好きなITエンジニアになっていました。AWSのIaC兼サーバレス爆速開発ツール 「SST」 が好きです。個人ブログでもたまに記事を書いています。

それから、業務日報SaaS 「RevisNote」 を運営しています。リッチテキストでの日報と、短文SNS感のある分報を書けるのが特徴で、組織に所属する人数での従量課金制です。アカウント開設後すぐ使えて、無料プランもあるから、気軽にお試しください。

6
5
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
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?