Skip to content

CI で rake sig と steep check を回す#232

Merged
znz merged 2 commits into
rurema:masterfrom
znz:ci-typecheck
Jul 11, 2026
Merged

CI で rake sig と steep check を回す#232
znz merged 2 commits into
rurema:masterfrom
znz:ci-typecheck

Conversation

@znz

@znz znz commented Jul 11, 2026

Copy link
Copy Markdown
Member

解決したい問題

#231 で sig/ が lib/ の全宣言をカバーし、steep check
エラー 0・警告 0 になりましたが、CI では型検査を回していないため、
今後の変更で sig の追従漏れや型エラーが入っても検出できません。

変更内容

typecheck ジョブの追加

test.yml に typecheck ジョブを追加します(既存ジョブは変更なし):

  1. bundle exec rake rbs:install — rbs_collection.lock.yaml で
    固定された gem_rbs_collection を取得
  2. bundle exec rake sigrbs prototype rbrbs subtract
    残余ゼロ = sig が lib の全宣言をカバーしていることの検査
    (新しいクラス/メソッド/ivar を追加して sig を書き忘れると失敗します)
    • rbs validate
  3. bundle exec steep check — 型エラーで失敗

ドキュメントだけの変更で CI を回さない

doctree の ci.yml と同様に、on:paths-ignore を追加し、
doc/・README.md・ChangeLog だけの変更では既存の test / rurema ジョブ含め
ワークフロー全体をスキップ**します(doc/ 配下は設計文書・MARKUP_SPEC 等のみで、
テストフィクスチャやランタイムが参照するファイルはありません)。

備考

  • Ruby はテストのバージョンマトリクスとは独立に、最新安定版の
    3.4 固定です(型検査は1バージョンで十分。バージョン網羅は
    build ジョブが担います)
  • rbs / steep のバージョンは Gemfile.lock(rbs 3.10.3 / steep 1.9.4、
    Gemfile で steep ~> 1.9.0)で固定されており、bundler-cache: true
    そのまま再現されます。rbs のメジャーアップ時に prototype の出力形が
    変わっても、lock を更新するまで CI は影響を受けません
  • sig 書き忘れ時の rake sig の失敗は Errno::ENOTEMPTY(sig-prototype の
    rmdir 失敗)として現れます。残余ファイルが sig-prototype/ に残るので、
    ローカルで bundle exec rake sig を実行すると不足分が確認できます

検証

  • ローカル(rbs 3.10.3 / steep 1.9.4)で 2→3 の手順を実行し、
    rake sig 通過・steep check は "No type error detected" を確認
  • ワークフロー YAML のパースを確認
  • (rake rbs:install はこの作業環境のネットワーク制限で最終確認できて
    いないため、CI の初回実行で要確認)

🤖 Generated with Claude Code

znz and others added 2 commits July 12, 2026 00:32
rurema#231 で sig/ が lib/ の全宣言をカバーし steep check がエラー0・警告0に
なったので、退行を防ぐため CI に typecheck ジョブを追加する:

- rake rbs:install(rbs_collection.lock.yaml で固定された collection を取得)
- rake sig(rbs prototype → rbs subtract の残余ゼロ = sig 網羅の検査 + rbs validate)
- steep check

Ruby は最新安定版の 3.4 固定(バージョン網羅は build ジョブが担う)。
rbs / steep のバージョンは Gemfile.lock(rbs 3.10.3 / steep 1.9.4)で
再現される。

あわせて doctree と同様に、ドキュメント(doc/・README.md・ChangeLog)
だけの変更では既存ジョブ含め CI を回さないようにする。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
PR rurema#232 の CI で steep check が RBS::DuplicatedDeclaration 48 件で失敗した。
原因は rbs collection install がロックを再解決し、path gem である
bitclust-core が sig/ を持つため「gem 同梱 RBS」としてコレクションに
追加されたこと(Using bitclust-core:1.4.0 (.../bitclust/sig))。
steep は Steepfile の signature "sig" とコレクション経由で同じ sig/ を
二重ロードし、interface・type alias・定数の宣言が全て重複扱いになった。
(rake sig の rbs validate はコレクションしか読まないため通過していた)

- rbs_collection.yaml: bitclust-core / bitclust-dev / refe2 を ignore し、
  再解決しても自分自身を取り込まないようにする
- CI: rbs collection install --frozen でロックのとおりに取得する
  (再解決による gem_rbs_collection の revision の変動も防ぐ)
- typecheck の Ruby バージョンのコメントを実態に合わせて修正
  (3.4 は「最新安定版」ではなく、rbs/steep のロックを検証した環境)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@znz

znz commented Jul 11, 2026

Copy link
Copy Markdown
Member Author

CI の typecheck 失敗(steep check の RBS::DuplicatedDeclaration 48件)を調査し、修正コミットを追加しました。

原因

rbs collection install がコミット済みの rbs_collection.lock.yaml を使わず
Gemfile.lock から再解決しており、path gem である bitclust-core が sig/ を
持つため「gem 同梱 RBS」としてコレクションに追加されていました
(ログの Using bitclust-core:1.4.0 (.../bitclust/sig)。ローカルの lock には
bitclust-core は入っていないため手元では再現しません)。

その結果 steep が Steepfile の signature "sig" とコレクション経由で
同じ sig/ を二重ロードし、class 宣言はマージされるのに対して
interface・type エイリアス・定数はマージ不可のため、全 sig ファイルで
重複宣言エラーになりました。なお直前の rake sig 内の rbs validate
コレクションしか読まない(sig/ を1回しかロードしない)ため通過していて、
steep だけが落ちる形になっていました。

修正

  • rbs_collection.yaml: bitclust-core / bitclust-dev / refe2
    ignore: true を追加。再解決しても自分自身の sig/ を取り込まなくなります
  • CI: rbs collection install --frozen に変更し、lock のとおりに取得。
    再解決による gem_rbs_collection(revision: main)の変動も防ぎます
  • あわせて typecheck の Ruby バージョンのコメントを修正しました。
    3.4 は「最新安定版」ではなく、rbs 3.10 / steep 1.9 のロックを検証した
    環境
    という意味です(型検査は1バージョンで十分で、バージョン網羅は
    build ジョブが担います。4.0 への引き上げは steep/rbs のロック更新と
    合わせて別途検証するのが安全と判断しました)

ローカルで rbs collection install --frozen(bitclust-core が入らない
25 gems になること)→ rake sigsteep check エラー0を確認済みです。

@znz znz merged commit 9f4ce9d into rurema:master Jul 11, 2026
10 checks passed
@znz znz deleted the ci-typecheck branch July 11, 2026 15:54
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