BitCraft のリソース ID / エネミー ID を選択し、マップURLを生成する Astro + SolidJS アプリです。
- フレームワーク
- Astro 6 (
astro) - SolidJS (
solid-js)
- Astro 6 (
- Astro 統合 / デプロイ
- Solid 連携:
@astrojs/solid-js - Vercel アダプタ:
@astrojs/vercel(API 配信用)
- Solid 連携:
- UI / デザイン
- Kobalte (
@kobalte/core):Dialog/Checkbox/Searchなどのヘッドレス UI - Lucide (
lucide-solid): アイコン - Fontsource (
@fontsource/ibm-plex-sans): フォント配信
- Kobalte (
- データ / ユーティリティ
yaml: リソース定義 YAML の読み書きscripts/fetch-resources.mjs: リソース定義更新スクリプト
- 言語
- TypeScript
src/components/App.tsx- 画面全体のメインコンポーネント。
- リソース選択、URL 生成、プレビュー iframe、プレイヤーID設定ダイアログを統括。
src/components/ResourceTable.tsx- Tier 別リソース一覧テーブル。
- セルクリックで選択状態を切り替え。
src/components/PlayerSearch.tsx- プレイヤー検索 UI。
- 検索 API 呼び出し、レート制御、ローカル保存を担当。
src/components/hooks/useSelection.ts- リソース / ユニーク選択状態の管理フック。
- 追加・削除・選択判定・全解除ロジックを提供。
src/components/hooks/useMapUrl.ts- 選択状態からマップ URL を生成するフック。
resourceId/enemyId/playerIdのクエリ組み立てと iframe 更新を担当。
api/api/players.ts- Vercel Functions で動作するプレイヤー検索プロキシ。
- フロントからの検索クエリを上流 API へ中継。
src/data/resources.ts- リソース定義データの読み込みと整形。
src/i18n/context.tsxとlocales/en.yaml,locales/ja.yamlによる i18n 管理。
| Command | Action |
|---|---|
pnpm install |
依存関係をインストール |
pnpm dev |
開発サーバー起動 (http://localhost:4321) |
pnpm lint |
Oxlint を実行 (warn も表示) |
pnpm lint:fix |
Oxlint の自動修正を適用 |
pnpm lint:ci |
Oxlint を警告で失敗させる CI 用チェック |
pnpm build |
本番ビルド |
pnpm preview |
ビルド成果物のローカル確認 |
pnpm fetch:resources |
リソース定義の更新スクリプト実行 |
- フロントエンド: GitHub Pages (
https://hu-ja-ja.github.io/BitCraft_Map_Link_Generator) - プレイヤー検索 API: Vercel (
https://bitcraft-map-link-generator.vercel.app/api/players)
Astro 側は GitHub Pages 用の static 出力のみです。Vercel では Astro をビルドせず、リポジトリ直下の api/ ディレクトリを Vercel Functions として配信します。
- Root Directory:
api - API Function:
api/api/players.ts(公開 URL:/api/players)
-
PLAYER_API_APP_IDENTIFIER(Server only, optional)- 上流 API (
https://bitjita.com/api/players) へ送るx-app-identifierヘッダー値 - 未設定時は既定値:
Map_Link_Generator (discord: hu_ja_ja_)
- 上流 API (
-
PUBLIC_PLAYER_SEARCH_ENDPOINT(Client, optional)- フロントエンド側の検索先を上書きしたいときのみ設定
- 通常は未設定で
https://bitcraft-map-link-generator.vercel.app/api/playersを使う
-
PLAYER_API_ALLOWED_ORIGINS(Server only, optional)- CORS で許可する Origin のカンマ区切り一覧
- 例:
https://hu-ja-ja.github.io - 未設定時は
https://hu-ja-ja.github.ioのみを既定値として使用
- API は許可 Origin 以外を
403で拒否します(GitHub Pages のみ許可) - クエリ長上限(64文字)と upstream タイムアウト(3秒)を設定済みです
- Vercel Firewall で
/api/players向けの Rate Limit ルール設定を推奨します
src/components: SolidJS UIapi/api/players.ts: Vercel Functions で動作するプレイヤー検索プロキシsrc/data: リソース定義の読み込みscripts/fetch-resources.mjs: データ更新用スクリプト