Skip to content

feat: 通信簿の本文を絵文字付きで読みやすくする - #144

Merged
5ym merged 2 commits into
mainfrom
post-text
Sep 16, 2026
Merged

5ym merged 2 commits into
mainfrom
post-text

Conversation

@5ym

@5ym 5ym commented Sep 16, 2026

Copy link
Copy Markdown
Collaborator

タイムラインに流れたときに一瞬で読めるよう、投稿本文を作り直した。かつての「ツイ廃アラート」に寄せてツイ廃度を足している。

前

9月15日のポスト: 4件 (前日比 +1)
うちリプライ 1件
いいね 128・リポスト 12・返信 8・ブックマーク 3
インプレッション 12,400 (平均 3,100・最高 6,800)
プロフィールクリック 24・リンククリック 9
5日連続でポスト中

後

📊 9/15のポスト 4件(リプ1) ↗ +1
☕ ツイ廃度: ふつう
❤️ 128  🔁 12  💬 8  🔖 3
👀 12,400 (平均3,100 最高6,800)
🔥 5日連続
🔗 プロフ 24  リンク 9
  • ツイ廃度は 🌱ひかえめ(1-2) / ☕ふつう(3-5) / 💬おしゃべり(6-10) / ⚡予備軍(11-20) / 🚨危険域(21-50) / 💀重症(51-)。件数だけで決める — 反応の多寡は本人の努力と関係ない日があるので順位付けに使わない
  • 前日比を ↗ +1 / ↘ -5 / → ±0 の矢印に
  • 0 件の日は反応の行を並べず 🌙 今日はまだ静かです だけ
  • 長さの上限を守る仕組みを足した。 x.com は日本語 1 文字を 2 と数え、280 を超えると投稿ごと弾かれる。weightedLength() で数えて 260 を超えないところまでしか任意の行を足さない(落とす順番は クリック → 連続 → インプレッション の逆順)
  • LP の見本と指標の札も同じ絵文字にそろえた

1〜120 件・数字の桁が大きい場合まで手元で流して、最長でも 201/280 に収まることを確認済み。build / check(0 errors 0 warnings)とも通る。

🤖 Generated with Claude Code

https://claude.ai/code/session_01JgGYf5qbjDXYhtzcpLsGvv

タイムラインに流れたときに一瞬で読めるよう、行の頭を絵文字にして数字を
前に出した。かつての「ツイ廃アラート」に寄せて、ポスト数で決まる
ツイ廃度(🌱ひかえめ / ☕ふつう / 💬おしゃべり / ⚡予備軍 / 🚨危険域 / 💀重症)を足す。
ツイ廃度は**件数だけで決める** — 反応の多寡は本人の努力と関係ない日があるので、
そこを順位付けに使わない。

- 前日比を ↗ +1 / ↘ -5 / → ±0 の矢印で出す
- 0 件の日は反応の行を並べず「🌙 今日はまだ静かです」だけにする
- x.com の数える長さ(日本語 1 文字 = 2、上限 280)を weightedLength で数え、
  260 を超えないところまでしか任意の行を足さない。**超えると投稿ごと弾かれる**ので、
  落とす順番(クリック → 連続 → インプレッション の逆順)を決めておく
- LP の見本と指標の札も同じ絵文字にそろえた

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgGYf5qbjDXYhtzcpLsGvv
@claude

claude Bot commented Sep 16, 2026 •

Copy link
Copy Markdown

Claude finished @5ym's task in 1m 57s —— View job


レビュー完了

  • コンテキスト収集
  • リクエスト内容の把握
  • src/lib/server/summary.ts のレビュー
  • src/lib/components/SummaryScreen.svelte のレビュー
  • CLAUDE.md / リポジトリ規約の確認(該当ファイル無し)
  • コメントまとめ

所感

投稿本文を絵文字入りで読みやすくする変更で、ロジック・境界値ともに概ね問題ありません。

  • weightedLength() の重み付けレンジ (0x0-0x10FF / 0x2000-0x200D / 0x2010-0x201F / 0x2032-0x2037 = weight 1、それ以外は weight 2) は x.com (twitter-text) の実際の重み付け設定と一致しており、正確です。
  • rank() の閾値(1-2 / 3-5 / 6-10 / 11-20 / 21-50 / 51-)は PR 本文の説明と一致しています。
  • extras を1行ずつ積みながら tail まで含めた文字列で weightedLength を都度チェックしている点(summary.ts:173-177)は、末尾の #ポスト通信簿 を含めた実際の投稿文全体で上限を判定できていて安全です。
  • 0件の日・partial 表示・streak 表示などの分岐も既存ロジックを踏襲していて破壊的な変更は見当たりません。
  • SummaryScreen.svelte 側もサンプル文言・METRICS の絵文字・不要になった .dot CSS の削除まで一貫して追従できています。

軽微な指摘を1件、該当行にインラインコメントしました。

  • src/lib/server/summary.ts:182 — signed() が今回 trend() に置き換わった結果、呼び出し元が無くなっているデッドコードです。削除をおすすめします。

要確認(参考程度): head(見出し・ツイ廃度・反応の3行)は常に無条件で追加され、extras のように長さで打ち切られません。通常の運用では十分マージンがある(手元検証で最長 201/280 とのこと)ため実害は無さそうですが、仕様として意識しておくと良さそうです。

その他、セキュリティ・入力値検証まわりで気になる点はありませんでした。

Comment thread src/lib/server/summary.ts Outdated
return [...lines, ...tail].join("\n");
}

function signed(value: number): string {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

signed() は今回 trend() に置き換えられた結果、呼び出し元が無くなっています(このファイル内で参照ゼロ)。デッドコードなので削除して良さそうです。biome check の noUnusedVariables に引っかかる可能性もあります。

Fix this →

trend() に置き換えたときの消し忘れ(AI レビューの指摘)。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgGYf5qbjDXYhtzcpLsGvv
@claude

claude Bot commented Sep 16, 2026 •

Copy link
Copy Markdown

Claude finished @5ym's task in 1m 36s —— View job


レビュー完了

  • コンテキスト収集
  • 前回レビュー以降の差分確認
  • src/lib/server/summary.ts の再レビュー
  • src/lib/components/SummaryScreen.svelte の再レビュー
  • コメントまとめ

所感

追加コミット 55f2b5f(fix: 使わなくなった signed() を消す)で、前回指摘した summary.ts の未使用関数 signed() は削除済みであることを確認しました。SummaryScreen.svelte 側で削除された .dot CSS も含め、参照が残っている箇所は無く、デッドコードは解消されています。

その上で今回の diff (origin/main...HEAD) を通しで見直しましたが、新たな不具合・セキュリティ上の懸念は見つかりませんでした。

  • weightedLength() は絵文字を含むサロゲートペアも for...of によるコードポイント単位の走査で正しく2としてカウントできています。仮に一部の記号(バリエーションセレクタ等)を実際より重めに数えていたとしても、LIMIT を260に抑える方向の誤差なので安全側です。
  • rank() / trend() は既存ロジックからの単純な置き換えで、posts.length === 0 の早期リターンにより impressions / posts.length のゼロ除算も従来通り回避されています。
  • extras を先頭(インプレッション)から順に積み、一つでも LIMIT を超えたら以降は追加せず打ち切る実装は、PR本文で説明されている「クリック → 連続 → インプレッション の逆順で落とす」という優先度どおりに動作しています。

参考(前回から継続): head(見出し・ツイ廃度・反応の3行)は無条件で追加され、extras のような長さチェックの対象外です。手元検証で最長201/280とのことなので実害は無さそうですが、仕様として意識しておくと良さそうです。

なお、このリポジトリには元々テストコードが存在せず、本PRの範囲でも新規テストの追加はありません(既存の慣習と一貫しています)。

以上、指摘事項はなく、マージして問題無さそうです。

@5ym
5ym merged commit a8ae171 into main Sep 16, 2026
2 checks passed
@5ym
5ym deleted the post-text branch September 16, 2026 09:20
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.

1 participant