BlitzJSのTutorialをやってみた①

技術ネタ
この記事は約9分で読めます。

こんばんわ、hisayukiです❗

前回に引き続き、BlitzJSを進めていこうかと思います。
Blitzはチュートリアルが公式にあるので、これを進めるのが理解深まるかなと。

スポンサーリンク

前回のリポジトリ

GitHub - mori-hisayuki/sample-blitz-app
Contribute to mori-hisayuki/sample-blitz-app development by creating an account on GitHub.

これをそのままgit cloneしてきます。

そのままじゃ動かない

Package

git cloneしただけだと動かなくなっています。
まずはyarn installでPackageのインストールします。

環境変数

加えて、README.mdに書いてありますが.env.local.env.test.localを追加をする必要があります。

Environment Variables

Ensure the .env.local file has required environment variables:

DATABASE_URL=postgresql://<YOUR_DB_USERNAME>@localhost:5432/sample-blitz-app

Ensure the .env.test.local file has required environment variables:

DATABASE_URL=postgresql://<YOUR_DB_USERNAME>@localhost:5432/sample-blitz-app_test

この2つのファイルは必須ではありますが、両方共ローカル環境での設定なのでGit管理の対象から外されています。

ちなみに、README.mdではPostgresqlへの接続情報を書いてますが最初の段階ではSQLiteを使うので、以下の用に書きます。

# .env.local
DATABASE_URL="file:./db.sqlite"

#.env.test.local
DATABASE_URL="file:./db_test.sqlite"

DB Migrate

初期テーブルも消えているので、マイグレーションコマンドを実行してテーブルを作成します。

blitz prisma migrate dev 

ディレクトリ構成

新規作成したアプリケーションのディレクトリはこんな感じです。

sample-blitz-app
├── app/
│   ├── api/
│   ├── auth/
│   │   ├── components/
│   │   │   ├── LoginForm.tsx
│   │   │   └── SignupForm.tsx
│   │   ├── mutations/
│   │   │   ├── changePassword.ts
│   │   │   ├── forgotPassword.test.ts
│   │   │   ├── forgotPassword.ts
│   │   │   ├── login.ts
│   │   │   ├── logout.ts
│   │   │   ├── resetPassword.test.ts
│   │   │   ├── resetPassword.ts
│   │   │   └── signup.ts
│   │   ├── pages/
│   │   │   ├── forgot-password.tsx
│   │   │   ├── login.tsx
│   │   │   ├── reset-password.tsx
│   │   │   └── signup.tsx
│   │   └── validations.ts
│   ├── core/
│   │   ├── components/
│   │   │   ├── Form.tsx
│   │   │   └── LabeledTextField.tsx
│   │   ├── hooks/
│   │   │   └── useCurrentUser.ts
│   │   └── layouts/
│   │       └── Layout.tsx
│   ├── pages/
│   │   ├── 404.tsx
│   │   ├── _app.tsx
│   │   ├── _document.tsx
│   │   ├── index.test.tsx
│   │   └── index.tsx
│   └── users/
│       └── queries/
│           └── getCurrentUser.ts
├── db/
│   ├── index.ts
│   ├── schema.prisma
│   └── seeds.ts
├── integrations/
├── mailers/
│   └── forgotPasswordMailer.ts
├── public/
│   ├── favicon.ico*
│   └── logo.png
├── test/
│   ├── setup.ts
│   └── utils.tsx
├── README.md
├── babel.config.js
├── blitz.config.js
├── jest.config.js
├── package.json
├── tsconfig.json
├── types.d.ts
├── types.ts
└── yarn.lock

各ファイルの説明はこんな感じです。
とりあえず、チュートリアルサイトの説明を日本語にしてみただけなので、違うところはあとから適宜直していきます。

app/

アプリケーションのRootディレクトリになります。

app/pages

表示するページごとのディレクトリです。
NextJSではこの直下にすべてのページを配置する必要がありましたが、Blitzではページ単位でapp/pages/***のようなディレクトリを作成することが出来ます。

Build時に各page単位のディレクトリ内のページをpages直下にマージします。

app/core/

アプリケーション内で共通利用される、HookやComponents、Layoutsなどを配置します。

db/

データベース構成を配置する場所。
Prismaのスキーマファイルや、マイグレーションやSeed用のファイルなどもここに配置する。

public

静的Assetsファイルを配置する場所。
ImageやCSSなどのファイルを配置する。

etc

他には.envなどの環境変数ファイルやbaleやTypescritpの設定ファイルなどがあります。

Sign upを試してみる

まずはsample-blitz-appディレクトリに移動して、以下のコマンドでローカルホストで実行します。

blitz dev
✔ Compiled
ready - started server on 0.0.0.0:3000, url: http://localhost:3000
info  - Loaded env from /home/vscode/develop/sample-blitz-app/.env
info  - Using webpack 4. Reason: future.webpack5 option not enabled https://nextjs.org/docs/messages/webpack5
warn  - You have enabled experimental feature(s).
warn  - Experimental features are not covered by semver, and may cause unexpected or broken application behavior. Use them at your own risk.

info  - Using external babel configuration from /home/vscode/develop/sample-blitz-app/babel.config.js
event - compiled successfully

http://localhost:3000にアクセスし、Sign Upを選択します

メールアドレスとパスワードを入力してCreate Accountをクリックします

これでアカウントが作成されて、ログイン後の画面に変わります。

ログアウト後に先程登録したメールアドレスとパスワードでログインも出来るようになります。

DBの中身も見てみる

blitzはデフォルトでPrisma Studioを起動できます。
npxコマンドでもPrisma Studioは起動しますが、.envを読み込まないです。

schema.prismaを見てみると、

datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

このようにURLを環境変数から読み込んでるので、blitzのコマンドから起動するようにします。

blitz prisma studio
Environment variables loaded from .env
Prisma schema loaded from db/schema.prisma
Starting Prisma Studio ...
Generating Prisma Client ... done
Prisma Studio is up on http://localhost:5555

起動したらhttp://localhost:5555を開くと以下の画面が表示されます。

Userを開きます。

このように1レコード増えていることがわかります。
余談ですが、追加されてたレコードがデフォルトでパスワードをハッシュ化して保持しているのすごいですね😊

HomePageを変えてみる

app/pages/index.tsxのHomeを以下の用に修正します

const Home: BlitzPage = () => {
  return (
    <div>
      <h1>Hello, world!</h1>

      <Suspense fallback="Loading...">
        <UserInfo />
      </Suspense>
    </div>
  )
}

ファイルを保存すると、ブラウザにページの更新が表示されます。

デフォルトのページみたいな装飾はないので、こんな感じにシンプルになります😂
Login、Logoutは別コンポーネントなのでそのまま表示されてます。

まとめ

今回は各ディレクトリの説明と、デフォルトで表示されるページで何が出来るのかまで書きました。
各ディレクトリには何が入るのかはなんとなく理解しましたが、設定ファイル周りはまだまださっぱりですねー💦

DBもPrisma Studioも初めて使いましたが、結構便利❗
追加や削除も容易にできるし、リレーションも簡単に追える。
というか、Prismaそのものの完成度高いな。。。

さて、次回はDatabase setupをやっていきます❗

コメント