見出し画像

【アプリ開発入門】iOSエンジニアになるための説明書

はじめに

本記事は、特典以外は全て無料で閲覧が可能です。
特典の内容は、技術ロードマップ、ポートフォリオ作成例、学習計画表があります。

技術ロードマップでは、どの手順でどんなスキルを取得するべきか記載されています。

ポートフォリオ作成例では、機能仕様書や、UI設計書、単体テスト仕様書の雛形を作成しました。

学習計画表では、1年間でiOSエンジニアになれる計画表を作成しました。

著者のプロフィールは、下記から確認できます。

本記事では、著者の経験からiOSエンジニアになるために、知っておきたいスキルや、学習方法等を紹介していき、少しでも早く読者の皆様がiOSエンジニアになれる様に記事を纏めました。

対象読者

● プログラミングで稼ぎたい人
● iPhoneのアプリ開発をしたい人
● Apple製品の仕事に携わりたい人

iOSエンジニアとは?

iOSエンジニアは、iPhoneiPadMacなどで動作するiOS向けのアプリを開発する技術者のことです。

会社に属して、アプリを開発することが多いです。
自社開発の会社では、自社のアプリに機能の追加及び修正や保守運用を行います。
受託開発の会社では、クライアントから依頼されたアプリの開発を行います。

最近は、副業起業などでiPhoneアプリの開発を個人で行うエンジニアもいます。

年収相場はどのくらい?

iOSアカデミアさんのブログで、iOSエンジニアのリアルな年収が判明!1481人のアンケート結果から考察の記事がありますので、こちらを基に年収相場を見て行こうと思います。

まず、アンケートの概要から説明します。
アンケートの対象者は、ITエンジニアで募集しているため、正確には1481人のITエンジニアに含まれるiOSエンジニアになります。

つまり、iOSエンジニアの規模だけで見ると、105人になります。
105人の集計データを基に、年収レンジの割合を算出すると下記の様になります。

出典:iOSアカデミア
図1.iOSエンジニアの年収レンジ(出典iOSアカデミアブログ

年収レンジ層ごとに説明して行きます。

250万円未満

未経験や、新卒だとここからスタートになることが多いです。

250 ~ 450万円未満

実務経験を2 ~ 3年ぐらい経験するとこのラインだと思います。

450 ~ 650万円未満

実務経験を5 ~ 6年ぐらい経験するとこのラインだと思います。
リーダーやサブリーダーのクラスになります。

650 ~1000万円未満

実務経験が6年以上で、リーダー経験ありの管理職でこのラインだと思います。

1000 ~ 1600万円未満

ベテランがフリーランスや起業をして、稼ぐレベルだと思います。

1600 ~ 2000万円未満

起業してサービスが売れているレベルだと思います。

2000万円以上

複数サービスを展開して、当ててるレベルだと思います。

年収相場の説明や著者の経験を含めて纏めると、下記になります。

● ITエンジニアの中でも、iOSエンジニアは希少な人材と言える。
● 会社に属している場合の年収レンジは、250 ~ 1000万ぐらいになる。
● 属している会社や技術力で、年収は変化する。
● フリーランスの方が年収が高くなる傾向。ただ、年末調整が面倒くさいことや、税金が多く取られることがあるので、多く稼がないともとが取れない。
● 未経験から多くもらえるわけではない。
● やはり経験を積んでいかないと年収は上がらない。

下記、参考文献になります。

必要なスキルは?

必須スキルは下記になります。

● 言語理解
● 開発環境
● Git(ソースコード管理)
● データベース
● API(GETメソッドだけでとりあえずOK!)
● ライブラリの導入
● ユニットテスト(単体テスト)
● 調査力

順に説明していきます。

言語理解

基本的に「Swift」というプログラミング言語を扱います。

Swiftは、Appleが開発したプログラミング言語で、iOS向けアプリの開発に使用されています。

Swiftの特徴として、下記の2点が挙げられます。

● モダンで書きやすいプログラミング言語
● Objective-CやJavaScript等のプログラミング言語の相互性

モダンで書きやすいプログラミング言語であるため、初めてプログラミングを触る方でも、無理なく進められます。

他の言語との相互性もあるため、技術力次第で開発パターンの選択肢が増えていきます。

開発する上で最低限理解するべきことは、下記の3点になります。

● 定数 / 変数
● 関数(メソッド)
● 制御構文(if文、switch文、for文、guard文)

定数 / 変数は、値を一時的に格納するのに必要です。
例として下記の様に書きます。

let name = "Hanagazaki" // 定数:一度、入れた値は変更が出来ない。

var job = "iOS Engineer" // 変数:再度、値を入れ直すことが出来る。

関数(メソッド)は、処理した値を返すことが出来ます。
例として下記の様に書きます。

// 関数(メソッド):値をセットしたり、関数(メソッド)内で処理した値を返すことが出来ます。
func jobChange(job: String) -> String {
    let jobString = job
    return jobString 
}

var job = jobChange(job: "Android Engineer"// 変数jobに関数jobChangeをセットします。

print(job) // 出力結果:Android Engineer

class Career {

    let shared = Career()

    func jobChange(job: String) -> String {
            let jobString = job
            return jobString 
    }

}

// メソッドは、他のクラスをインスタンス化して、関数を呼び出したもの。
var job = Career.shared.jobChange(job: "Mobile Application Engineer") 

print(job) // 出力結果:Mobile Application Engineer

制御構文は、処理の途中で処理を分岐させたり、繰り返したりする構文のことです。
例として下記の様に書きます。

let job = "iOS Engineer"

// if文もしくはelse if文
if job == "iOS Engineer" {
    print("Right"// こっちが出力される。else {
    print("Wrong")
}

// switch文
switch job {
    case "iOS Engineer":
      print("Right"// こっちが出力される。
    default:
      print("Wrong")
}

// for文
for _ in 0 ..< 2 {
    print(job) // 3回jobの値が呼ばれる。

   /* 出力結果 
   iOS Engineer
   iOS Engineer
   iOS Engineer
   */  
}

// guard文もしくはguard let文
let jobChange = job == "iOS Engineer"

// guard文
guard jobChange else { return } // 値が違っていたら、処理を抜ける。これかなり重要!

// guard let文
func jobChange(job: String?) -> String {
     // 値が違っていたら、処理を抜ける。
        guard let jobString = job else { return "値が空です。" }
        return jobString
}

他にもありますが、開発しながらの方が覚えやすいと思いますので、本記事で説明しません。

開発環境

プログラミング言語だけでは開発は出来ません。開発するためには、「Xcode」という開発環境も必要になります。

Xcodeは、Appleが開発した統合開発環境(IDE)で、iOS向けアプリの開発に必要なものが揃っています。

下記からインストールが可能です。

Git(ソースコード管理)

ソースコード管理は、ソフトウェア開発におけるソースコード(ファイル)の変更履歴を管理することで、変更内容の確認や変更前の状態への復元などを行うことが出来ます。

ソースコード管理をするためのツールとして、下記などがあります。

● GitHub
● GitLab
● Bitbucket
● Sourcetree

基本的に行う操作としては、下記になります。

● clone
● add
● commit
● push
● merge
● pull
● fetch
● stash
● rebase

順に説明して行きます。

clone

リポジトリをコピーする操作です。

add

編集内容をリポジトリに加えます。

commit

ローカルに加えた編集内容を確定します。

push

リモートに加えた編集内容を確定します。

merge

他のブランチを合わせます。

pull

mergeとfetch両方の機能を持つ操作です。

fetch

リポジトリの更新をします。

stash

一時的に変更履歴を保持します。

rebase

mergeした内容を、全て変更履歴に加えます。

下記のサイトでGitの学習が出来ますので、是非、試読して見て下さい。

データベース

データベースは、下記の役割があります。

● データの登録
● データの参照
● データの更新
● データの削除

つまり、データベースが無いと、データのやり取りが出来ないので、アプリ開発には欠かせません。

データのやり取りを纏めた表現を、「CRUD」と呼びます。

図2.CURD

主なデータベース

● Realm
● SQL
● Core Data

下記に各データベースの説明と、使用方法が記載されているサイトを貼りましたので、是非、試読して見てください。

Realm

モバイルアプリ開発に特化したデータベースです。他のデータベースに比べて、少ないソースコードで処理をすることから、アプリを素早く構築できるのが特徴です。

SQL

汎用的なデータベースで、モバイルアプリ以外にも使用されます。ただし、Realmに比べると、ソースコードが肥大化しやすいので、読むのが大変です。

Core Data

Appleが開発したデータベースです。Xcode上で構築することが出来るので、ライブラリの導入をしなくても、データベースを使用することが出来ます。

API

APIは、Application Programming Interfaceの略です。外部サービスとの連携を行い、認証機能の共有やデータを取り込むことで、そのデータをアプリ内で解析することが出来ます。

公開されているAPIでは、下記などがあります。

● YouTube
● Twitter
● Instagram
● LINE Messaging API
● Google Calendar API
● Amazon Product Advertising
● ホットペッパー
● LINE Pay
● PayPay残高API
● Spotify
● iTunes Store API

APIには、HTTPメソッドがあります。
HTTPメソッドとは、「クライアントサーバーに対して、リソース(資源)の運搬を依頼する手段」となります。

リソースを受け取ることはGETメソッドと呼びます。
逆に、リソースを送ることはPOSTメソッドと呼びます。

図3.API関連図

最初のうちは、GETメソッドを扱えるようにしましょう。

● 最初はGETメソッドだけ扱えればいい。
● GETメソッドはサーバーからデータを持ってくること。
● 外部からデータを取ってくることで、アプリ開発の幅が広がる。

ライブラリの導入

ライブラリは、予めある機能を持つプログラムで、導入することでそのプログラムを動作できる様になります。

ライブラリを導入するためには、下記の2点を使用します。

● CocoaPods
● Carthage

CocoaPodsとCarthageは、iOS向けライブラリ管理ツールです。

これらの違いは、環境構築の利便性と、読み込み速度(ビルド時間)にあります。

下記、それぞれの特徴と導入方法になります。

CocoaPods

● 環境構築がしやすい。  ➡︎ ライブラリが導入しやすい。
● 読み込み速度が遅い。  ➡︎ ビルド時間が長い。

導入方法

Carthage

● 環境構築が面倒。  ➡︎ ライブラリが導入しにくい。
● 読み込み速度が速い。  ➡︎ ビルド時間が短い。

導入方法

扱えた方がいいライブラリ

● Alamofire(http通信を行うために必要)
● RealmSwift(Realmのデータベースを操作するために必要)
● FMDB(SQL系のデータベースを操作するために必要)

他にもRxSwiftやMoya、SwiftJsonなどありますが、こちらは難しい部類になりますので、まずは上記のライブラリを扱える様にしましょう。

また、開発案件によっても使用するライブラリが違うので、案件ごとに学習していくスタイルで良いと思います。

ユニットテスト(単体テスト)

ユニットテスト(単体テスト)は、開発者自身がテストコードを書き、機能テストやUIテストを自動化する仕組みのことです。

ユニットテストをすることで、目視で確認する必要のないテスト項目を自動で確認してくれるので、開発コストが抑えられ、作業効率が上がります。

図4.ユニットテスト自動化

エラーが発生した場合は、どの画面でエラーが発生したか分かる様に、自動でスナップショット(スクリーンショット)してくれます。

図5.ユニットテスト時に、エラーが発生した場合

調査力

分からないことがあった時に、自分で解決する方法を探すことがあるため、調査力は必須です。

エンジニアのスキルの中で、最も必要なスキルになります。

下記、調査する上でのポイントになります。

● 分からないことがあったらとりあえずググる。
● 自分が分からないことを言語化する。
● どんなワードを検索するれば良いのか考える。
● 思いついたワードをググってから、修正を加えながら進めれば欲しい答えへ導き易くなる。
● 文献から解決に辿り着けるワードがあるか探すことも重要。

どうしたらiOSエンジニアになれるか?

新卒の場合

● 新人研修に組み込まれている場合があるので、それに沿って学習すればOK !

転職する場合

● お金に余裕があるのなら、スクールに通うのもあり。
● 未経験でも転職できる可能性はあるがかなり難しい。
● まずは自分で学習して、ポートフォリオを作成する方が良いかも。

独立する場合

● ポートフォリオは必須。
● 日本語以外の言語を話せると取ってこれる案件の幅が広がる。
● コミュニケーション能力が高ければ尚良い。

案件を勝ち取る系だと、下記のサービスがあります。

● Cloud Works
● Lancers
● ココナラ

近年では、SNSを利用して案件を貰うことが、増えてきていると思いますので、下記を利用するのも手段としてアリです。

● Twitter
● Facebook
● note
● YouTube

学習方法

● udemy
● ドットインストール
● YouTube
● 参考書
● プログラミングスクール
● 友達 or 知り合いのエンジニアに教えてもらう
● オンラインサロン
● Qiita or Zenn or noteなどの技術ブログで学ぶ

順に説明していきます。

udemy

udemyはあらゆる分野を学習できる動画教材のプラットフォームなので、プログラミング以外にも学びたいことがあれば、使ってみて下さい。

言語理解

SwiftとXcodeを開発を通して学べる

SQL

Git

ドットインストール

Swift 3と古いバージョンしかないので、軽く目を通すだけでも良いです。

YouTube

下記のチャンネルや動画がおすすめです。

開発全般

言語理解

ソースコード管理

データベース

API

ライブラリの導入

ユニットテスト

参考書

下記、おすすめの参考書になります。

Swiftの日本語マニュアル的な参考書

SwiftとXcodeを開発を通して学べる参考書

SwiftとRealmを学べる参考書

プログラミングスクール

お金は掛かりますが、経験として通ってみるのも良いのかもしれません。

友達 or 知り合いのエンジニアに教えてもらう

周りにエンジニアがいれば、いけそうですが中々いませんよね。

オンラインサロン

オンラインサロンは、月額制のサービスが多いので、すぐコミュニティから退会できたり、メリットがあります。

Qiita or Zenn or noteなどの技術ブログで学ぶ

Qiita

Zenn

note

著者のページ

著者の書いた記事でオススメ ↓

Macを持ってない人はどうすればいいのか?

考えられる選択肢は、下記になります。

● とりあえず買う(新品はかなり高い…)
● 中古でMacを買うのもあり、オークションとか
● 友人や知り合いに譲り受けるか貸して貰う
● めんどくさいけど、仮想マシンで作業をするか(邪道、難しいかも…)
● 仮想マシンならvirtualboxとかvmwareあたりで良さそう
● dockerで仮想環境を構築してもいけそう

順に説明していきます。

とりあえず買う(新品はかなり高い…)

新品は高いですが、性能に関して間違いなく良いので、自分に投資をすると思って買うのもアリだと思います。

中古でMacを買うのもあり、オークションとか

ある程度、パソコンの知識があれば、中古を買って使うかジャンク品を買い修理して使う手段もあります。

友人や知り合いに譲り受けるか貸して貰う

友人や知り合いに、Macを譲り受けるか貸して貰うかは、交渉次第になると思いますので、交渉上手な方は良いかもしれません。

めんどくさいけど、仮想マシンで作業をするか(邪道、難しいかも…)

これはかなり玄人向けの作業なので、おすすめしないです…
開発案件によって、仮想マシン下で動作確認したいなどは別ですが、今回に限ってはXcodeで開発することが目的なので、普通にMacを買った方がいいと思います。

仮想マシンならvirtualboxとかvmwareあたりで良さそう

それでも仮想マシンで、Xcodeを動かせるか確認したいのであれば、virtualboxやvmwareというソフトウェアをインストールして、試してみるのもアリだと思います。

dockerで仮想環境を構築してもいけそう

dockerでMac環境のコンテナを作成している人もいるので、dockerも興味ある方はMac環境を構築してみるのも面白いと思います。

おわりに

最後まで読んで下さり、ありがとうございます。

エンジニアが不足している中、求人が増え続けているので、誰にでもエンジニアになるチャンスはあります。

特にiOSや、Androidと言ったモバイルアプリエンジニアは、希少な人材なので仕事は見つけ易いと思います。

この記事を読んで、iOSエンジニアになろうと思って頂けると幸いです。

特典(ここから有料になります)

特典内容

● 技術ロードマップ(ファイル形式:.pdf / .xmind)
● ポートフォリオ作成例(ファイル形式:.png / .xlsx リンク:Figma /
Googleドライブ)
● 学習計画表(ファイル形式:.xlsx リンク:Googleドライブ)

技術ロードマップは、.pdfと.xmindのファイル形式の両方を添付しています。
XMindで閲覧したい方は、下記のサイトからXMindをインストールして下さい。

ポートフォリオ作成例に関しては、下記になります。
機能仕様書単体テスト仕様書は、Googleドライブと.xlsxのファイル形式を添付しています。
UI設計書は、FigmaのURLリンクと、各画面の画像を添付しています。

学習計画表は、Googleドライブと.xlsxのファイル形式を添付しています。

ここから先は

56字 / 3画像 / 5ファイル

¥ 300

この記事が気に入ったらサポートをしてみませんか?