{"id":51045273,"url":"https://github.com/haru0416-dev/lottery-sim","last_synced_at":"2026-06-22T13:02:09.962Z","repository":{"id":364547954,"uuid":"1268216782","full_name":"haru0416-dev/lottery-sim","owner":"haru0416-dev","description":"公表確率・理論賞金額に基づく宝くじ統計シミュレーター。比較/モンテカルロ(破産確率)/X共有。React 19 + TS, MPL-2.0","archived":false,"fork":false,"pushed_at":"2026-06-13T12:32:22.000Z","size":382,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-13T14:07:27.375Z","etag":null,"topics":["bun","cloudflare-pages","lottery","monte-carlo","react","simulator","typescript","vite"],"latest_commit_sha":null,"homepage":"https://lottery-sim.pages.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/haru0416-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-13T09:15:35.000Z","updated_at":"2026-06-13T12:32:26.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/haru0416-dev/lottery-sim","commit_stats":null,"previous_names":["haru0416-dev/lottery-sim"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/haru0416-dev/lottery-sim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haru0416-dev%2Flottery-sim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haru0416-dev%2Flottery-sim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haru0416-dev%2Flottery-sim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haru0416-dev%2Flottery-sim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/haru0416-dev","download_url":"https://codeload.github.com/haru0416-dev/lottery-sim/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haru0416-dev%2Flottery-sim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34649822,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-22T02:00:06.391Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bun","cloudflare-pages","lottery","monte-carlo","react","simulator","typescript","vite"],"created_at":"2026-06-22T13:02:09.125Z","updated_at":"2026-06-22T13:02:09.957Z","avatar_url":"https://github.com/haru0416-dev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 宝くじシミュレーター\n\nもし宝くじを何年も買い続けたら、収支はどうなる？ を可視化する統計シミュレーター。\n公表確率・理論賞金額に忠実に、ジャンボ・ロト・ナンバーズ・スクラッチを長期購入したときの\n収支・破産確率・分布を試せます。**Vite + React 19 + TypeScript**。\n\n![宝くじシミュレーターの画面](docs/screenshot.png)\n\n## 機能\n\n- **7種**: ジャンボ宝くじ(年末ジャンボ型)・ロト7・ロト6・ミニロト・ナンバーズ3/4・スクラッチ\n  公表確率と理論賞金額(キャリーオーバーなしの代表値)に基づく\n- **ロト系の物理抽せん**: 毎回 本数字+ボーナス数字を実際に抽出して照合\n  - クイックピック / 数字を固定(マークシートで選択・おまかせ)\n  - 当せん口数での**パリミュチュエル山分け**(同一数字の複数口は1等総額が増えず、当せん本数の少ない等級も希釈)\n- **キャリーオーバー**(ロト6・ロト7): 全国1等不出現時に繰越・上限あり\n- **ジャンボのバラ/連番**(10枚1セット、7等確定・連番は1等+前後賞同時)\n- **ナンバーズの申込タイプ**: ストレート / ボックス / セット\n- **3つの実行モード**: 一括実行 / 連続購入アニメーション(速度4段階) / 1等が出るまで回す(チェイス)\n- **比較モード**: もう1種を同じ時間軸で同期並走(期間・購入数を独立指定可)\n- **モンテカルロ統計**: 同条件を30/100/300回繰り返した最終収支の分布(ヒストグラム)\n- **NISA参照線**: 同額を年利%で積立運用した複利の運用益。超長期は命数法(恒河沙・無量大数…)〜指数表記\n- **収支グラフ**: 累積収支の折れ線・理論収支線・高額当選マーカー・クロスヘア+ツールチップ(理論比/年換算)・\n  最大ドローダウン区間・最高/最低点の付箋・結果確定時の描き込みアニメーション\n- **結果サマリー + シェア画像(PNG)**、**設定のURL/localStorage保存**\n\n## デザイン\n\n**印刷物・宝くじ券面**(紙白×墨罫×朱)。ガラス・グロー・ぼかしは使わない。\n\n- 構造は罫線(子持ち罫・表罫)で作る。パネルは不透明な帳票面\n- **黒字=墨 / 赤字=朱**(帳簿の朱記)。当せんも朱(判子・スタンプ演出)\n- NISA参照線は藍(帳簿の青ペン)、比較系列は金茶\n- 数字: KPI は Oswald(券面の組番)、表とログは IBM Plex Mono、本文は IBM Plex Sans JP\n- ライト(紙白)/ダーク(夜の帳簿)。全トークンは WCAG AA を実測で担保\n- アニメ中はアダプティブ再描画(重量パネルは150ms間隔、チャート/KPIは毎フレーム)\n\n## 開発\n\n```bash\nbun install\nbun run dev          # 開発サーバ (http://localhost:5173)\nbun run build        # 型チェック + 本番ビルド (dist/)\nbun run preview      # ビルド成果物のプレビュー\nbun run typecheck    # 型チェックのみ\nbun run lint         # oxlint\nbun run lint:fix     # oxlint --fix\nbun run format       # oxfmt(整形して書き込み)\nbun run format:check # oxfmt --check(整形差分のチェックのみ)\nbun run check        # format:check + lint + typecheck をまとめて\nbun run smoke        # エンジン+データ定義の検証(組合せ論照合・還元率・メカニクス)\n```\n\nリンタは [oxlint](https://oxc.rs/docs/guide/usage/linter)(`.oxlintrc.json`、correctness カテゴリ + react/typescript/unicorn/oxc プラグイン)、\nフォーマッタは [oxfmt](https://oxc.rs/)(`.oxfmtrc.json`、Prettier 互換設定: 幅120・セミコロンなし・シングルクォート・末尾カンマ)。\nどちらも Rust 製で高速。\n\n## デプロイ(Cloudflare Pages)\n\n完全な静的SPA(サーバ機能・Pages Functions なし)。`wrangler.toml` に Pages 構成、`public/_headers`\nにセキュリティヘッダー(CSP/HSTS相当)とハッシュ資産の不変キャッシュを置いてある。\n\n### CLI で直接デプロイ\n\n```bash\nbunx wrangler login        # 初回のみ(ブラウザでCloudflare認証)\nbun run deploy             # build → wrangler pages deploy(初回はプロジェクト名/本番ブランチを確認)\n```\n\n`bun run deploy` は `build \u0026\u0026 bunx wrangler pages deploy`。プロジェクト名は `wrangler.toml` の `name`\n(既定 `lottery-sim`)。\n\n### Git 連携で自動デプロイ(推奨)\n\nCloudflare ダッシュボードでリポジトリを接続し、ビルド設定を:\n\n- **Build command**: `bun run build`\n- **Build output directory**: `dist`\n\n`public/_headers` はどちらの方法でも自動適用される。\n\n### 独自ドメインを使うとき\n\nOG/Twitter 画像は `index.html` で **絶対URL**(`https://lottery-sim.pages.dev/og.png`)を指定している\n(X 等のクローラは相対パスを解決しないため)。独自ドメインに移す場合は `og:url` / `og:image` /\n`twitter:image` のホスト部を差し替えること。`_headers` の CSP は初回デプロイ後に一度動作確認する\n(フォント/スタイルが崩れたら CSP が原因)。\n\n## 構成\n\n```\nPRODUCT.md              デザイン方針(register/ペルソナ/アンチリファレンス/原則)\nsrc/\n  main.tsx              エントリ\n  App.tsx               メインアプリ(状態・実行モード・レイアウト)\n  styles.css            印刷意匠のスタイル(OKLCHトークン・罫線・スタンプ)\n  types.ts              共有型定義\n  lottery-data.ts       宝くじ定義・申込タイプ・フォーマット/集計/effGameOf\n  sim-engine.ts         シミュレーションエンジン(UIなしの純ロジック: doDraw/runOneTrial/runBulkSim)\n  sim.worker.ts         重いバッチ計算(一括・モンテカルロ)の Web Worker\n  sim-runner.ts         メイン側API(ワーカープール並列 + 同期フォールバック)\n  ErrorBoundary.tsx     ランタイム例外時のフォールバック\n  components/\n    charts.tsx          SVGチャート(収支折れ線・ヒストグラム・等級内訳・投資vs回収)\n    features.tsx        プリセット・結果サマリー・シェア画像・命数法\n    stats.tsx           モンテカルロ統計パネル\n  tweaks/\n    TweaksPanel.tsx     表示設定パネル(テーマ/アクセント/グラフ/NISA/ハイライト基準)\nscripts/\n  smoke.ts              検証スイート(集計整合・組合せ論・パリミュチュエル・複利)\n```\n\n## データの正しさ\n\n確率・賞金は公表されている理論値/代表値に基づきます。`scripts/smoke.ts`(`bun run smoke`)が\nロト系全等級の当せん本数を組合せ論の閉形式で照合し、還元率の収束やパリミュチュエル(山分け)も\n検証するため、データ定義の不整合は自動で検出されます。前提の詳細はアプリ内「データの前提と注意」を参照。\n\n## ライセンス\n\n[Mozilla Public License 2.0](LICENSE)(MPL-2.0)。ファイル単位の弱コピーレフトで、\n改変したファイルは同ライセンスでの公開維持が必要ですが、プロプライエタリなコードとの\n組合せ(Larger Work)は許容されます。\n\n## 免責\n\n娯楽・教育目的のシミュレーターです。確率・賞金は公表されている理論値(平均値)に基づき、\n実際の結果を保証するものではありません。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharu0416-dev%2Flottery-sim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fharu0416-dev%2Flottery-sim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharu0416-dev%2Flottery-sim/lists"}