PORTFOLIO

社内管理システム

勤怠管理・日報管理・在庫管理を統合した社内業務一元管理Webアプリケーション。Next.js 15 App Router + Prisma + NextAuth.jsによるフルスタック構成。ニューモーフィズムデザインで直感的なUI。

CATEGORY
Webアプリ開発
TECH STACK
Next.js 15 NextAuth.js Prisma React shadcn/ui SQLite Tailwind CSS TypeScript

プロジェクトの背景

勤怠・作業実績・在庫が個別のExcelやスプレッドシートで管理されており、情報の一元的な把握ができないという課題を解決するシステム。社員番号ベースの認証、ワンクリック打刻、在庫アラート通知、CSVインポート/エクスポートなど、中小企業の日常業務に必要な機能を一通り備える。

課題解決プロセス

01
課題 CHALLENGE
勤怠はタイムカード、日報はExcel、在庫は紙台帳と、業務情報が個別に管理されていた。データの横断的な把握ができず、月次集計に毎回1〜2日を要していた。また、全社員の勤怠修正・日報確認・在庫チェックを個別に行う管理者の工数が膨大で、特に在庫の閾値管理は目視確認に依存し発注遅れが発生。利用者は非技術者であり、ワンクリック・最小入力で業務を完結できるUIが求められた。
02
アプローチ APPROACH
Next.js 15 App RouterでフロントエンドとバックエンドをTypeScriptで統合。React 19 Server Componentsでサーバーサイドデータ取得、Client Componentsでインタラクティブ操作を分離。shadcn/ui + カスタムCSSでニューモーフィズムデザインシステムを構築。入出庫登録時に現在庫と閾値を比較し、閾値以下で管理者に自動通知を生成。Prisma ORM + Zodスキーマでデータ整合性を担保。
03
成果 OUTCOME
勤怠・日報・在庫の3業務を統合し、13画面のフルスタックWebアプリを構築。20以上のAPI Routesを設計・実装。ワンクリック打刻・リアルタイム時計・在庫アラート自動通知で業務効率を大幅に向上。管理者向け一元管理画面で管理工数を削減。CSV入出力で既存Excel運用との共存を実現。

ポイント

  • Next.js 15 App Router + RSC: Server ComponentsとClient Componentsを適材適所で使い分け。サーバーサイドデータ取得でTTFBを最適化しつつ、打刻やフォームなどインタラクティブ操作のみクライアントで処理
  • ニューモーフィズムデザインシステム: nm-raised / nm-inset / nm-flat の3バリエーションで統一的なUI。ブルー系カラーパレット(#667eea)で柔らかい影と浮き出し効果を実現
  • Prisma + Zodによるデータ整合性: 7モデルの型安全なDB操作。ユニーク制約(社員番号・SKU・ユーザー×日付の勤怠)とカスケード削除で一貫性を保証
  • 在庫アラート自動通知: 入出庫時に閾値比較→管理者通知を自動生成。ヘッダーバッジで未読数を常時表示し、発注遅れを防止
  • SQLite/PostgreSQLデュアル対応: 開発はSQLiteでゼロ設定、本番はSupabase PostgreSQLでスケーラビリティを確保。Prismaアダプタで透過的に切替

プロジェクト概要

勤怠・作業実績・在庫が個別のExcelやスプレッドシートで管理されており、情報の一元的な把握ができないという課題を解決するシステム。社員番号ベースの認証、ワンクリック打刻、在庫アラート通知、CSVインポート/エクスポートなど、中小企業(10〜50名規模)の日常業務に必要な機能を一通り備えるフルスタックWebアプリケーションです。

主要機能

  • 勤怠管理: リアルタイム時計表示付きのワンクリック出勤/退勤打刻。月次履歴・勤務時間自動計算
  • 日報管理: 日付・作業内容・作業時間の日報作成。月別集計サマリー(件数・合計時間・平均時間)
  • 在庫管理: 商品マスタ(SKU・カテゴリ・閾値)、入出庫記録、在庫アラート自動通知
  • ダッシュボード: 今日の勤怠状況・在庫アラート・直近日報を一画面に集約
  • 通知: 在庫が閾値を下回ると管理者に自動通知。ヘッダーバッジで未読数表示
  • CSV入出力: 勤怠・日報・在庫データのCSVエクスポート/インポート(PapaParse)
  • 認証・権限管理: NextAuth.js v5 + bcrypt。管理者/一般ユーザーの2段階RBAC
  • 管理者機能: 全ユーザーの勤怠閲覧・修正、全日報閲覧、ユーザーCRUD、商品マスタ管理

画面構成(13画面)

一般ユーザー向け(8画面)

  • ログイン: ニューモーフィズムデザイン。社員番号 + パスワードでJWTセッション発行
  • ダッシュボード: 勤怠状況・在庫アラート・直近日報の3カラム表示。時間帯連動の挨拶メッセージ
  • 勤怠管理: リアルタイム時計 + ワンクリック打刻。月別勤怠記録テーブル
  • 日報一覧: サマリーカード(件数・合計時間・平均時間) + 月別フィルタ
  • 日報作成: 日付ピッカー・作業内容・作業時間(0.5h刻み)入力フォーム
  • 在庫一覧: 4指標サマリー + 商品テーブル。閾値以下は赤字警告
  • 入出庫登録: 商品選択・入庫/出庫トグル・数量入力。在庫不足時バリデーション
  • 通知一覧: システム通知の既読/未読管理

管理者専用(5画面)

  • ユーザー管理: 社員番号・氏名・権限・状態でユーザーCRUD。カスケード削除対応
  • 勤怠管理: 全社員の勤怠一元管理。月別/社員別フィルタ、打刻時刻の編集機能
  • 日報管理: 社員別サマリー可視化。月別/社員別フィルタ、詳細ダイアログ
  • 商品マスタ: 商品の追加・編集・無効化・削除。SKUユニーク制約
  • CSV管理: 各データのCSVエクスポート/インポート。日本語ヘッダー対応

システム構成

Next.js 15 App Routerでフロントエンド(RSC + Client Components)とバックエンド(API Routes)を1プロジェクトに統合。Middlewareで認証ゲートを実装し、Prisma ORMで7モデルの型安全なDB操作を実現。開発はSQLite、本番はSupabase PostgreSQLのデュアル構成。

Frontend

  • Next.js 15(App Router)
  • React 19(RSC + Client)
  • TypeScript
  • Tailwind CSS v4
  • shadcn/ui + TanStack Table

Backend

  • Next.js API Routes
  • Prisma ORM
  • NextAuth.js v5(JWT)
  • Zod(バリデーション)
  • SQLite / PostgreSQL

技術選定の理由

  • Next.js 15: App RouterでRSC/Client Componentsを活用。API RoutesでバックエンドもTypeScriptで統一し、フルスタックを1プロジェクトで完結
  • Prisma: TypeScript型生成による型安全なDB操作。スキーマファーストでマイグレーションを管理。SQLite/PostgreSQLの切替が容易
  • NextAuth.js v5: Credentials Providerで社員番号ログインを実装。JWT + セッション拡張でRBACを実現。Middlewareとの統合が容易
  • shadcn/ui: Radix UIベースでアクセシビリティを担保。カスタマイズ性が高くニューモーフィズムとの親和性が良い
  • SQLite → PostgreSQL: 開発はSQLiteでゼロ設定。本番はSupabase PostgreSQLでスケーラビリティを確保。Prismaアダプタで透過的に切替

COMPANY

会社概要

WORKS

開発事例

CONTACT

お問い合わせ