●EVENT — 本日9月9日、Apple が「Surprise and Shine」と題したイベントを開きます。日本時間では9月10日の未明2時からです●EXPECT — iPhone 18 Pro と Pro Max、折りたたみ機、2nm プロセスの A20 Pro チップ、そして iOS 27 以下の配信日発表が見込まれています●WAIT — この記事を書いている時点ではまだ開催前です。噂の段階で書いたものと発表後に書いたものが混ざると、読む側には区別がつきません●MAX — Rork Max がネイティブ Swift を生成する以上、Apple の動きは他人事ではありません。標準の Rork は React Native、という線引きは繰り返し確認したいところです●SIMULATOR — Rork Max はクラウド上の Mac でコンパイルし、ブラウザ内で動くストリーミングの iOS シミュレータで確認できます。Xcode も Mac の実機も要りません●SEASON — OS が新しくなる時期は、自動生成の足場がいちばん揺れます。便利さを謳う記事ほど、この揺れに触れないと不誠実になると感じています●EVENT — 本日9月9日、Apple が「Surprise and Shine」と題したイベントを開きます。日本時間では9月10日の未明2時からです●EXPECT — iPhone 18 Pro と Pro Max、折りたたみ機、2nm プロセスの A20 Pro チップ、そして iOS 27 以下の配信日発表が見込まれています●WAIT — この記事を書いている時点ではまだ開催前です。噂の段階で書いたものと発表後に書いたものが混ざると、読む側には区別がつきません●MAX — Rork Max がネイティブ Swift を生成する以上、Apple の動きは他人事ではありません。標準の Rork は React Native、という線引きは繰り返し確認したいところです●SIMULATOR — Rork Max はクラウド上の Mac でコンパイルし、ブラウザ内で動くストリーミングの iOS シミュレータで確認できます。Xcode も Mac の実機も要りません●SEASON — OS が新しくなる時期は、自動生成の足場がいちばん揺れます。便利さを謳う記事ほど、この揺れに触れないと不誠実になると感じています
// rork-zone: sealed// 生成側に見せる唯一の型。ここは手で保守します。import Foundationpublic struct WallpaperCardState: Equatable, Sendable { public let id: String public let title: String public let subtitle: String public let isDownloaded: Bool /// 表示用に整形済み。Decimal や Locale を生成側へ渡しません。 public let priceLabel: String? public init(id: String, title: String, subtitle: String, isDownloaded: Bool, priceLabel: String?) { self.id = id self.title = title self.subtitle = subtitle self.isDownloaded = isDownloaded self.priceLabel = priceLabel }}public enum WallpaperCardIntent: Sendable { case tapped(id: String) case saveRequested(id: String)}
#!/usr/bin/env python3"""zone_boundary.py — regenerable ゾーンの禁止依存をCIで弾きます。"""import pathlibimport reimport sysZONE_RE = re.compile(r"^//\s*rork-zone:\s*regenerable\s*$", re.MULTILINE)FORBIDDEN_IMPORTS = ("Persistence", "Billing", "DomainModel", "AdsCore")FORBIDDEN_SYMBOLS = ("ModelContext", "Transaction.currentEntitlements", "URLSession(")def violations(path: pathlib.Path) -> list[str]: text = path.read_text(encoding="utf-8") if not ZONE_RE.search(text): return [] found = [] for module in FORBIDDEN_IMPORTS: if re.search(rf"^import\s+{module}\s*$", text, re.MULTILINE): found.append(f"import {module}") for symbol in FORBIDDEN_SYMBOLS: if symbol in text: found.append(symbol) return founddef main(root: str = "Sources") -> int: failed = 0 for path in sorted(pathlib.Path(root).rglob("*.swift")): for v in violations(path): print(f"{path}: regenerable zone must not reference '{v}'") failed = 1 return failedif __name__ == "__main__": sys.exit(main(*sys.argv[1:]))
ここに落とし穴が一つあります。Rork Max で再生成すると、ファイル先頭のマーカー行はほぼ確実に消えます。 生成側はそのコメントを知りませんから、当然の挙動です。マーカーが消えれば、そのファイルは検査対象から外れ、台帳は静かに空になります。
ドリルの注意点を2つ。本番ブランチではやりません。 再生成は成功するまで何度でも試す前提の作業ですから、履歴が汚れることを気にする場所でやると手加減が入ります。もう1つ、App Store 提出直前の週は避けます。 審査待ちの緊張の中で「作り直せるはずの画面が作り直せない」と分かると、判断が雑になります。