Skip to content

Shown06/appstore-research

Repository files navigation

App Store Japan マーケット調査ダッシュボード

App Store 日本市場のランキングデータ(無料・有料・売上上位)を毎週自動収集し、 カテゴリ別の参入難易度(ブルーオーシャンスコア)をビジュアル表示する Next.js ダッシュボード。

機能概要

  • App Store RSS + iTunes Lookup API でカテゴリ別トップ 25 アプリを取得
  • 平均レビュー数・平均評価・有料率からブルーオーシャンスコアを算出
  • SQLite にデータを蓄積(data/research.db
  • 週次 systemd timer で自動クロール(毎週日曜 03:00 JST)
  • Next.js + Tailwind + Recharts によるダッシュボード UI

ローカル開発手順

必要環境

  • Node.js 20 LTS
  • Python 3.9+(requests パッケージ)
# 1. 依存パッケージインストール
npm install

# 2. Python 依存インストール
pip3 install requests

# 3. 初回クロール(data/research.db を生成)
python3 scripts/crawl.py free
python3 scripts/crawl.py paid
python3 scripts/crawl.py grossing

# 4. 開発サーバー起動
npm run dev
# → http://localhost:3000

ディレクトリ構成

appstore-research/
├── app/                # Next.js App Router
│   ├── page.tsx        # メインダッシュボード
│   ├── layout.tsx
│   └── api/            # API Routes(SQLite アクセス)
├── components/         # UI コンポーネント
├── lib/
│   ├── db.ts           # better-sqlite3 ラッパー
│   └── score.ts        # ブルーオーシャンスコア計算
├── scripts/
│   └── crawl.py        # App Store クローラー
├── deploy/
│   ├── setup.sh        # VPS 一発セットアップスクリプト
│   ├── nginx.conf      # nginx リバースプロキシ設定
│   ├── appstore-crawl.service  # systemd サービス
│   └── appstore-crawl.timer    # systemd タイマー(週次)
└── data/               # SQLite DB(.gitignore 対象)
    └── research.db

VPS へのデプロイ(ConoHa Ubuntu 24.04)

前提条件

  • ConoHa VPS(Ubuntu 24.04)
  • SSH 接続済み
  • Git リポジトリが GitHub 等で公開または SSH アクセス可能

手順

# 1. VPS に SSH ログイン
ssh ubuntu@<VPS-IP>

# 2. リポジトリをクローン
git clone <your-repo-url> /var/www/appstore-research

# 3. セットアップスクリプトを実行(以後すべて自動)
cd /var/www/appstore-research && bash deploy/setup.sh

setup.sh が以下を自動実行します:

ステップ 内容
1 apt パッケージ更新(nginx, python3, curl 等)
2 nvm 経由で Node.js 20 LTS インストール
3 pm2 グローバルインストール
4 Python requests パッケージ確認
5 npm ci で依存インストール
6 初回クロール実行(free / paid / grossing)
7 npm run build
8 pm2 でアプリ起動 + 自動起動設定
9 nginx 設定 + systemd timer 有効化

完了後、http://<VPS-IP> でダッシュボードにアクセスできます。


systemd timer の有効化・確認

タイマー状態確認

# タイマー一覧と次回実行時刻
sudo systemctl list-timers | grep appstore

# タイマー詳細
sudo systemctl status appstore-crawl.timer

# 直近のクロールログ
sudo journalctl -u appstore-crawl.service -n 50

タイマーの手動操作

# タイマーを即時実行(テスト)
sudo systemctl start appstore-crawl.service

# タイマーを一時停止
sudo systemctl stop appstore-crawl.timer

# タイマーを再開
sudo systemctl start appstore-crawl.timer

週次クロールの確認方法

1. DB にデータが入っているか確認

cd /var/www/appstore-research
sqlite3 data/research.db "SELECT id, ran_at, type FROM crawl_runs ORDER BY id DESC LIMIT 10;"

2. カテゴリスコアを確認

sqlite3 data/research.db \
  "SELECT category_name, rank_type, blue_ocean_score, avg_review_count \
   FROM category_stats \
   WHERE run_id = (SELECT MAX(id) FROM crawl_runs) \
   ORDER BY blue_ocean_score DESC;"

3. 手動クロール実行

cd /var/www/appstore-research
python3 scripts/crawl.py free
python3 scripts/crawl.py paid
python3 scripts/crawl.py grossing

運用コマンド集

# pm2 状態確認
pm2 status

# pm2 ログ
pm2 logs appstore-research

# アプリ再起動
pm2 restart appstore-research

# Next.js 再ビルド後に再起動
cd /var/www/appstore-research && npm run build && pm2 restart appstore-research

# nginx 再起動
sudo systemctl reload nginx

# コード更新
cd /var/www/appstore-research
git pull
npm ci
npm run build
pm2 restart appstore-research

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors