2026-weekly-4 #12
|
|
@ -0,0 +1,239 @@
|
||||||
|
---
|
||||||
|
author: usbharu
|
||||||
|
draft: false
|
||||||
|
categories:
|
||||||
|
- null
|
||||||
|
date: 2026-02-01T13:07:30+09:00
|
||||||
|
tags:
|
||||||
|
- null
|
||||||
|
keywords:
|
||||||
|
- null
|
||||||
|
title: プロジェクトを作るときに考えたいこと
|
||||||
|
relpermalink: posts/2026-01-31/
|
||||||
|
url: posts/2026-01-31/
|
||||||
|
decription: TBD
|
||||||
|
---
|
||||||
|
|
||||||
|
何か新しいものを作ろうとしたときに、毎回調べている気がするのでまとめてみた。
|
||||||
|
|
||||||
|
最近はWeb(Next.js)+Desktop(Tauri+Vite+React)で作ることが多いので、なんだかんだ偏っているけどnpm使うなら使えるはず
|
||||||
|
|
||||||
|
## プロジェクトの構造を作る
|
||||||
|
|
||||||
|
基本的にpnpmを使う
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm init --init-type module
|
||||||
|
```
|
||||||
|
|
||||||
|
モノレポでやる場合は`pnpm-workspace.yaml`を追加する
|
||||||
|
|
||||||
|
[pnpm-workspace.yamlの構文](https://pnpm.io/ja/next/pnpm-workspace_yaml)
|
||||||
|
|
||||||
|
大体こんな感じのディレクトリ構造でやることが多い desktopとwebのフォルダは`pnpm create ほにゃらら`が作るので自分では作らない
|
||||||
|
```bash
|
||||||
|
tree .
|
||||||
|
.
|
||||||
|
├── apps
|
||||||
|
│ ├── desktop
|
||||||
|
│ └── web
|
||||||
|
└── packages
|
||||||
|
├── ui
|
||||||
|
└── utils
|
||||||
|
|
||||||
|
7 directories, 0 files
|
||||||
|
```
|
||||||
|
|
||||||
|
### Next.js
|
||||||
|
|
||||||
|
こんな感じで作成する
|
||||||
|
ESLintではなくBiomeを使う
|
||||||
|
|
||||||
|
```bash
|
||||||
|
create next-app@latest web
|
||||||
|
✔ Would you like to use the recommended Next.js defaults? › No, customize settings
|
||||||
|
✔ Would you like to use TypeScript? … No / Yes
|
||||||
|
✔ Which linter would you like to use? › Biome
|
||||||
|
✔ Would you like to use React Compiler? … No / Yes
|
||||||
|
✔ Would you like to use Tailwind CSS? … No / Yes
|
||||||
|
✔ Would you like your code inside a `src/` directory? … No / Yes
|
||||||
|
✔ Would you like to use App Router? (recommended) … No / Yes
|
||||||
|
✔ Would you like to customize the import alias (`@/*` by default)? … No / Yes
|
||||||
|
✔ What import alias would you like configured? … @/*
|
||||||
|
```
|
||||||
|
|
||||||
|
`pnpm-workspace.yaml`と`biome.json`が作成されるが、プロジェクトルートで作成するので必要に応じて削除する。
|
||||||
|
|
||||||
|
### Tauri
|
||||||
|
|
||||||
|
Rustがインストールされていることを確認する
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm create tauri-app
|
||||||
|
✔ Project name · desktop
|
||||||
|
✔ Identifier · dev.usbharu.test
|
||||||
|
✔ Choose which language to use for your frontend · TypeScript / JavaScript - (pnpm, yarn, npm, deno, bun)
|
||||||
|
✔ Choose your package manager · pnpm
|
||||||
|
✔ Choose your UI template · React - (https://react.dev/)
|
||||||
|
✔ Choose your UI flavor · TypeScript
|
||||||
|
```
|
||||||
|
|
||||||
|
### TypeScript
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm add -D typescript
|
||||||
|
npx tsc --init
|
||||||
|
```
|
||||||
|
|
||||||
|
npm scriptにtypecheckを追加しておく
|
||||||
|
正直いらないが… AIが利用できるコマンドを制限するときに楽
|
||||||
|
|
||||||
|
```json
|
||||||
|
"typecheck": "tsc --noEmit"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Vite(ライブラリモード)
|
||||||
|
|
||||||
|
npmに公開するかはともかくライブラリを作るときはViteのライブラリモードを利用するといいらしい やったことない
|
||||||
|
|
||||||
|
https://ja.vite.dev/guide/build#library-mode
|
||||||
|
|
||||||
|
単にモノレポの1パッケージとして作るだけなら不要
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
pnpmでモノレポ内のパッケージを追加する場合
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm add --workspace @test/ui
|
||||||
|
```
|
||||||
|
|
||||||
|
npmではやったことないけど、バージョンカタログの仕組みであるpnpm catalogで管理するというのもいいかも
|
||||||
|
|
||||||
|
https://pnpm.io/ja/catalogs
|
||||||
|
|
||||||
|
|
||||||
|
## テストとか諸々
|
||||||
|
|
||||||
|
### Biome
|
||||||
|
Biome君VSCodeの拡張機能がちょっと残念だけど基本的に優秀なので使ってます
|
||||||
|
|
||||||
|
https://biomejs.dev/ja/guides/getting-started/#%E8%A8%AD%E5%AE%9A
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm add -w -D @biomejs/biome
|
||||||
|
pnpm exec biome init
|
||||||
|
```
|
||||||
|
|
||||||
|
- JSONスキーマをURLからnode_modules内のファイルに変える
|
||||||
|
- 自動的にインストールされているバージョンのスキーマを使うことができる
|
||||||
|
- useIgnoreFile
|
||||||
|
- *.d.tsファイルの除外
|
||||||
|
- tailwindcss対応
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
|
||||||
|
"vcs": {
|
||||||
|
"enabled": true,
|
||||||
|
"clientKind": "git",
|
||||||
|
"useIgnoreFile": true
|
||||||
|
},
|
||||||
|
"files": {
|
||||||
|
"ignoreUnknown": true,
|
||||||
|
"includes": ["**", "!**/*.d.ts"]
|
||||||
|
},
|
||||||
|
"formatter": {
|
||||||
|
"enabled": true,
|
||||||
|
"indentStyle": "space",
|
||||||
|
"indentWidth": 2
|
||||||
|
},
|
||||||
|
"linter": {
|
||||||
|
"enabled": true,
|
||||||
|
"rules": {
|
||||||
|
"recommended": true,
|
||||||
|
"a11y": {
|
||||||
|
"noStaticElementInteractions": "off"
|
||||||
|
},
|
||||||
|
"nursery": {
|
||||||
|
"useSortedClasses": {
|
||||||
|
"fix": "safe",
|
||||||
|
"level": "error",
|
||||||
|
"options": {
|
||||||
|
"functions": ["twMerge", "twJoin", "tv", "cn"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"javascript": {
|
||||||
|
"formatter": {
|
||||||
|
"quoteStyle": "double"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"css": {
|
||||||
|
"parser": {
|
||||||
|
"cssModules": true,
|
||||||
|
"allowWrongLineComments": true,
|
||||||
|
"tailwindDirectives": true
|
||||||
|
},
|
||||||
|
"formatter": {
|
||||||
|
"enabled": false
|
||||||
|
},
|
||||||
|
"linter": {
|
||||||
|
"enabled": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"assist": {
|
||||||
|
"enabled": true,
|
||||||
|
"actions": {
|
||||||
|
"source": {
|
||||||
|
"organizeImports": "on"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
npm scriptにlintとlint:fixを追加しておく
|
||||||
|
--unsafeオプションはご自由に 僕はつけます
|
||||||
|
```json
|
||||||
|
"scripts": {
|
||||||
|
"lint": "biome check",
|
||||||
|
"lint:fix" : "biome check --write --unsafe"
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
### Vitest
|
||||||
|
|
||||||
|
テストにはVitestを使う 正直そんなに使ったことない
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm add -D vitest
|
||||||
|
```
|
||||||
|
|
||||||
|
npm scriptにtestを追加する
|
||||||
|
|
||||||
|
```json
|
||||||
|
"scripts": {
|
||||||
|
"test": "vitest"
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
### Storybook
|
||||||
|
|
||||||
|
AIと色々やるときにあるとすごい便利
|
||||||
|
|
||||||
|
ReactとかのUIライブラリが依存関係に入っていないと自動作成に失敗するみたいなので注意
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm create storybook@latest
|
||||||
|
```
|
||||||
|
|
||||||
|
あとは画面の指示に従うだけ
|
||||||
|
|
||||||
|
## Git/GitHubとCI/CD
|
||||||
|
|
||||||
|
https://vitest.dev/guide/reporters.html#github-actions-reporter
|
||||||
|
|
||||||
|
https://qiita.com/minamo173/items/8b8b27bc6ecd17ad925e
|
||||||
Loading…
Reference in New Issue