教育機関向けのユーザー/メンバーアカウントをまとめて登録するための SQL を生成する Next.js アプリケーションです。教師と生徒のアカウント情報をブラウザ上で編集・貼り付けし、users テーブルおよび member 系テーブル向けの INSERT 文を一括作成できます。
- 依存関係をインストール:
npm install
- 開発サーバーを起動:
npm run dev
- ブラウザで http://localhost:3000 にアクセス
静的サイトとして出力したい場合は npm run build:static を実行すると out/ 以下に成果物が作成されます。
- 教師/生徒の2セクションを持つスプレッドシート風フォーム (
AccountSpreadsheet) - Excel / Google スプレッドシートからの複数セル貼り付けに対応(タブ区切りで自動整形)
- 行の追加・初期化、削除操作を UI から実行可能
- 組織名・自治体コード・利用期間などのメタ情報を入力フォームで設定
bcryptjsを用いたパスワードハッシュ生成(同期処理)users向け SQL とmember向け SQL の同時生成とコピー機能users向け SQL とmember向け SQL の同時生成およびコピー機能に加え、生成された SQL を.sqlファイルとしてダウンロードする機能があります(クライアント側で Blob を作成して保存します)。- 生成中インジケーターやエラーメッセージ表示でフィードバック
- 画面上部のフォームで以下を入力します。
- 組織名:
user_group/memberそれぞれのcompany_nameに反映されます。 - 都道府県コード / 市区町村コード:数値として
prefecture_code,city_codeに利用します。 - 利用開始日 / 利用終了日(任意):
member_role_periodsの有効期間に反映されます。
- 組織名:
- 「アカウント情報」セクションで教師・生徒それぞれの一覧を編集します。
- 列は
ユーザーID,ユーザー名,パスワードの3項目。 - スプレッドシートからコピーしたデータをセルにフォーカスして貼り付けると、複数行が自動で展開されます。
- 行を削除すると ID は再利用されません。行を追加すると自動で
t-/s-プレフィックス付き ID が振られます。
- 列は
- 「SQL生成」ボタンを押すと処理が始まり、完了後に
users・member双方の SQL が表示されます。 - 各 SQL ブロックの「コピー」ボタンでクリップボードに転送し、DB ツール等へ貼り付けます。
- 各 SQL ブロックには「コピー」と「ダウンロード」ボタンがあり、表示されている SQL を
.sqlファイルとしてダウンロードできます。 - コピー/ダウンロードボタンは、SQL が実際に生成されてテキストが空でない場合にのみ有効になります(SQL が空または空白のみの場合は無効化されます)。
- ダウンロード時のファイル名は組織名をベースにして作られます(例:
MyOrg_users.sql)。組織名が空の場合はsql_export_users.sql/sql_export_members.sqlのようなフォールバック名になります。特殊文字は安全なファイル名に変換されます。
- 各 SQL ブロックには「コピー」と「ダウンロード」ボタンがあり、表示されている SQL を
パスワード列は画面上では平文ですが、SQL 生成時に
bcryptハッシュに変換されます。未入力の場合はデフォルトでpasswordという文字列がハッシュ化されます。
START TRANSACTION/COMMITでラップされたINSERT文を出力します。user_groupに1レコード挿入した後、LAST_INSERT_ID()を用いて同じuser_group_idをusersテーブルに紐づけます。- 教師は
role_id = 1, 生徒はrole_id = 2の固定値で挿入されます。
member,member_roles,member_role_periodsの3テーブルに対するINSERT文をまとめて生成します。- メールアドレスは
<ユーザーID>@kankouyohou.com(カスタマイズ可)で自動生成されます。 member_rolesではUSERとGENERALの2ロールをそれぞれ登録します。- 利用期間は入力された開始日/終了日に基づき、未入力の場合は
NULLが挿入されます。
| 項目 | 必須 | 備考 |
|---|---|---|
| ユーザーID | ○ | SQL の login_id およびメールアドレスに利用 |
| ユーザー名 | △ | 未入力の場合は空文字で挿入 |
| パスワード | △ | 未入力時は password でハッシュ化 |
教師/生徒ともにユーザーIDが空の行は SQL 生成時に除外されます。
- フレームワーク: Next.js 15.5.4 (App Router)
- 言語: TypeScript 5, React 19
- UI: Tailwind CSS 4, ユーティリティベースのスタイリング
- ロジック:
bcryptjsによる同期ハッシュ、src/lib/sql/*に SQL ビルダー - 開発ツール: Biome (Lint/Format), cross-env
npm run dev: 開発サーバーを起動 (next dev)npm run build: 本番ビルド (next build)npm run build:static: 静的出力モード(BUILD_MODE=static)npm run start: ビルド済みアプリを起動 (next start)npm run lint: Biome でのリンティングnpm run format: Biome でのフォーマット整形
- メールドメイン、郵便番号、住所などの固定値は
src/lib/sql/helpers.tsで設定できます。 - パスワードハッシュ処理はクライアントサイドで同期的に行われるため、大量件数ではパフォーマンスへ影響があります。必要に応じて Web Worker やサーバーサイドへの移行を検討してください。