fort-rank
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)/ notifiernotifier-v*.*.*(build-notifier-installer.yml) - Windows 動作確認用:
FortRankWinDebug/プロジェクト + 指示書fort-rank/windebug/CLAUDE.md - 配布対象は WinForms 版(
FortRank.csprojとFortRank.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・このセッションの作業内容からの整理)
引き継ぎの背景
- Windows PC で開発していた FortRank プロジェクトを Mac (~/cdev/fort-rank) に引き継いだ
- 元リポジトリ: https://github.com/ichirokisanuki/FortRank.git(キャメル、Windows側からpush)
- 新リポジトリ: https://github.com/ichirokisanuki/fort-rank.git(小文字・ハイフン、Mac側で使う)
- 履歴は捨てて中身のみコピー。.gitignore は .NET 用 + Mac/汎用分をマージ済み
- いずれ ichirokisanuki/FortRank(キャメル)は削除する予定
構成
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.ymlでv*.*.*タグ 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.SessionNotifier(net8.0-windows/ WinForms / タスクトレイ常駐)を fort-rank ソリューションに追加- FortniteGame.log を数秒ごとに tail し、新しい
session assignment(32桁hex)を検出したら Discord Webhook へ自動投稿 - ログ解析は
FortRank.CoreのInProgressReplayHelperにSessionAssignmentRegex/TryParseSessionAssignmentを公開追加して共有(既存2メソッドも集約、挙動不変) - バイト単位 tail でローテーション・書きかけ行に対応、セッションIDで重複送信を防止、起動時に現行ログを既読化して過去分は送らない
- 構成:
LogTailer/DiscordWebhookClient/NotifierConfig(%AppData% 保存)/NotifierAppContext(トレイUI)/SettingsForm(設定ダイアログ)
- FortniteGame.log を数秒ごとに tail し、新しい
- 設定 UX を反復調整
- 「設定ファイルを開くたびに空設定で上書きする」バグを修正(ファイルが無い時だけ生成)
- config.json 直接編集をやめ、アプリ内の設定ダイアログ(Webhook URL 入力・テスト送信・保存)に一本化
- メニュー整理(config.json を開く / 再読み込み / ログフォルダを開く を削除)
- デフォルト変更: 投稿本文=セッションIDのみ(
{sid})、ポーリング間隔=10秒 - セッション検出時のトレイ通知をオンオフ設定可能に(既定オフ/送信失敗のみ常時通知)
- Windows 起動時の自動起動を初回のみ既定オン(
AutoStartInitializedフラグでユーザートグルを尊重)
- 配布インフラを整備して 1.0.0 を公開
installer-notifier.iss(Inno Setup)とbuild-notifier-installer.yml(notifier-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 invalidatefortrank.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.HideLogo→O40CsViewチェックボックス →Generate_ClickでMultiRankingResultWindowにhideO40CsLogoを渡す →GenerateHtmlで正規表現除去 - WinForms 版:
MainFormにo40HideoutCheck追加(生成ボタンの左、Dock=Right 逆順配置)→MultiRankingResultDialogの両コンストラクタにhideO40CsLogo引数追加 →GenerateHtmlで同じ除去 - 除去ロジックは出力直前の HTML に対し
<img\b[^>]*o40cs_2026_2\.png[^>]*>を空置換。JSON ビルダー・テンプレート本体は無変更
- Avalonia 版:
- 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.1push → 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 pull→dotnet runまで自動化される構成
- Windows 側で
- インストーラを 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/*+ CloudFrontE2JO09A3T198CZの 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を登録
- IAM ユーザー
- アプリアイコンを王冠 + 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も同様に修正
- DevTools で
- ダウンロード時にブラウザが 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 中心)
最近のコミット
- 75ae0c8 .devnotes を更新(FortRank.SessionNotifier 新規開発・1.0.0 公開分) 2026/7/2
- a383325 SessionNotifier: 非エンジニア向けのかんたん使い方ガイドを追加 2026/7/2
- a01e47f ダウンロードページを2製品タブ化+Notifierのリリース基盤を追加 2026/7/2
- e021126 SessionNotifier: 自動起動を初回起動時に既定オンに 2026/7/2
- aa7b7b9 SessionNotifier: セッション検出時のトレイ通知をオンオフ設定可能に(既定オフ) 2026/7/2
- 61310d8 SessionNotifier: メニュー整理とデフォルト値の調整 2026/7/2
- f936be6 SessionNotifier: 設定をアプリ内UI(設定ダイアログ)で入力できるように 2026/7/2
- 5b7c2b8 SessionNotifier: 設定ファイルを開くたびに空設定で上書きするバグを修正 2026/7/2
- f313ea9 セッションID検出時にDiscordへ通知する常駐アプリ FortRank.SessionNotifier を追加 2026/7/2
- eb4e29f .devnotes を更新(O40CS Hideout?・スタンダード5列化・1.1.1リリース分) 2026/6/3