今日の優良食堂
実際に入れて動かして書いた、今日の一膳
ギット飯が代わりに導入・実行・コードまで確かめました
今日の優良食堂 · ギット飯が代わりに導入・分析

Open-Dev-Society/OpenStock

リアルタイム株価追跡、カスタマイズ可能なアラート、企業分析を備えた無料のオープンソース株式市場プラットフォーム。

OpenStockを立ち上げてwatchlistに好みの銘柄を登録すれば、Finnhubと TradingViewのデータで30以上の国際取引所の値動きをそのまま追える体験ができます。設定した条件に届いた瞬間、Inngestが動いて日次のニュース要約やAIが個人化した通知メールが届くので、チャートを開きっぱなしにする必要がなくなります。AGPL-3.0の完全オープンソースでありながらFinnhub・TradingView・Adanosを組み合わせている点が特徴で、Better AuthとMongoDBによるユーザー別管理やVitestで確認されたsentiment分析・AI提供者統合まで、実際に手元で試して確かめたくなる作り込みです。

01 / 概要
何をするものか一文で言うと
ひとことでリアルタイム株価追跡、カスタマイズ可能なアラート、企業分析を備えた無料のオープンソース株式市場プラットフォーム。

OpenStockは、Finnhubの市場データとTradingViewのチャートを使って株価を追跡できるオープンソースのWebアプリです。ウォッチリストとアラート機能を備え、Reddit・X・Polymarketなどのセンチメントも集約して表示します。Next.jsとMongoDBで構築され、AGPL-3.0で公開されています。

02 / 構造
どう動くのか中核のしくみ
読み方動きの流れを図と一緒にほどきました。

認証は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を切り替えて呼び出す構成です。

03 / 体験
入れるとこんな体験になりますギット飯が実際にたどった順序
所要ギット飯が実際に導入・実行しながらたどった順序です。
  1. STEP 01

    npm installのあとscripts/check-env.mjsで必須の環境変数(MongoDB URI、Finnhub APIキー、Better Authのシークレットなど)が揃っているか確認する流れになります。

  2. STEP 02

    docker-compose upを叩くとmongodbコンテナとアプリコンテナが起動し、Dockerfileのビルドでnpm run buildが実行されます。

  3. STEP 03

    npm run devでローカル起動後、sign-upページで登録すると、Nodemailer未設定の場合は歓迎メールが送られずコンソールに警告だけ表示されます。

  4. STEP 04

    株式詳細ページ(app/(root)/stocks/[symbol]/page.tsx)を開くとFinnhubのデータとTradingViewチャートが並び、ウォッチリストへの追加ボタンが使えます。

  5. STEP 05

    CreateAlertModalでアラートを作成すると、lib/inngest/functionsのジョブが定期チェックする対象になりますが、動作確認にはInngest devサーバーの起動が別途必要です。

  6. STEP 06

    npm run testでvitestの単体テストが走り、__tests__/ai-provider.integration.test.tsのようなAPIキー依存のテストはキー未設定だと自動でskipされます。

04 / 成果物
何が手に入るのか導入後に手元に残るもの

ローカルまたはDocker上で、株価表示・ウォッチリスト・アラート・センチメント集計を備えたNext.jsアプリが一式手に入ります。データはMongoDBに保存され、メールやAI要約はAPIキーを設定した分だけ機能が有効になる段階的な構成です。ソースはAGPL-3.0なので、改変・再配布時はソース公開義務が付きます。

05 / 注意
ここは先に知っておいてください先に知っておくとよいこと
正直なところ誰にでも合うとは言いにくいところです。
01

Nodemailerの認証情報(NODEMAILER_EMAIL/PASSWORD)が無いとメール送信は`skipped`状態になり、UI上の成功表示があっても実際には届きません。

02

AI統合テストはMINIMAX_API_KEYやGEMINI_API_KEYが無いとdescribe.skipIfでスキップされるため、README通りの動作をテストだけで保証できません。

03

Finnhubは無料プランではレート制限や遅延データの制約があり、README冒頭にも「市場データはプロバイダーの規約により遅延する可能性がある」と明記されています。

04

docker-compose.ymlはmongodbへのextra_hosts設定(host-gateway)に依存しており、実行環境によってはMongoDB接続の挙動確認が別途必要です。

06 / 結論
ギット飯の結論食べてみる価値のある一膳か
ギット飯の最終判断優良食堂

個人やOSSコミュニティが自分専用の株価トラッキング・アラートツールを無料で立てたい場合に向いた構成です。ただしFinnhub・MongoDB・Better Authのシークレットは必須で、メールやAI要約はオプション機能として段階的に有効化する前提です。middlewareの認証ガード、Mongooseモデル、Inngestジョブ、テストコードまで実装が具体的に確認できるため、ファイルとテストの内容から動作イメージを判断しても大きな外れはないと考えられます。

今日の残りの一膳
SUBSCRIBER LIBRARY
これまでに検証した優良食堂を一堂に

4 つの関門を通った優良食堂がすべてバックナンバーに集まっています。いちばん新しい一膳はどなたでも無料で読め、それより前の優良食堂の検証の根拠・詳しい解説は ギット飯 プレミアムのご購読ですでに開いています。

優良食堂バックナンバー →
リポジトリ詳細🧪 ひと言で味見する