はじめに
第1章 前準備 ~おすすめ書籍
第2章 前準備 ~オブジェクト指向とは
第3章 前準備 ~プロトコル指向とは
第4章 前準備 ~入門書には書かれていないが重要なiOS開発Tips
第5章 Model View Controllerデザインパターン
第6章 MVCでタスク管理アプリを作ろう
第7章 Model View ViewModelデザインパターン
第8章 MVVMでGitHubクライアントアプリを作ってみよう
おわりに
本書の目的は、MVCやMVVMなどと呼ばれるiOSアプリケーション開発をするために必要なデザインパターンを学ぶことです。
iOSが誕生してから10年、またiOS SDKが公開され誰もが自由にApple Storeにアプリを公開できるようになってから8年が経ち、数百万のアプリケーションが誕生しました。初期に公開されたほとんどのアプリはシンプルなものが多く、その殆どが1人もしくは少数のデベロッパーたちによって開発されました。しかし近年では、iOSアプリは徐々に多機能になり、複雑性が増し、多くのデベロッパーを巻き込むようになっていきました。
現在開発されている多くのアプリは多機能で、複雑です。Web APIと通信し、データを受け取り、必要があればローカル環境のデータベースに保存し、受け取ったデータをUIに反映させ、多くのユーザーインタラクションをコントロールし、1ヶ月に2回程度は新機能を開発し絶え間なくアップデートし続けることが求められます。
このような複雑なアプリを開発し運用していくためには、数千、数万のコードを書く必要があるでしょう。
では、そのような膨大なコードをどのように管理すれば良いのでしょうか。その答えは、役割に応じたfileを複数作り、どの機能がどのfileのどの関数で実行されているかを明確にすることです。そのための全体のfile構成やプログラムのルールがMVCやMVVMと呼ばれるデザインパターンです。MVCやMVVM以外にもVIPERやClean Architectureなど様々なデザインパターンが存在しますが、本書では最も多くの企業で使われている代表的な2つのパターンである、MVCとMVVMを中心に解説していきます。
本書を通して、皆さんのiOS力をさらに伸ばしてください。
本書で使うコードは以下のリンクからダウンロードすることができます。
https://drive.google.com/drive/folders/1a7lvbsqFIpqwQ44GM_yjvLBu4LaeXa3u
具体的には以下のようなサンプルアプリのコードをダウンロードすることができます。
・todo app UserDefaultsで保存編
・todo app SQLite.swiftで保存編
・todo app Realmで保存編
・Github app MVC編
・Github app MVVM編
この他、6章ではtodo app UserDefaultsで保存編、8章ではGithub app MVVM編を例に解説しています。
本書では、以下のような方をターゲットをしています。
・iPhoneアプリ入門書を一通り読んだが、具体的にどう作っていいかわからない
・iOS歴 6ヶ月未満の初学者
・iOSエンジニア教育担当
本書をスムーズに読み進めるための、いくつかの知っておくべき知識のチェックリストを作りました。以下のチェックリストでわからないことが1個でもあればまず「前準備 ~おすすめ書籍」の章を熟読してから、本書を読み進めてください。
・入門書を1冊読んだことがあり何かサンプリアプリを作ったことがある
・ClassやProtocolの概念を理解している
・Classの継承やProtocol extensionの概念を理解している
・Delegateの概念と使い方を理解している
・オブジェクト指向プログラミングの概念を理解している
・プロトコル指向プログラミングの概念を理解している
・Storyboardを使わずにコードでViewやView Controllerを作れる
・IBActionを使わずActionに関するコードを作れる
・Web APIの概念を理解しており、Web APIを通じてデータを取得しUIに反映させたことがある
本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。
本書に記載された内容は、情報の提供のみを目的としています。したがって、本書を用いた開発、製作、運用は、必ずご自身の責任と判断によって行ってください。これらの情報による開発、製作、運用の結果について、著者はいかなる責任も負いません。
本書籍は、技術系同人誌即売会「技術書典4」で頒布されたものを底本としています。
本編に入る前に、iPhoneアプリ開発に関する本を1冊も読んだ経験がない方は、まず以下の書籍を読むことをおすすめします。本書は入門書を最低でも1冊読んだことがある人をターゲットにしています。
・『改訂版 No.1スクール講師陣による 世界一受けたいiPhoneアプリ開発の授業』技術評論社刊/ 桑村 治良、我妻 幸長、高橋 良輔、七島 偉之著、RainbowApps監修
・『詳細! Swift 4 iPhoneアプリ開発 入門ノート Swift 4 + Xcode 9対応』ソーテック社刊/ 大重 美幸著
本書と並行して以下の書籍を読むことで、特に「前準備」にあたる1~3章の内容が深く理解できるため、おすすめします。これらの書籍では、ClassとStructの違いや、Generic、Protocol、などについて詳細に学ぶことができます。余裕のある方は、英語の本にも挑戦してみましょう。
・『詳解 Swift 第4版』SBクリエイティブ刊/荻原 剛志著
・『Swift 4 Protocol-Oriented Programming - Third Edition』Packt Publishing刊/ジョン・ホフマン著
・『Swiftデザインパターン』翔泳社刊/アダム・フリーマン著、株式会社クイープ監修、翻訳
以下の本は本書の内容とは直接関係はないですが、iOSアプリケーションを作る際には欠かせないUIに関する知識を深めるための書籍です。
・『UIKit&Swiftプログラミング 優れたiPhoneアプリ開発のためのUI実装ガイド』SBクリエイティブ刊/斉藤 祐輔 JIBUNSTYLE Inc.著
・『よくわかるAuto Layout iOSレスポンシブデザインをマスター』リックテレコム刊/川邉 雄介著、所 友太監修
オブジェクト指向という言葉をご存知ですか?オブジェクト指向は「オブジェクト」と「指向」という2つの言葉から成ります。オブジェクトとは英語で「モノ」という意味です。指向とは「健康指向」という言葉にあるように「~に注目する」という意味があります。つまりオブジェクト指向とは「モノに注目する」ことなのです。
オブジェクト指向においてすべてのモノはオブジェクトとして表現されます。そして、それぞれのオブジェクトは状態(プロパティ)と振る舞い(メソッド)をもちます。1
では車を例に、解説します。
上図のような車を思い浮かべて下さい。車というモノによく注目してみると、車はハンドル、タイヤ、給油タンクやマフラーといったような様々なモノから出来ていることがわかります。さらにそれぞれのモノに注目すると、タイヤには空気圧、給油タンクにはガソリンの量等の状態があり、ハンドルを回せば車が曲がり、タイヤが回ると車が動きます。
つまり、自動車そのものがまずオブジェクトであり、それを構成するハンドルやタイヤといったモノもまたオブジェクトになります。そして、タイヤならば空気圧、給油タンクならガソリンの量といった状態がプロパティになり、ハンドルを回す、タイヤが回るという振る舞いが関数になります。これらのオブジェクトが全て組み合わさって、自動車としての製品が出来上がります。
このように世の中の全てはモノの集合体だと考えることが出来ます。これがオブジェクト指向でプログラミングする最大の理由です。プログラミングとは現実世界の業務をソフトウェアの力を用いて、コンピュータ上で実現することです。そのため、現実世界のモノに対応したオブジェクトを作成することで直感的に理解でき、修正が容易なプログラムを作成することができます。例えば、タイヤがパンクしたときや、ホイールを取り替えるときはタイヤのみを修理すれば良いように、プログラムのバグや変更があるときには、修正が必要なオブジェクトに対してだけ修正を行えば良いのです。このように、オブジェクト指向でのプログラミングは、現実世界をモデリングしてプログラムに落とし込むのに大変便利だといえます。
このようにモノに注目してプログラミングをすることをオブジェクト指向プログラミングと呼びます。オブジェクト指向の設計思想を持ったプログラミング言語をオブジェクト指向プログラム言語といい、Swiftはオブジェクト指向プログラミング言語のひとつです。
次の節からはこのSwiftを題材に、どのようにオブジェクト指向プログラミングを実現しているのかを説明します。