はじめに
「最近の技術トレンド、追えてますか?」
私は追えていませんでした。
新卒採用の面接官をしていて、候補者の成果物の話しになった時、技術選定の深掘りができない自分に気づきました。正直、危機感を覚えました。
ここ3年間、業務ではほぼGo一筋。気づけばフロントエンドやインフラ周りの技術は浦島太郎状態。
「これはまずい」と思い、久々に個人開発でサービスを立ち上げることにしました。
この記事は、同じように「技術トレンドから離れてしまった」エンジニアに向けて、2026年現在のモダンなフルスタック技術選定をまとめたものです。
技術選定一覧
今回選定した技術スタックは以下の通りです。
| レイヤー | 選定技術 | 選定理由 |
|---|---|---|
| Language | TypeScript | Zodとの併用で静的型付けの安心感を得られる |
| Framework | React Router v7 | Web標準に忠実で、魔法が少ない |
| Runtime | Cloudflare Workers | 軽量・高速・安価。Docker不要 |
| Database | Cloudflare D1 | SQLiteベースの分散RDB。インフラ管理不要 |
| ORM | Kysely | 型安全なクエリビルダー。SQLを直接書いている感覚 |
| Validation | Zod | 実行時の型ガード。外部データを安全に変換 |
| UI | shadcn/ui | ライブラリではなくコードコピー型。依存を減らせる |
以下、それぞれの選定理由を詳しく説明していきます。
1. TypeScript:なぜRailsやLaravelではないのか
個人開発といえば Ruby on Rails や Laravel が定番です。「早く作れる」という点では今でも強力な選択肢でしょう。
ただ、静的型付け言語(Go)を3年間書いてきた身からすると、「魔法」が多いフレームワークには少し抵抗があります。裏側で何が起きているか分かりにくい。
TypeScriptは後述するZodとの併用で、Goに近い「コンパイル時に型エラーを潰せる」安心感を得られます。
求人や新卒面接でもTypeScriptを使っているケースが多くなってきたので、トレンドを追うためにもTypeScriptを選定しました。
✨ TypeScriptを選ぶ理由
- フロントエンドからバックエンドまで1つの言語で書ける
- 型があることでIDEの補完が強力に効く
- Zodと組み合わせることで、実行時の型安全も担保できる
- RailsやLaravelのような「規約」に縛られず、明示的に書ける
2. React Router v7:Web標準に忠実なフレームワーク
「Next.jsやRemixではなく、なぜReact Router v7?」と思うかもしれません。
📝 選定理由
- Web標準(Fetch API)に忠実で、フレームワーク固有の魔法が少ない
- Cloudflare Workersとの相性が良い
- 学習コストが低く、ポータビリティが高い
Vercelは便利ですが、裏側がブラックボックスになりがちです。何が起きているか把握したい人には、React Router v7 + Cloudflareの組み合わせが向いています。
3. Cloudflare Workers:なぜVercelではないのか
ホスティング先として、VercelとCloudflareを比較しました。
Vercelは Next.js との相性が抜群で、デプロイも簡単です。ただ、個人開発で気になるのはコスト面。無料枠を超えると料金が跳ね上がる印象があります。
一方、Cloudflareは無料枠が非常に太く、個人開発レベルならほぼ無料で運用できます。今回はコスト面を重視してCloudflareを選定しました。
🚀 Cloudflare Workersの特徴
- Docker不要: ローカルと本番で同じ環境を再現できる
- 爆速のデプロイ: 数秒で本番反映
- エッジで動作: ユーザーに近いロケーションで実行されるため高速
4. Cloudflare D1:SQLiteベースのエッジデータベース
D1はCloudflareが提供するSQLiteベースのデータベースです。エッジネットワーク上で動作します。
💡 選定理由
- SQLiteとの親和性: ローカルファイルとしてDBを扱える
- インフラ管理不要: サーバーの面倒を見る必要がない
- SQLがそのまま使える: ORMの魔法に頼らず、素のSQLを叩ける
RDSやPlanetScaleのようなマネージドDBもありますが、Cloudflareスタックで統一することで複雑さを減らせます。
5. Kysely:型安全なクエリビルダー
TypeScript最大の弱点は、DBからの入力が any(型不明)になることです。Kyselyはこの問題を解決します。
const users = await db
.selectFrom('users')
.select(['id', 'name', 'email'])
.where('status', '=', 'active')
.execute();
✨ Kyselyの特徴
- 文字列ベースのSQLを型安全にラップ
- ORMのような魔法はなく、SQLそのものに近い書き味
- 何が実行されるか明確に分かる
SQLを「所有」している感覚があり、Goで database/sql を使っていた人には馴染みやすいはずです。
6. Zod:実行時の型ガード
Zodは実行時にスキーマバリデーションを行い、不正なデータを即座に弾きます。
import { z } from 'zod';
const UserSchema = z.object({
id: z.number(),
name: z.string(),
email: z.string().email(),
});
// 外部から来たデータを安全にパース
const user = UserSchema.parse(externalData);
📝 なぜZodが必要か
- 外部API、フォーム入力、DBの結果など「信頼できないデータ」を安全に変換
- TypeScriptの型はコンパイル時のみ。実行時には消える
- Zodがあれば、実行時も型安全を担保できる
Goの json.Unmarshal + バリデータタグに近い堅牢性を提供してくれます。
7. shadcn/ui:UIを「所有」する
近年人気が高まっている shadcn/ui の特徴は、ライブラリではなく「コードコピー型」であることです。
🛠️ shadcn/uiの特徴
-
npm installするのではなく、コンポーネントのソースコードを自分のプロジェクトにコピー - 依存パッケージのアップデートに怯える必要がない
- 必要なら直接コードを書き換えてカスタマイズ可能
「標準ライブラリや最小限の依存を好む」という哲学に共感できる人には、非常にしっくりくるはずです。
まとめ
久々に技術選定を真剣に考えて、以下の構成に落ち着きました。
- TypeScript で静的型付けの安心感
- React Router v7 でWeb標準に忠実なフレームワーク
- Cloudflare Workers + D1 でDocker不要の軽量インフラ
- Kysely + Zod で型安全を徹底
- shadcn/ui で依存を最小限にしたUI
「魔法」に頼るのではなく、明示的に制御できる技術を選ぶ。これが2026年に個人開発を始めるエンジニアへの私なりの提案です。
最後まで読んでいただき、ありがとうございました。同じように「久々に個人開発したい」と思っているエンジニアの参考になれば幸いです。