← 一覧に戻る

fort-rank

GitHub ↗ C# 最終push: 2026/7/2 14:32

WIP(現在進行中)

Work In Progress

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

現在の状況

全体ステータス

FortRank 本体(v1.1.1)に加えて、新しい常駐アプリ FortRankSessionNotifier v1.0.0 を公開。fortrank.com/downloads は上部タブで2製品を切り替えて DL できる。

構成

  • ローカル: ~/cdev/fort-rank、GitHub: ichirokisanuki/fort-rank
  • 配布: https://fortrank.com/downloads/ (S3 + CloudFront、誰でも DL 可)。FortRank / FortRankSessionNotifier の2製品タブ
  • リリースタグ: 本体 v*.*.*build-installer.yml)/ notifier notifier-v*.*.*build-notifier-installer.yml
  • Windows 動作確認用: FortRankWinDebug/ プロジェクト + 指示書 fort-rank/windebug/CLAUDE.md
  • 配布対象は WinForms 版(FortRank.csprojFortRank.SessionNotifier の2つ / net8.0-windows)。Avalonia 版は Mac での開発・確認用
  • notifier の設定は %AppData%\FortRankSessionNotifier\config.json(Webhook URL 等、リポジトリ外)

直近の進捗(2026-07-02)

  • FortRank.SessionNotifier を新規開発(FortniteGame.log の tail → 新セッションIDを Discord Webhook 投稿、タスクトレイ常駐)
  • 設定ダイアログ・自動起動 既定ON(初回のみ)・通知 既定OFF などの UX 調整
  • 配布インフラ整備(installer-notifier.iss / build-notifier-installer.yml / 2製品タブ版 index 生成)
  • notifier-v1.0.0 を公開。CI 成功〜ダウンロードページ2タブ化・DL 可能まで確認済み
  • 非エンジニア向け使い方ガイド(FortRank.SessionNotifier/使い方.md)追加

次にやること

  • notifier を実マッチで動かし、自動投稿されるかの実地確認(Webhook テスト送信までは成功済み)
  • 積み残し(本体側): プロジェクトルート CLAUDE.md を Mac/Avalonia 中心に書き換え、ichirokisanuki/FortRank(キャメル)の削除判断(ROADMAP 参照)

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

  • notifier は mac でビルド不可(WinForms)。中核ロジックは net8.0 で分離コンパイル検証し、最終ビルドは windebug(Windows)で確認する運用
  • (任意・保留でOK)使い方の Web ページ化・スクショ追加、GitHub Actions の Node20 非推奨対応は未着手

過去のWIPアーカイブ

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

2026-06-03 時点のスナップショット(v1.1.1 リリース時)

全体ステータス: リリース自動化フロー稼働。v1.1.1 のインストーラを配布中。O40CS Hideout? 機能とスタンダードテンプレート5列化が完了・リリース済み。

構成:

  • ローカル: ~/cdev/fort-rank、GitHub: ichirokisanuki/fort-rank
  • 配布: https://fortrank.com/downloads/(S3 + CloudFront、誰でも DL 可)※当時は FortRank 単一製品
  • 配布対象は WinForms 版(FortRank.csproj / net8.0-windows)。Avalonia 版は Mac での開発・確認用

直近の進捗:

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

次にやること:

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

詰まっていること / 未決事項: なし(1.1.1 リリース完了直後)

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(計画)

ロードマップ

今週

  • FortRankSessionNotifier を実マッチで動かし、自動投稿されるか実地確認(テスト送信までは成功済み)
  • 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 から最新版チェック)
  • FortRankSessionNotifier の使い方を Web ページ化(fortrank.com/使い方 など)+スクショ追加
  • GitHub Actions の Node.js 20 非推奨対応(各 action のメジャー更新)

完了済み (2026-07-02)

  • FortRankSessionNotifier 新規開発(FortniteGame.log 監視 → Discord Webhook 投稿、タスクトレイ常駐)
  • 設定ダイアログ・自動起動 既定ON(初回のみ)・セッション検出通知 既定OFF などの UX 調整
  • 配布インフラ整備(installer-notifier.iss / notifier-v* workflow / 2製品タブ版ダウンロードページ)
  • notifier 1.0.0 リリース(CI〜fortrank.com/downloads 反映まで確認)
  • 非エンジニア向け使い方ガイド(使い方.md)追加

完了済み (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-07-02: セッション通知アプリは fort-rank 内の別プロジェクト+Webhook+タスクトレイ+%AppData% 設定で作る

背景: 「FortniteGame.log を常駐監視して新しいセッションIDを Discord に流す」別アプリを作るにあたり、①置き場所(別リポ or fort-rank 内の新プロジェクト)②Discord 連携方式(Webhook or Bot)③常駐形態(トレイ / コンソール / サービス)④設定の保存先、を決める必要があった。

決定: ①fort-rank ソリューション内の新プロジェクト FortRank.SessionNotifier にして FortRank.Core のログ解析(SessionAssignmentRegex / TryParseSessionAssignment)を再利用 ②Webhook 方式 ③タスクトレイ常駐(NotifyIcon)④設定は %AppData%\FortRankSessionNotifier\config.json に保存。

理由: ①ログ解析ロジックの重複・ドリフトを避けられる(別リポだと約15行を複製することになる)。②Bot はトークン管理が要りオーバースペック、Webhook は URL に POST するだけで最短。③非エンジニアでも扱いやすく黒い窓が出ない。④実行ファイルやリポジトリに Webhook URL(秘密)を残さず、Program Files インストールでも書き込み可能。


2026-07-02: リリースは製品別タグ系統・ダウンロードページは1枚に2製品タブ

背景: FortRank 本体(v1.1.1)と notifier(1.0.0)はバージョンが独立している。両者を同じ v*.*.* タグで同時リリースするか、ダウンロードページをどう構成するかを決める必要があった。

決定: リリースタグを製品ごとに分ける(本体=v*.*.*build-installer.yml、notifier=notifier-v*.*.*build-notifier-installer.yml)。fortrank.com/downloads は1ページ上部のタブで FortRank / FortRankSessionNotifier を切り替える方式にし、generate-downloads-index.ps1 が S3 の *_Setup_*.exe を製品別に分類して描画する。

理由: バージョンライフサイクルが独立しているので、タグ系統を分けた方が各製品のリリースが単純明快。ページを分割せず1枚に集約すればユーザー導線が1つで済み、既存の S3+CloudFront デプロイ資産をそのまま流用できる。接頭辞 FortRank_Setup_FortRankSessionNotifier_Setup_ は互いに接頭辞にならないため、分類は排他的で安全。


2026-07-02: notifier は自動起動 既定オン(初回のみ)・セッション検出通知 既定オフ

背景: 常駐アプリとしての既定挙動を決める必要があった。自動起動を毎回強制するとユーザーがオフにできず、逆に何もしないと起動し忘れが起きる。通知も、毎マッチでバルーンが出ると煩わしい一方、無音すぎると送信失敗に気づけない。

決定: 自動起動は config の AutoStartInitialized フラグを使い「初回起動時だけ既定オンで HKCU\...\Run に登録し、以降はユーザーのトグルを尊重」。セッション検出時のトレイ通知は既定オフ(ShowNotifications)だが、送信失敗だけは設定に関わらず必ず通知する。

理由: 「デフォルト便利・でも上書き可能」を両立できる。通知は普段静かに動かしたい要望に沿いつつ、送信失敗という実害だけは見逃さない。


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-07-02

14:27 - Discord セッション通知アプリ FortRank.SessionNotifier の新規開発・公開

やったこと:

  • 新規常駐アプリ FortRank.SessionNotifiernet8.0-windows / WinForms / タスクトレイ常駐)を fort-rank ソリューションに追加
    • FortniteGame.log を数秒ごとに tail し、新しい session assignment(32桁hex)を検出したら Discord Webhook へ自動投稿
    • ログ解析は FortRank.CoreInProgressReplayHelperSessionAssignmentRegex / TryParseSessionAssignment を公開追加して共有(既存2メソッドも集約、挙動不変)
    • バイト単位 tail でローテーション・書きかけ行に対応、セッションIDで重複送信を防止、起動時に現行ログを既読化して過去分は送らない
    • 構成: LogTailer / DiscordWebhookClient / NotifierConfig(%AppData% 保存)/ NotifierAppContext(トレイUI)/ SettingsForm(設定ダイアログ)
  • 設定 UX を反復調整
    • 「設定ファイルを開くたびに空設定で上書きする」バグを修正(ファイルが無い時だけ生成)
    • config.json 直接編集をやめ、アプリ内の設定ダイアログ(Webhook URL 入力・テスト送信・保存)に一本化
    • メニュー整理(config.json を開く / 再読み込み / ログフォルダを開く を削除)
    • デフォルト変更: 投稿本文=セッションIDのみ({sid})、ポーリング間隔=10秒
    • セッション検出時のトレイ通知をオンオフ設定可能に(既定オフ/送信失敗のみ常時通知)
    • Windows 起動時の自動起動を初回のみ既定オン(AutoStartInitialized フラグでユーザートグルを尊重)
  • 配布インフラを整備して 1.0.0 を公開
    • installer-notifier.iss(Inno Setup)と build-notifier-installer.ymlnotifier-v*.*.* タグで発火)を追加
    • scripts/generate-downloads-index.ps1 を FortRank / FortRankSessionNotifier の2製品タブ切り替え式に刷新、scripts/downloads-changelog.json を製品別構造に再編
    • notifier-v1.0.0 タグ push → CI 成功(1分56秒)→ GitHub Release 作成・S3 アップ・index 再生成・CloudFront invalidate
    • fortrank.com/downloads が2タブ化・notifier exe が HTTP 200 で DL 可能を確認
  • windebug/CLAUDE.md に notifier のビルド/起動手順を追記
  • 非エンジニア向けの FortRank.SessionNotifier/使い方.md(Webhook URL 設定に絞った3ステップ手順書)を追加

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

  • notifier は別リポでなく fort-rank 内の別プロジェクトにして Core を再利用
  • Discord 連携は Webhook 方式(Bot 不使用)、常駐はタスクトレイ、設定は %AppData% 保存
  • リリースは製品別タグ系統(v*.*.* / notifier-v*.*.*)、ダウンロードページは1枚2製品タブ
  • 自動起動は初回のみ既定オン、セッション検出通知は既定オフ

詰まったこと / 気づき:

  • notifier は net8.0-windows/WinForms のため mac ではビルド不可。WinForms 非依存の中核3ファイル(LogTailer / NotifierConfig / DiscordWebhookClient)を net8.0 の使い捨てプロジェクトに束ねてコンパイル検証する運用でカバー。最終ビルドは windebug(Windows)側で確認
  • Microsoft.Win32.Registry(自動起動)は net8.0-windows で追加パッケージ不要で通ることを Windows ビルドで確認済み
  • S3 のファイル名接頭辞 FortRank_Setup_FortRankSessionNotifier_Setup_ は互いに接頭辞にならないので、製品分類は正規表現で排他的にできる

次回やること:

  • 実マッチでの自動投稿の実地確認(Webhook テスト送信までは成功済み)
  • (任意)使い方の Web ページ化・スクショ追加、GitHub Actions の Node20 非推奨対応

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 中心)

最近のコミット