Skip to content

日次履歴の統計画像をダウンロードする機能の追加 #1

@ka215

Description

@ka215

目的:

  • 履歴登録ページ(/history)に「登録済みの履歴画像をダウンロードする」機能を追加する。

要件:

  • 対象日選択時かつ履歴データ保存済み時に「履歴画像のダウンロード」ボタンを活性化する
    • 対象日の「保存済み」判定: ローカルストアに存在すれば可とし、API再照会は不要
  • 「履歴画像のダウンロード」ボタン押下によりシェア内容設定モーダルウィンドウ(components/HistoryStatsImageModal.vue)を開く
  • シェア内容設定モーダル内には下記のチャートを表示:
    • A. グラフA名「最新の履歴推移」: 対象日を含む設定期間分の排出履歴棒グラフ(components/chart/LatestPullHistory.vue と同等)
      • 対象日が末尾になるように表示
      • 対象日の積み上げ棒グラフの色はハイライトする
      • 出力期間は 当日のみ/1週間(デフォルト)/2週間/1ヶ月 から指定可能
      • 画像出力時にはタイトルは非表示。凡例と各軸テキストのみ表示
      • モーダル上での表示時はタイトルを表示「最新の履歴推移({指定期間})」
    • B. グラフB名「アプリの履歴統計」: 対象アプリの設定期間分の統計パイチャート(components/HistoryStats.vue と同等だが、HistoryStats.vueの拡張が煩雑になるようであれば本画像化用にコンポーネントを新設しても構わない)
      • 指定期間中の レア排出数/総ガチャ回数 の割合を示すパイチャートを左側カラムに表示
      • 次の統計値を集計して右側カラムにグリッド表示: 総ガチャ数、レア排出数、(指定期間中の)総課金額、対象日の課金額、(指定期間中の)履歴登録日数、(指定期間中の)平均ガチャ回数÷レア排出数(≒平均レア引き当て率?)
      • 出力期間は 当日のみ/1週間(デフォルト)/2週間/1ヶ月/全期間 から指定可能
      • 画像出力時にはタイトル不要で、左右カラム全体を画像化
      • モーダル上での表示時はタイトルを表示「アプリの履歴統計({開始日(YYYY-MM-DD)}~{終了日(YYYY-MM-DD)})」
  • 各グラフA/Bとも出力期間変更時にモーダル上のチャートA/Bの表示へ即時反映。
  • モーダルでの表示レイアウト:
    • モーダルヘッダのタイトルは「履歴統計画像の出力」
    • チェックボックス+ラベル名「最新の履歴推移」: チェックされた場合のみグラフAを画像出力する(初期チェック済み)
    • ラジオボタンにて「出力期間」の選択肢: 当日のみ/1週間(デフォルト)/2週間/1ヶ月
    • グラフA(プレビューを兼ねる)
    • チェックボックス+ラベル名「アプリの履歴統計」: チェックされた場合のみグラフBを画像出力する(初期チェック済み)
    • ラジオボタンにて「出力期間」の選択肢: 当日のみ/1週間(デフォルト)/2週間/1ヶ月/全期間
    • グラフB(プレビューを兼ねる)
    • 生成画像の横幅サイズを指定できるラジオボタン: 小(主にスマートフォン向け)/中(デフォルト)/大(デスクトップPC向け)
      • 具体的なサイズは 小: 360~480px/中: 640px/大: 1080px で考えているが、これは画像生成処理のパフォーマンスも含めて最適化が必要
    • モーダルフッターにコミットボタン「画像ダウンロード」と「キャンセル」ボタン(モーダルを閉じる)
      • グラフAもしくはグラフBのチェックボックスのいずれかがチェックされていない場合はコミット不可
      • デモユーザーの場合、コミットボタン押下時にコミット処理をスキップして、利用不可のトーストを表示する(コミットさせない)
  • 内容設定モーダルでコミットされたら、設定内容のグラフのスクリーンショットを生成(chart.jsの画像化機能を使用+α)して画像をダウンロードする。成功時はモーダルを閉じてトースト表示。処理失敗時はモーダル内にエラーを表示して設定が続行できるようにする。
  • 生成画像時のレイアウト:
    • 背景色はコミット時のテーマに準じてライトなら白、ダークなら --p-gray-900 の色とし、テキスト色はライトなら --p-surface-600 、ダークなら白
    • タイトルに「{アプリ名}の最新履歴({対象日をYYYY-MM-DD形式で})」
    • グラフA→グラフBの順で縦に並べる
    • 画像のpaddingは15px四方
    • ウォーターマークとして画像の右下に「© {PullLogのSVGアイコン(public/images/pulllog-icon.svg)} PullLog.net」の表記を追加する
  • 生成画像ファイルについて:
    • 画像形式はPNG、ファイル名は pulllog_{アプリID(ULID)}_{対象日のYYYY-MM-DD}.png
  • i18nについて: 日/英/中訳も本対応に含めること

対応内容:

  • どのファイルを追加・修正するか記述してください(必要最小限のファイル構成で追加・更新を行うこと)。
  • 出来る限りテストを作成し、result 画面に答えと解説が表示されるかを確認してください。
  • pre-commit フック(lint-staged / Biome)が通るまで自動で修正を繰り返してください。
  • コミットしたら新規ブランチで push し、PR を作成してください。
  • PR の本文には、今回あなたが行った変更点の要約(ファイル別・箇条書き)、影響範囲、確認コマンドを日本語で記載する。

制約/規約:

  • AGENTS.md とプロジェクト規約に従う(4スペース、原則セミコロン無し、any禁止、非nullアサーション禁止、console.log 残置禁止、API は fetch、JSDoc 原則必須、forEach は index 不使用なら for を使う、型は types/ へetc)。
  • 特に勝手に文末にセミコロンを付けて回らないこと!
  • 変更は最小で安全に(特に既存コードへの変更時は変更部分のみを規約に沿って実装し、他の部分は変更しない)。原則、破壊的変更はしない。
  • i18n 文言変更時は翻訳更新を含めてください。
  • 不要なファイルはコミットに含めないでください。

手順:

  1. ベースブランチを検出(origin/HEAD があればそれ、無ければ dev を既定に)。新規ブランチを作成:
    • ブランチ名: feat/history-image-download
  2. Biome と型チェックを実施し、指摘を修正:
    • npx @biomejs/biome check --write .
    • 可能なら pnpm build または pnpm typecheck を実行
  3. すべての差分をステージし、コミットを試行:
    • git add -A
    • コミットメッセージ(日本語、命令形、スコープ付きで)
  4. もし pre-commit が失敗したら、ログを読み取り、原因ファイルを自動修正して 2)〜3) を繰り返す(成功するまでループ)。
  5. コミット成功後、push:
    • git push -u origin <作成ブランチ>
  6. PR 作成:
    • 可能なら gh pr create --base <ベース> --head <作成ブランチ> --title <コミットタイトル> --body-file <一時ファイル>
    • gh が無い場合は PR URL を生成して表示: https://github.com/<owner>/<repo>/compare/<base>...<branch>?expand=1
  7. PR 本文(日本語)を作成し、次の構成で記載:
## 対応内容
- <ファイルパス>
  - <変更点を箇条書き>
- <ファイルパス>
  - <変更点...>

## 影響
- 機能仕様の変更: なし/あり(あれば具体)
- ビルド/実行への影響: なし/あり(具体)
- コーディング規約への準拠状況: 準拠(any/非nullアサーション/console.log など禁止事項の対応)
  1. PRが正常に終了したら完了です

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions