能登 要

札幌在住のiOSアプリ開発者。SwiftUI により分割されたデバイス間を縦横にやりとりできる考え方に転換しています。

iOSアプリ開発者。2009年のiPhoneアプリ開発開始時期から活動。開発言語のアップデートの中でSwiftUIおよび周辺技術に着目中。

SwiftUI は古参アプリ開発者を押し流しにきていますよという話

SwiftUIの腰が重たいアプリ開発者へのお怒り。SwiftUIの素振り待ったなし。

a) 勉強会について

iPhoneDevSapの勉強会が2020年7月末に開催(各月奇数開催、オンライン開催2回目)、発表者3名の1人を担当した。

WWDC2020でインパクト大の内容だったSwiftUIの進化がそのまま発表に反映、発表3枠のうち全てSwiftUIの発表だった。

SwiftUI 3本立てとはいっても、1枠はSwiftUIの仕組みから機能面を探っていこうという取り組みに対し、残り2枠はSwiftUIを2019年に触ったことがあるSwiftUI経験者の発表だったので重複のない3発表となった。

話題がかぶらないぐらいはSwiftUI の範囲が広がったのは機能の拡充によるものであり喜ばしい。

2019年からSwiftUIを触った(そしてほぼSwiftUIベースのアプリをリリースした)立場としてSwiftUIのUI以外の注目点について説明している。

内容としては、

  1. 機能的な拡張はされているが基本概念は2019年のまま
  2. ユーティリティ的機能が強化
  3. UIとして自然なコードを描きやすくなる@StateObjectについて説明
  4. Appleがドキュメント強化を測っている

について発表した。

[プレゼン資料] @StateObject @UIApplidationDelegateAdapter | Irimasu Densan Planning - いります電算企画

b) SwiftUIに手が出ない

3発表ともSwiftUIの仕組み、UI強化の概要、UI以外の機能強化について説明できてよかったのだが、発表後の質問及飲み会でのSwiftUIでアプリをアプリつ作るかについては誰も言及しないときている。私以外は、

SwiftUIに手を出さない側の言い様では、

  1. SwiftUIがまだ十分な機能がないので手を出さない
  2. ViewModelのようなViewを細かく世話する(機能している仕組み)事をやめてまで価値あるのか
  3. 名称にモデルとつけるのは不適切ではないか(サンプルコードにModelをつけたのでViewModelと勘違いしたらしい)

という意見が出てくる。アプリ開発者11年プレイヤー達からすれば無い無いだらけだし、Appleが設計思想を無理強いしてきたという思いもあるだろう。

c) Apple。古参アプリ開発者押し流しにきてまずぜ

考えてみよう。SwiftUIはUIに関しては誰にも負けないと自負しているAppleが出した解決手段である。SwiftUIを出したApple が対峙しているのは、

  1. 多様な条件分岐を制御できない(バグの温床である)UI実装事情を解決する
  2. マルチプラットフォームに対応する
  3. Web開発者を呼び込む

なのであって、これまでのアプリ開発〇〇年とか気にしていないのである。むしろSwiftUI を触らない開発者は、

  1. バグの温床をアーキテクチャパターンや、CIで押さえ込みつつ騙し騙し実装し
  2. マルプラットフォームに対応しない
  3. 古参の開発者

と言える。

なお、AppleはSwiftUIと特定のアーキテクチャパターンから距離をおいていて、MVVMっぽく記述することもできるし、Reduxっぽく記述することも可能である。いずれにしろオリンピックイヤーで隆盛するアーキテクチャパターンとAppleは一蓮托生する気はないはずなので、アーキテクチャパターンにマッチするかで白黒つけるのは違うと思う。

本業のiPhoneアプリ開発者がiPhoneでのSwiftUI 採用はまだ早いと思うのであってもSwiftUIの学習コストは過去の11年よりは低いとはいえ必要となったときに業務の合間に取り組むのはかなり時間と慣れを要する(去年SwiftUIに取り組んだ私が保証する)。

アプリ開発の本業たるiPhoneアプリでなんとかしようとするからSwiftUIに対して尻込みするのであって、いっそmacOS向けにSwiftUIを使ったアプリを作ってみるなど新しい分野の足掛かりとおもって古参アプリ開発者は取り組んではどうだろうか?

そしてApple が集めたいWeb開発者の皆様は諸手をあげてSwiftUIアプリ開発にトライして欲しい、古参開発者の手が止まっている今がチャンスだ。