Closed13

Four Keysを測定するサイトを作る 1(技術選定、Tailwind、next-intlで国際化)

saneatsusaneatsu

【2025-02-11】Hello, World!

ことの発端

https://x.com/__saneatsu/status/1888927925606502641

今すでにRemixで作っているアプリケーションもあるので本当にすこーーーーしずつ作っていく。
1日1時間くらい気分転換にやれればいいんじゃないかな...。

Scrapの立ち位置

Scrapは開発時のメモとして書いていく。
去年も1年間、50万文字くらいScrap書いたけどあとから見返せるの便利だし、自分なりに言語化して学んでいくの効果的だったと感じる。

https://zenn.dev/saneatsu/scraps/31a1bf5687d0fe

saneatsusaneatsu

【2025-02-11】技術選定

選定基準

  • すべてTypesScriptで書きたい
    • Go langとかも勉強してみたさあるけど1人ですべて作っていくことを考えると正直めんどうくさい。
  • 使ったことのないものを使いたい
    • RemixやTurso(DB)はすでに使っている

結論

前回 今回
フロントエンド Remix Next.js
バックエンド Remix Hono
バリデーション Zod Valibot
チャート <未使用> Recharts
データベース Turso(SQLite) Supabase(PostgreSQL)
インフラ Cloudflare Cloudflare + Vercel

SupabaseとNeonは結構悩んだ。
途中でNeonに変更する可能性もある。
以下のScrapに雑メモを書いた。

https://zenn.dev/saneatsu/scraps/001da626b55075

その他

構成

https://zenn.dev/oliver/articles/hono-advent-calendar-2024

この記事の構成に近くなりそう。
そういえばこのoliverさんという方、前に渋谷で開催されたHono x Cloudflareのミートアップでお話してたな。

Hono のすごい点は、そのポータビリティです。「comilio」の開発環境では Next.js を立ち上げた際、バックエンドのコードは Next.js 上の API Routes にマウントされるようになっています。これにより開発環境は Next.js の起動だけで済み、本番環境ではバックエンドを別のところに配置する。ということが可能となります。

要するに、Next.js を Vercel にデプロイしたいけれど、コストの都合や、Database の IP 制限などの要件に対応するためにバックエンドだけ CloudRun など別の場所にデプロイすることがめちゃくちゃ簡単にできる。ということです。

これすごい。

APIドキュメント

https://x.com/__saneatsu/status/1889168763683283019

Supabaseを調べてたら出会ったApidogというアプリケーション、面白そうなので導入してみたい。

saneatsusaneatsu

https://zenn.dev/hayato94087/articles/f76c878bc97d65

https://developer.mamezou-tech.com/blogs/2024/07/13/valibot-intro/

Valibotのソースコードを見ると、各関数はそれぞれ独立してexportされていることに気づきます。
これによりバンドラーのツリーシェイキングが効果的に機能するようになっています。シンプルなケースではZodと比較して90%以上もバンドルサイズを減らせるとのことです。

saneatsusaneatsu

チャートライブラリ

比較

https://qiita.com/killerbee/items/c3f6000d7763ba70d94a#recharts-ソースコード

これを見る限り開発の活発さや、参考までにStarを見るとRechartsは結構「安定の選択肢」って感じなのかな?

https://zenn.dev/ficilcom/articles/6a9b68fbf4c031

この記事の比較表見て決めるわけじゃないけど活発さは大事。

決定

ということで雑に決定。
公式ドキュメントはめっちゃシンプル。

https://recharts.org/en-US/

saneatsusaneatsu

【2025-02-12】Supabase x ORM

https://zenn.dev/oliver/articles/hono-advent-calendar-2024

この記事ではPlanetScale x Drizzleだった。
自分は現在 Turso x Drizzle。

PrismaよりDrizzleの方が好きなので今回もそうしようかと思っていたら以下の記事を発見。

https://zenn.dev/masa5714/articles/995eb75ba7e409#prismaなどのormを使うべきかどうか?

どうしてもprismaを使いたい理由があるならそれでもいいと思うのですが、supabaseに全部寄せちゃった方が楽だと個人的には思いますね。マイグレーション管理もSupabase CLIでできますし

こういうのってそもそも用意してくれてるやつ使ったほうが後々便利なパターンあると思うんだよな。全くわからんけど。

慣れないものを使っていくというのも目的の一つだし頑張るか...。

そういや、Commit Log大量に扱うならBig queryとかに手を出したほうがいいのかな。
後で考えよう。今はRDBに全部突っ込もう。

saneatsusaneatsu

【2025-02-18】AIにCommit messageを書いてもらう

背景

自分以外も書くかもだからCommit Messageは英語で書いていきたい。
しかし考えるのは面倒くさい。

aicommits

https://zenn.dev/takaha4k/articles/7cd3ac44ee2c7b

以前はこの記事をみてaicommitsを使ってみたこともあるがもう1年もメンテされていないっぽい。

OpenCommit

https://zenn.dev/hayato94087/articles/8193b7f7fd6f76

こっちは先週もメンテしてるし良さそう。
こっちでいく。

ただ、Cursor使ってる以上Cursorだけで済む気もしている。

その他

https://www.conventionalcommits.org/ja/v1.0.0/

chore: Add hoge みたいに、Prefixの次は大文字英語にしていく。
小文字は受け付けない。我慢できない。

saneatsusaneatsu

【2025-02-19】ドメインを取得する

Cloudflare で調べると「プレミアム」とついているものがある。

プレミアムドメイン名は、人々がオンライン検索でしばしば利用する共通の単語や語句に基づくため、他のドメインより価値があります。

ということだそうで。

アプリ名は1単語(HogeFugaではなくHoge)で、シンプルな造語っぽいものが好みなんだけどそうするとドメインが空いていないのでつらい。

最悪サービス名変えよう。

  • app: 取れない
  • tech: 取れる($250、更新$500、プレミアムドメイン)
  • dev: 取れない
  • com: 取れない
saneatsusaneatsu

【2025-02-23】next-intlで国際化

https://next-intl.dev/docs/getting-started/app-router/without-i18n-routing

シンプルそうなのでnext-intlを採用してみた。
言語情報はURLに含めたくないので上記リンクを参考にした。

https://github.com/amannn/next-intl/tree/main/examples/example-app-router-without-i18n-routing

また、より具体的な実装は公式のリポジトリのExample Codeを参考にした。
参考にする、というか丸パクリで動いた。
デモはこちら

このスクラップは2025/02/23にクローズされました