[コードスメル #5] ショットガン手術 vs 発散的変更
ショットガン手術は、1つの変更が複数のファイルに分散するスメルです。一方、発散的変更はその鏡像で、1つのファイルが複数の理由で変更されます。相反する2つのスメルをコミット履歴で実測し、見分ける方法を整理します。
記事を読むSEARCH THE GROUND
タイトル、説明、カテゴリ、タグをまとめて検索できます。
最新の15件を表示中です。
ショットガン手術は、1つの変更が複数のファイルに分散するスメルです。一方、発散的変更はその鏡像で、1つのファイルが複数の理由で変更されます。相反する2つのスメルをコミット履歴で実測し、見分ける方法を整理します。
記事を読むGod Objectは周囲の責務とデータを吸収し続けて肥大化するクラスで、チームで最も変更と競合が多いファイルになります。肥大化の兆候、分解の順序、分割に失敗する2つの方法を整理します。
記事を読む2019年にSwift 5とiOS 12.2がリリースされた後、アプリ容量が減ったのはABI安定性のおかげです。各アプリが抱えていたSwiftランタイムがOSへ移った経緯と、モジュール安定性、@frozenのトレードオフを整理します。
記事を読む関数はすべて5行で責務も1つずつなのに、ボタンを押すと何が起きるか誰も答えられないコードがラビオリコードです。過度な分割の理由とジャンプ回数に表れるコスト、流れを取り戻す方法をまとめました。
記事を読む同期・非同期は処理の完了を誰が管理するか、ブロッキング・ノンブロッキングは制御権をすぐ返すかという軸です。2つの軸は独立しているため、4つの組み合わせがすべて存在します。その理由をSwiftの例とともに整理します。
記事を読むファイルハンドルやロックのように一つでこそ意味を持つリソースは、コピーすべきではありません。Swift 5.9の~Copyableでコピー禁止を型に刻む方法と、borrowing・consuming・inoutの3つの受け渡し方、使いどころを整理します。
記事を読むSwift 5.9のマクロは、コンパイラに組み込まれるコード生成プラグインです。構文木を受け取ってコードを返す仕組み、freestanding(#)とattached(@)の2種類、自作時のコストをまとめます。
記事を読むstructのサイズはプロパティサイズの単純な合計ではありません。size・stride・alignment、パディング、extra inhabitantを利用するOptional、64ビットのexistential containerを実測します。
記事を読む層をきれいに分けているのに、フィールドを1つ追加するだけで7ファイルを修正しなければならないコードがラザニアコードです。層が増える理由とコストが発生する箇所、層が必要な場合と取り除き方をまとめます。
記事を読むClaude Codeの権限はallow・ask・denyルールと、denyを優先する評価順で動作します。/permissionsの使い方、Bashのワイルドカード構文、Shift+Tabによるモード切り替え、設定ファイルの優先順位まで整理します。
記事を読むメソッド呼び出しは、直接呼び出し・vtable・objc_msgSendの3方式にコンパイルされます。finalとprivateが性能に関わる仕組み、プロトコルextensionの落とし穴、プロファイラでの確認方法をまとめました。
記事を読むオブザーバーを登録した瞬間、ランタイムはオブジェクトのクラスを動的サブクラスに差し替えます。isa-swizzlingの動作、classが嘘をつく理由、setterを経由しないと通知されない条件を整理します。
記事を読むClaude Codeの計画モード(plan mode)は、コードを変更する前に計画の承認を求める機能です。Shift+Tab・/planでの有効化、3つの承認 विकल्प、Ctrl+Gによる計画編集、デフォルト設定までまとめます。
記事を読むテストプランは、実行するテストと条件を.xctestplanファイルで管理します。スキーム設定だけでは足りない理由、対象選択、構成分割、カバレッジ・実行順・反復設定、xcodebuild連携までまとめます。
記事を読む構造化並行処理は、非同期処理の終了を誰が担保するのかに答えます。子タスクが親スコープから抜けられない仕組み、キャンセルシグナルの伝播、Task.detachedで手動管理が必要になる保証を整理します。
記事を読む