OpenStockは、Finnhubの市場データとTradingViewのチャートを使って株価を追跡できるオープンソースのWebアプリです。ウォッチリストとアラート機能を備え、Reddit・X・Polymarketなどのセンチメントも集約して表示します。Next.jsとMongoDBで構築され、AGPL-3.0で公開されています。
認証はBetter Authが担い、ログイン後にセッションクッキーが発行されます。middleware/index.tsがクッキーの有無を確認し、無い場合は/sign-inへリダイレクトします。株価表示はlib/actions/finnhub.actions.tsがFinnhub APIを呼び出し、components/TradingViewWidget.tsxが公式ウィジェットを埋め込みます。ウォッチリストとアラートはdatabase/models配下のMongooseモデルでMongoDBに保存されます。lib/inngest/functions.tsのジョブが条件をチェックし、成立時にlib/nodemailer/index.tsでメール通知を送る設計です。ただしNODEMAILER_EMAILとNODEMAILER_PASSWORDが未設定だと送信はスキップされ、警告ログのみ出力されます。センチメント機能はlib/actions/adanos.actions.tsが複数ソースの指標を正規化し、平均バズ度や意見の一致度を集計します。AI要約部分はlib/ai-provider.tsがMiniMaxとGeminiを切り替えて呼び出す構成です。
- STEP 01
npm installのあとscripts/check-env.mjsで必須の環境変数(MongoDB URI、Finnhub APIキー、Better Authのシークレットなど)が揃っているか確認する流れになります。
- STEP 02
docker-compose upを叩くとmongodbコンテナとアプリコンテナが起動し、Dockerfileのビルドでnpm run buildが実行されます。
- STEP 03
npm run devでローカル起動後、sign-upページで登録すると、Nodemailer未設定の場合は歓迎メールが送られずコンソールに警告だけ表示されます。
- STEP 04
株式詳細ページ(app/(root)/stocks/[symbol]/page.tsx)を開くとFinnhubのデータとTradingViewチャートが並び、ウォッチリストへの追加ボタンが使えます。
- STEP 05
CreateAlertModalでアラートを作成すると、lib/inngest/functionsのジョブが定期チェックする対象になりますが、動作確認にはInngest devサーバーの起動が別途必要です。
- STEP 06
npm run testでvitestの単体テストが走り、__tests__/ai-provider.integration.test.tsのようなAPIキー依存のテストはキー未設定だと自動でskipされます。
ローカルまたはDocker上で、株価表示・ウォッチリスト・アラート・センチメント集計を備えたNext.jsアプリが一式手に入ります。データはMongoDBに保存され、メールやAI要約はAPIキーを設定した分だけ機能が有効になる段階的な構成です。ソースはAGPL-3.0なので、改変・再配布時はソース公開義務が付きます。
Nodemailerの認証情報(NODEMAILER_EMAIL/PASSWORD)が無いとメール送信は`skipped`状態になり、UI上の成功表示があっても実際には届きません。
AI統合テストはMINIMAX_API_KEYやGEMINI_API_KEYが無いとdescribe.skipIfでスキップされるため、README通りの動作をテストだけで保証できません。
Finnhubは無料プランではレート制限や遅延データの制約があり、README冒頭にも「市場データはプロバイダーの規約により遅延する可能性がある」と明記されています。
docker-compose.ymlはmongodbへのextra_hosts設定(host-gateway)に依存しており、実行環境によってはMongoDB接続の挙動確認が別途必要です。
個人やOSSコミュニティが自分専用の株価トラッキング・アラートツールを無料で立てたい場合に向いた構成です。ただしFinnhub・MongoDB・Better Authのシークレットは必須で、メールやAI要約はオプション機能として段階的に有効化する前提です。middlewareの認証ガード、Mongooseモデル、Inngestジョブ、テストコードまで実装が具体的に確認できるため、ファイルとテストの内容から動作イメージを判断しても大きな外れはないと考えられます。