Open20
next.jsアプリ開発
npx create-nex-appのエラー
npx create-next-app@latest appname
を叩いたらpackage.jsonのエラーが出た。
対象のファイルを見ると空だったので{}
を追加してやったら動いた。
#トラブルシューティング
ブランチ戦略について
ひとまずはgithub flowでやってみる。developとか使わなさそうなので。不便になったらまた考えよう。
InterfaceとType
プロを目指す人ののためのTypeScript入門によれば、
- Interface宣言で扱えるのはオブジェクト型のみ
- Type文で代用可能
- 2014年以前はType文が存在せず、Interface宣言のみだった
とのこと
生成AI(claude-4-sonnet)によれば…
今回の場合における理由
- オブジェクト型の拡張
- React.ComponentProps<"div">を継承している
- interfaceはextendsキーワードで直感的に拡張できる
- typeでも可能だが、交差型(&)を使う必要がある
- React のベストプラクティス
Reactコミュニティでは、コンポーネントのpropsを定義する際にinterfaceを使うのが一般的です
type vs interface の違い
- interfaceの特徴:
- 宣言マージが可能
- 継承が直感的
- typeの特徴:
- ユニオン型が使える
- 計算されたプロパティ
- 条件型がつかえる
使い分けの指針
- interface を使うべき場合:
- オブジェクトの形状を定義する
- 継承・拡張が必要
- Reactコンポーネントのprops
- 将来的に拡張される可能性がある
- type を使うべき場合:
- ユニオン型(string | number)
- プリミティブ型のエイリアス
- 計算されたプロパティ
- 条件型やマップ型
まとめ
今回interfaceを選んだ理由:
- Reactの慣習:コンポーネントpropsはinterfaceが標準的
- 拡張性:extendsによる継承が直感的
- 可読性:意図が明確(「これはオブジェクトの型定義」)
将来性:必要に応じて他の場所で拡張可能
一番大きいのは、コンポネントのpropsを設定したかったからってとこかな?
typeでもよさげではあるけど。
サイト全体に反映される設定を作りたい
サイト全体に及ぶ設定を作りたいときはglobal.cssを作ってlayout.tsxで読み込んで使う。
LayoutとTemplateの違いはレンダリングのタイミング
LayoutはNext.jsの仕様
カラーパレットサイト
font設定
googleフォントを使うときでもセルフホスティングしておくと通信速度が早くなったり、通信量が削減できたりする。
アイコンいろいろ
@egoist/tailwindcss-icons
- @egoist/tailwindcss-iconsをglobal.cssに設定しても反映されず、色々設定を触ってみたりしたがなかなか直らず…。結局.nextファイルを消して再度npm run devをしたら(?)なおった。
- 新しいアイコンフォントを追加するときは
npm install @iconify-json/emojione-monotone
CSS戦略どうする?Tailwindcssを何故使うのか?
アイコン何を使う?
- Tailwindcssのclassnameに直接記述する形式で使えるのは
@egoist/tailwindcss-icons
- そもそもHTMLのタグやクラス名として記述できるアイコンのことはアイコンフォントと呼ぶみたい。
フリーのアイコンサイトからインストールして使うことも検討したが、逐一探してcomponentに登録するのは面倒なので、よほどこだわりのある絵柄でない限りはtailwindやタグとして記述できるようなライブラリを使ったほうが楽そう。
- アイコンの種類が豊富そうなので今回は
@egoist/tailwindcss-icons
を利用する。 -
@iconify/tailwind
が公式のようだが、補完が聞かないとのことなのでegoistの方を利用。
-
@egoist/tailwindcss-icons
、spanタグの中でよく使われているが、spanタグの中まで見に行かないと何が表示されているかわからないのは不便… - Iconesのサイトでコンポネント自体も配布されているし、それつかってもいいかと思ったが、下記の理由からtailwindcss-iconsを使ってコンポネントを作って利用することにした。
- スタイルの変更にSVGの形式を逐一調べるのは面倒
- ほかがTailwindcssでスタイルの設定がされているのにここだけスタイルが変わるのは読みにくそう
Unknown at rule @custom-variant
と言われる
globals.cssでcursorのsettings.jsonにファイルを特定のファイル形式と紐づける設定を追加することで解決
"files.associations": {
"*.css": "tailwindcss",
},
#トラブルシューティング
.env.localがprocess.envに反映されない
.env.localがいくらなにをしても反映されなくて詰んだと思ったら文字コードがUTF-16LEになってた…なぜ…
UTF-8に直したらすぐ反映された!!ありがとうCursor。さっさと相談すればよかったぜ。
#トラブルシューティング