◉CLAUDE LABEN
●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/Claude Code
⟐ Claude Code/2026-06-30上級

新型 iPhone で壁紙がぼやける問題を Claude Code で直す — 端末別解像度の振り分けを安全に増やす

新しい iPhone が出るたびに壁紙アプリで画像がぼやけたり余白が出たりする原因と、散らばった端末分岐を一枚のテーブルに集約して安全に拡張する方法を、Claude Code を使った実際のリファクタリング工程として共有します。

Claude Code265iOS26Swift5壁紙アプリ3リファクタリング6個人開発130

✦ プレミアム記事

新しい iPhone が発売された週末、私が個人開発で続けている壁紙アプリ「Beautiful HD Wallpapers(綺麗な壁紙)」に、ある実機でだけ壁紙の上下にうっすら余白が出る、という報告が届きました。手元のシミュレータで再現してみると、確かに新機種だけ画像が中央に寄り、上下が背景色で埋められています。原因は単純で、端末ごとの解像度を判定するコードが新しい画面サイズを知らず、「いちばん近い古い端末」にフォールバックして、縦横比の合わない画像を選んでいたのです。

壁紙アプリは、この「端末ごとに正しいピクセル解像度の画像を出す」という一点に、表示品質のほとんどが懸かっています。少しでも縦横比がずれると、引き伸ばしでぼやけるか、余白が出るかのどちらかになります。にもかかわらず、長年の更新でこの判定ロジックはアプリ内に散り散りになっていました。今回はその散らばりを Claude Code で一枚のテーブルに畳み、新機種を 1 箇所の追記だけで対応できる形に作り替えた工程を、実際のコードとともに残しておきます。


なぜ「最寄りの高さ」で選ぶと壊れるのか

まず、問題の起点を正確に押さえます。iOS の画面は論理サイズ(ポイント)と物理サイズ(ピクセル)の二層構造で、UIScreen.main.bounds が返すのはポイント、実際の画素数はそこに nativeScale(多くの最新機で 3.0)を掛けた値です。壁紙として配信する画像は、この物理ピクセルにぴったり合っていないと、システムが拡大縮小をかけて甘くなります。

私のアプリでは、端末を判定して画像サイズやレイアウト定数を切り替える分岐が、追加のたびに各画面へ少しずつ書き足され、最終的に 29 箇所の三項演算子になっていました。典型的にはこういう形です。

// ❌ Before: 画面の「高さ」だけを見て近い端末を当てる
// 新機種が出るたびに、こういう分岐が各所に増殖していった
func wallpaperPixelHeight() -> CGFloat {
    let h = UIScreen.main.bounds.height
    if h >= 932 {          // Pro Max 系のつもり
        return 2796
    } else if h >= 852 {   // 標準 Pro のつもり
        return 2556
    } else if h >= 844 {
        return 2532
    } else {
        return 2436        // それ以前へフォールバック
    }
}

このコードの弱点は二つあります。一つは、新機種の高さが既存の閾値の隙間に落ちると、意図しない分岐に吸い込まれること。もう一つは、判定軸が「高さ」だけなので、縦横比が違う端末を同じ高さの端末と同一視してしまうことです。壁紙にとって致命的なのは後者で、たとえば同じ高さでも横幅が数ポイント違えば、画像はわずかに引き伸ばされるか、レターボックス(上下の余白)になります。

新型 iPhone でだけ余白が出たのは、まさにこの「高さは近いが横幅が違う端末」を、古い端末として扱ってしまったからでした。


まず Claude Code に「分岐の全量」を出させる

修正方針は決まっています。散らばった分岐を一箇所に集め、判定軸を高さから「画面のポイントサイズ(縦横ペア)」に変え、選定ロジックを「最寄りの高さ」から「同一サイズの厳密一致+縦横比で最も近いもの」へ変えること。ただし、いきなり書き換えると 29 箇所のどれかを取りこぼします。最初にやるべきは、現状の全量を正確に把握することです。

ここで Claude Code に頼ります。手で grep するより、意味的に「端末分岐をしている箇所」を拾わせるほうが速く、抜けも少ないからです。私は次のように依頼しました。

このリポジトリ内で UIScreen.main.bounds の高さや幅、
UIDevice の機種名を条件に分岐しているコードをすべて列挙してください。
ファイルパス・行番号・その分岐が何を切り替えているか(画像サイズ/余白/
フォントなど)の3点を表にしてください。修正はまだしないでください。

「修正はまだしないでください」と明示するのが大事です。Claude Code は指示すると一気に直そうとしますが、リファクタリングは「現状把握 → 設計 → 置換 → 検証」の順で進めたほうが事故が減ります。返ってきた一覧で、29 箇所のうち 6 箇所は画像サイズ、残りは余白やセーフエリア関連の定数だと分かりました。画像サイズの判定だけを先に切り出すのが正解だと、この時点で見通せます。


✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦新型 iPhone でだけ壁紙がぼやける・余白が出る原因が分かり、最寄り高さではなく縦横比で振り分ける修正を自分のアプリに入れられるようになる
✦コードの 20〜30 箇所に散らばった端末分岐の三項演算子を、Claude Code で安全に一枚の Source of Truth テーブルへ畳む手順を、Before/After のコード付きで習得できる
✦新しい端末が出たときに 1 箇所だけ追記すれば対応が終わる構造に作り替え、スナップショットテストで取りこぼしを検知できるようになる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⟐ Claude Code2026-10-12
SPM に移したら、起動した瞬間にアプリが落ちるようになりました — dyld の一行を Claude Code と読み解いた記録
CocoaPods から Swift Package Manager へ移した直後、ビルドは通るのに起動した瞬間に落ちました。dyld の一行から原因を切り分け、直し方と確認コマンドまでをまとめます。
⟐ Claude Code2026-09-04
Claude Code に project.pbxproj だけは直接触らせていません
Xcode のプロジェクトファイルは、開けなくなる壊れ方より開けてしまう壊れ方のほうが高くつきました。直接編集をやめてスクリプト経由に寄せるまでに測ったことと、いま引いている線を書き残します。
⟐ Claude Code2026-04-18
Claude Code で技術的負債を3ヶ月で半減させた実践記録 — どこから手をつけ、どう効果を測るか
積み上がった技術的負債にClaude Codeで取り組んだ3ヶ月の記録です。負債の地図を数値で作る方法、緊急度×影響範囲での優先順位づけ、サブエージェントを使った安全な重複コード削減、循環依存の解消、週次ヘルスチェックの自動化、うまくいかなかった3つのことまで公開します。