0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【t3.gg】Nextjs向けテンプレツールのt3を使ってみた

Last updated at Posted at 2024-07-05

まえがき

本当に使い始めで間違いが多いかもしれません。スマヌ。

T3とは?

私も最近使い始めたばかりなのですが、Nextjsでテンプレートを作ってくれるツールみたいで、create-next-appcreate-react-appと似たようなものっぽいです。
一番の違いとしては、NextjsからDBに接続するときに使うPrismaDrizzle、さらにtrpcやTailwindCSSの設定も自動でやってくれます。

今までは手動で設定していたので環境構築だけでもかなり時間がかかっていたのですが、こういうツールがあると便利ですね。

使い方

yarn create t3-app

自分はyarnをいつも使っているのでこれでいきますが、npm,pnpm,bunにも対応しています。bunに対応しているのはすごいですね。bunはリリースしてからそんなに経っていない記憶。

実行するといくつか質問されるので答えます

質問は

  • プロジェクト名
  • Typescript or Javascript
  • TailwindCSSを使うか
  • tRPCを使うか
  • NextAuth(認証用ライブラリ)を使うか
  • ORMは何にするか
  • AppRouterを使うか
  • DBは何を使うか(Postgresなど)
  • Gitの設定をするか
  • yarn で実行するか(yarn createで実行したため)
  • import文のエイリアス

スクリーンショット 2024-07-05 141931.png

作成できるとこんな感じで表示されます。

テスト動作

起動してみますー。

と思ったんですが、テンプレそのままだとダメっぽい

StackoverFlowから

上記では.envファイルの変数名を変更していますが、私の環境の場合は.envファイルの構成や配置場所をいろいろ工夫しないとダメでした。

具体的には、

  • .env.exampleファイルを削除し.envのみに
  • src/env.jsを変更

env.jsにかんしてはなぜかDiscordの変数読み込みをしている部分があったので消しました

import { createEnv } from "@t3-oss/env-nextjs";
import { z } from "zod";

export const env = createEnv({
  /**
   * Specify your server-side environment variables schema here. This way you can ensure the app
   * isn't built with invalid env vars.
   */
  server: {
    DATABASE_URL: z.string().url(),
    NODE_ENV: z
      .enum(["development", "test", "production"])
      .default("development"),
    NEXTAUTH_SECRET:
      process.env.NODE_ENV === "production"
        ? z.string()
        : z.string().optional(),
    NEXTAUTH_URL: z.preprocess(
      // This makes Vercel deployments not fail if you don't set NEXTAUTH_URL
      // Since NextAuth.js automatically uses the VERCEL_URL if present.
      (str) => process.env.VERCEL_URL ?? str,
      // VERCEL_URL doesn't include `https` so it cant be validated as a URL
      process.env.VERCEL ? z.string() : z.string().url()
    ),
-    DISCORD_CLIENT_ID: z.string(),
-   DISCORD_CLIENT_SECRET: z.string(),
  },

  /**
   * Specify your client-side environment variables schema here. This way you can ensure the app
   * isn't built with invalid env vars. To expose them to the client, prefix them with
   * `NEXT_PUBLIC_`.
   */
  client: {
    // NEXT_PUBLIC_CLIENTVAR: z.string(),
  },

  /**
   * You can't destruct `process.env` as a regular object in the Next.js edge runtimes (e.g.
   * middlewares) or client-side so we need to destruct manually.
   */
  runtimeEnv: {
    DATABASE_URL: process.env.DATABASE_URL,
    NODE_ENV: process.env.NODE_ENV,
    NEXTAUTH_SECRET: process.env.NEXTAUTH_SECRET,
    NEXTAUTH_URL: process.env.NEXTAUTH_URL,
-    DISCORD_CLIENT_ID: process.env.DISCORD_CLIENT_ID,
-   DISCORD_CLIENT_SECRET: process.env.DISCORD_CLIENT_SECRET,
  },
  /**
   * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. This is especially
   * useful for Docker builds.
   */
  skipValidation: !!process.env.SKIP_ENV_VALIDATION,
  /**
   * Makes it so that empty strings are treated as undefined. `SOME_VAR: z.string()` and
   * `SOME_VAR=''` will throw an error.
   */
  emptyStringAsUndefined: true,
});

起動後はいつもの通り
http://localhost:3000/
オープンです

開くとこんな感じ。

スクリーンショット 2024-07-05 174246.png

Nextjsとおんなじ感じですね

あとがき

t3は結構がっつりフルスタックでやる人向けのツールっぽいです。ただめちゃ便利なので今後はガンガン活用したいですね。

参考サイト

公式

開発者(?)のYoutube

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?