Skip to content

通知に出るアプリ名を KxNotifyUtils だけにする - #42

Merged
limit7412 merged 4 commits into
masterfrom
claude/xsoverlay-vr-notification-app-8yohul
Aug 29, 2026
Merged

通知に出るアプリ名を KxNotifyUtils だけにする#42
limit7412 merged 4 commits into
masterfrom
claude/xsoverlay-vr-notification-app-8yohul

Conversation

@limit7412

Copy link
Copy Markdown
Owner

何を直したか

トレイのバルーンは Windows 10 以降でトーストとして描かれ、パッケージ化していない exe ではアプリ名の行が FileDescription から引かれます。そこに説明文が入っていたため、通知のたびに長い 1 行が出ていました。

各種通知を XSOverlay へ中継する常駐アプリ    ← FileDescription(長い)
更新の取得を始めた
0.0.2-test9 を取得しています

FileDescription をアプリ名だけにします。

KxNotifyUtils
更新の取得を始めた
0.0.2-test9 を取得しています

この行が FileDescription から来ていることは #25 の調査で確定済みです。あのとき化けていた文字列を CP1252 で読み直すと、FileDescription の値と 1 文字ずつ一致しました。

説明文は Comments へ移した

消さずに移しています。理由は 2 つあります。

  1. exe のプロパティに説明が出なくなるのは、この依頼の範囲を越えます。Comments は Windows のプロパティ → 詳細に「コメント」として出ますが、通知には出ません
  2. CI の文字化け検査に日本語が要ります

2 つ目が重要です。#25 で入れた「バージョン情報が文字化けしていないことを確かめる」は、exe から読んだ値と .rc の値を突き合わせるものでした。FileDescriptionKxNotifyUtils にすると、その検査は符号化の誤りを検出できなくなります。ASCII はどのコードページで読んでも同じになるためです。

#pragma code_page(65001) が落ちても素通りする状態に戻ってしまうので、日本語を含む文字列を .rc のどこかに残す必要がありました。

CI の検査

2 つのフィールドを回して突き合わせるようにしました。

foreach ($field in @("FileDescription", "Comments")) {
  if ($rc -notmatch "(?m)^\s*VALUE ""$field"", ""(.*)\\0""\s*$") {
    throw "res/kxnotifyutils.rc から $field を読み取れなかった"
  }
  ...
}

実質の検出力は Comments 側が持ちます。 FileDescription 側はリソースが正しく載っていることの確認です。

確かめたこと

  • .rc に当てる正規表現が両フィールドを正しく拾うこと(FileDescriptionKxNotifyUtilsComments → 説明文)
  • action.yml が YAML として壊れていないこと(ステップ 4 つを確認)
  • scripts/build.ps1-Version で書き換える 4 つの正規表現(FILEVERSION / PRODUCTVERSION / VALUE "FileVersion" / VALUE "ProductVersion")が、追加した行と衝突しないこと
  • crystal spec 242 examples, 0 failures

確かめられていないこと

rc.exe は Linux で動かせないため、リソースが実際にコンパイルを通るかは CI の Windows ジョブが初めての確認になります。とくに VERSIONINFO ブロックの内側へ入れた // コメントです。RC のプリプロセッサはコメントを字句段階で落とすため括弧の内外で差は出ないはずですが、手元では確かめられません。

表示そのものは実機で見る必要があります。

  • 通知の 1 行目が KxNotifyUtils になること
  • exe のプロパティ → 詳細に、説明が「コメント」として残っていること

Generated by Claude Code

トレイのバルーンは Windows 10 以降でトーストとして描かれ、パッケージ化して
いない exe ではアプリ名の行が FileDescription から引かれる。そこに
「各種通知を XSOverlay へ中継する常駐アプリ」と入っていたため、通知のたびに
長い 1 行が出ていた。

FileDescription をアプリ名だけにする。

説明文は Comments へ移す。exe のプロパティには出るが、通知には出ない。
文言を捨てないのは、CI の文字化け検査に日本語が要るためでもある。
ASCII はどのコードページで読んでも同じになるので、全て ASCII にすると
issue #25 で入れた検査が符号化の誤りを素通りさせるようになる。

CI は FileDescription と Comments の両方を .rc と突き合わせる。
実質の検出力は Comments 側が持つ。
@limit7412
limit7412 marked this pull request as ready for review August 29, 2026 14:58
@limit7412

Copy link
Copy Markdown
Owner Author

通知は下記にしてください

KxNotifyUtils
更新の取得を開始
0.0.2-test9 を取得しています

指定された文言に合わせる。

  KxNotifyUtils
  更新の取得を開始
  0.0.2-test9 を取得しています

題は体言止めにし、本文からは「終わったらお知らせします」を落とす。
取得が終われば notify.update_downloaded が出るため、
予告が無くても知らせが届かなくなるわけではない。

Copy link
Copy Markdown
Owner Author

64bd189 で指定の文言にしました。

変更前 変更後
更新の取得を開始しました 更新の取得を開始
本文 {version} を取得しています。終わったらお知らせします {version} を取得しています

本文の「終わったらお知らせします」も落としています。書いていただいた 3 行にその一文が無かったためです。予告を消しても知らせが届かなくなるわけではありません。 取得が終われば notify.update_downloaded(「更新を取得しました」)が出ます。

英語も揃えました(Update download started / Downloading {version}.)。

1 点、決めていただきたいことがあります

題を体言止めにしたのは、いまのところこの 1 つだけです。 他の通知の題は #26 で敬体へ揃えてあります。

更新の取得を開始          ← 今回(体言止め)
新しい版が公開されています   ← 他はこの形
更新を確認できませんでした
更新を取得しました

短い題は体言止めのほうが読みやすいので、他の題も揃えるならまとめて直します。 その場合は src/runtime/i18n.cr の文体の方針(題は体言止め、本文は敬体)も書き換えます。

この 1 つだけでよければ、このままにします。


Generated by Claude Code

@limit7412

Copy link
Copy Markdown
Owner Author

まとめて直してください

「更新の取得を開始」だけが体言止めで、他の 16 件は敬体のままだった。

バルーンの題は 1 行しか出ず、長いと途中で切られる。
「更新を取得できませんでした」より「更新の取得に失敗」のほうが
同じことを短く言える。何が起きたかは題で分かればよく、
事情と対処は本文が受け持つ。

本文は敬体のままとする。あちらは利用者への語りかけであり、
「回線を確認してください」を体言止めにすると指示に読めなくなる。

update_no_asset は「更新を取得できません」から
「更新の実行ファイルが未添付」へ変えた。取得の失敗(回線)と
添付の欠落は対処が違うので、題の時点で分かれるようにする。

i18n.cr の文体の方針にも書き足す。

Copy link
Copy Markdown
Owner Author

82fca57 で通知の題 17 件すべてを体言止めへ揃えました。

変更前 変更後
通知へのアクセスが許可されていません 通知アクセスが未許可
設定を読み込めませんでした 設定の読み込みに失敗
設定を再読み込みしました 設定を再読み込み
テスト通知 (変更なし)
SteamVR の登録解除が途中で止まりました SteamVR の登録解除が不完全
新しい版が公開されています 新しい版が利用可能
更新はありません 更新なし
更新を確認できませんでした 更新の確認に失敗
更新を確認しきれませんでした 更新の確認が不完全
更新を取得しました 更新の取得が完了
更新を取得できませんでした 更新の取得に失敗
更新を取得できません 更新の実行ファイルが未添付
更新を適用できませんでした 更新の適用に失敗
実行ファイルが元の場所にありません 実行ファイルの復旧が必要
更新を適用しました 更新の適用が完了
更新を適用しませんでした 更新の適用を見送り

1 件だけ、短縮以上のことをしています

update_no_asset は「更新を取得できません」でした。これは update_download_failed(「更新を取得できませんでした」)とほぼ同じ題なのに、利用者がやることが違います。

  • 取得の失敗 → 回線を確認して、もう一度
  • 実行ファイルの未添付 → リリースページから手動で取る

そのまま縮めると「更新の取得に失敗」と「更新の取得が不可」で見分けがつかなくなるので、題の時点で分かれるよう「更新の実行ファイルが未添付」にしました。

本文は敬体のまま

src/runtime/i18n.cr の方針にも書き足しました。

通知の題は体言止めにする。バルーンの題は 1 行しか出ず、長いと途中で切られる。何が起きたかは題で分かればよく、事情と対処は本文が受け持つ。

本文は敬体のままとする。あちらは利用者への語りかけであり、「回線を確認してください」を体言止めにすると指示に読めなくなる。

英語の題は触っていません。英語には敬体・常体の区別が無く、いまの短い文で収まっているためです。


Generated by Claude Code

@limit7412

Copy link
Copy Markdown
Owner Author

すいません今の変更を取りやめます

This reverts commit 82fca57.

一括で揃える案を取り下げる指示があったため戻す。
他 16 件の題は敬体へ戻り、i18n.cr の文体の方針も元に戻る。

指定のあった「更新の取得を開始」と本文の短縮(64bd189)は残す。

Copy link
Copy Markdown
Owner Author

82b380682fca57(一括の体言止め)を戻しました。

ご指定の分は残しています。

KxNotifyUtils
更新の取得を開始
0.0.2-test9 を取得しています

戻ったのは他の 16 件の題で、i18n.cr の文体の方針も元(本文・題ともに敬体)に戻っています。

通知へのアクセスが許可されていません 敬体へ戻した
設定を読み込めませんでした 敬体へ戻した
新しい版が公開されています 敬体へ戻した
…(他 13 件) 敬体へ戻した
更新の取得を開始 そのまま

この PR に残るのは次の 2 つです。

  1. FileDescription をアプリ名だけにし、説明文を Comments へ移す(+CI の文字化け検査を 2 フィールドへ)
  2. notify.update_downloading の題と本文を指定の文言にする

crystal spec 242 examples 0 failures、フォーマットも通しています。CI の結果が出たら確認します。


Generated by Claude Code

@limit7412
limit7412 merged commit 4739b0b into master Aug 29, 2026
2 checks passed
@limit7412
limit7412 deleted the claude/xsoverlay-vr-notification-app-8yohul branch August 29, 2026 15:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants