Skip to content

fix: release 通知の本文を取得できるようにする - #125

Merged
limit7412 merged 1 commit into
masterfrom
claude/plan-issue-120-4urwy8
Aug 29, 2026
Merged

fix: release 通知の本文を取得できるようにする#125
limit7412 merged 1 commit into
masterfrom
claude/plan-issue-120-4urwy8

Conversation

@limit7412

Copy link
Copy Markdown
Owner

issue #121 の対応。

原因

Release の通知だけ本文が出ていなかった。
調べたところ原因は 2 つあった。

投稿者のキーが user ではなく author

GitHub の Release オブジェクトは投稿者を author に入れる。
一方 Github::Commentgetter user : User と必須にしていたため、Release の応答は JSON の解析ごと失敗していた。

find_comment_by_url は解析失敗を rescue して Comment.new COMMENT_FETCH_FAILED を返すので、本文が丸ごと「(本文を取得できませんでした)」に置き換わる。
手元で実際の Release オブジェクトの形を流したところ、Missing JSON attribute: user で落ちることを確認した。

BODY_TYPES に Release が無い

comment_urllatest_comment_url が空のとき、BODY_TYPES に含まれる type だけ subject.url にフォールバックする。
Release は含まれていないので、通知に latest_comment_url が入らない場合は空文字になり、本文を取りに行かない。

修正

userauthor のどちらも nilable で受け、表示に使う投稿者を poster にまとめた。
どちらのキーも無い応答では空の User を返すので、名前もアイコンも付けずに本文だけが出る。

Subject::TypeRELEASE を足し、BODY_TYPES に加えた。
Release は subject.url を取得すればリリースノートが返るため、latest_comment_url の有無にかかわらず本文を出せる。

呼び出し側は Github::Usecase#build_message の 3 行(comment.user.*comment.poster.*)だけ。

変えていないもの

  • 色は既定色のまま。#color は Release に個別の色を持たないが、これは本文とは別の話なので触っていない
  • UPDATE_TYPES / update? も変えていない。update? は現状 spec からしか参照されておらず、Release を含めるかは本文の取得と関係しない
  • NUMBERED_TYPES にも入れていない。Release の subject.url 末尾は数値のリリース ID で、#123 と出すと誤解を招く(既存コメントの判断のまま)

テスト

crystal spec は 130 examples, 0 failures。追加したのは以下。

spec/github/models_spec.cr

  • latest_comment_url が空の Release で comment_urlsubject.url になること
  • 実際の Release オブジェクトの形を解析でき、本文が残ること
  • userauthor の両方があれば user を優先すること
  • どちらも無い応答では空の User に倒れること

spec/github/usecase_spec.cr

  • Release の通知から、リリースノート本文・投稿者名・リリースページへのリンクを持つメッセージが組み立てられること

修正前の実装(user 必須、BODY_TYPES に Release 無し)に戻すと、このうち 4 件が落ちることを確認した。

検証環境について

これまでと同じく、ネットワーク制限により Crystal 1.21.0 を用意できず Ubuntu の 1.11.2 で検証している。
crystal tool format は 1.11 と 1.21 で複数行引数の末尾カンマの扱いが違いリポジトリ全体に差分を出すため実行せず、変更した 4 ファイルを個別に確認した。
ameba は 1.11 でビルドできないためローカル実行できていない。

Closes #121


Generated by Claude Code

Release の通知だけ本文が出ていなかった(issue #121)。原因は 2 つある。

ひとつは投稿者のキーの違い。GitHub の Release オブジェクトは投稿者を author に
入れるが、Github::Comment は user を必須にしていた。そのため Release の応答は
JSON の解析ごと失敗し、find_comment_by_url の rescue に落ちて本文が
「(本文を取得できませんでした)」に置き換わっていた。user と author の
どちらも nilable で受け、表示に使う投稿者は poster にまとめる。

もうひとつは本文取得先の判定。BODY_TYPES に Release が無いため、通知に
latest_comment_url が入らない場合は comment_url が空になり、本文を取りに
行かなくなっていた。Release も subject.url を取得すればリリースノートが
返るので、BODY_TYPES に加える。

色は変えていない。Release は従来どおり既定色のままにする。

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SmoDC7XRgDx1AcWumgv3Uq
@limit7412
limit7412 marked this pull request as ready for review August 29, 2026 08:01
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@limit7412

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. 🎉

Reviewed commit: 076c4d7870

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@limit7412
limit7412 merged commit 15444b7 into master Aug 29, 2026
3 checks passed
@limit7412
limit7412 deleted the claude/plan-issue-120-4urwy8 branch August 29, 2026 09:05
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.

releaseの本文を取得出来ていない

2 participants