「最近SwiftUIってたまに聞くけど、何のことか分からない」
「SwiftとSwiftUIの違いって何」
「結局SwiftUIって何ができるの」
この記事ではSwiftUIについて、
プログラミングに詳しくない人にも分かるように説明してみたいと思います。
ちなみに以下のロゴが、SwiftUIのロゴです。
iOSアプリ開発は、毎年進化している
iPhoneって、気づけば毎年新しいものが発売されてますよね。
いつも9月頃に「Apple Event」と称したイベントでApple製品の発売が告知されます。
ただ、新しくなっているのはApple製品だけではありません。
iOSアプリやMacアプリなど、開発技術も毎年新しくなっています。
この開発技術を発表するAppleのイベントを、「WWDC」と言います。
Worldwide Developers Conferenceの略称です。
このイベントでは、最近だと200以上もの基調講演(プレゼン)が行われ、
新しい開発技術に関して発表が行われます。
実はこのWWDC、1998年頃から行われていました。
最初の頃はクローズドなイベントで、Apple Developer Connectionというものに登録しているユーザしか招待されていませんでした。ですが2014年からは、どの講演も一般公開になり、誰でも無料でインターネットで基調講演を見れるようになりました。
とても古い歴史があるイベントなんですね。
2008年、初めてiPhone端末の発売が告知されました。
この時から「アプリ」という概念が生まれ始めました。そしてこの「アプリ」は、Apple社員ではなくても、誰でも作ることができます。このアプリをプログラミングで開発するための言語が「Objective-C」です。
Objective-C自体の登場は1983年とものすごく古かったりしますが、
ともかく、2010年前後はiOSアプリ開発の主流は「Objective-C」でした。
**2014年、Appleが生み出したプログラミング言語、Swiftが発表されました。**
Swiftのロゴが以下です。
今ではiOSアプリ開発の主流言語は「Swift」ですが、
**Swift登場時は、ダメダメ言語でした。**
「Swiftを使うより、Objective-Cを使う方が書きやすい」
「Objective-Cの方がバグなく書ける」
なんて巷では言われてたそうです。(知らんけど。)
しかし、Swiftは進化していきました。
毎年バージョンを上げて、発表されてきました。
・2014年 Swift ver.1.0
・2015年 Swift ver.2.0
・2016年 Swift ver.3.0
・2017年 Swift ver.4.0
・2018年 Swift ver.4.2
・2019年 Swift ver.5.0
Swift ver.3.0頃から、Swiftは世の中に受け入れられるようになっていきました。
今では、
「Objective-CからSwiftに移行していこう」
「Objective-CよりSwiftの方がすごく書きやすい」
新人開発者:「Swiftなら書けます、Objective-Cはわかりません」
などと巷で言われるようになりました。(知らんけど。)
2019年、SwiftUIが発表されました。
ひとつ注意してください。
SwiftUIは新しい言語ではなく、新しいフレームワークです。
SwiftUIは、言語としてはSwiftになります。
例として、本と電子書籍を想像してみてください。
今までは紙媒体の本しかありませんでしたが、近年では電子書籍が登場しています。どちらも本であることに変わりはないと思います。
ただ電子書籍によって、何冊もの重い本を持たなくてよくなったり、同じアカウントがあればどこでもどの端末でも本を読めるようになったりと、本の可能性が広がりました。
この「電子で本が見れること」をフレームワークと考えます。
SwiftUIは同様に、言語はSwiftですが、新しい便利機能が登場したりと可能性が広がりました。では、SwiftUIによって何ができるようになったかを見ていきます。
SwiftUIで何ができるのか
特徴的な以下の3点に絞って、ご説明します。
・今までより簡単に画面が作れるように!?
・コード変更がリアルタイムに反映!?
・コードを書かなくても、iOSの画面が作れるように!?
[SwiftUI]今までより簡単に画面が作れるように!?
より優れたAppを、より少ないコードで。
と公式Webサイトに記載がある通り、
少ないコード量で簡単にアプリを実現できるようになりました。
※画像はSwiftUI公式サイトより。
[SwiftUI]コード変更がリアルタイムに反映!?
今までのiOSアプリ開発は、コード変更をした後に、「ビルド」をすることで、実機またはSimulator(パソコン内で実機のように動作が確認できるもの)で動作を確認していました。
この「ビルド」はPCが自動で行ってくれる処理ですが、シンプルなアプリであれば数秒で終わります。しかし、複雑なアプリになってくると3分ほどかかったりもします。
アプリつくりは、コード変更と動作確認を繰り返し行う必要があるのに、毎回のビルドに何分もかかっていたら、開発に時間がかかってしまいますよね。
SwiftUIは以下の動画のように、左側でコードを変更すると、
リアルタイムですぐ右側のPreviewで動作を確認できます!
厳密には「事前ビルド」というのが必要となりますが、それでも開発作業が円滑になることは容易に想像できますね。
Webサイトの開発では、すでに実現されていたリアルタイム反映ですが、
Android含めアプリ開発では初めての実現となり、開発者から注目が集まりました。
[SwiftUI]コードを書かなくても、iOSの画面が作れるように!?
先ほどは左側のコードを変更していました。
実は右側でも操作できるんです!左側のコードも自動的に反映されます。
これならまるでパワーポイントを作るかのように、アプリをつくれる!?
SwiftUIってものすごく夢のあるフレームワークですね。
ただ1点、個人的な感想を記載します。
右側の操作は割と操作しづらさを感じています。何をどう操作したら、新しいボタンを設定できるのかなど、まだまだ分かりにくいUIかと思います。今後のSwiftUIの進化に期待です。
SwiftUIの実情
ここまでSwiftUIの経緯、便利なところを説明してきました。
以下ではデメリットなど、SwiftUIの実情についていくつか記載します。
SwiftUI「だけ」でiOSアプリをつくれるかどうか
答えは「難しい」と言っても過言ではないと思います。
SwiftUIはあくまで、UI部分 を作るのに非常に便利というだけで、
Network部分やデータベース部分などをSwiftUIで書くことは難しいです。
なので、iOSアプリをつくる場合はSwiftUI「だけ」でiOSアプリをつくるのはまだ難しいでしょう。
しかし、今年のWWDC 2020で発表されたSwiftUI ver.2.0では、
簡単なデータ保存であればSwiftUIでも書けるようになりました。
そのため、簡単なアプリであればSwiftUIだけで作ることができます。
もしかしたら今後のアップデートによって、SwiftUIだけで様々な機能のiOSアプリを作れるようになるかもしれません。
今後はSwiftUIを使わないといけないか
実は、今でもObjective-CでiOS開発をすることは可能なんです。
なので今後もSwiftUIを使わず、Swiftだけで開発することも可能です。
SwiftUIを使わないといけないということはないです。
しかし、Objective-Cは、Apple側の開発が既に止まっています。
進化しなくなってしまったプログラミング言語になってしまっています。
Objective-Cで「ここ書きにくいな」と思っていても改善されることはありません。
Swiftは毎年進化し、改善されています。
Swiftの方が、バクなく書きやすくなっています。
よって、今はできる限りObjective-CよりSwiftを使ったほうが良いでしょう。
ではSwiftUIはどうか。
iOS14から利用できるようになった、新しいWidgetをご存じでしょうか。
このWidget、実はSwiftUIでしか実現できないんです。
WidgetKitというものは、SwiftUIなしでは実現できないんです。
今後もSwiftUIでしか実現できない機能が増える可能性があります。
なので、開発する機能によってはSwiftUIを使わないといけないと言えます。
SwiftとSwiftUIで出来上がるアプリの違いは?
今のところは、あまりないと思います。
前述の通りSwiftUIでしか実現できない機能も存在しますが、
SwiftUIの有無問わず実現できる範囲であれば、そこまで差はありません。
※実装の工数については、開発者によると思いますが、私個人の感覚ではそこまで大差ないと感じております。
昨年までは、少し違いました。SwiftUIで実現しにくい機能が多くありました。
というのも、SwiftUIは昨年初めて登場し、今年ver.2.0が発表されました。
・2019年 SwiftUI ver.1.0
・2020年 SwiftUI ver.2.0
Swift登場時もそうでしたが、登場して間もない時期は不具合が多く、実用性があまり高くはありません。SwiftUIも何度か改良され、不具合なく利便性の高いフレームワークになっていくと考えられます。
これは実際に使ってみた私自身の個人的な感想ですが、
ver.1.0は実用性が低かったですが、ver.2.0は割と高いと感じています。
ver.2.0ではSwiftUIで実現できる機能が増え、バグも少なくなり、徐々に多くの開発者が使用するようになると思われます。
なのでSwiftとSwiftUIで出来上がるアプリの違いは、今はそこまでないと思います。
ただプログラミングのコードにおいては、SwiftUIの方がより「モダン」と言えるでしょう。
ちなみに、
「じゃあAppleさん、SwiftUI作り込んでからリリースすればいいじゃん」
と思った方もいると思います。
私の見解になりますが、この早めにリリースして改善するAppleさんのやり方を、私は支持します。
SwiftUIというフレームワークを発売することで、これを利用する・喜ぶ人は「iOSアプリ開発者」です。「iOSアプリ開発者」が使ってみて「すごく便利」「使いやすい」「iOS以外の開発者にもオススメしたい」と思ってもらえることがベストです。
Appleさんは、SwiftUIを完成度が高くない段階で発表し、「iOSアプリ開発者」からフィードバックをもらうことで、SwiftUIを改良する方法を取っています。
「きっとiOS開発者はこういう風にSwiftUIを作ったら使いやすいだろう」と思って完成度が高いものを発表する場合と比べて、よりユーザに寄り添ったやり方なので、私はすごく良いと思います。
今後どうなる?SwiftUIにシフトしていく?
では、今までSwiftで書かれていたプログラミングのコードが、今後SwiftUIに置き換わっていくでしょうか。
これはまだ「微妙」だと思われます。
なぜなら、画面遷移において、SwiftUIとSwiftはだいぶ仕様が異なっているからです。
この説明を詳しく話すとプログラミングの話になってしまうので、ここでは例を用います。
建物が2つ横並びにあり、1階に降りずに間を行き来したいとします。
すごく簡単なのは、危ないですがはしごをかけること。しっかりと作る場合は、工事をして連絡通路をつくれば、目的が達成できます。
では建物の片方が、コレだとします。
有名でとても近代的な建物ですね。少なくともはしごをかけることは難しそうです。
そして連絡通路をつくるのも、頑張れば可能ではありそうですが、どうすればキレイにつくれるか想像がつきません。
Swiftでつくる画面と、SwiftUIでつくる画面の関係もこの状態に似ています。
Swiftでつくる画面からSwiftUIでつくる画面に遷移させるのは簡単ではなく、がんばれば実装可能ではありますが、キレイに実装できずカスタムしにくい状態です。
なので、「とある画面だけSwiftUIでつくり変える」という作業が今の仕様だと難しそうです。最初からSwiftUIで全部つくり変える方が早いかもしれません。
よって、Swiftで書かれていたプログラミングのコードを、SwiftUIに置き換えていくようになるかはまだ「微妙」です。
新しいアプリをSwiftUIで書く、というのは主流になると思います。
まとめ
SwiftUIとは何かを、読者の方がなんとなく分かって頂けたら幸いです。