[Swift応用 #9] Swift ABI安定性:2019年にアプリ容量が減った理由
2019年にSwift 5とiOS 12.2がリリースされた後、アプリ容量が減ったのはABI安定性のおかげです。各アプリが抱えていたSwiftランタイムがOSへ移った経緯と、モジュール安定性、@frozenのトレードオフを整理します。
記事を読む特集トピック · 73 記事
Swiftの基礎から実務の選択基準まで解説する記事をまとめました。
最新記事
2019年にSwift 5とiOS 12.2がリリースされた後、アプリ容量が減ったのはABI安定性のおかげです。各アプリが抱えていたSwiftランタイムがOSへ移った経緯と、モジュール安定性、@frozenのトレードオフを整理します。
記事を読むファイルハンドルやロックのように一つでこそ意味を持つリソースは、コピーすべきではありません。Swift 5.9の~Copyableでコピー禁止を型に刻む方法と、borrowing・consuming・inoutの3つの受け渡し方、使いどころを整理します。
記事を読むSwift 5.9のマクロは、コンパイラに組み込まれるコード生成プラグインです。構文木を受け取ってコードを返す仕組み、freestanding(#)とattached(@)の2種類、自作時のコストをまとめます。
記事を読むstructのサイズはプロパティサイズの単純な合計ではありません。size・stride・alignment、パディング、extra inhabitantを利用するOptional、64ビットのexistential containerを実測します。
記事を読むメソッド呼び出しは、直接呼び出し・vtable・objc_msgSendの3方式にコンパイルされます。finalとprivateが性能に関わる仕組み、プロトコルextensionの落とし穴、プロファイラでの確認方法をまとめました。
記事を読む構造化並行処理は、非同期処理の終了を誰が担保するのかに答えます。子タスクが親スコープから抜けられない仕組み、キャンセルシグナルの伝播、Task.detachedで手動管理が必要になる保証を整理します。
記事を読むSwift 6モードを有効にすると、Sendableを中心に並行処理エラーが大量に現れます。本稿では、値が隔離境界を越えてよいかというこのプロトコルの意味と、struct化・不変化・actorへの昇格という移行手順を整理します。
記事を読むデリゲートとクロージャは同じコールバック要件に対応しますが、性質は異なります。同じ例を並べて実装し、実用上の5つの違いと、イベント数・関係の寿命・戻り値の要否で選ぶ基準を整理します。
記事を読むactorは自分の状態を自ら守る4番目の型です。並行アクセスを順番待ちにし、データ競合をコンパイラが検出できる問題へ変える仕組みと、代表的な落とし穴である再入性(reentrancy)まで整理します。
記事を読むawaitで停止するのはスレッドではなく関数です。関数が状態をヒープに保存してスレッドを協調型プールに返すsuspensionの正確な意味と、逐次awaitが並列実行ではない理由を整理します。
記事を読むFactoryは依存性の登録漏れをコンパイル時に検出するSwift DIライブラリです。2026年7月時点の3.3.1を基準に、基本的な使い方、スコープ宣言、テスト・プレビューへの注入、Swinjectとの違いをまとめます。
記事を読むプロトコル指向プログラミング(POP)は、何を継承したかではなく、何ができるかで型を設計します。継承の壁をプロトコルの組み合わせで解決する方法や、避けるべき場面までSwiftの例でまとめます。
記事を読む\.nameはmapの省略構文ではなく、独立した型であるKeyPathの値です。プロパティアクセスを値にするとはどういうことか、読み取り専用・値型への書き込み・参照型への書き込みという3つの階層、実務での活用例を整理します。
記事を読むプロパティラッパーはSwiftUIの構文ではなく、Swift 5.1でSE-0258として導入された言語機能です。コンパイラーによる@Clampedの変換、wrappedValueとprojectedValue($)の正体、乱用を避ける基準を整理します。
記事を読むCodableの自動合成が実際に生成するものから、キー名の不一致・日付形式・ネスト構造・部分的な失敗への標準的な対処、DecodingErrorのデバッグまで整理します。
記事を読むmap・filter・compactMap・flatMap・reduceの違いは、クロージャが何を返すかで決まります。forループとの使い分け、チェーンが生む中間配列、lazyシーケンスが解決する問題をまとめました。
記事を読むSwift 5.5以降では、テスト関数をasyncとして宣言し、awaitで結果を待ってから検証します。エラー検証、古いコールバックAPIのテスト、expectationがまだ必要なケースまでまとめました。
記事を読む関連型(associatedtype)は、プロトコルに用意された型の空欄です。悪名高いgeneric constraintエラーの理由と、SE-0309・SE-0346で制約が緩和された経緯、primary associated typesの使い方を整理します。
記事を読むSwift 5.6以降のコードでは、プロトコル名の前にsomeまたはanyが付きます。some View、any Error、some Collectionなどです。以前はプロトコル名をそのまま型の位置に書けましたが、現在はanyを付けないとコンパイラーが警告やエラーを出します。…
記事を読むコードレビューで「このクラスにfinalを付けてください」と言われたことが、一度はあるのではないでしょうか。
記事を読むSwiftコードで初めて山括弧 <T> に出会うと、思わず目が止まります。関数名の横に大文字のアルファベットがあり、ドキュメントを開くと func map<T>( transform: (Element) -> T) -> [T] のようなシグネチャが待っています。ジェネリックはSwift中級への登竜門です…
記事を読むクロージャ編で、[weak self]を使って循環参照を切る方法を扱った際、ひとつの疑問を保留にしました。weakのほかにunownedもありますが、何が違い、いつ使うのでしょうか。この疑問に答えるには、まずARCが実際にどう動くのか、その仕組みから見る必要があります。
記事を読むSwiftの記事やリリースノートを読むと、SE-0296やSE-0345のようなコードが頻繁に登場します。async/awaitの紹介にはSE-0296が、if let nameの省略構文にはSE-0345が付いています。この番号の正体は何でしょうか。
記事を読むSwift標準ライブラリを見ると、Int、Double、BoolだけでなくString、Array、Dictionary、Setまで、すべてstructです。他言語ならクラスである型も、Swiftでは値型です…
記事を読むSwiftには不思議な共存があります。Playgroundsでprint("Hello")の1行から始める初心者向けの言語でありながら、同じ言語でジェネリクスとマクロが絡み合う標準ライブラリが書かれています。小学生向けのコーディング教育アプリ(Swift…
記事を読むiOSアプリを作っていると、いつか必ず遭遇します。1つの画面にローディング中、成功、失敗、データなしの状態が混在する瞬間です。
記事を読むOOPを学んでいると「カプセル化」という言葉を何度も耳にしますが、「ではコードではどう実装するの?」と聞かれると、急に言葉に詰まることがあります。概念は分かっていても、手が動かないのです。
記事を読むSwift Copy-on-Writeは、値型を代入するとストレージを共有し、一方が変更された瞬間にだけ実際のコピーを行います。この最適化が値の意味を保ちながら、プロトタイプパターンの役割を小さくする仕組みを解説します。
記事を読むSwiftでコードを書いていると、ふと疑問に思う瞬間があります。なぜオプショナルはこれほど厳格なのか、なぜ配列はコピーされるのか、なぜguardがあるのか。こうした疑問を掘り下げていくと、Swiftが最初から掲げていた3つの目標、Safe(安全)、Fast(高速)、Expressive(表現力)に行き着きます。
記事を読むSwiftの静的ファクトリメソッドは、名前で生成の意図を示し、戻り値の型、キャッシュ、インスタンスの再利用を制御できます。initではなくstatic func makeを選ぶメリットとデメリット、GoFパターンとの違いを整理します。
記事を読むデザインパターンの本を開くと、終盤に必ず登場するのがインタープリタパターンです。「いったいいつ使うの?」と思って、ざっと読み飛ばしがちなパターンですよね。
記事を読むクラスごとに似たロジックをコピペして、「何かおかしい」と感じたことはありませんか? iOS アプリで画面ごとのデータ読み込みコードを3回目にコピーする頃には、手が止まってしまいますよね。
記事を読むSwift Stringが整数インデックスを許可しない理由を、拡張書記素クラスタから説明します。ハングルの組み合わせ文字列におけるCharacter・Unicode scalar・UTF-8の違いを実行結果で確認します。
記事を読むSwiftでアプリを作っていると、for item in arrayのようなループを1日に何十回も書きます。あまりに自然に使うため、カスタム型をfor-inで回そうとしてコンパイルエラーに遭遇して初めて疑問に思うこともあるでしょう。「このループの中では、一体何が起きているのでしょうか?」
記事を読むFacadeパターンは、複数のオブジェクトが絡み合うサブシステムに、シンプルな単一の入り口を提供します。Swiftの会員登録を例に、呼び出し順を一か所に集約する方法と、Adapter・Proxy・Decoratorとの違いを解説します。
記事を読むSwiftでiOSアプリを作っていると、ボタンをタップしたのに、なぜこのビューコントローラがイベントを受け取るのか疑問に思ったことがあるでしょう。
記事を読むState Patternは、状態ごとの振る舞いと遷移をオブジェクトやenumにまとめ、分散した条件分岐を減らします。Swiftの画面状態をリファクタリングする手順と、Strategy Patternに似て見える構造を意図で見分ける方法を解説します。
記事を読むSwiftのguardは失敗条件を先に処理し、正常な処理の流れを平坦に保ちます。ifとの違いであるコンパイラの保証、オプショナルバインディングの有効範囲、return・throw・continueの使い分けを実行例で確認します。
記事を読むアプリを作っていると、似たようなオブジェクトを数千、数万個も生成することがあります。地図上に数万個のマーカーを配置する機能が代表例で、このような場合はメモリグラフが上がり続けやすくなります。
記事を読むSwiftのエラー処理ツールは、失敗をいつ処理するか、どの情報を保持するかによって役割が異なります。throws・do-catch・try?・try!・Resultの選び方を、実行結果とともに整理します。
記事を読むSwift入門シリーズ第3回です。5種類のプロパティを、構文の羅列ではなく選択基準を中心に整理します。核心となる問いは1つ。この値は保存されるのか、計算されるのか、そしていつ生成されるのか。
記事を読むiOS開発では、基本機能を変えずにロギングやキャッシュだけ追加したくなることがあります。しかしそのためにクラス継承を始めると、いつの間にか継承ツリーが複雑になりがちです。
記事を読むフォルダーの中にフォルダー、その中にさらにファイル。こうしたツリー構造をコードで扱ったことがあるなら、一度は途方に暮れたはずです。
記事を読むプロトタイプパターンは既存のオブジェクトを複製し、生成コストと設定の重複を減らします。Swiftの値型のコピーとクラスのNSCopyingの違い、浅いコピーとCopy-on-Writeが作用する場面をまとめます。
記事を読むSwiftを学ぶとき最初に出会う関門がOptionalです。String?の疑問符、if let、guard let、!、??。構文が多いため、それぞれを別々に覚えると規則が混乱しがちです。
記事を読むAbstract Factoryは、互換性のある複数のオブジェクトを製品ファミリーとしてまとめ、一度に差し替えます。Swiftのテーマを例に、組み合わせミスを防ぐ構造とFactory Methodとの選び方を解説します。
記事を読むSwiftのファクトリ関数は、生成の意図を示す名前を付け、返却型と再利用方針を柔軟にします。initではなくstatic funcを選ぶ基準と、GoFのファクトリメソッドとの違いを整理します。
記事を読むSwiftコードでクロージャは空気のような存在です。ソート条件、ネットワークの完了ハンドラー、ボタンアクション、SwiftUIのbodyまで、中括弧のブロックを渡すコードは一日に何十回も登場します。それでも「クロージャが値をキャプチャするとは正確にどういうことか」「[weak self]は…
記事を読むAdapterパターンは、レガシーAPIのインターフェースを新しいコードが期待するプロトコルへ変換します。Swiftで変換の境界を作り、置き換えとテストを容易にする実装手順や、他のラッピングパターンとの違いを整理します。
記事を読むiOSアプリを作っていると、画面Aで何かが変わり、遠く離れた画面Bも更新しなければならない場面に必ず出会います。
記事を読む支払い方法ごとにif-elseが際限なく増えていくコードに悩んだことはありませんか?
記事を読むSwiftで開発していると、static let sharedの1行で作られたシングルトンを本当によく見かけます。
記事を読むiOS開発を始めると、誰もが一度は疑問に思います。「Appleは使い慣れたObjective-Cを置いて、なぜわざわざSwiftを新しく作ったのだろう?」と。
記事を読むSwiftでアプリを作っていると、do-catchでエラーを捕捉したのに、画面に表示するメッセージがいまひとつだった経験はありませんか。
記事を読む