初心者がオリジナルのiOSアプリを開発できるようになるまで

#iOSアプリを開発できるようになるまで
##はじめに
私はiOSアプリのフロント側を趣味や仕事で開発しています。
そんな中、時折聞かれるのが「iOSアプリってどうやって開発するの？」という質問です。答えは千差万別だと思うのですが、僕がもう一度最初からやり直すとしたら、フロント側についてはこうやるだろうなというのを書いていきます。また、この記事では、「プログラミングができるようになる」ではなく、「iOSアプリが開発できるようになる」を主眼においています。
こういった記事は他にもあって、個人的にオススメはこの辺りです。
[これからiPhoneアプリを作ろうと思ってる人に正月休みを使って読んでみてほしい書籍](http://qiita.com/punchdrunker/items/87ca1f218ed817264ce3)
アンドロイドだけど参考までに
[Androidアプリ開発を独学で学ぶ人への効果的な勉強法](http://qiita.com/Reyurnible/items/5e57e44baeddd2149833)
##大原則
まず、プログラミングの話をする前に心構え的として語っておきたいことがあるので短めに書き連ねたいと思います。
###1. 巨人の肩に乗るという意識
僕が最初の頃に描いていた幻想はプログラミングというのは完成されたものであり、学校の勉強のように決められた範囲を勉強すれば、あとはそれを使いまわすだけである、ということでした。ところが実際は、日々進化していて、昨日まで確立されていた手法は今日は違うということもあるということです。それでも、先人たちの築いてきた土台の上に新しいものが乗っかっているものです。この記事でも後半でライブラリというものに触れますが、先人たちの知恵に恩恵を受けることはとても重要です。
###2. 英語への抵抗を減らす
上述した巨人の肩に乗るという意味でも英語への抵抗をなくすことは非常に重要です。ただ安心して欲しいのはネイティブスピーカー並に話させるようになる必要は無いということです。iOSアプリ開発において最低限身につけておきたい英語力は読んである程度理解する事ができる程度で十分です。このぐらいの英語力があると、後述する「ググる」段階であなたを大いに助けることでしょう。
###3. 言語はSwiftを選ぶべし
iOS開発はその登場以来、Objective-Cというプログラミング言語が使われてきました。ところが、2014年6月にAppleからSwiftという言語が発表され、今後はこちらに移行していくことが発表されました。この記事を執筆している2015年5月現在は移行期ですが、今後どんどんSwift化が進んでいくので、これから始める人はSwiftで開発するのがよいでしょう。Objective-Cは読むことが必要な段階が来ると思いますが、その時に理解できるように学べば良いと思います。
##実際の開発
ここからは実際のiOSアプリ開発についてみていきます。
###0. 基本的な文法を理解(最初は飛ばして良い)
これは今回の目的のためには最初は飛ばして良いのですが、書く場所が無いので第0段階として書きます。iOSアプリ開発もプログラミング言語(Swift)を用いて行われるため、プログラミング知識が必要になります。しかし、このプログラミング言語そのものを学ぶことは多くの人にとって退屈です。それは何に役立つかがわかりにくいからです。ちょうど英語を勉強するのに文法から入ると挫折しやすいのに似ています。それよりも、まずはよくわからないけど書いてみる。そして実際にアプリが動く事を体験する。そして、より難しいことをやるときに必要に駆られてプログラミングを勉強する。そうすると自然にモチベーションがあがって効率が良くなるはずです。私はこの順序を推奨します。参考までに初心者がプログラミングを学ぶのに易しくてお勧めの書籍を掲載しておきます。言語はSwiftでなくRubyですが、プログラミングのイメージを掴むのにちょうどいいです。
[初めてのプログラミング 第2版](https://www.amazon.co.jp/dp/4873114691?tag=justinqiita-22)

###1. 習うより慣れろ
####簡単なプログラムを写経する
最初の段階ではプログラミングをマスターすることよりも、プログラミングを書いてそれが動くということに重きを置きます。そこで大事なのは自分の書いたプログラムがアプリとして動いたという感動をしっかり感じることです。最初は何を書いてるのかよく分からなくても構いません。2回、3回と繰り返していく中で徐々にわかっていけば十分です。その方法を紹介していきます。
#####a. 本
サンプルコードを書いて動かすタイプの参考書があります。インターネット上にもそういった記事はあるのですが玉石混交で見分けるのは難しいので、系統だった本を買うのが時間的効率を考えると得策です。お勧めの本をいくつか上げておきます。


- [絶対に挫折しないiPhoneアプリ開発「超」入門 増補第6版【Swift 4 & iOS 11】完全対応](http://amzn.to/2AAzaGI)

<a href="https://www.amazon.co.jp/%E7%B5%B6%E5%AF%BE%E3%81%AB%E6%8C%AB%E6%8A%98%E3%81%97%E3%81%AA%E3%81%84-iPhone%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA-%E8%B6%85-%E5%85%A5%E9%96%80-%E7%AC%AC6%E7%89%88-Swift-11-%E5%AE%8C%E5%85%A8%E5%AF%BE%E5%BF%9C-ebook/dp/B077MWWY3N/ref=as_li_ss_il?_encoding=UTF8&qid=1512553967&sr=1-1&linkCode=li2&tag=justinqiita-22&linkId=3b742905e0fdf6e4ce7e4bef4a548671" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B077MWWY3N&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=justinqiita-22" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=justinqiita-22&l=li2&o=9&a=B077MWWY3N" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

- [たった2日でマスターできる iOSアプリ開発集中講座 Xcode 9/Swift 4対応 ](http://amzn.to/2jYd0X6)

<a href="https://www.amazon.co.jp/%E3%81%9F%E3%81%A3%E3%81%9F2%E6%97%A5%E3%81%A7%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E3%81%A7%E3%81%8D%E3%82%8B-iOS%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E9%9B%86%E4%B8%AD%E8%AC%9B%E5%BA%A7-Xcode-Swift-4%E5%AF%BE%E5%BF%9C/dp/4802611323/ref=as_li_ss_il?s=books&ie=UTF8&qid=1512553967&sr=1-6&keywords=ios+swift&linkCode=li2&tag=justinqiita-22&linkId=b1a62ee36ae7df8647c1e355e39a3b28" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4802611323&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=justinqiita-22" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=justinqiita-22&l=li2&o=9&a=4802611323" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />


[iOS 11 Programming](https://peaks.cc/justin999_/iOS11)は少し中級者向けですが、iOS11からの機能が網羅されていて、手元においておいて絶対に損しない一冊です。著者10人の共著ですが、どの方もiOS界隈では知らない人はいない有名人ばかりです。

- [iOS 11 Programming](https://peaks.cc/justin999_/iOS11)

[![image.png](https://qiita-image-store.s3.amazonaws.com/0/37217/14b12445-e7ce-a476-f547-11ae89c64036.png)](https://peaks.cc/justin999_/iOS11)


#####b. ドットインストール
本だとわかりにくい場合には動画で学べるサービスがあります。ドットインストールと言って3分以内の動画でわかりやすく説明してくれます。多くのコースが無料で提供されているので、試してみるといいでしょう。英語がわかるのであれば同様のサービスが多々あるのでそちらも調べてみるといいかもしれません。
[ドットインストール](http://dotinstall.com/)
#####c. 勉強会
ITに関する勉強会は多く行われています。私はconnpassというサイトを良く使っています。また、IT勉強会カレンダーも便利です。初心者向けの勉強会を探して参加すると、他の参加者もいて仲間ができるかもしれません。
* [connpass](http://connpass.com/)
* [IT勉強会カレンダー](https://www.google.com/calendar/embed?src=ZnZpanZvaG05MXVpZnZkOWhyYXRlaGY2NWtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ)
#####d. Life is Tech！(中高生向け)
中高生であればLife is Tech!がオススメです。私も大学生時代にメンター(中高生のインストラクター役)をしていました。メンターの人たちが楽しく教えてくれます。色々なコースがあるのでiPhoneアプリ開発コース以外を覗いてみるのも面白いです。
* [Life is Tech!](http://life-is-tech.com/)
###2. ググる力を身につけていく
第１段階でアプリ開発に慣れることができたかと思います。実際に自分の書いたコードがアプリとして動くことを体験すると、次なる欲求が出てきます。それは自分の思いついたアプリを創りたい！という欲求です。しかし、この段階では一から自分の創りたいアプリを作ることはまだ難しいかもしれません。そこで私がおすすめしたいのは「既存のアプリを真似てみる」ということです。 
####既存アプリの作りかたをググる
例えば、私の場合ですと自分でいつも使ってるニュースアプリをパクってみようと思い、「swift rssリーダー 作りかた」でググりました。そしたら[こちら](http://blog.andgenie.jp/articles/291)がヒットし、コピペしてなんとなくできあがり。これを自分なりにアレンジすると立派なオリジナルアプリのできあがりです。こうして第１段階では本を写すだけだったのが段々とカスタマイズの幅が広がっていきます。

###3. 巨人の肩に乗れ
第２段階まででも、自分のオリジナリティーを加えることができました。アプリ開発の世界には先人が大勢いて、彼らの成果物の恩恵を受けることができます。大いに巨人の肩に乗りましょう。
ちなみに、先人の力を借りることはサボりではなく"[don't reinvent the wheel](http://ja.wikipedia.org/wiki/%E8%BB%8A%E8%BC%AA%E3%81%AE%E5%86%8D%E7%99%BA%E6%98%8E)"という言葉で奨励されています。
####ライブラリ (Cocoapods)
プログラミングの世界では役立つプログラムを再利用可能な形でひとまとまりにしたものを[ライブラリ](http://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA)といいます。iPhoneアプリ開発の世界ではライブラリのことを[Cocoapods](https://cocoapods.org/)と呼びます。詳しい使い方は[公式サイト](https://cocoapods.org/)やブログ記事に任せますが、これを使うことで先人の成果物の恩恵に預かることができます。積極的に使えるようになりましょう。
＊ 追記: 2016年
最近では新しいライブラリ管理システムのCarthage(カルタゴ)も人気です。こちらの記事に使い方が詳しく書いてあります。
[Carthageを使ってビルド時間を短縮しよう](http://qiita.com/yutat93/items/97fe9bc2bf2e97da7ec1)

ライブラリについては以下の本が詳しいです
[ネットを支えるオープンソース ソフトウェアの進化](http://goo.gl/0rSOvW)

余談ですが、この段階で前述した英語力が役に立ちます。例えば私は自分のアプリで[EZAudio](https://github.com/syedhali/EZAudio)というライブラリを使いました。この時、使い方が分からなかったので「EZAudio swift 」でググってもあまり有益な日本語情報にヒットしません。ところが英語が分かれば、公式の説明書に当たるREADMEを読むことでほぼ解決します。また、何かエラーが出た時もGithub(後述)上のissuesというリンクをたどることで今までに起こった先人たちの試行錯誤を参考にすることができます。また、解決策が見つからなかったとしても、質問を投げかければ親切な誰かが答えてくれるかもしれません。

####Appleの公式ドキュメント
Appleが出している公式ドキュメントがあり、全て無料で読むことができます。活用するにはプログラミングの基礎的な知識が必要ですが、これが使えるようになると強力です。
ドキュメントのタイトルに"~ Guide"とあるものはアプリ開発の指針が述べられています。"~ Class Reference"とあるものは各クラスについて詳細が述べられています。まずはこの2つを読みこなせるようなりましょう。
[英語](https://developer.apple.com/library/ios/navigation/)
[日本語](https://developer.apple.com/jp/documentation/)

##まとめ
以上で、ひと通りのフロント側のことを実装できるようになるのではないでしょうか。ここまで到達する頃にはきっとあなただけのオリジナルアプリを作ることができているはず。


##補足 (Where to Go From Here)
###Git
ぜひ覚えて欲しいのがGitの使い方です。バージョン管理ツールで、詳細はサイトや本に任せますが、これを使えることでソースコードの管理が非常に楽になります。
[Gitが、おもしろいほどわかる基本の使い方33〈バージョン管理、SourceTree、Bitbucket〉](https://www.amazon.co.jp/dp/4844365010?tag=justinqiita-22)
[Web制作者のためのGitHubの教科書 チームの効率を最大化する共同開発ツール](https://www.amazon.co.jp/dp/4844337009?tag=justinqiita-22)
###iOS Developer Program登録
自分で開発したアプリは、自分のiPhoneに入れたいものです。そのためにはiOS Developer Programに登録せねばなりません。年間$100(日本円は為替によって変動あり)かかりますが、それだけの価値はあるでしょう。
###デザインガイドライン
Appleが公式に発表している[デザインガイドラインライン(iOS Human Interface Guidelines)](https://developer.apple.com/jp/documentation/UserExperience/Conceptual/MobileHIG/BasicsPart/BasicsPart.html)があります。これはiOSアプリ開発者にかぎらず、プロデューサーなども必読のものなので時間があるときに眺めておくと良いです。
###サーバーサイドやネットワークの知識
iPhoneが発売された2007年当初はモバイルの通信環境も悪く、アプリ単体で動くモノが多かったですが、2012年にLTEや4Gが発達し、昨今のアプリはネットワークを使いデータをダウンロードすることが当たり前になりました。そのためにサーバーサイドとの連携やネットワークの知識が必要になることがあります。そちらの領域を学ぶと開発の幅が広がるでしょう。