iOS Programming

はじめに
仕事の関係もあって、1,2ヶ月前からiPhone及びiPad向けのアプリ開発、つまりiOS開発について勉強中。今までの仕事はJavaがメインであってその他の言語には疎いんだけど、

  1. 新しいことを学びたいという学習意欲
  2. 近年のモバイルアプリの需要の拡大
  3. 仕事の流れ
  4. Macを買った(購入動機として「iOSアプリの開発が出来る」…ってことも含まれていた)

ってことが重なって、そろそろ真面目に勉強してみるかなぁと。この技術を身につけておけば実際に役立つ自分専用アプリを作ることも出来るわけだし。
一応現段階でシンプルなアプリを作れるくらいにはなったので、色々と学習過程をまとめておく。まずは学習前に持っていた知識。

  • Java歴10年程度。自分で言うのもなんだけど、Javaオブジェクト指向に関しては設計・実装ともに相当高いレベルを維持していると思う。
  • Javascriptは少々だけど仕事でも使えるレベル(jQueryまたはPrototype.jsを使うっていう前提)。RubyPythonは趣味で一度学習した程度で、多分本を読めばある程度プログラムを組めると思う。
  • C言語は大学時代に無理やりやった(始めて触れたプログラム言語)。構文は読めるけど深い部分は良く分からない。メモリ管理やポインタ等の理解力を考慮すると、おそらくまともにプログラムは組めないと思う。
  • iOSアプリ開発に関しての前提知識はほぼゼロ。iPhoneは毎日使っているので、アプリ自体の有用性や一般的なUIについては知っているつもり。

で、現時点(学習後)でのiOS開発レベルは下記のとおり。

  • iOSアプリの言語であるObjective-Cについての基礎知識を保有。ソースは問題なく読める。
  • 本を参照しながらであれば、XCodeを用いた基本的なアプリ開発が出来る。
  • メンテしやすいコードの書き方やアプリのパフォーマンスチューニングの知識に関しては不安が残る。簡単にいえば経験不足で、「こうすべき」的な指針をまだ持ち合わせていない。

学習過程
学習方針
さて、まずはじめにiOSアプリを学習するか…となったときに迷ったのは、「どういう方針で学習するか」だ。実は数ヶ月前にもiOSアプリ開発の勉強をしたことがあったんだけど途中で挫折した。その際に用いた方法は、Web等のチュートリアルを参照しながらとりあえず動くアプリを組みながら学ぶ…というものだった。習うより慣れろって方針で。ただ、そうするとたしかに「こういうふうにすればアプリを作れるんだな」ということはわかるものの、「なぜここでこういうコードを書かなければならないのか?」という理解が欠けるため、いざ自分でアプリを作ろうとすると何から手をつけていいかわからないという状況に陥ってしまった。また、iOSアプリ開発の標準ツールであるXCodeは色々と自動でコードを生成してくれたりするんだけど、「一体なぜこういうコードが生成されるのか?」ということを理解していないために、「よく分かってないけど動くアプリ」ができてしまう。自分の経験から言ってこういう状況は非常に危うい(知識が深く根付かずにすぐに忘れてしまう、細かいチューニングをすることができない等々)。

基礎固め
ということで、やっぱり早道を探すよりも地道に基礎から勉強することが性に合ってるという結論に。そこでまずはAppleのサイトからダウンロード出来る下記の基本資料を読んだ(英語の勉強も兼ねているので英語版を読んだ)。

  • iOS App Programming Guide
  • View Controller Programming Guide for iOS
  • iOS Human Interface Guidelines

上記でなんとなくiOSアプリの構成・概念がイメージ出来るようになった。

Objective-C
では次はもっと具体的に知識をブレイクダウンしていこう!ということに。iOSアプリ開発についてをいきなり学ぼうかとも思ったんだけど、その前にC言語及びObjective-C言語の知識をみに付ける方が先だという結論に至った。言語がわからなきゃサンプルコードを見ても理解するのが困難だからね。
再びAppleの提供するドキュメントでObjective-Cを勉強するかな…と考えたものの、C言語のことをほとんど忘れている自分にはちょっと厳しいかも…と思い、ケチらずに専門書を買うことにした。
英語の勉強を兼ねているのでAmazonの本家で検索をして、もっとも評価が高かった下記の本を読んだ。

英語が読めるとこういった最新の本がKindleで安く手に入る。使われている英語自体も比較的簡単なので辞書をほとんど使わず読んで理解できる。この本自体もとても良くできていて、いきなりObjective-Cに関して学習するのではなく、Objective-Cを使う上で必要となる最低限のC言語をきちんと学んでから…という姿勢が高く評価できる。サンプルコードも豊富で、本を読みながらサンプルコードを書いて実際に動かしながら…を続けていたら、本を読み終わることろにはかなりObjective-Cを理解できるようになっていた。大体1週間くらいで読了。最初は絶望的に見えた奇妙な構文も、今となっては極普通の構文に見えるから不思議。人間の「慣れ」の力はスゴイ。

iOS Programming
Objective-Cの基礎を学んだ次は、いよいよiOSアプリ開発。これまた本を買おうと決めたんだけど、Objective-Cの本に非常に満足していたので、同じシリーズである下記の本を購入することに。

自分が学習を始めた時点での最新のXcodeのバージョンは4.2だが、この本はXcode 4に関して書かれている(Xcode 4.2に関する書籍はその時点でまだほとんど発売されていなかった)。実際、バージョンの違いによるメモリ管理に関する話やXcodeの細かいUIの変更点に最初は悩まされたけど、その都度Webで違いを検索して解決していった。
結果としてこの本を読み終わる頃にはiOSアプリ開発に関するかなりの知識を身につけることが出来た(3週間ほどで読了)。この本もObjective-Cの本と同様に良書でオススメ。

開発開始
後はもう実際にコードを書いて慣れた方が早いってことで、サンプルアプリを開発開始。ここまでの基礎知識を学んでこそ、効率よく「習うより慣れろ」が実践できると思う。実際、今もサンプルアプリのコードを書いているけど、迷ったときはWebやドキュメントを検索すれば即座に理解出来て実装出来る。


これから
ここまでやってきて、実際にiOSアプリを開発するための下地は身についた。この先いつ自分で開発したアプリが完成するかどうか分からないけど、後は経験。コードを書きながら学んでいこうと思う。