← 一覧に戻る

fort-rank

GitHub ↗ C# 最終push: 2026/6/3 3:17

WIP(現在進行中)

Work In Progress

このプロジェクトで現在進行中の作業と、過去のスナップショットを記録する。

現在の状況

全体ステータス

リリース自動化フロー (タグ push → GitHub Release + fortrank.com/downloads) が稼働。v1.1.1 のインストーラを配布中。O40CS Hideout? 機能とスタンダードテンプレート5列化が完了・リリース済み。

構成

  • ローカル: ~/cdev/fort-rank、GitHub: ichirokisanuki/fort-rank
  • 配布: https://fortrank.com/downloads/ (S3 + CloudFront、誰でも DL 可)
  • Windows 動作確認用: FortRankWinDebug/ プロジェクト + 指示書 fort-rank/windebug/CLAUDE.md
  • 配布対象は WinForms 版 (FortRank.csproj / net8.0-windows)。Avalonia 版は Mac での開発・確認用

直近の進捗(2026-06-03)

  • スタンダードテンプレートのマッチ別ビューを5列化(O40CS と同仕様)
  • O40CS タブに「Hideout?」チェックボックス追加(ON で O40CS テンプレートのロゴ o40cs_2026_2.png を出力直前に除去)。Avalonia / WinForms 両方に実装
  • 1.1.1 をリリース。CI 成功〜ダウンロードページ反映まで確認済み

次にやること

  • 特に確定タスクなし(次の機能要望待ち)
  • 積み残し: プロジェクトルート CLAUDE.md を Mac/Avalonia 中心に書き換え、ichirokisanuki/FortRank(キャメル)の削除判断(ROADMAP 参照)

詰まっていること / 未決事項

  • なし(1.1.1 リリース完了直後)

過去のWIPアーカイブ

(新しい「現在の状況」を書く前に、古いものをここに追記でアーカイブする。新しいものが上)

2026-06-03 時点のスナップショット(v1.0.3 配布時)

全体ステータス: Windows→Mac 引き継ぎ完了、リリース自動化フロー稼働。v1.0.3 のインストーラ配布中。

直近の進捗:

  • v1.0.3 ビルド・配布完了
  • アプリアイコン刷新 (王冠 + FR) 完了
  • fortrank.com/downloads の末尾スラッシュ問題を absolute path 化で修正、CloudFront invalidation 済み

次にやること:

  • Windows ブラウザでハードリロード後の DL 動作確認
  • CLAUDE.md (プロジェクトルート) を Mac/Avalonia 中心に書き換え
  • scripts/generate-downloads-index.ps1 の絶対パス化修正をコミット

詰まっていること / 未決事項:

  • Windows ブラウザ側のキャッシュ状況次第で、古い相対パス HTML が見えている可能性
  • ichirokisanuki/FortRank (キャメル) リポジトリの削除タイミング未定

2026-05-16 09:25 時点のスナップショット

(以下、引継ぎ.md・CLAUDE.md・このセッションの作業内容からの整理)

引き継ぎの背景

構成

  • FortRank.sln 配下の .NET 8 マルチプロジェクト
    • FortRank.Core/ … 共通ロジック(クロスプラットフォーム)
    • FortRank/ … WinForms UI(Windows専用、配布対象)
    • FortRank.Avalonia/ … Avalonia UI(クロスプラットフォーム、Mac で動かす本命)
    • FortRankDesignTemplatesViewer/ … テンプレートプレビュー(配布対象外)
  • HTMLテンプレートは FortRank.Core/DesignTemplates/ に EmbeddedResource として配置済み

次にやること

  • Mac環境での Avalonia 版動作確認(引継ぎ.md の「次のステップ候補」筆頭)
    • dotnet run --project FortRank.Avalonia で起動できるか
    • .NET 8 SDK インストール確認
  • CLAUDE.md を Mac/Avalonia 中心の記述に書き換え(現状は Windows/WinForms 中心)

詰まっていること

  • 特になし(引き継ぎ完了直後)

ROADMAP(計画)

ロードマップ

今週

  • Windows ブラウザで fortrank.com/downloads のハードリロード後 DL を最終確認
  • CLAUDE.md (プロジェクトルート) を Mac/Avalonia 中心の記述に書き換え(現状 Windows/WinForms 中心)

今月

  • Avalonia 版の Mac 上での実機操作確認(リプレイ読み込み・ランキング生成・HTML 出力までの一連動作)
  • WinForms 版 (FortRank.csproj) の MainForm.cs 203 / 292 行の null 参照警告解消

今四半期

  • ichirokisanuki/FortRank (キャメル) リポジトリの削除(fort-rank に完全移行確認後)
  • Avalonia 版のクロスプラットフォーム化追加対応(必要に応じて)

いつか

  • リプレイのネットワークパケット独自パースによるダメージ量取得(FortniteReplayReader v2.4.0 では不可)
  • 進行中リプレイの SessionId 抽出をログファイル経由ではなく直接ファイルから(暗号化キー未確定のため現状不可)
  • アプリのアップデート通知機能(fortrank.com から最新版チェック)

完了済み (2026-06-03)

  • スタンダードテンプレートのマッチ別ビュー5列化(O40CS と同仕様に統一)
  • O40CS タブの「Hideout?」チェックボックス(O40CS テンプレートのロゴ非表示)— Avalonia / WinForms 両方
  • インストーラ 1.1.1 のリリース(CI〜ダウンロードページ反映まで確認)

完了済み (2026-05-16)

  • Windows→Mac 引き継ぎ
  • Mac 上での Avalonia 版起動確認 + フォント問題修正
  • 設定タブの並び替え(Avalonia + WinForms)
  • FortRankWinDebug プロジェクト用の指示書整備
  • GitHub Actions による Windows インストーラ自動ビルド
  • fortrank.com/downloads の S3 自動デプロイ環境構築
  • アプリアイコンを王冠 + FR の新デザインに刷新
  • fortrank.com/downloads の URL 末尾スラッシュ問題対応(index.html 絶対パス化)
  • インストーラ 1.0.3 のリリース

DECISIONS(意思決定)

意思決定記録

このプロジェクトで下した重要な意思決定を記録する。 最新が上に来る。


2026-06-03: O40CS ロゴ非表示は出力直前 HTML の正規表現除去で実装

背景: O40CS の「Hideout?」チェックボックス ON 時に、O40CS通常/本番テンプレートのヒーローロゴ (o40cs_2026_2.png) を消したい。実装方法として ①テンプレートに meta フラグを渡して JS で .hero-logo を消す ②RankingDataJsonBuilder に hideLogo を持たせる ③レンダリング後 HTML から img タグを正規表現で除去、の3案があった。

決定: ③のレンダリング後 HTML に対する正規表現除去(<img\b[^>]*o40cs_2026_2\.png[^>]*> を空置換)を GenerateHtml 内で実施する。TemplateManager.Render の後段で、_hideO40CsLogo が true のときだけ適用。

理由: 全テンプレート共通の RankingDataJsonBuilder やテンプレート本体(HTML/JS)を一切触らずに済み、変更が出力直前の1箇所に閉じる。要件が「特定テンプレートの特定アイコンを消す」という限定的なものなので、共有層にフラグを通すより局所化した方が影響範囲が小さい。img の src が安定した埋め込みリソース文字列なので正規表現でも確実に当たる。


2026-06-03: O40CS Hideout? 機能は配布対象の WinForms 版にも実装する

背景: 当初 Mac で動かす Avalonia 版にのみ Hideout? を実装したが、インストーラが publish するのは WinForms 版 (FortRank.csproj)。Avalonia 版だけだとリリースに機能が載らない。

決定: WinForms 版 (MainForm + MultiRankingResultDialog) にも同じチェックボックスとロゴ除去ロジックを実装する。

理由: 配布対象は WinForms 版なので、ユーザーに届けるにはこちらへの実装が必須。Mac ではビルド不可だが、コードパターンを Avalonia 版と揃え、実ビルド確認は CI / Windows 側 (FortRankWinDebug) で行う運用とする。

2026-05-16: index.html の内部リンクは絶対パスを使う

背景: ChatGPT 生成のリンクは相対パスで作っていたが、ユーザーが https://fortrank.com/downloads (末尾スラッシュ無し) でアクセスすると、ブラウザの相対 URL 解決で /FortRank_Setup_X.Y.Z.exe (ルート直下) を叩きにいき、S3 が 403 を返す問題が発生した。

決定: scripts/generate-downloads-index.ps1 および手動配置の index.html の href をすべて /downloads/<filename> の絶対パスで生成する。

理由: ベース URL の末尾スラッシュ有無に依存せず確実に正しいパスを叩ける。CloudFront Function による URL リライト (/downloads/downloads/index.html) との組み合わせでも問題なく動く。


2026-05-16: アプリアイコンは王冠 + FR の 2 要素フラットデザイン

背景: 旧アイコンは線画の王冠 + 中央に「1」のミニマルだったが、ゲーマー向けの存在感に欠けていた。最初に依頼した装飾的なゲーミング系プロンプトは「ダサい」と却下された。

決定: 「角丸スクエア / ダークネイビー背景 / ゴールド単色フラット / 王冠 + 太字 FR」の 2 要素のみで構成。グラデーション・グロー・影は一切無し。32px に縮小してもシルエットが崩れない。背景は PNG アルファ透明で角丸の外周のみ。

理由: Windows でも macOS でも余計な装飾なく自然に表示される。識別性が高く、シンプルさを保つ。OS が squircle 等を被せない Windows の表示ルールに合致。


2026-05-16: リリースは GitHub Actions で自動化し、配布は GitHub Release と fortrank.com/downloads の両方

背景: WinForms 版 (net8.0-windows) は Mac でビルド不可、Inno Setup も Windows 専用。Mac 中心の開発で毎回 Windows PC に切り替えてリリースするのは非効率。また、private リポなので GitHub Release を一般ユーザーにそのまま配布できない。

決定:

  • .github/workflows/build-installer.ymlv*.*.* タグ push 時に windows-latest ランナーで自動ビルド
  • 成果物の setup.exe は GitHub Release に添付 + S3 s3://fortrank/downloads/ にアップロード
  • S3 上の setup.exe 一覧から index.html を自動再生成、CloudFront /downloads/* を invalidation
  • 配布 URL は https://fortrank.com/downloads/(CloudFront 経由、認証不要・誰でも DL 可)

理由: Mac でタグ push 1 回で全部完結する。private リポを維持しつつエンドユーザーへの公開配布が成立する。


2026-05-16: Windows 側の Git 履歴は引き継がず中身のみコピー

背景: Windows の ichirokisanuki/FortRank (キャメル) と、Mac で new-project-setup により作成された空の ichirokisanuki/fort-rank (小文字) が並存。Mac 側に Windows の作業履歴を引き継ぐ手段を選ぶ必要があった。

決定: 履歴は捨て、FortRank のソースツリー一式 (.git 除く) を fort-rank にコピー。fort-rank の Initial commit と FortRank の中身を混ぜた単一コミットを作成。

理由: --force push 禁止ルールがあり、fort-rank 側の Initial commit を破棄して FortRank の履歴丸ごとを乗せる選択肢は取れない。--allow-unrelated-histories でマージするとコンフリクト解決が手間。個人開発で過去履歴を本当に必要としていない。


2026-05-16: リポジトリは ichirokisanuki/fort-rank に統一する

背景: Windows PC では ichirokisanuki/FortRank (キャメル) を使っていた。Mac 側 new-project-setup で ichirokisanuki/fort-rank (小文字・ハイフン) が新規作成され、両者が GitHub 上に並存していた。

決定: ローカルディレクトリは ~/cdev/fort-rank のまま、GitHub リモートも ichirokisanuki/fort-rank (小文字) に統一する。ichirokisanuki/FortRank (キャメル) は将来削除予定。

理由: Mac での既存セットアップ (.devnotes/ 雛形・dev-tracked topic 付与済み) を活かせる。kebab-case 命名で個人プロジェクトの命名規則と一貫する。Windows 側の FortRankWinDebug プロジェクトからも fort-rank の clone を参照する構成にした。

DEVLOG(作業ログ)

開発日誌

このプロジェクトでの作業を時系列で記録する。 最新のエントリが上に来る。


2026-06-03

O40CS Hideout? 機能追加・スタンダード5列化・1.1.1 リリース

やったこと:

  • スタンダードテンプレートのマッチ別ビューを5列化(O40CS と同じ仕様に統一)
    • FortRank.Core/DesignTemplates/スタンダード.html
    • 順位列をスコア降順の連番に変更(同点はマッチ順位が上位の方を上)、match-place 付きの「マッチ順位」列を追加
    • PC用グリッド 80px 1fr 100px 100px 100px / モバイル用 60px 1fr 72px 72px 72px に5列化
    • O40CS と違い撃破数を素の match-stat で表示しているため、マッチ順位もそれに揃えた
  • O40CS タブに「Hideout?」チェックボックスを追加。ON でランキング生成→HTML出力/アップロードすると、O40CS通常/本番テンプレートのヒーローロゴ (o40cs_2026_2.png) を除去
    • Avalonia 版: O40CsViewModel.HideLogoO40CsView チェックボックス → Generate_ClickMultiRankingResultWindowhideO40CsLogo を渡す → GenerateHtml で正規表現除去
    • WinForms 版: MainFormo40HideoutCheck 追加(生成ボタンの左、Dock=Right 逆順配置)→ MultiRankingResultDialog の両コンストラクタに hideO40CsLogo 引数追加 → GenerateHtml で同じ除去
    • 除去ロジックは出力直前の HTML に対し <img\b[^>]*o40cs_2026_2\.png[^>]*> を空置換。JSON ビルダー・テンプレート本体は無変更
  • Avalonia 版で動作確認 OK、WinForms 版は Windows 側(FortRankWinDebug)で pull→実行して確認 OK
  • インストーラを 1.1.1 にバージョンアップしてリリース
    • installer.iss の AppVersion / OutputBaseFilename を 1.1.1 に
    • scripts/downloads-changelog.json に 1.1.1 のリリースノート2件を追加
    • タグ v1.1.1 push → CI 成功、GitHub Release 作成、S3 アップロード、ダウンロードページ更新まで自動完了
    • https://fortrank.com/downloads/FortRank_Setup_1.1.1.exe が HTTP 200 で DL 可能なことを確認

気づき:

  • WinForms 版 (net8.0-windows) は Mac ではビルド不可(Windows Desktop SDK が無い)。構文整合は Avalonia 版とパターンを揃えて担保し、実ビルドは CI / Windows 側で確認する運用

決めたこと:

  • O40CS ロゴ除去は「出力直前 HTML の正規表現除去」方式を採用(DECISIONS.md 参照)

2026-05-16

09:25 - Windows→Mac 引き継ぎとリリース自動化の構築

やったこと:

  • Windows PC 側の ichirokisanuki/FortRank (キャメル) の中身を Mac の ~/cdev/fort-rank に移植
    • 履歴は捨てて中身のみコピー、リモートは ichirokisanuki/fort-rank (小文字) に統一
    • .gitignore は .NET 向け + macOS/汎用設定をマージ
    • .devnotes/ を init-devlog で導入、初期 WIP を記録
  • Mac で Avalonia 版を起動確認 (dotnet run --project FortRank.Avalonia)
    • 文字サイズが英数字と日本語でズレる問題発生
    • Program.cs.WithInterFont() を外し、FontManagerOptions.DefaultFamilyName で OS ごとの日本語フォントを既定指定 (macOS: Hiragino Sans / Windows: Yu Gothic UI / Linux: Noto Sans CJK JP) して解消
  • 設定タブの UI 調整 (Avalonia + WinForms 両方)
    • 「最新マッチのセッションID」を最上部に移動
    • Avalonia 版のみ「S3 アップロード設定」を IsVisible="False" で非表示化(コードは残す)
  • Windows 動作確認用のシェル FortRankWinDebug/ 用の指示書を fort-rank/windebug/CLAUDE.md として整備
    • Windows 側で git clone → 親に CLAUDE.md → 「動作確認して」と一言で git pulldotnet run まで自動化される構成
  • インストーラを 1.0.2 → 1.0.3 にバージョンアップ
  • GitHub Actions .github/workflows/build-installer.yml を追加
    • v*.*.* タグ push で windows-latest ランナーが dotnet publish + Inno Setup を実行
    • 成果物を GitHub Release に添付、かつ S3 (s3://fortrank/downloads/) にもアップロード
    • scripts/generate-downloads-index.ps1 で S3 上の setup.exe を列挙して index.html を再生成
    • CloudFront /downloads/* を invalidation
  • AWS 側のセットアップ
    • IAM ユーザー fort-rank-deployer を作成(権限: s3:Put/Get/Delete on fortrank/downloads/* + s3:ListBucket prefix=downloads/* + CloudFront E2JO09A3T198CZ の invalidation)
    • Ichiro ユーザーに inline ポリシー CloudFrontFullAccess-inline を追加(運用作業用)
    • CloudFront Function fortrank-downloads-rewrite を作成・Distribution に関連付け(/downloads /downloads//downloads/index.html にリライト)
    • GitHub Secrets に AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / CLOUDFRONT_DISTRIBUTION_ID を登録
  • アプリアイコンを王冠 + FR の新デザインに刷新
    • ChatGPT 生成画像を Pillow で 4隅 flood fill → 透明背景化
    • 多解像度 ICO (16/24/32/48/64/128/256) に変換して app.ico を差し替え、app.png も同梱
  • fortrank.com/downloads の末尾スラッシュ問題を発見・修正
    • DevTools で https://fortrank.com/FortRank_Setup_1.0.3.exe (downloads/ 抜け) を叩いて 403 が出ていたのを特定
    • 原因: 末尾スラッシュ無し URL でアクセス時、HTML 内の相対パス href="X.exe"/X.exe (ルート直下) に解決されていた
    • 対処: index.html の href を絶対パス /downloads/X.exe に変更、scripts/generate-downloads-index.ps1 も同様に修正
  • ダウンロード時にブラウザが exe ファイルを直接「表示」しようとする挙動の保険として、S3 オブジェクトに Content-Disposition: attachment メタデータを付与
    • 既存 1.0.2 / 1.0.3 にも適用済み、workflow にも追記済み

決めたこと: (詳細は .devnotes/DECISIONS.md

  • リポジトリは ichirokisanuki/fort-rank に統一、ichirokisanuki/FortRank (キャメル) は将来削除
  • 引き継ぎ時の Git 履歴は破棄
  • リリースは GitHub Actions 自動化 + 配布は GitHub Release と fortrank.com/downloads の両方
  • アイコンは「王冠 + FR」のフラット 2 色デザイン
  • index.html の内部リンクは絶対パス必須

詰まったこと / 気づき:

  • CloudFront invalidation 完了直後にすぐ叩くと、その瞬間にまた古いキャッシュが再生成されることがある。invalidation 後はしばらく待つか、無視できる範囲なら気にしない
  • 末尾スラッシュ問題は curl では再現しなかった(curl は素直にURLそのものを叩く)。ブラウザの相対 URL 解決ロジックでだけ起きるので、CLI テストだけで安心せずブラウザ DevTools で確認することが大事
  • Avalonia の Mac での日本語表示は .WithInterFont() を無効化+日本語フォントを明示指定が定石

次回やること:

  • Windows 側のブラウザで fortrank.com/downloads のハードリロード後に DL できるか最終確認
  • CLAUDE.md (プロジェクトルート) を Mac/Avalonia 中心の記述に書き換え(現状 Windows/WinForms 中心)

最近のコミット