見出し画像

個人開発の 「認可」 は最初が 9 割。 手戻りゼロの最小設計 〜 認証と認可、 後回しにして積まないための実装ガイド 〜

「認可なんて、機能ができてから制限かければいいでしょ?」

かつての僕は、本気でそう思っていました。
ログイン機能(認証)さえあれば、あとは `if (user.isAdmin)` を画面にちょこっと書けばいい。
そう高を括っていたのです。

しかし、個人開発アプリのリリース直前、僕は絶望することになります。

「あれ、この API、管理者以外も叩けるぞ……?」
「管理者画面のレイアウトを変えたら、一般ユーザーの画面が壊れた」
「DB スキーマに Role を足そうとしたら、マイグレーションでデータ整合性が……」

積み上げたコードの至る所に、後付けの `if` 文がツタのように絡みつき、リファクタリングもできない「スパゲッティ状態」になっていたのです。
結局、僕は泣きながら主要なロジックを書き直す羽目になりました。

「認可(Authorization)」は、後付けできません。
いえ、正確には「後付けすると、コストが 10 倍になる」のです。

今日は、僕のような失敗をしないために、個人開発における「認証」と「認可」の最小設計と、Next.js (App Router) + NextAuth.js (v5) + Prisma での実装パターンを共有します。
これさえ最初に決めておけば、もう手戻りに怯えることはありません。


「認証」 と 「認可」 は、 似て非なるもの

まず、初心者が(そして過去の僕が)混同しがちなこの 2 つを整理します。

認証 (Authentication):
あなたは誰ですか? (Who are you?)

例: パスポートを見せて入国する、ログインする。

認可 (Authorization):
あなたは何ができますか? (What can you do?)

例: ビザの種類によって働けるか決まる、管理者権限があるか。

僕の失敗は、「認証(ログイン)」さえあればなんとかなると思っていたことでした。
しかし、システムを守る「門番」は、ID カードを確認するだけでは不十分なのです。
「この人はこの部屋に入っていいのか?」という権限チェックがなければ、セキュリティホールだらけになってしまいます。

なぜ 「後回し」 が地獄を招くのか

「とりあえず動くものを作る」という精神は、個人開発において尊いものです。
しかし、「データ構造」と「セキュリティ境界」だけは例外です。

認可を後回しにすると、以下のような地獄が待っています。

DB スキーマ変更の恐怖:
開発終盤でテーブル構造を変えると、既存データへの影響や型定義の修正範囲が膨大になります。

ロジックの分散:
「画面の表示制御」と「API の実行制御」で別々のチェックロジックを書いてしまい、整合性が取れなくなる(画面ではボタンが消えているのに、API は叩けるなど)。

テストの困難さ:
権限パターンが増えるたびに、テストケースが指数関数的に増殖します。

最初に 「マトリクス」 を作るだけでいい

では、どうすればいいのか。
コードを書く前に、「誰が」「何を」「どうできるか」の表(マトリクス) を作るだけです。

👇️ Markdown 形式
| Role | 記事閲覧 | 記事投稿 | ユーザー管理 |
| :--- | :---: | :---: | :---: |
| GUEST | ✅ | ❌ | ❌ |
| USER | ✅ | ✅ (自分ののみ) | ❌ |
| ADMIN | ✅ | ✅ (全て) | ✅ |

これさえあれば、迷うことはありません。
複雑な権限管理ライブラリを入れる必要もありません。
個人開発なら、この表をコードに落とし込むだけで十分なのです。

ここからはメンバーシップ限定エリアです。

「じゃあ、具体的にどう実装するの?」
「Next.js の App Router で、どこにガードを置けばいいの?」

そんな疑問に答えるために、Next.js + NextAuth (v5) + Prisma を使った具体的な実装パターンを公開します。
僕が実際に使っている 「コピペで使える schema.prisma と Middleware 設定」、そして 「Server Actions を守るための高階関数」 を用意しました。

これを知っているだけで、開発スピードと安心感が段違いに変わります。

ここから先は

5,604字 / 1画像

メンバーシップ ¥ 500 /月

■メンバーシップ 15 年目フリーランス開発者のひとり戦略を支える作戦会議室です。\ 案件に追われる…

ベーシックプラン

¥500 / 月

最後まで読んでいただき、ありがとうございます。もしこの記事が「役に立った」「心に響いた」と感じたら、珈琲一杯分サポートいただけると嬉しいです。あなたの温かい応援を力に、また次の創作活動に励みます。