もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

AdonisJSを試す(migration)

はじめに

こんばんは。

今日もAdonisJS試していきます。

今日はDBのマイグレーションやってみます。

前回はこちら

kojirooooocks.hatenablog.com

本題

インストール

$ npm init adonisjs@latest migration_example

> npx
> create-adonisjs migration_example


     _       _             _         _ ____  
    / \   __| | ___  _ __ (_)___    | / ___| 
   / _ \ / _` |/ _ \| '_ \| / __|_  | \___ \ 
  / ___ \ (_| | (_) | | | | \__ \ |_| |___) |
 /_/   \_\__,_|\___/|_| |_|_|___/\___/|____/ 
                                             

設定は以下にしました。

❯ Which starter kit would you like to use · Inertia Starter Kit
❯ Which authentication guard you want to use · session
❯ Which database driver you want to use · mysql
❯ Which frontend adapter you want to use with Inertia · vue
❯ Do you want to setup server-side rendering with Inertia (y/N) · false

実行

$ cd migration_example
$ npm run dev

[ info ] starting HTTP server...

   EnvValidationException: Validation failed for one or more environment variables
 
   - Missing environment variable "DB_DATABASE"
 
   at <anonymous> start/env.ts:14
    9|   |
   10|  */
   11|  
   12|  import { Env } from '@adonisjs/core/env'
   13|  
 ❯ 14|  export default await Env.create(new URL('../', import.meta.url), {
   15|    NODE_ENV: Env.schema.enum(['development', 'production', 'test'] as const),
   16|    PORT: Env.schema.number(),
   17|    APP_KEY: Env.schema.string(),
   18|    HOST: Env.schema.string({ format: 'host' }),
   19|    LOG_LEVEL: Env.schema.string(),

   ⁃ EnvValidator
     node_modules/@adonisjs/env/src/validator.ts:27
   ⁃ Function.rules
     node_modules/@adonisjs/env/src/env.ts:83
   ⁃ Function.create
     node_modules/@adonisjs/env/src/env.ts:53

前回とは違いエラーが出ました。 SessionでDBを使用するようになったので、接続情報がないからエラーになってるみたいです。

.env をつながるように修正します。

.env

DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=kojirock
DB_PASSWORD=kojikoji-5260
DB_DATABASE=adonisjs_example

これで表示するといい感じに表示できます。

設定

node ace add @adonisjs/auth --guard=session を実行して kernelの修正とかマイグレーションファイルを作ります。

(マイグレーションファイルはプロジェクトを作成したときに同じ内容のものがあるので削除しちゃっていいみたいです)

$ node ace add @adonisjs/auth --guard=session

[ info ] Installing the package using the following command : npm add @adonisjs/auth
❯ Continue ? (Y/n) · true
[ wait ] package installed successfully ...
SKIPPED: create config/auth.ts (File already exists)
DONE:    update adonisrc.ts file
DONE:    create database/migrations/1722136317730_create_users_table.ts
SKIPPED: create app/models/user.ts (File already exists)
SKIPPED: create app/middleware/auth_middleware.ts (File already exists)
SKIPPED: create app/middleware/guest_middleware.ts (File already exists)
DONE:    update start/kernel.ts file
DONE:    update start/kernel.ts file
[ success ] Installed and configured @adonisjs/auth

マイグレーション実行

すでに存在しているマイグレーションファイルを実行します。

$ node ace migration:run     
❯ migrated database/migrations/1722134672399_create_users_table

Migrated in 61 ms


$ node ace migration:status
┌────────────────────────────────────────────────────────┬─────────────┬─────────┬───────────┐
│  Name                                                  │  Status     │  Batch  │  Message  │
├────────────────────────────────────────────────────────┼─────────────┼─────────┼───────────┤
│  database/migrations/1722134672399_create_users_table  │  completed  │  1      │           │
└────────────────────────────────────────────────────────┴─────────────┴─────────┴───────────┘

作られました。 adonis_schema が laravelでいう migrations みたいです。

終わりに

とりあえずマイグレーション実行してテーブル作るところまで行けました。

次はSeederとか実行したり、実際にデータ取ってきたり、なんだかんだやってみます。