新卒でSIerに入社したらiOSエンジニアになった話

こんにちは。 
 
入社して既に11ヶ月が過ぎ、もうすぐ後輩が出来るということにビビり散らかしています。 
そんな私がiOSエンジニアを1年間経験してみて学んだことを発信できたらなと思い、この記事を書いています。 
それでは、いってみよう！！！ 

## ■想定読者

- 今学生でこれからweb系エンジニアとして働くという人
- これからiOS開発を始めるという人
- iOS開発に興味があるという人
- シンプルにこういった記事が好きな人

>※この記事はiOS開発歴8ヶ月ほどの新卒社会人が書いています。ベテランさんから見たら、粗が見えるかもしれませんがご容赦ください。

## ■この記事で学べること 

- iOSアプリ開発に必要なもの（Xcode、Swift）とその特徴 
- 私が使用したオススメ書籍 
- 開発業務に携わってみて感じたこと 

## ■筆者スペック

- 私立大学の情報系学科卒
- プログラミングは大学から勉強
- （一応は）使用したことのある言語はこんな感じ
    - C++（がっつり）
    - MATLAB（がっつり）
    - Java（多少かじった程度）
    - Python（Javaと同程度）
- 資格は普通運転免許のみ（AT）

要は可もなく不可もなくの理系大学生でした。
就活中もIT系に絞っていたわけではなく、たまたま一番最初に内定をいただいた会社が今の会社だったので、ご縁ということでそのまま入社した次第です。
 

## ■iOSエンジニアになった経緯 

弊社はいわゆるSIビジネスがほとんどなんですね。
（詳しい仕事は下のリンクから参考にしてください）

そんな中、2019年から自社サービスとしてiOSアプリを開発しよう！ということになりました。 
そこで、2020年度に入社してきた私に白羽の矢が立ち、iOSエンジニアになったというわけです。 


## ■iOSエンジニアになってから 

そりゃもう大変でした。私は大学時代、業界の知識は全くなかったんですけど、そこそこプログラミングに触れていたので、何とかなるかなと淡い期待を抱いて入社したわけです。
 
どんな言語使うのかな〜なんて思っていたら、 

 

#### ん？Swift？IDE（統合開発環境）はXcode？ 



未知との遭遇に戸惑いを隠せませんでした。 
しかも私は、開発経験も知識も無くて、ウォーターフォールとアジャイルの違いもわからないような新人だったんですよ。未経験者に毛が生えた程度です。

そんな状態で、ここから私の怒涛のiOSエンジニアとしての開発ライフがスタートしていくわけです。
まず、当然学んだものはSwift、Xcodeですね。これがわからないと話になりません。

## Swift：iOSアプリを開発できるプログラミング言語
さて、Swiftとはどんな言語なのか。簡単に説明するとこのような感じです。 

### メリット 
- Apple社が開発したiOSアプリを開発できるプログラミング言語 
- モダンなプログラミング言語
    - コードがシンプルで読みやすく、書きやすい
-  高速化
    -  処理速度はPythonの約8.4倍
-  安定性 
    -  プログラマーが気をつけなくても、不具合やバグが起きる可能性があるコードを見つけ出し、NGを表示してくれる 

 
 

そう、何といっても使いやすいんです。 
モダンな言語というと、最近はRubyやPythonなんかもそう言われていますね。 
文法的に間違っているところや怪しいところも適宜知らせてくれるので安心ですね。 
なので、初学者でもとっつきやすい言語かなと個人的には感じています。 

### デメリット 
- Appleが開発した言語であるため、日本語ドキュメントが少ない 
- Apple製品向けに特化している（今のところ） 

 
 

現状、上記2点でしょうか。特に英語弱者の私にとっては、日本語ドキュメントが少ないのはなかなか大変です。実際に調べていくと、英語の記事の方が引っ掛かるなんてこともよくあります。 
ただ現在は、日本人の方でも数多くの方がiOS開発をされているので、それこそQiitaには沢山の先人の知恵が書かれています。
 

## Xcode：Mac、iPhone、iPad向けのアプリケーション開発に特化した開発ツール 

続きまして、Xcodeの説明です。 

XcodeはAppStoreから無料でインストールできます。サイズが5GBほどあるため、インストールには時間がかかります。 
Xcodeのインストールは[こちら](https://apps.apple.com/jp/app/xcode/id497799835?mt=12)から。 
 
Xcodeの特徴はこのような感じです。 
 
- テキストエディタ 
- インターフェースの作成 
- デバッグ 
- ビルド 
- テスト 
- シュミレータ 
- ソース管理 
 

こんな感じでしょうか。IDEといわれる通り、開発にまつわる数多くのツールが含まれています。 
その中でも特に、Xcodeの特徴といえば、インターフェースの作成、ではないでしょうか。 
iPhoneやiPadに表示する画面を作成することが出来ます。 

以下にXcodeの開発画像を載せてます。 
画像左側は、StoryBoardと呼ばれるiPhone、iPadのUIを作成する画面、画面右側はその画面に対応する処理を書いたテキストエディタです。 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653537/0d796394-31a7-8490-326d-22c9557b48c6.png)
> ※画像のプロダクトはAWS Amplifyというもののハンズオンで試しに書いてみたものなので、開発中のアプリとは関係ありません。

なんか、一気にiOSアプリを開発している感が出ますよね。スタバで何とかフラペチーノを飲みながらmacでこの画面を開いておけばドヤれること間違いなしです。（小物感） 

 
さらに細かいXcodeの機能などはここでは割愛させていただきます。 
このSwiftとXcodeを駆使してiOSアプリを開発していくことになります。 

 
 

## ■実際に開発業務に取り掛かってみて苦労したこと 
### ●新しい言語を習得するということ 

弊社で新たに自社サービスを展開しようということで始まったiOSアプリ開発。私自身、iOS開発はもちろん、開発業務自体も初めての経験でした。そのため、わからない部分が出てきたらQiitaで調べてみたり、Udemyの授業を購入して受講したりしました。 
いくら初学者にとっつきやすいとはいっても、それはあくまで言語間での話であって、ある一定以上のハードルがあるのは確かです。

書籍も購入してひたすら勉強しました。ちなみに、私が使用した書籍を貼っておくので参考までにどうぞ。 

- [たった2日でマスターするiPhoneアプリ開発集中講座 Xcode 11 Swift 5対応  ](https://www.amazon.co.jp/%E3%81%9F%E3%81%A3%E3%81%9F2%E6%97%A5%E3%81%A7%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E3%81%99%E3%82%8BiPhone%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E9%9B%86%E4%B8%AD%E8%AC%9B%E5%BA%A7-Xcode-11-Swift-5%E5%AF%BE%E5%BF%9C/dp/4802612362)
- [詳解 Swift 第5版](https://www.amazon.co.jp/%E8%A9%B3%E8%A7%A3-Swift-%E7%AC%AC5%E7%89%88-%E8%8D%BB%E5%8E%9F-%E5%89%9B%E5%BF%97-ebook/dp/B081GK7636/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E8%A9%B3%E8%A7%A3+Swift+%E7%AC%AC5%E7%89%88&qid=1615285514&s=books&sr=1-1)
- [よくわかるAuto Layout iOSレスポンシブデザインをマスター](https://www.amazon.co.jp/%E3%82%88%E3%81%8F%E3%82%8F%E3%81%8B%E3%82%8BAuto-Layout-iOS%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B7%E3%83%96%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%82%92%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC-%E5%B7%9D%E9%82%89-%E9%9B%84%E4%BB%8B/dp/4865940324/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E3%82%88%E3%81%8F%E3%82%8F%E3%81%8B%E3%82%8BAuto+Layout+iOS%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B7%E3%83%96%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%82%92%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC&qid=1615285549&s=books&sr=1-1)
- [iOSアプリ設計パターン入門](https://peaks.cc/books/iOS_architecture)
　※こちらは2020年12月現在、peaksのみでの販売となります。（筆者調べ） 
- [iOSアプリ開発 自動テストの教科書](https://www.amazon.co.jp/iOS%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E8%87%AA%E5%8B%95%E3%83%86%E3%82%B9%E3%83%88%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8%E3%80%9CXCTest%E3%81%AB%E3%82%88%E3%82%8B%E5%8D%98%E4%BD%93%E3%83%86%E3%82%B9%E3%83%88%E3%83%BBUI%E3%83%86%E3%82%B9%E3%83%88%E3%81%8B%E3%82%89%E3%80%81CI-CD%E3%80%81%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%8A%80%E8%A1%93%E3%81%BE%E3%81%A7-%E5%B9%B3%E7%94%B0-%E6%95%8F%E4%B9%8B/dp/4297106299)

iOSアプリなのでAppleが提供するiOSのバージョンにも依存していきます。最近ではiOS14になりましたね。iOSが更新される度、iOSエンジニアとしてはどのような変更があったのかを確認し、対応していかなくてはいけません。 
とりあえず私は、そもそものiOSエンジニアとしての根本を叩き込もうと思い、書籍で購入しました。


それに付随して、SwiftやXcodeもバージョンアップしていくので、QiitaやUdemyなんかも1年以上前の記事だと参考にならなかったりします。概念的なものなら学習可能ですが、やはり投稿時期が一年未満の記事を参考にする方が良いでしょう。

そういった時代の変化についていくのもなかなか大変です。 

 
### ●”動けば良い”という考えではダメ 

学生時代のプログラミングとの一番の違いはここでした。
これ、当たり前だろという方もいらっしゃると思います。 
ただ、大学生時代の私に設計なんて概念はなく、テストも何パターンか試して動けば良いという感覚でコーディングをしていました。 
しかし、開発をしていく上でデグレやリーダブルコードを書いていくために、もぐらたたきのようなコーディングでは全然ダメでした。 

現在は一人で開発をしていますが、これから複数人での開発を行うかもしれません。その際に、いかに開発、修正しやすいコーディングができるか、リーダブルなコードをかけるかは大学生時代には意識していなかった大きな変化かもしれませんね。 

設計やテストは知識も技術もまだまだですが、きちんとサービスとして売り出すシステムなので、身につけていきたいと思います。
 

## ■最後に 

いかがだったでしょうか。
今回は、1年間エンジニアをしてみての思いをただひたすらに書いてみました。

ちなみに現在作成しているアプリは所謂α版ということで、まだまだ機能も不十分です。
2022年秋に正式版をリリース出来るよう日々開発をしています。いつか、皆さんに知れ渡るようなアプリを届けられるよう頑張ります。 

共感してくれた方や、これからiOSエンジニアを目指してみようという人の役に立てたのなら幸いです。
 

それでは。