iPhoneアプリ開発を理解するコツ(俯瞰視点)
こんにちは、松本です。意識が低い開発者が送る、ゆるプログラミング講座。
iPhoneアプリやXcodeを前提として、アプリ開発を理解するコツを書きます。
プログラムを理解する上で大事なのは、各ファイルの役割と流れを理解することです。この辺さえ分かればどうにかなります。
各ファイルの役割
iPhoneアプリは多数のファイルで構成されていて、Xcodeではそれらを管理できます。
プロジェクトファイル
アプリを構成するファイルの管理やアプリ構成の設定(対応OSや使用ライブラリ等)を管理するファイルです。たまに変更するので、こういう事をしたい時はここを変える、みたいなパターンを覚えておくと楽です。
swiftファイル、.m、.h
Swiftで作っている場合は.swift、Objective-Cは.mと.hです。
プログラムが書かれたファイルです。Swiftでは1ファイル1クラスが原則です。
どの様なクラス構成かに依りますが、1画面で最低1ファイルは必要です。
場合によっては100以上の.swiftが出来る事もあります。
リソースファイル
.jpg、.png、.mp3など、画像や音声などのデータファイルです。必要に応じて作ったり素材をダウンロードしたり買ったりして使います。
レイアウトファイル
.storyboardや.xibなどはアプリ画面のレイアウトを保持しています。中身はXMLですがXcodeではビジュアル的に編集できます。
その他
多言語対応のために言語ファイルやplistなどもありますが、細かい話は検索してください。
各ファイルが何をしていて、自分がアプリを作っていくにはどういうファイルを作ればいいのかを理解することが必要です。
何かをしたいときにどのファイルをどう変更したらいいかを理解できていないと、やるべきことが分かりません。
プログラムの流れ
プログラムは必ず『どこから始まるか』が決まっています。
ビューコントローラの場合はとりあえずViewDidLoadがはじめに呼ばれるので(厳密にはちょっと違うけど)、そこに初期化を書きます。
あとはボタンタップなどのイベントを処理して、そこを起点にどういう風に処理を流すかをプログラムで書きます。
処理の線(アクションの処理やファンクションの呼び出し)が正しく繋がっていれば動作します。
動かないとしたらどこかで線が切れています。それはブレイクポイントで止めて動かしてみれば分かります。
データの流れ
データの流れも同様で、画面が切り替わる時などでどういう風に繋げばデータを目的の処理まで流せるかを考えます。
どこかでデータの流れが途切れれば目的の場所で欲しいデータを使えません。
変数やファンクションの引数で直接流すか(直接手渡しのイメージ)、UserDefaultやデータベースを使って間接的に流すか(いったん机の上に置いて渡すイメージ)など、どういう風に処理したらいいかも考えます。一番楽で理解しやすいものにしましょう。
全体を俯瞰して理解できてないとツライ
コードを書くのに暗記は必要ありませんが、全体がどうなっているのかを理解していないとツライです。
これはもう、書いていきながら頭の中にモデルを作っていくしかないので、身になるにはちょっと時間が掛かります。期間は人によって違い、1日で分かる人もいれば3ヶ月掛かる人もいるでしょう。
ただ、難しいものではないので書いていけば理解できるはずです。どれだけXcodeなどの開発環境と向き合ったかという時間の問題です。
なので、とにかくアプリを作ってください。
アプリを作らずして理解は出来ません。
なお、自分の技術力では無理な内容が出てきたら、自分が出来る範囲で出来ることをしましょう。その様に仕様を変えてください。
無理なものは無理です。数年経ったら出来るようになってるかもしれません。その時に直せばいいんじゃないですかね。まずは簡単なものを完成させてください。
あとは検索でどうにかしましょう
『やりたいこと+Swift』で検索すると大体答えが出ます。
カメラアプリを作りたいなら、『swift カメラアプリ 作り方』とか。検索結果から使えるものを探すの重要なのは検索順位ではなく、新しさです。Swiftの場合は2年前の情報だと大抵役に立ちません。2020年以降のものを探しましょう(直近2年以内の情報がよい)。
古いSwiftで書かれてたり、説明が悪くて肝心な部分が足らなかったり、貼り付けてあるソースコードが間違ってたりすることもありますが、手がかりにはなります。
手がかりからまた新しいキーワードで検索すれば、自分で全部書くよりは相当楽に答えが出ます。
あとは、周りにSwiftを書ける人がいるなら聞きましょう。自力より短時間で解決します。Time is Moneyです。
わぁい、サポート、あかりサポートだい好きー。