こんにちは!Apple信者のiOSエンジニアです。
この記事では、現役/フルタイムで働くiOSエンジニアの僕が、iOSアプリ開発の根幹とも言えるフレームワーク・UIKitについてご紹介しています。
UIKitを知ることこそが、iOSアプリ開発への第一歩だと言っても過言ではありません。
iOSアプリ開発を始める方や、iOSエンジニアとしてお仕事をしたいと思っている方にとって、UIKitは避けて通れないほど大切なもの。
この記事をお読みいただき、少しでも理解を深めてくだされば幸いです。
UIKiとは
UIKitとは、iOSアプリを始めとしてAppleのフレームワークで駆動するアプリケーションを構築するために欠かせないフレームワーク。
フレームワークというのはざっくり言えば機能(クラスや構造体など)の塊のことであり、アプリケーションを作成する上での「土台」ともいえるもの。
iOSアプリを開発する上では、Appleが用意してくれているこのUIKitという土台を活用して作業を進めていくわけです。
詳しくは後述しますが、UIKitの中に含まれている機能やクラスというものは、iOSアプリをネイティブ環境でビルドする上で欠かせないもの。
Appleが用意してくれている統合開発環境Xcodeをダウンロードすることで、このUIKitフレームワークも一緒に同梱されます。
※Xcodeについて詳しく知りたい方は、こちら「Xcode(エックスコード)とは?IDEとは?Apple信者の現役iOSエンジニアが徹底解説!」に詳しくまとめておりますのでご一読ください!
正確にいえば、XcodeをダウンロードするとまずiOS SDKと呼ばれるiOSの開発キットが付随します。そのiOS SDKの中には、iOSアプリ上で駆動するCocoa Touchと呼ばれる重要なフレームワークが内包されています。
Cocoa Touchというのは、macOS(古くはOS X)で動作するアプリのフレームワークであるCocoaをiPhoneなどのタッチスクリーンデバイス用に改変したものです。そのため、基本的にiOS開発というのは、macOS向けの開発のノウハウによって形作られたものだといえるでしょう。
そのためiOSアプリ開発は、基本的にはXcodeをダウンロードするだけで始められるようになっています。
基本的なチュートリアルなどでは、開発者自身が手動でフレームワークをダウンロードすることはありません。
ただし良くも悪くも、UIKitについて理解しないままに動くものが作れてしまうということ。
だからこそUIKitの存在について積極的に理解して知っておくことは、iOSエンジニアとして大切なのではないかなと思います。
なおかつCocoaには、かつてAppleを去ったスティーブ・ジョブズが興した会社・Next(ネクスト)の「NextSTEP」と呼ばれるシステム(API)が用いられています。そのため少々話が飛躍しますが、iOSのシステムやアプリケーション開発のノウハウの中には、今の時代にも若かりし頃のスティーブ・ジョブズの存在が息づいているわけです。Apple信者としても、とても興味深いですよね。
ちなみにmacOS上で動くアプリの開発には、主にAppKitと呼ばれるフレームワークが使われてきました。
ただしmacOS←→iOSでソースコードの移植が容易にできるCatalyst、さらにはUIKitの普及によって、macOSでもUIKitを用いた開発が行われるようになった経緯があります。
UIKitの使い方
先程もお伝えしたとおりに、UIKitはXcodeに同梱されています。
そのため、開発者が手動でダウンロードする必要はありません。
そしてViewController属性のファイルを新規作成したときには、ファイルにUIKitがインポートされていることがわかりますね。下の画像の8行目です。
この処理が、ViewControllerファイルにUIKitをインポートするための記述です。
import UIKit
この場合もすでにimport文が書かれているので、UIKitを使うために開発者が行うことは特段ありません。
ただし手書きでViewControllerやViewのswift拡張子ファイルを作成したときには、自分でimport UIKitのコードを書き足す必要があります。
そうすることで、ファイル内でUIKitのクラスを呼び出して使えるようになるわけです。
iOSアプリ開発におけるUIKitの重要性
少しだけ触れたとおりに、UIKitはAppleのフレームワークの歴史の中に脈々と続く歴史の一部。
ネイティブ環境でiOSアプリを開発するのならば、iOSアプリが駆動するための心臓部のひとつと言っても過言ではありません。
またUIKitに含まれるコンポーネント(部品や機能)を知っておくことによって、実現したい機能をよりスムーズに実装できます。
それぞれの目的に合わせて正確に機能を選定することで、開発スピードは大幅に早くなるでしょう。
UIKitを使わなくてもiOSアプリ開発はできる?
Xcodeを使用したネイティブiOSアプリ開発においては、UIKitを使用して開発していくことがほとんど必須といえます。
ただReact NavteveやFlutterを用いたクロスプラットフォーム開発においては、独自のコンポーネントを用いる方法もあるようですが、そういった場合にもiOSのネイティブコードを呼び出す方法があります。
そのため、UIKitを使わない開発は可能ですが、iOS開発においてはやはりUIKitに依存する部分が多いでしょう。
また後述するSwiftUIを使用することによって、StoryboardやUIKitを直接用いることなくネイティブのアプリ開発を行うこともできますよ。
UIKitとSwiftUIの違いは?
SwiftUIは、2019年6月のWWDCで発表されたiOSアプリ開発のための新しいフレームワークのこと。
UIKitよりも新しいフレームワークであり、基本的には別物と思ってもらって構いません。
両者の違いとして、UIKitを用いたSwiftプログラミングでは命令形の記述が主(おも)です。
これはたとえば、とある変数の型が変わったとき、開発者のほうで変数を監視したり明示的に指示をして、UI部品に変数の値を当てはめられるということ。
一方でSwiftUIでは、宣言形の記法でアプリをビルドできます。
変数とUI部品を予め紐付けることで、開発者が指示を出す機会を大幅に減らし、コードの記述量そのものを少なくできる。
このようにSwiftUIには、より高速でリアルタイムでアプリ開発が行えるようなエッセンスが多く秘められています。
SwiftUIについては、また別の記事で深堀りしていけたらと思いますよ。
UIKitに含まれる主なクラス
ここからは、UIKitに含まれるクラスについて深堀りしていきましょう。
UIKitにはすぐには把握しきれないほど多くの要素が含まれていますが、その中でもiOSエンジニアがよく使うものについて抜粋して見ていきましょう。
Core Appクラス
ここには、iOSのシステムとiOSアプリの間で情報伝達を行うための機能が含まれています。
UIApplication
このUIApplicationクラスとは、アプリそのもののライフサイクルを管理するクラスのこと。
アプリが起動すると、一つのアプリにつき一つだけインスタンスが生成されます。
アプリ開発の場面でよくある使い方としては、アプリがPush通知を受け取ったとき、アプリの状態を判別して処理を行うという使い方ですね。
UIApplicationクラスを用いることで、アプリが閉じているときはこう、ユーザがアプリ使用中ならこう、などとアプリステータス別に細かく処理を行えるわけです。
UIDevice
UIDeviceクラスは、その名の通りデバイス情報を持ちます。
アプリ開発の現場では、ユーザのデバイスがiPadだったらこの処理、iPhoneだったらこの処理、のようなデバイスごとの条件分岐などに用いられます。
またiPhoneが横向きだった場合の処理を個別に記述するなども可能です。
View関連のクラス
View関連クラスには、その名の通りアプリのスクリーンに表示される様々な種類のViewが用意されています。
UIView
UIViewはその名の通り、画面上に表示されるViewを司るクラスのこと。
またこのクラスは、画面表示系のViewの親クラスにもなっており、アプリ開発では欠かせないUI部品です。
UIImageView
このUIImageViewクラスは、アプリ画面に画像を表示させたいときなどに用いられるUI部品です。
iOSアプリ開発において、額縁のような役割だといえますね。
ちなみに、上記のImageViewに画像を当てはめるのも簡単。画像を当てはめると、下のようになります。
もともとUIImageViewのあった部分に、Appleロゴの画像が当てはめられていることがわかるかと思います。
iOSアプリ開発で画像を用いるときには、このようにするのがベストプラクティスです。
UITableView
UITableViewは、項目をリスト表示するためのUI部品です。
たとえば有名なiOSアプリでいえば、LINEのトーク一覧画面などのような感じ。
実際にUITableViewを使っているかはLINEの中の人にしかわかりませんが、情報を一覧で表示したい場合によく使われるUIですね。
Control関連のクラス
Controlとは、アプリ内でユーザ操作を受け付けるための部品のことです。
以下のようなものが、アプリ開発の現場では主に使われています。
UIButton
UIButtonは、その名の通りアプリ内でボタンの役割をなすUIのことです。
タップしたときに特定の処理を行うなど、ユーザ挙動発信の処理を行えます。
また色やデザインなども、開発者の意図に沿って自由にカスタマイズが可能。
UIButtonの使い方をマスターすれば、開発ライフはより楽しいものになるでしょう。
UISlider
UISliderは、値を緩やかに上げ下げするために用いられるUI部品です。
AppleMusicやアラーム音などの音量調整などで見かけたことがある方も多いかもしれませんね。
UISwitch
UISwitchは、その名の通りスイッチ機能をアプリに持たせるためのUIです。
オンオフのトグルスイッチになっていますから、シンプルな設定などで使えるUI部品といえるでしょう。
UIDatePicker
UIDatePickerは、日付を選択する(ピックする)ためのUI部品です。
これを使えば、開発者側でカレンダーなどを実装することなく、ユーザに日時を選択させることが可能になります。
ViewController関連のクラス
ViewControllerとは、Viewやアニメーションなどの管理を行うクラス。
独自のライフサイクルを持っており、iOSアプリ開発には欠かせないクラスです。
ここでは、他画面のアプリを作る上で欠かせないクラスについてご紹介していきましょう。
UINavigationController
UINavigationControllerは、アプリの画面遷移を助ける役割を担うクラスです。
階層状にViewControllerを持っており、画面の進む/戻るを管理する際に用いられます。
UITabBarController
UITabBarControllerは、アプリの下にあるタブの挙動を制御するクラスです。
多くのアプリは、下にあるタブを選択することによって画面を切り替えられますよね。
このクラスを適切に使うことで、ユーザフレンドリーな画面遷移を実現できるわけです。
さいごに
この記事ではUIKitについて、またそこに含まれる代表的なクラスについてご紹介してきました。
アプリ開発の場面では、この部品たちをいかに使いこなしていくかが鍵となっていきます。
とはいえ、一度にすべてを完璧に覚えることは簡単ではありません。
UIKitについては、はじめは「こんなものがあるんだなぁ」くらいの感覚で眺めていただき、実際に使用していく中で徐々に覚えていけば大丈夫ですよ。
UIKitは奥が深くて、知れば知るほど面白いと感じることも多いです。
この記事を読んで面白いと感じてくださった方は、UIKitを使ったiOSアプリ開発にチャレンジしてみてくださいね!