Skip to content

camoneart/output-quest

Repository files navigation

OUTPUT QUEST 叡智の継承者

トップページ

アプリは以下からアクセスできます。

https://outputquest.com

目次

コンセプト

"アウトプットを学びの冒険に変える。RPG風学習支援アプリ"


OUTPUT QUEST 叡智の継承者は、ゲーミフィケーションを取り入れたRPG風学習支援アプリです。

核となる "3つの価値"

  1. アウトプットを "学びの冒険" へ

    Zennで技術記事を書くことで勇者がレベルアップしていきます。
    勇者がレベルアップすることで、「称号の獲得」「アイテムの獲得」「仲間との出会い」などのRPG風の要素が、単なるアウトプットを "学びの冒険" という体験に変え、アウトプットのモチベーションを高めます。

  2. 成長の可視化

    学びの軌跡を "冒険ログ" として記録。
    自分の成長過程を振り返ることで、更なる成長へと導きます。

  3. 次の学びの冒険へ

    AIが勇者の仲間の「賢者」として、次に書く記事に最適なテーマを提案。
    賢者(AI)は、あなたのZennの過去の投稿を分析することで、あなたの成長に最適な "学びのタネ" を見つけ出し、新たな知的好奇心を刺激します。

"叡智の継承者"

サブタイトルの「叡智の継承者」には、知識を受け継ぎ、新たな叡智を生み出していく学習者の姿を表現しています。
"1人1人のアウトプットが、誰かの学びとなり、知識となり、知恵となって継承されていく..."
そんな世界を目指しています。

音声解説

アプリの概要や使い方について、音声(NotebookLM)で解説しています。

【音声解説】OUTPUT QUEST 叡智の継承者

開発構成図

開発構成図を、HTMLインフォグラフィックで表現しました。

開発構成図(HTMLインフォグラフィック)

使用技術

nodeバージョン

  • node v22.14.0
  • pnpm v10.11.1

フロント

スタイル・UI

アニメーション

オーディオ

認証・データベース

スキーマバリデーション

  • zod:v3.25.67

AI

Markdown

ホスティング

ディレクトリ構造

outputquest/
├── .clerk/                                          # Clerk 認証設定
├── .cursor/                                         # Cursor Rules
├── .vscode/                                         # VS Code 設定
├── .next/                                           # Next.jsビルド・キャッシュファイル
├── prisma/                                          # データベース関連ファイル
│   └── migrations/                                  # マイグレーションファイル
├── public/                                          # 静的ファイル
│   ├── audio/                                       # 音声ファイル
│   ├── gifs/                                        # アニメーション画像ファイル
│   └── images/                                      # 画像ファイル
│       ├── arrow/                                   # 矢印画像
│       ├── common/                                  # 共通画像
│       ├── connection/                              # Zenn連携情報用画像
│       ├── home-character-icon/                     # トップページのキャラクターアイコン
│       ├── icon/                                    # アイコン類
│       ├── items-page/                              # アイテムページ用画像
│       ├── nav-icon/                                # ナビゲーションアイコン
│       ├── opengraph/                               # OGP用画像
│       ├── party-page/                              # なかまページ用画像
│       ├── readme/                                  # README用画像
│       └── sns/                                     # SNSアイコン用画像
├── src/
│   ├── app/                                         # ルートディレクトリ(ルーティング管理)
│   │   ├── (main)/                                  # メイン(Route Groups)
│   │   │   ├── about/                               # アバウトページ
│   │   │   ├── connection/                          # Clerk認証・Zenn連携ページ
│   │   │   ├── connection-detail/                   # Clerk認証・Zenn連携の解説ページ
│   │   │   ├── dashboard/                           # ダッシュボードページ
│   │   │   ├── equipment/                           # 装備ページ
│   │   │   ├── explore/                             # 記事探索ページ
│   │   │   ├── items/                               # アイテムページ
│   │   │   ├── logs/                                # ログページ
│   │   │   ├── party/                               # なかまページ
│   │   │   ├── posts/                               # 投稿ページ
│   │   │   ├── privacy/                             # プライバシーポリシーページ
│   │   │   ├── strength/                            # つよさページ
│   │   │   ├── terms/                               # 利用規約ページ
│   │   │   ├── title/                               # 称号ページ
│   │   │   ├── layout.tsx                           # メイン(Route Groups)用レイアウトコンポーネント
│   │   │   └── MainLayout.module.css                # メイン(Route Groups)用CSS Modules
│   │   ├── api/                                     # API Routes
│   │   │   ├── ai/                                  # AI(LLM)関連API
│   │   │   ├── user/                                # ユーザー関連API
│   │   │   ├── webhooks/                            # Webhook
│   │   │   └── zenn/                                # Zenn連携API
│   │   ├── favicon.ico                              # ファビコン
│   │   ├── Home.module.css                          # トップページ用CSS Modules
│   │   ├── layout.tsx                               # アプリケーション全体のルートレイアウトコンポーネント
│   │   ├── page.tsx                                 # ルートページ(トップページ)
│   │   ├── robots.ts                                # 検索エンジン向けrobots.txt生成
│   │   └── sitemap.ts                               # サイトマップ生成ファイル
│   ├── components/                                  # 再利用可能なUIコンポーネント
│   │   ├── auth/                                    # 認証関連コンポーネント
│   │   ├── common/                                  # 共通コンポーネント
│   │   ├── elements/                                # 基本的なUI要素
│   │   ├── layout/                                  # レイアウトコンポーネント
│   │   └── ui/                                      # shadcn/ui コンポーネント
│   ├── config/                                      # 環境・挙動を制御する設定 (環境変数, サービス URL, 機能フラグ等) ※環境ごとに値が変わる可能性あり
│   ├── consts/                                      # 不変定数 (enum, アイコン/色/文言マッピング, サイト情報, ページサイズなど) ※全環境共通
│   ├── contexts/                                    # React Context・グローバル状態管理
│   ├── features/                                    # componentsでは共通化が難しい、特定の機能やドメイン固有のコンポーネントを管理するディレクトリ
│   │   ├── connection/                              # Clerk認証・Zenn連携ページ機能
│   │   ├── connection-detail/                       # Clerk認証・Zenn連携の解説ページ機能
│   │   ├── dashboard/                               # ダッシュボード機能
│   │   ├── equipment/                               # 装備機能
│   │   ├── equipment-detail/                        # 装備詳細機能
│   │   ├── explore/                                 # 記事探索ページ機能
│   │   ├── gnav/                                    # グローバルナビゲーション機能
│   │   ├── home/                                    # ホームページ機能
│   │   ├── home/                                    # ホームページ機能
│   │   ├── item-detail/                             # アイテム詳細機能
│   │   ├── items/                                   # アイテム機能
│   │   ├── logs/                                    # ログ機能
│   │   ├── main/                                    # メイン機能
│   │   ├── navigation/                              # ナビゲーション機能
│   │   ├── party/                                   # なかま機能
│   │   ├── party-member/                            # なかま詳細機能
│   │   ├── posts/                                   # 投稿機能
│   │   ├── strength/                                # つよさ機能
│   │   └── title/                                   # 称号機能
│   ├── generated/                                   # Prisma Clientなど自動生成されるファイル
│   ├── hooks/                                       # カスタムフック
│   ├── lib/                                         # ライブラリ・ユーティリティ
│   ├── shared/                                      # 共有データ
│   ├── styles/                                      # スタイルファイル(globals.css)
│   ├── types/                                       # TypeScript型定義
│   ├── utils/                                       # ユーティリティ関数
│   └── middleware.ts                                # ミドルウェア
├── .depcheckrc.json                                 # 依存関係チェックツール depcheck の設定ファイル
├── .env                                             # 環境変数の設定ファイル
├── .env.example                                     # 環境変数のテンプレートファイル
├── .gitignore                                       # GitHubの差分に含まないものを格納
├── .npmrc                                           # pnpmの設定ファイル
├── .prettierrc.json                                 # Prettierの設定ファイル
├── components.json                                  # shadcn/ui設定ファイル
├── eslint.config.mjs                                # ESLint設定ファイル
├── next-env.d.ts                                    # Next.js の型定義補完ファイル(自動生成)
├── next.config.ts                                   # Next.js設定ファイル
├── package.json                                     # プロジェクトの依存関係・スクリプト定義
├── pnpm-lock.yaml                                   # pnpmの依存関係ロックファイル
├── postcss.config.mjs                               # PostCSS設定ファイル
├── README.md                                        # プロジェクトの説明ドキュメント
└── tsconfig.json                                    # TypeScript設定ファイル

環境構築の手順

前提条件

  • Node.js 20 以上
  • pnpm
  • Git

1. リポジトリのクローン

git clone https://github.com/camoneart/output-quest.git
cd output-quest

2. パッケージのインストール

$ pnpm install

3. 環境変数の設定

# `.env.example`を参考に`.env`ファイルを作成し、必要な環境変数を設定してください。
$ cp .env.example .env

4. データベースのセットアップ

# Prismaクライアントの生成
npx prisma generate

# マイグレーションの実行
npx prisma migrate dev

5. 開発サーバーの起動(ローカル環境の立ち上げ)

$ pnpm dev

下記のローカル環境にアクセスして、アプリケーションの起動が確認できれば OK です。
http://localhost:3000/

プロジェクト概要

「OUTPUT QUEST 叡智の継承者」は、私が開発したWebアプリです。ゲーミフィケーションを取り入れた "RPG風学習支援アプリ" で、Zennで記事を投稿することでアプリ内の「勇者」が成長し、アイテムの入手、称号の獲得、仲間との出会いがあなたを待っています。アウトプットを通じて学習意欲や知的好奇心を高め、楽しみながら自己成長を促すことを目的に開発しました。

Next.js + CSS Modules + Tailwind CSS + TypeScriptで開発し、デプロイはVercelで行いました。

機能紹介

「OUTPUT QUEST 叡智の継承者」の各ページの機能について紹介します。

トップページ

ゲームのオープニングを彷彿とさせる演出により、冒険のはじまりを視覚的に表現しました。

トップページ

ダッシュボード

勇者の冒険の拠点。勇者の成長度合いを示すレベル、Zennでの投稿数、勇者の仲間に加わったキャラや入手したアイテムを確認でき、Xへのシェアが可能です。

ダッシュボード

学びの書

Zennの記事を「これまでの学び」として記録する場所。Zennで投稿した記事が一覧表示され、学びの記録として振り返ることができます。記事はアプリ内ではカード型UIで表示され、クリックすることでZennの記事ページにアクセスできます。

学びの書

記事探索

AIが勇者の仲間の「賢者」として、次に書く記事に最適なテーマを提案。賢者(AI)は、あなたのZenn記事を探索し、過去の投稿から傾向を探ることで、あなたの成長に最適な「学びのタネ」を見つけ出します。

記事探索

※記事探索機能には、「Gemini 2.5 Pro(無料枠)」をAPIとして利用しています。

Gemini 2.5 Pro(無料枠)の採用理由は以下の2点です。

  • OUTPUT QUESTは、あくまで「ポートフォリオ用に開発したWebアプリ」であり、想定利用者は面接官や自分自身に限定されるため無料枠で十分と判断
  • 執筆や文字数を出すコンテンツ制作(記事探索機能) において、Geminiの「1Mコンテキストウィンドウ」が非常に役立つため

Gemini 2.5 Pro(無料枠)のレートリミット

指標 説明 制限値
RPM 1分あたりのリクエスト数 5
TPM 1分あたりのトークン数(入力) 250,000
RPD 1日あたりのリクエスト数 100

つよさ

勇者の成長度合いを示すレベル、レベルアップ報酬で獲得した「称号」の確認、勇者の「装備アイテム」の確認、これまでの学びの軌跡が残る「冒険ログ」の確認ができます。

つよさ

称号リスト

勇者がレベルアップ報酬で獲得した称号を一覧で確認できます。

称号リスト

そうび一覧

勇者の装備アイテムを一覧で確認できます。

そうび一覧

冒険ログ

学びの軌跡が残る「冒険ログ」。これまでの学びの軌跡を時系列で確認できます。

冒険ログ

なかま

勇者の仲間に加わったキャラクターを確認できます。1人1人のキャラクターの詳細情報も確認できます。

なかま

アイテム

勇者がレベルアップ報酬で入手したアイテムを確認できます。1つ1つのアイテムの詳細情報も確認できます。

アイテム

連携

Clerk認証によるログイン、Zennのアカウント連携を管理できます。ログインとZenn連携をすることで、Zennの投稿データがアプリ内のUIに反映されます。アプリはログイン無しでも利用できます。

連携

Zenn連携について

OUTPUT QUESTとZennアカウントを連携させることで得られるメリットや、ゲストユーザーとしてアプリを手軽に体験する方法について解説します。あなたに合った方法で、OUTPUT QUESTの世界を体験できます。

Zenn連携について

OUTPUT QUESTとは ?

OUTPUT QUESTの世界観と使い方、アウトプットを通じて成長する「RPG風学習支援アプリ」の始め方を解説します。アプリの概要、コンセプト、主要機能について紹介します。

OUTPUT QUESTとは ?

利用規約

OUTPUT QUESTの利用規約を確認できます。

利用規約

プライバシーポリシー

OUTPUT QUESTのプライバシーポリシーを確認できます。

プライバシーポリシー

今後追加予定の機能やアップデート

記事探索機能のアップデート

  • LLMのモデル変更(現在:gemini-2.5-pro)
  • モデルの回答生成時の口調の変更(現在:老賢者)

連携できるプラットフォームの追加

冒頭ログのアップデート

  • 表示ログの種類を拡張

アプリ内で入手できる報酬の追加

  • 新アイテム、新称号、新キャラ(なかま)の追加

勇者のレベル上限の拡張

  • 現在の上限:Lv99

主人公の変更機能を追加

  • 現在は勇者のみ(変更不可)
  • 主人公に設定できるキャラを、「勇者のなかま」から選択できるように

アプリの利用方法

ゲストユーザーで利用する場合

# 1. 早速、冒険をはじめよう!
ゲストユーザーは、開発者のZennアカウント「@aoyamadev」と連携済みの状態で利用できるため、すぐに OUTPUT QUEST の世界を体験できます!

ログインユーザーで利用する場合

# 1. Clerkによるログイン
連携ページ(/connection)にて、ログインを実行。

# 2. Zennのアカウントと連携
ログイン完了後、連携したい自分のZennアカウントのユーザー名を入力して、連携。

# 3. 冒険をはじめよう!
ログインとZennアカウントの連携が完了したら、早速冒険をはじめよう!

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •