iOS開発者なら、一度は聞いたり使ったことのあるオープンソースツールのSourceryを作ったKrzysztof Zabłockiとポッドキャスト録音をしたが、昨年ロバート・マーティンを見た時と同様の大きな刺激とインスピレーションを得ました。Krzysztofは、優れたアプリアーキテクチャと開発者ツールを開発し、開発者エクスペリエンスを向上させることを目指して複数のツールを作成しながら、現在ニューヨークタイムズでiOSチームをリーディングしている開発者です。

間違った選択よりも正しい選択をする方が簡単な構造が良いアーキテクチャだ。

この方は、モバイルアーキテクチャとプログラミングをとても実用主義的な視点として解釈し、実行に移す方という印象を受けました。彼によると、良いアーキテクチャを区別する基準は、そのアーキテクチャを使う開発者がどれほど幸せかと判断する必要があると言います。また、良いアーキテクチャとは「間違った選択よりも正しい選択をする方が簡単な構造」と言います。なぜなら、人間は複数の分岐がある時に簡単な道を選ぶ傾向があるからです。良いコードを作るためにアーキテクチャと奮闘するのが最悪の状況だそうです。

だから、この方がこれまでに開発したものを見れば、意外と簡単なアイデアから始まるが、毎日プログラミングしている開発者の生産性を高めたり、不要な繰り返し作業を減らしてミスを減らしたり、コードをより良い構造に作成するよう強要(?)する魔法を使っているようです。Protocol extensionによりアプリロギングを担当するシングルトンオブジェクトを隠しながら単体テストもできるようにする方法とか、ユーザーがバグレポートをした当時のユーザーのアプリの状態を復元できるデータスナップショット機能などを見ると、既存のコード多く修正しない簡単な方法でチーム全体の開発とデバッグの経験を改善させます。

AppleのエンジニアたちもコピーしたSourcery

より素晴らしく人気の高いツールもあります。Sourceryというツールは、SwiftでEquatableやCodableプロトコルなどを使う時、自動的に実装コードを生成するツールです。 今こそSwift自体が対応している部分がありますが、当初はデフォルト実装機能がなかったため、全てを手動で実装しなければならなかった時に作ったそうです。これを開発してしばらくして、Appleのエンジニアたちも内部で使い始めたそうです。 興味深いことに、それを知ったのは、Appleのエンジニアが会社のポリシーのせいか、オープンソース側に直接PRを送ることはできず、TwitterのプライベートDMでパッチを送りながらバグを修正してもらいたいという要請が入り始めたからです。

Appleの主張を崩したObjective-C Playground

もう一つ興味深い逸話は、AppleがWWDCでSwift Playgroundを発表しなたら、Objective-Cではこんなことができないと言ったことを聞いて刺激を受け、12時間ぶりにObjective-C Playgroundを作ってしまうことでAppleが間違っていることを証明しました。このプロジェクトは、Objective-CだけでなくSwiftにも対応しており、Appleが発表したSwift Playgroundとは比較にならないほどの速さをアピールしています。さらに、Flutterのようにアプリのhot reloadingもできるようにしなりました。「Code Injection」というキーワードを初めて学びました。

iOSアーキテクチャとテスト

最後にこの方の場合は、iOS開発をする前にゲームエンジンも制作し、グラフィックス開発もして、ウェブ/バックエンド開発もしてみたのですが、その中ではモバイル陣営が一番テストコードの作成を嫌がる雰囲気だそうです。その理由の一つは、おそらくAppleが提示するMVCがテストする非常に悪いアーキテクチャだからだと思います。テストがうまくいくには、UIKitと完全に分離されたロジックだけを担当するクラスが必要ですが、「AppleのMVC」は基本的にinjectionもcompositionもないのでそれが難しいという意見を提示します。それでは一体どうしてAppleは数十年間MVCにこだわっているのか、 より良いアーキテクチャへと移行しようとする変化はないだろうかという質問に対し、一理ある答えを出しました。

一旦、MVC以外に人気のある主流アーキテクチャとしては(2017年発表当時)MVVMとVIPER(または他のunidirectional architecture)があります。まず、MVVMはFRPのようなバインディングが必要ですが、これはうまく作るのも難しく、UIKitとよく合わないので候補になることができず、VIPERは難しくて習得しにくいそうです。Appleは、新しい開発者がAppleプラットフォームに簡単に入ることを望んでいるので、このような難しいアーキテクチャを推奨することはないと言います。アーキテクチャに関する幅広いインサイトは、数年前に行われた人気のある発表を参考にしてください。Good iOS Application Architecture: MVVM vs. MVC vs. VIPER。2020年現在、CombineとSwiftUIができたので、MVCから抜けやすくなったでしょうか?

今すぐ役立つ実用的なコードとツールを作り出す開発者

この方はフリーランスやコンサルタントとして働いた経験があるだけに、開発の生産性やコード再利用性を引き上げるアーキテクチャとツール使いの専門家であり、特に本人の必要によって作ったツールでどれくらい稼いだということを具体的な金額で紹介するのが本当に印象的でした。なぜなら、フリーランスは時間が収入に直結するので、ツールを作って毎日繰り返し作業で使われた時間を減らしたり、以前のプロジェクトで使ったコードを再利用できるようになれば、それがすぐに収入として計算できるからです。ロバート・マーティンやGoFの専門家が理論と理想を提示している人なら、Krzysztofはその理論とデザインパターンに基づいて今すぐにでも役立つ実用的なコードとツールを作り出す開発者のようでした。特に、毎日しなければならないデバッグやコーディングにおいて、できるだけ繰り返し作業を排除し、良いアーキテクチャが広がるよう着実に何かを作って工夫する姿を見て、本当に大きなインスピレーションを得ることができました。