SwiftUIアプリを24時間で作ってリリースするひとりハッカソンの結果報告

2020年1月27日 所 友太 @tokorom

top

2019年はSwiftUI誕生の年

2019年のSwiftUIの発表はたいへんインパクトがありましたね! Objective-CからSwiftへの変遷と同様に、ここ数年で間違いなくSwiftUIがiOSアプリ開発のスタンダードになるものと思います。

いっぽうでSwiftUIはまだまだ機能不足、情報不足で実際にリリースする案件に適用するには心許ないというのが2020年1月時点での現状です。特に自社のメインサービスやクライアントワークでSwiftUIの導入を決断をするのはなかなか難しい時期かもしれません。

また次の6月のWWDCでアップデートが発表され状況は変わってくると思いますが、それを待つのも…

ということでハッカソン

ということで、冬休みにひとりでハッカソンを実施して、

ところまでやる!ということにしました。

自分で勝手に企画して出すアプリですのでSwiftUIを使っても誰にも文句は言われません!

必須利用技術

このハッカソン企画での必須利用技術は、

の3つとしました。

SwiftUI はもちろんですが、ローカルオンリーで動作するアプリだとSwiftUIの検証には弱いかなと思い、サーバにデータを保管するようにしバックエンドには Firebase(Firestore) を利用することにしました。 また、SwiftUIを採用する時点でターゲットOSがiOS 13以降になるので、ついでにiOS 13の新要素 Sign in with Apple でのSign inを実装することにしました。

リリースの定義

今回はゴールであるリリースの定義を、

ところまで、としました。

作るアプリ

作るアプリはちょうど自分が欲しいと思っていた「こどもたちのお金を親が管理するアプリ」にしました。

piggy-bank

Photo by Michael Longmire on Unsplash

解決したい課題

我が家ではこどもたちにお金の教育を兼ねて毎月おこづかいを渡しているのですが、

など様々な悩みが出てきました。

解決するための機能

これらを解決するためには、

と考え、シンプルに親のアプリでこどものおこづかい残高を管理するのがよいと仮定しました。

24時間で実装する機能

こういったアプリを作るうえで欲しい機能はいろいろと浮かんだものの、慣れないSwiftUIを使って24時間となるとだいぶ機能を絞る必要があると思い、

を必須機能としました。

先送りにする機能

いっぽうで、以下のアイデアはハッカソンが終わった後に、また時間があるときに実装することにしました。

ハッカソンの結果

まず24時間でリリースをできたかという結果ですが、無事にリリースできました!

https://apps.apple.com/app/id1494070556

リリースしたアプリ

だいぶ簡素なものですがこんな画面遷移です。 今回は、ひとりハッカソンとして、1人で24時間限定で開発し、弊社UIデザイナーも関わっていませんので、弊社のアウトプットがこのレベル、というみかたはしないでくださいね!!

画面遷移だけでは分かりませんが、サーバ上のDB(Firestore)が更新されれば、どの画面の要素もリアルタイムに自動更新されるようになっています。

screens

SwiftUIで開発/リリースをしてみた所感

SwiftUIでスピーディに開発できる?

まず私のこの時点での知識と経験では、従来どおりのUIKitベースでの開発のほうがだいぶ速く開発できます。UI部分の開発は従来のやりかたの2倍以上かかってしまったかもしれません1

ただし、これには 現時点では という前置きが必要です。SwiftUIは現時点では、

というのがあり、そこで時間がかかってしまっています。しかしこれらは、いずれもここ2年程度で解決されていく話と考えています。 感覚としては、Swiftが発表された年のObjective-CとSwiftの関係に近いと思います。

SwiftUIのどこがよかった?

ひとことで言えば「ぼくがなにも考えずに作っても勝手に良い感じの構成になってくれた」という印象です。

今回、設計などほとんど考えずに手なりで1画面ずつ作っていきました。結果として、

になりました。

前者はSwiftUIの売りの部分なので当然ですが、後者は意図せずそうなったので感心してしまいました。

実際に今回のハッカソンでは、最初にFirebaseにまったく触れない状態でローカルデータ(ただのメモリ上の配列です)だけで全画面を作りました。そしてそのあとViewはいじらずに裏側だけFirebaseに繋ぎ込みをするよう作り替える、という順番で開発をしました。おおむねスムーズに作り替えができたと思います2

ダークモードやDynamic Typeも勝手に対応

これも特に意識していたわけではないですが、WWDCでの発表どおりSwiftUIでプレーンにアプリを作ったら、

にも勝手に対応されていました。

ダークモードに関しては本当に全く手を加えていません。

dardkmode

Dynamic Typeについては文字を大きくしてみたら一部の画面でレイアウトが崩れたので30分程度で手直ししました。

dynamictype

SwiftUIはいつから使うべき?

2020年1月時点ではまだ人柱感が強すぎます。2020年の6月のWWDCでのアップデートでだいぶ実用的になってくれるのではと期待しています。

逆に2021年の6月のWWDCのアップデートあたりで誰もが使っても良い、と思えるくらいになっていそうです。そうなってしまうと、その頃には従来のUIKitベースでの作り方が負債と感じてしまうかもしれません。

2020年から2022年初めまでが移行期で採用の判断が難しい時期になりそうです。

それ以降はSwiftUIがスタンダードな世界になっていると予想しています。

実装面の話題

たいへんシンプルなアプリなので、この記事ではその他実装面の話題については書きません。

場合によっては、別の記事で実装面の具体的な話(といっても入門レベルの内容になりそうですが)を書いたり、このアプリを題材として機能追加するときに使う要素技術の話題なども書かせてください。


  1. ハッカソンでSwiftUIの知見が増えたので次はもう少し速くなると思います。 ↩︎

  2. データ取得時のページネーション周りでView側にも変更が発生するなどありました。このあたりは慣れれば初めからそれを考慮して実装できそうです。 ↩︎

Related Entries
Latest Entries