#1 未経験→iOSエンジニアの道のり-開発に挑戦~リリースまで



# はじめに
こんにちは。`Hello world`とは？から始めてiOSディベロッパーとして働けるところまでようやく来れました。一年ちょっと前くらいにprogrammingのpを始めました。経歴異業種です。

最近知人友人のKくんとSくんからどんな道を辿ったの？と聞かれたことをキッカケに、他に同じような道を辿っている人がいるかもしれないので、プログラミングやる！と思い立ってから現場に入るまでやってきた事、触れたなど知見とか共有できればと思って、簡単にシリーズっぽくして記そうと思います。

ビギナー目線ですが、こういうの現場ジョイン前に読みたかったなぁと思っていた理想があるでそういうものになれば良いなと。まだポジションまもないですが、現場に入って出会ったサービスやらなんやら、これは入ってから知ったけど知っておきたかったなぁとか、その辺分けて書こうと思います。

なお、私はSwiftを使用しますのでそれ前提で記述しますが、中には他のポジションに行くとしても知ってていい部分もあると思います。駆け出し早々の身分ですが、自分のアウトプットにもなりますし、同じ道を歩む人が少しでも”へ〜”ってなればいいと思ってます。（早くシニアが見えてる世界を見たいなぁ）
トイレの間などに読んでもらえると嬉しいです。

以下、友人KくんとSくんに捧げます。今度メシおごってください。

# Index
1. #1 未経験→iOSエンジニアの道のり-開発に挑戦~リリースまで　←　ここ
    2. 興味を持ってから使った学習サービス
    3. とりあえずなんか作る
    4. 個人アプリをリリースしてみる
2. [#2 未経験→iOSエンジニアの道のり-ライブラリと設計](https://qiita.com/57shota/items/6cb8ef6bb466901e53c7)
3. [#3 未経験→iOSエンジニアの道のり-git周り](https://qiita.com/57shota/items/63573de6186fcaa52584)
4. [#4 未経験→iOSエンジニアの道のり- 使用ツールやwebサイト](https://qiita.com/57shota/items/b32b4a462d048e69ed32)
5. [#5 未経験→iOSエンジニアの道のり-現場着任前/後の取り組み](https://qiita.com/57shota/items/52b6238442d83cb2f13d)


# 1-1.  興味を持ってから使った学習サービス
興味を持ったらまずやってみよう。今は無料でも学べるサービスがたくさんあります。
ですが、お金を出した方が質がよくなります。無料でできるところまでやってみて、まぁ試しにって感じでサービスにお金出していく流れでいいと思います。


### Progate
https://prog-8.com/
<img width="700" alt="Screen Shot 2019-08-18 at 23.33.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274090/bc8aa332-0e6b-59d9-ab10-1416d4b38c1f.png">

Qiitaのこの記事を見てる人なら別に説明いらんやろってくらいの鉄板プラットフォーム。プログラミングを感じたいだけならこれやっておけば感じは掴める。私は異業種の前職で、エクセル編集してる裏でprogateやってました。（良い子は真似しないでね）
色々な言語が無料でできますし、途中から有料ですがこの価格ならやるべきです。大体の言語はカバーしてます。
問題を見ながら、ブラウザでコードが書けるのがいいですね。


### ドットインストール
https://dotinstall.com/
<img width="700" alt="Screen Shot 2019-08-18 at 23.36.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274090/3a70282f-b093-754d-2fb4-d020af5f3116.png">

動画で解説してくれるタイプ。途中まで無料。私は正直いうと動画タイプって苦手なのであんまりやっていません。
こういうのが好きな人は合いますし、トピックごとに動画も分かれてるので知りたい部分だけ見るのもいいでしょう。


### 他学習サービス
- [Udemy](https://www.udemy.com/ja/#_ebcv=3kxCAMrX.liskul2so.1)
- [Codeprep](https://codeprep.jp/)


他にもたくさんあります。


#### 1-1 まとめ
私はほぼプロゲートしかやってません。とりあえず全パートやりました。
HTML/CSS/Javascriptあたりから初めて行くといいと思います。
`Swift`, `Java`などのプログラミング言語のコースをすると、オブジェクト指向というプログラミングに必要な概念がどんなものなのかイメージをつかめると思います。絵やイメージで説明してくれるのはとてもわかりやすくていいですね。
ここで`Swift`にはまって、iPhoneだし作りたいアプリあるしってことで歩み始めました。


私個人の意見ですが、プログラミングというものを掴む、ベース知識を身に着けるという目的であれば、やるのは一つのサービスだけでいいと思います。時間的余裕があり趣味半分で他のものをやってみたい！って人ならいいですが、似たようなサービスをハシゴする時間も勿体無いので必要はないと思います。終わったら退会せずに、しばらくいつでもやったことを覗けるように残しておくのがいいと思います。


#### 段階レベル
- とりあえずプログラミングってものを知る
- プログラミング特有の概念を知る
- webならこういう言語、モバイルアプリならこんな言語、みたいにざっくりジャンルを知る
-  だいたい共通で使う書き方、文法等を知る
- フォーカスしたい言語に出会えたら吉


# 1-2. とりあえずなんか作る
大体の概念を掴んで、プログラミングってこんな感じなんだなぁと大雑把に理解できたら、まずなんでもいいので作ってみましょう。
●●を作る、などの動画やテキスト講座などいろいろありますが、私はYoutubeでとりあえず一つ作ってみました。


## Stopwatch等の簡単なアプリ作成に挑戦
https://www.youtube.com/watch?v=82SXeAmZwk8&list=PLKr_KOg0_vqTafzbiH7Je3G0T3iT8c1mJ&index=3&t=2s


作れって言われても何を、、、って感じだと思うので、私はとりあずストップウォッチやタイマーを作ってみました。
こちらのリンクは私が作ってみたものです。他にもYoutubeで検索すると一緒に進めるタイプの動画がいろいろ上がっているので、自分でチョイスしてもいいでしょう。
このくらいの規模のものを一つ作れば、上記のような学習サイトで学んだ知識を試せるので是非やってみてください。
一個小さいアプリでもなんでも、自分で作って実際にiPhoneに入れて動かしてみると感動します。これであなたも`自称iOS developer`です。


## クソアプリプロジェクト
<img width="400" alt="Screen Shot 2019-08-18 at 23.36.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274090/d35b0027-128b-d3cd-cdff-ff37f398d62e.png">

アプリ開発ってこんな感じなんだぁと感じるのはここまでで、次からは`Swift`の技術面にフォーカスする段階に入っていきます。
私は`Swift`しかり`UIKit`にまずは慣れるために、以下の先人の記事を参考にして**いいねの数だけクソアプリ作る**という**クソアプリプロジェクト**を発動しました。


参考
https://yukisako.github.io/event.html
https://github.com/57shota/00_Intro


`Twitter`や`Instagram`、`Facebook`等でいいねを募集し、その数だけクソなアプリを作りまくるというもの。これで一通り`UIKit`を試しました。
詳細は上記リンク、プロジェクトの`readme.md`に記載していますが、フォーカスした内容としては


- 一つに対して時間もしっかり設ける
- クオリティは気にしない、気にしてはいけない、数をこなすが目的
- 作成した物のアウトプットをそれぞれSNSで行う


いいねをSNSで募集することによって知人友人へ周知し、自分に「人に大きな宣言をしてしまった、、、」というプレッシャーをかけます。
効率の面でもメンツの部分でもいい緊張感が出るので、何かをやるときに人に宣言するというの良きことかと思います。

ここでの3条件の意味は

１ はダラダラしないようにするため。納期という実際のような緊張感を与えるため。
２ はかっこいいものを作る目的ではなく手を動かすことが目的。一つ一つのテーマに基づいて最小限の実装。
３　は一連の行動の締め作業という意味合いもありますが、自分を発信する練習、掲げた宣言を守っているという証明をするため。

です。完璧なものしか他人に見せられないのは日本人のある種欠点だと思っています。それを待っていたら一体いつになるんでしょうか。

あと、別にプログラミング関連だからといってアウトプットする媒体を厳選する必要もないと思います。レビューを求めているのなら相応の場所でいいですが、目的は**他人の意見をもらう事ではなく、自分に緊張感のある環境で任務を遂行していることとその責任を認識させるため**だったからです。なのでInstagramでもfacebookでも一番みられそうな場所を選べばいいと思います。

ちょっと矛盾してるかもしれませんが、それをみていいねををもらうとか、他人にみられてるかとか、SNS上の友人がどう思うとか正直どうでもいいです。戦う相手は自分自身なので、設けた期間に目的を達成したければ羞恥心でもなんでも活用したる、といった感じでやってました。タグとか英語で沢山つけて世界中に恥を晒してください。
ともあれ、状況目的は人それぞれなので参考まで。

今思えばただのドMでした。良かったですが。

#### 1-2 まとめ
この段階では、特定言語にフォーカスしてその言語に慣れるフェーズです。今でさえまだまだですが、やはり手をたくさん動かさないと浸み込みません。
私は自分に設けた時間があまりなかったので、できるだけプレッシャーをかけることでタイムマネジメントに注力しました。
どうやろうが人それぞれですが、私はこのプロジェクトを立ち上げて良かったです。
以下で説明しますが、途中で中規模アプリを作成できるくらいにはなったので、そこでプロジェクトは一旦休止しました。


#### 段階レベル
- `Xcode` / `Swift` に慣れる
- `UIKit`という`Swift`マストライブラリに慣れる
- **アプリ感**を掴む
- 基本的な文法の使い所に慣れる
- ググり力が上がってくる ←これ重要　[#5](https://qiita.com/57shota/items/52b6238442d83cb2f13d)へどうぞ


# 1-3. 個人アプリをリリースしてみる
こういうのをやってると、ちょっとずつ自身がついてきます。そして出来る事が増えてプログラミングって楽しい！って思い始めます。
クソも積もれば山となる、というコトワザがあるくらいですから、１０個も積めば一つくらい自分で考えて作ってみようと思い始めます。


そこで私は`クソアプリプロジェクト`中間のまとめとして、そこまでで学んだ知識の集大成として2つアプリを作ってみました。


## 自作Timerアプリ

<img width="350" alt="Screen Shot 2019-08-18 at 23.44.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274090/99ecb964-bb40-d074-045e-04f4deb27e6d.png">


ちょうど筋トレにハマっていたこともあり、インターバルの間にマッチョの写真を見てモチベーションあげたいなと思っていたのでそれを実現するアプリを一つ作成してリリースしました。

どんなアプリであろうと、自分で作成したアプリは愛着もわきますしポートフォリオにも記載できます。未経験から希望ポジションに入ろうとしているわけなので何かしら見せるものがあったほうがいいです。
この段階ではUI、UX、そして今後のアプリの運用というものまで深く考慮していませんでした。というか、そんな単語自体あまり理解していませんでした。その時点での持っている知識はできるだけ使用しましたが、改善点はたくさんあったと思います。ですが高クオリティのものなど一発目でそうそう作れるものではありませんし、こんなの恥ずかしくて見せられないよぉと思うかもしれませんが、リリースしてみるのもいいかもしれません。

そんな一瞬の恥を耐えれば、のちにポートフォリオが少し華やかになります。


もしリリースしたい人は、アプリは世界の人がダウンロードする可能性があるのでこれからどう運用していくか、などしっかり考えてみるのもいいかもしれませんね。


## 自作単語アプリ

<img width="210" alt="Screen Shot 2019-08-18 at 23.50.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274090/13b2c162-f0cb-6c5d-1c8f-5e389653ffab.png">


間をあまり空けずに、二つ目のアプリ制作に取り組みました。英語の勉強をしているので、他のことをしてる時も覚えたい単語を定期的に通知して触れる回数を増やしてくれるアプリです。エビングハウスの忘却曲線というものに人間の記憶定着は基づいているので、他のことをしている間でも覚えたい英単語に触れる機会を増やすために作成しました。

現在諸々アップデート中ですが、作成目的はあくまで勉強でリリースはついでです。この段階で自分の欲だけでなくユーザーのことも考えられるのであればきっと将来有望でしょう。デザイン自分が使いたくなるように作りました。
単語検索や品詞のソートなど、リストではよく用いられるアイテムを使えたので勉強になりました。


#### 備考
デザインの作成に関しては　[#4](https://qiita.com/57shota/items/b32b4a462d048e69ed32) へどうぞ


## リリースに関して
リリースするとなると多少費用がかかります。Appleの**Developer Program**というものに登録しなければならず、**約10000円/年**でかかります。
ここからはそこそこお金がかかってきますので、リリースに関しては個人の自由です。これを高いと思うか安いと思うからそれぞれの状況、環境によると思います。

私の場合は、ポートフォリオ充実させたいし、俺お酒飲まんし普通の人が３回飲みに行く分ここに費やすことしよって思い込ませて登録しました笑


リリースまでのフローは以下を参考にしました。
http://examination-03.hatenablog.com/
https://i-app-tec.com/ios/app-release.html
https://dev.classmethod.jp/smartphone/iphone/ios-app-how-to-release-2018/#appleid


#### 1-3 まとめ
一つでもアプリをリリースしてみると、当たり前ですがiOSアプリをリリースする流れや必要なものがざっとわかります。調べるだけで理解できることもありますが、一度経験するだけまた何か違うと思います。

そして、`AutoLayout`などのレイアウト設定にだいぶここで慣れると思います。ゴリゴリUIを設定するのは現場に入ってもなかなか無いと思うので、あえてぐちゃぐちゃなデザインを作って色々な機能に触れるのもアリかと思います笑
あとなんといっても、自分で作ったもの自分で使うというの気分がいいものです。友人らに教えてレビューもらうのも良いでしょう。そしてそれが自分のポートフォリオを飾るものとなると、やってみても良いんじゃないでしょうか。
もし購入・広告収入が入る規模になっちゃったら、起業でもしてください（嘘です）。


#### 段階レベル
- 個人でアプリがリリースできる
- アイデアを具現化する力がちょっとつく
- `UIKit`を使用した応用ができ始める
- `AutoLayout`の知識が付き始める
- コーディングにも慣れ始める
- git管理をちょっとやり始める　← [#3](https://qiita.com/57shota/items/63573de6186fcaa52584) へどうぞ
- 広告収入の知識がちょっとつく　← [#5](https://qiita.com/57shota/items/52b6238442d83cb2f13d) へどうぞ


# ＃1まとめ
どうでしょうか。ここまでやれば自称iOSディベロッパーを名乗れるかと思います。
そもそもMacを持ってない人は購入から始めないといけなかったり費用がかかるところもありますが、手元にものがあれば案外アプリ開発は時間さえ作ればできたりします。興味があるからやってみたいという人は、**1-1**だけやってみるのもアリかもしれません。

ここまでのフェーズで私が思う絶対やっておいたほうがいい関連部分は

- **インターネット接続が必要なものを作る**
    - **ネットワークを通して、データのやり取りがどうなっているか学ぶ**
    - **APIの操作を行い、JSON形式（またはXML）ファイルの操作を行う**
- **何かしらのアプリデータをどこかに保存する仕組みを採用する**
    - **アプリに保存するのか、外部に保存するのか**

です。
現場では、自分の端末だけで完結するものはほぼ作らないと思ってください。故に、`Swift`でコードが書ける！と同等にインターネット上でのデータのやり取りが分かっている方が色々助かります。。

**だいたい入社の技術試験ではAPIを使用したサンプルアプリ作成をお願いされますからね。**
※転職時にいくつか受けた技術課題もだいたいAPIを使用したアプリ作成でした

続いて、それらをサポートしてくれる多様なライブラリ・設計というものを知る技術力向上フェーズに入ります。


次　→ [#2 未経験→iOSエンジニアの道のり-ライブラリと設計](https://qiita.com/57shota/items/6cb8ef6bb466901e53c7)