Hatena::ブログ(Diary)

Over&Out その後 このページをアンテナに追加 RSSフィード Twitter

2016-03-20

「本気ではじめるiPhoneアプリ作り」の紹介/iOSアプリ開発の勉強法について

Yahoo!のiOS黒帯エンジニア、西さん(および SB Creative さま)よりご献本いただきました。


f:id:shu223:20160320105728j:image:w400


『本気ではじめるiPhoneアプリ作り 黒帯エンジニアがしっかり教える基本テクニック』というタイトルで、環境構築からアプリのリリースまでをカバーした実践的入門書です。まだ発売されたばかりで、Xcode 7、Swift 2 の最新開発環境に対応 しているのもポイントです。



書籍の特長

冒頭にも書きましたが、著者の西さんは ヤフーで「黒帯」として認定 されている方で、つまり現場でバリバリのエキスパートとして認められている方です。


というわけで本書は入門書でありつつ、AutoLayout、データの永続化、サウンド、アニメーション、通信処理といった 昨今のアプリ開発には不可欠な要素 を、ToDoリストアプリや商品検索アプリといった 具体的なサンプルをつくりながら学べる「実践的」な内容となっています。

(目次より一部抜粋)

  • Chapter4 アプリの基本をマスターしよう
    • 割引計算アプリで学ぶ画面レイアウトとボタン操作
  • Chapter5 永続的なデータを扱う
    • ToDoリストアプリで学ぶデータ操作
  • Chapter6 サウンドとアニメーションの処理
    • クイズアプリで学ぶサウンド・バイブレーション・グラフィックス操作
  • Chapter7 通信できるアプリを作ろう
    • 商品検索アプリで学ぶ通信の方法

ちなみに通信処理が入るアプリにはAPIを提供するサーバー側も必要ですが、そこはYahoo!のWeb APIを利用し、サーバーサイドの実装なしで実現できるように配慮されていました。

let entryUrl: String = "https://shopping.yahooapis.jp/ShoppingWebService/V1/json/itemSearch"

下記は、著者自身による紹介記事です。

アプリを作り上げていくにはさまざまな基礎知識が必要になるわけですが、本書ではiOSアプリ開発において重点的に押さえておくべき基本をまとめつつ、実際にApp Storeへリリースできるアプリを開発できるようになるまでを爆速で支援するように書いています。


また、koogawaさんのブログでも各章ごとの詳しい書評が書かれています。


おまけ:iOSアプリ開発の勉強法について

こういう話もあって、「iOSアプリ開発はどう勉強したらいいか?」「おすすめの入門書は?」みたいな質問をされることがよくあります。なかなかそういう話をブログに書く機会もないので、今回の入門書の紹介に乗じて書かせていただこうかと。


とはいえ普遍的な話はできないし、正解もないので、あくまで「僕の場合はこうでした」という話として、参考程度にお読みいただければと。


入門書購入

iOSアプリ開発を始めたとき、まず入門書を数冊買いました。はじめてのMacbookを買った帰り、有楽町のビックカメラの技術書コーナーでパラパラめくって、「話が理解できそうなもの」を選んだ記憶があります。


当時のブログに書いた記事がこちら。

この本に載ってたサンプルアプリを、

内容を理解することなく手順をなぞって実装し、

とりあえず動かしてみました。


意味を理解しないまま手順通りにXcodeでプロジェクトをつくって、3行ぐらい、意味を理解しないまま本に書かれている文字列(プログラム)を打ち込んで、本に書いてある通りにビルドのボタンを押すと・・・シミュレータで「ブラウザアプリ」が動作したのです。ブラウザってめっちゃ難しそうって思ってたので、これはちょっとした感動でした。


第一作目のアプリ

その後「ビルドして実機で動作させる」手順まで覚えた僕が次にやったのは、本の通読ではなく、本質を理解しようとすることでもなく、

  • 手元にある書籍のサンプルコードを一通りビルドして試してみる
  • そのサンプルコードからの改変でつくれそうなアプリを考えてみる

ということでした。


で、つくってストアでのリリースまで漕ぎ着けたのが、「余命電卓」というアプリです。


『iPhone SDKの教科書』という書籍に収録されていた、年齢を計算する『Age』というサンプルが元になっています。

  • ピッカーで誕生日を設定できる
  • 設定した誕生日から算出した「現在の年齢」が表示される

というサンプルで、僕のつくった余命電卓は、単にその「現在の年齢」の代わりに「余命」(78 - 現在の年齢)を表示するようにしただけでした *1


f:id:shu223:20160320231930p:image:w280:left

f:id:shu223:20160320231928p:image:w280:left



このサンプルコードの改変に必要だった知識は、

  • アイコンなどの画像リソースの入れ替え
  • ボタンを押したら設定画面に遷移するようにする
  • 年齢の代わりに「平均寿命 - 年齢」で計算した余命を表示する
  • 余命を時間・分・秒等に換算する
  • タイマーで秒数カウントダウン

これぐらいです。画面遷移やタイマー等は、同様の機能を実現している他のサンプルをあたって、該当するコードを持ってきました。


挫折しないコツ1:わからないことには目を瞑る

Xcodeプロジェクトを新規作成するだけで、わらわらとわけのわからないファイルがたくさん生成され、実際にプログラムを書くファイルである 〜.h や 〜.m (今だと 〜.swift)にも最初からわけのわからないことが色々と書かれています。


そういうのを 全部理解しようとしなかった、のが途中で挫折しなかった秘訣かなと。


Objective-Cでいうと、@interface, @implementation って何なのかとか。assign だとか nonatomic とか。


もちろん大事ではあるのですが、プログラミングを始めたばかりの人がそういうのをひとつひとつしっかり理解してから前に進もうとすると、動くものをつくれるようになるまでが遠すぎて、挫折してしまうのかなと。


挫折しないコツ2:できないことはあきらめる

余命電卓の最初のバージョンでは、日本男性の平均寿命78歳から誕生日を引く、という超シンプルなロジックだったのですが、次に僕がやろうとしたのは、「性別を選ぶと男女それぞれの平均寿命から引き算する」というものでした。


・・・が、なぜかクラッシュする・・・


当時の僕は解決方法がわからなくて、その機能をあきらめました


プログラミングにおいて、的確にトラブルシューティングを行うことは、(ものにもよりますが)しっかりした理解と経験を必要とするわりと高等な技術だと思っています。ここで挫折して二度とプログラムをやらないよりは、あきらめて別のできそうなことを探す、というのもひとつの手かと。


サンプルドリブン勉強法

そんなわけで、僕が「Age」から「余命電卓」をつくったように、最初からある程度機能があって、動くコード、つまりサンプルコードから始めて、そこに書いてある色んなわけのわからないことには目を瞑りつつ、画像を入れ替えてみるとか、計算の足し算してるところを引き算にしてみるとか、そういう わかること/できることだけでまずはやってみる、というのも、挫折せずにプログラミングの楽しさを知る=入門するためのひとつの方法かなと、僕の経験から思います。


入門書の選び方

上記の経験をふまえつつ、個人的に入門書を選ぶ際の観点としては以下をオススメしています。

  • 自分がつくりたいアプリに近いサンプルが載っている
  • 出版年月が新しい
    • 古いと、サンプルが動かない可能性がある
    • 動かないサンプルを動くようにするのは入門者には厳しいかも
  • パラパラとめくって、自分にとって説明がわかりやすそうか?をみる
    • 人によって前提知識は全然違うし、文章の好みとかもあるので

まとめ

最新の開発環境に対応した実践的入門書「本気ではじめるiPhoneアプリ作り」を紹介しつつ、僕がアプリ開発を始めたころの勉強法についても書かせていただきました。どなたかの参考になれば幸いです!


*1:今は広告とかツイート機能とか入ってますが、リリース当初はもちろんそんな機能はありません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

2009 | 08 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2015 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 12 |
2016 | 01 | 02 | 03 | 04 | 05 | 06 |