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