オープンソースの株式市場追跡プラットフォーム。リアルタイムの価格監視、カスタマイズ可能な通知、詳細な企業分析を提供し、完全無料かつ永久にオープンです。
OpenStock プロジェクト紹介
プロジェクト概要
OpenStock は、誰もが無料かつオープンに市場を追跡できるよう設計されたモダンなオープンソース株式市場アプリケーションです。高価なマーケットプラットフォームに代わるオープンソースの代替手段として、リアルタイム価格追跡、パーソナライズされた通知、詳細な企業インサイト分析をサポートします。
基本理念: 知識はオープンで、無料かつアクセス可能であるべきであり、テクノロジーはすべての人々のものであるべきです。
主な機能
🔐 認証
- Better Auth + MongoDB を使ったメールアドレス/パスワード認証システム
- Next.js ミドルウェアによるルート保護
- 完全なユーザーセッション管理
🔍 グローバル検索
- Finnhub API による高速な株式検索機能
- アイドル時に人気銘柄を表示し、デバウンス付きクエリに対応
- Command + K キーでコマンドパネルを呼び出し可能
⭐ 自分の銘柄リスト(ウォッチリスト)
- 各ユーザーのウォッチリストは MongoDB に保存
- 各ユーザーごとに銘柄コードは一意
- 追加・削除機能が簡単操作で利用可能
📊 銘柄詳細
- TradingView 提供の銘柄情報
- ローソク足チャート/高度なチャート、ベースラインチャート、テクニカル指標
- 企業プロフィールおよび財務データウィジェット
📈 マーケット概況
- ヒートマップ、株価一覧、ヘッドラインニュース
- TradingView 埋め込み型ウィジェット使用
- リアルタイムマーケットデータ更新
🎯 パーソナライズされたオンボーディング
- ユーザーの居住国、投資目的を収集
- リスク許容度および業界嗜好を把握
- カスタマイズされたユーザーエクスペリエンスを提供
📧 メールと自動化
- AI によるパーソナライズされたウェルカムメール(Inngest 経由で Gemini を呼び出し)
- 毎日のニュースダイジェストメール(スケジュールタスク)
- ユーザーのウォッチリストに基づいたパーソナライズされたコンテンツ
🎨 洗練されたユーザーインターフェース
- shadcn/ui コンポーネント + Radix UI ベースコンポーネント
- Tailwind v4 デザインシステム
- デフォルトダークテーマ
- レスポンシブデザイン
技術スタック
コア技術
- Next.js 15 (App Router)
- React 19
- TypeScript
- Tailwind CSS v4 (@tailwindcss/postcss 経由)
- shadcn/ui + Radix UI ベースコンポーネント
- Lucide アイコンライブラリ
認証とデータ
- Better Auth – メール/パスワード認証、MongoDB アダプター連携
- MongoDB + Mongoose – データ永続化
- Finnhub API – 銘柄情報、企業プロフィール、マーケットニュース
- TradingView – 埋め込み可能なチャートウィジェット
自動化と通信
- Inngest – イベント処理、スケジュールタスク、AI 推論(Gemini)
- Nodemailer – メール送信(Gmail トランスポート)
- next-themes – テーマ切り替え
- cmdk – コマンドパネル
- react-hook-form – フォーム処理
言語構成
- TypeScript (~93.4%)
- CSS (~6%)
- JavaScript (~0.6%)
プロジェクト構造
app/
├── (auth)/ # 認証関連ページ
│ ├── layout.tsx
│ ├── sign-in/page.tsx
│ └── sign-up/page.tsx
├── (root)/ # メインアプリケーションページ
│ ├── layout.tsx
│ ├── page.tsx
│ ├── help/page.tsx
│ └── stocks/[symbol]/page.tsx
├── api/inngest/route.ts # Inngest API エンドポイント
├── globals.css
└── layout.tsx
components/
├── ui/ # shadcn/radix ベースコンポーネント
├── forms/ # フォームコンポーネント
├── Header.tsx
├── Footer.tsx
├── SearchCommand.tsx
└── WatchlistButton.tsx
database/
├── models/watchlist.model.ts
└── mongoose.ts
lib/
├── actions/ # サーバーアクション
│ ├── auth
│ ├── finnhub
│ ├── user
│ └── watchlist
├── better-auth/
├── inngest/ # Inngest クライアントおよび関数
├── nodemailer/ # メール送信設定
├── constants.ts
└── utils.ts
scripts/
└── test-db.mjs # データベース接続テスト
types/
└── global.d.ts
public/assets/images/ # ロゴおよびスクリーンショット
クイックスタート
前提条件
- Node.js 20+
- pnpm または npm
- MongoDB 接続文字列(MongoDB Atlas またはローカル Docker)
- Finnhub API キー
- Gmail アカウント(メール送信用)
- (任意)Google Gemini API キー(AI 生成コンテンツ用)
インストール手順
- リポジトリをクローン
git clone https://github.com/Open-Dev-Society/OpenStock.git
cd OpenStock
- 依存パッケージをインストール
pnpm install
# または
npm install
- 環境変数を設定
.env ファイルを作成:
# コア設定
NODE_ENV=development
# データベース
MONGODB_URI=your_mongodb_connection_string
# Better Auth
BETTER_AUTH_SECRET=your_better_auth_secret
BETTER_AUTH_URL=http://localhost:3000
# Finnhub
FINNHUB_API_KEY=your_finnhub_key
NEXT_PUBLIC_FINNHUB_API_KEY=
FINNHUB_BASE_URL=https://finnhub.io/api/v1
# Inngest AI (Gemini)
GEMINI_API_KEY=your_gemini_api_key
# メール設定
NODEMAILER_EMAIL=youraddress@gmail.com
NODEMAILER_PASSWORD=your_gmail_app_password
- データベース接続を確認
pnpm test:db
- 開発サーバーを起動
pnpm dev
- Inngest を起動(ワークフローおよびスケジュールタスク用)
npx inngest-cli@latest dev
- アプリケーションにアクセス
ブラウザで http://localhost:3000 を開く
Docker でのデプロイ
プロジェクトには Docker Compose 設定が含まれており、アプリケーションと MongoDB を簡単に起動できます:
# MongoDB を起動
docker compose up -d mongodb
# アプリケーションをビルドして起動
docker compose up -d --build
Docker 使用時の MongoDB 接続文字列は以下の通り:
MONGODB_URI=mongodb://root:example@mongodb:27017/openstock?authSource=admin
データと統合
Finnhub API
- 株式検索、企業プロフィール、マーケットニュースを提供
- 無料版では遅延行情が返される場合あり
- レート制限に注意が必要
TradingView
- 埋め込み可能なチャート、ヒートマップ、株価情報などのウィジェットを提供
- 外部画像は
i.ibb.coから取得
Better Auth + MongoDB
- メール/パスワード認証
- セッション保存用に MongoDB アダプターを使用
- ログイン/登録ページ以外のルートは保護済み
Inngest ワークフロー
- ユーザー作成イベント → AI によるパーソナライズされたウェルカムメール
- スケジュールタスク(毎日正午)→ ニュースダイジェストメール送信
- ローカル開発時は
npx inngest-cli@latest devを使用
メール送信(Nodemailer)
- Gmail をトランスポートとして使用
- ウェルカムメールおよびニュースダイジェストのテンプレートを提供
- 本番環境では専門的な SMTP サービスの利用を推奨
利用可能なスクリプト
pnpm dev- 開発サーバー起動(Turbopack)pnpm build- 本番ビルドpnpm start- 本番サーバー起動pnpm lint- ESLint 実行pnpm test:db- データベース接続確認
開発者体験
- TypeScript ストRICTモード
- Tailwind CSS v4(別途設定ファイル不要)
- shadcn/ui コンポーネントライブラリ
- cmdk コマンドパネル
- next-themes テーマ切り替え
- lucide-react アイコン
Open Dev Society 宣言
私たちは、知識が有料壁の向こうに隠され、ツールがサブスクリプションサービスに閉じ込められ、情報が偏見によって歪められ、「自分には無理だ」と初心者が諭される世界に生きています。
私たちの信念:
- テクノロジーはすべての人々のものであるべき
- 知識はオープンで、無料かつアクセス可能であるべき
- コミュニティは敷居ではなく信頼によって初心者を迎え入れるべき
私たちの使命:
- 真に役立つ無料のオープンソースプロジェクトを構築すること
- プロフェッショナルも学生も障壁なく使えるツールを作ること
- 学びが常に無料である知識プラットフォームを提供すること
- 初心者を評価するのではなく導くコミュニティを築くこと
- 利益ではなく信頼に基づいて運営されるリソースを提供すること
私たちの約束:
- 決して知識をロックしない
- 決してアクセスに料金を取らない
- 決して信頼をお金と引き換えにしない
- 透明性、寄付、コミュニティの力に基づいて運営する
貢献ガイド
学生、独学中の開発者、経験豊富なエンジニアを問わず、どなたでも貢献を歓迎します!
- Issue でアイデアやバグについて議論してください
- 「good first issue」または「help wanted」ラベルの付いた課題を探してください
- PR は焦点を絞り、UI 変更の場合はスクリーンショットを添付してください
- 他者に親切に、初心者を導き、敷居を設けない——これが ODS の道です
セキュリティ
セキュリティ上の脆弱性を発見した場合は:
- 公に Issue を立てないでください
- 以下までメールを送信してください:opendevsociety@cc.cc
- 私たちは責任ある開示を調整し、速やかに修正いたします
ライセンス
OpenStock は AGPL-3.0 ライセンスのもとで提供されています。このソフトウェアを改変・再配布・デプロイ(Web サービスとして含む)する場合、同じライセンス条件下でソースコードを開示し、原作者を明記する必要があります。
謝辞
- Finnhub – アクセシブルなマーケットデータを提供
- TradingView – 埋め込み可能なマーケットウィジェットを提供
- shadcn/ui, Radix UI, Tailwind CSS, Next.js コミュニティ
- Inngest – 信頼性の高いバックグラウンドタスクとワークフロー
- Better Auth – シンプルで安全な認証
- オープンソースツールを可能にしてくれたすべての貢献者
特に Adrian Hajdin (JavaScript Mastery) 氏に感謝します。氏の優れた株式市場アプリチュートリアルが、Open Dev Society が OpenStock を構築する上で大きな助けとなりました。
オープンに基づき、すべての人のために、永遠に無料で。—— Open Dev Society