元料理人の僕がiOSアプリを作るまで（後半）

[全編](https://qiita.com/taro-ken/items/6d1bbf8a59a6746cd9f1)の続きです。

#【プログラミング言語に出会う】
そして現社に入社。　業務内容は
・アフェリエイト記事の作成・運用
・運用に関する効果改善・仮説検証
・ランディングページの構成作成
・CR作成

Web広告に関する業務なので、とにかくユーザーに刺さる・心を動かすことを意識し
リサーチやペルソナ選定を重要視しています。

そして、プログラミング言語に出会うキッカケは
業務でWordPressをカスタマイズする作業でした。

記事の離脱防止ポップアップ実装や外観変更を行えば
もっと効果が上がるのでは？と思い、WordPressを使用していたので
内部のことを調べてみました。

そこでプログラミング言語（HTML、CSS、JavaScript、PHP）と出会います。

「サイトはこういうコードで出来てるのか」
「ここを変えると、デザインがこう変わるのか」

と、けっこう衝撃を受けました。

そこから自分で調べつつ、ワードプレスをカスタマイズしていき
結果として記事のCVRを上げることに成功。

一方、個人的に「他にはどんな言語があるんだろう？」と興味が湧き出ました。

調べている最中にswiftと出逢います。


#【Swiftに出会う】
「swiftはiPhoneのアプリを作れる」ことを知り、
Macもあるし、iPhoneも持ってるから触ってみよう！とxcodeをダウンロード。

Storyboardにスマホ画面が現れ、UI部品を乗せてコードをつけられる体験が衝撃でした。

「これはWebの言語より自分に合っているかも…」と直感的に感じ、
「本気でアプリを作りたい！」とエンジニアを目指すきっかけになりました。

そして、まずは何か簡単なサンプルアプリを作ろうと思い、下記参考書を購入↓

![スクリーンショット-2022-01-29-22.12.36.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1112697/5034c350-715d-839d-cb4b-b646f5aea188.jpeg)


この中に書いてあるアプリのコードを模写し、実際に動きを確認しました。

この時の感動はとてつもなかったです…

「こんなコードでiPhoneのアプリは動いているのか…」と
アプリケーションというものに対して一気に愛着が沸き上がる感覚。

ただ当時は動きがわかっただけで、ここが何をしているのかなどは理解できていません。

#【書籍を購入して学習】

その後は基礎的な本を買ってみようと思い、下記を購入。

![スクリーンショット-2022-01-29-22.18.06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1112697/217fa795-7945-7d52-a0b7-90f7c5de7ef0.jpeg)

最初購入した本と違い、字がズラーっと並んでいる・・（こちらのほうが本質ですが笑）

読み進めていくも、読み終わるころにはちょっと？？？が浮かんでいました。

2.3週読んである程度理解したのですが、
「このコードはこういう状況で使う」ということがイメージしにくく
やはり自分でアプリを作りながら覚えるほうがいいなと感じ、アプリ制作を開始。

趣味が筋トレということもあって、筋トレ系のアプリを作成開始するも…

・本に書いてあることをどう使えばいいか分からない
・どう実装するのが正解か分からない
・ネットで調べても全ての情報が出てこない

のような状況に陥っていました。

#【講師の方と出会う】
ツイッターを見ていたある日、IOSエンジニアを目指して転職活動している方を見つけました。
どうやって勉強しているか気になったので、ストレートに聞いてみると”現役エンジニアの人に講師をしてもらっている”とのこと。

すぐにその方を紹介してもらい、お金を払いながら講師をしてもらうことに。

今まで習った内容は

```
・Storyboardの基礎
・uistackview
・containerview
・ライブラリ管理（cocoapods、SwiftPackageManager）
・ライブラリ（alamofire、snapkit、lottie-ios等）
・uiviewcontroller
・uitabbarcontroller
・uinavigationcontroller
・uilabel,uibutton,uiimageview
・uitableview
・uiscrollview
・uicollectionview
・コードで画面遷移
・アーキテクチャ（MVC、MVP、MVVM）
・OAuth2.0
・protocol(delegate)
・クロージャー
・配列操作
・git
```

など、色々教えていただきました。


特にクロージャーや配列操作関数は理解が難しかった為
何度もplaygroundで動作を確認して理解を深めました。


###【挫折しつつも、1個目のアプリリリース】
そして、最初にストアに出すアプリはシンプルなToDoアプリにすることに決定。

理由は「とにかくストアに1つ出す」ことが大事だと思ったので、
まずはリリースすることを目標にし、２個目で自分のエッセンスを入れたアプリを作ることにしました。

そしてコードレビューも受けつつ、試行錯誤しながらなんとか完成。

#【リジェクトをくらう】
申請後、すぐに返信が。

リジェクトをされました…

理由を調べてみると、
「サインイン機能を使用してはいけない」との内容が。

SNS系などのアプリを除いて、最初からサインインを求めてはいけず
サインインなしでもある程度使えるようにしておくことが必須らしいです。

タイミングや審査する人によって、通過する場合もあると書いてあったので
念の為もう一度審査に出してみたが再度リジェクト。
なので起動時に仮ログインさせてから、本登録という仕様に変更しました。

そして再度審査に出したところ、無事通りました。

![IMG_7068.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1112697/734a28c9-8c06-4267-f64d-6a5b4a07c01f.jpeg)
https://apps.apple.com/jp/app/want-to-do/id1593204763

データベースはFirebaseを使用。
理由はサインイン、アナリティクス、クラッシュログなどが手軽に使えるという点で選びました。

そして、とにかくシンプルなToDoリストに。

#【すかさず2個目のアプリ作成を開始】

まずは1つ目のアプリを出せたので、次のアプリは趣味の筋トレに関連するものを作りたいと思い
カレンダーに記録する形式のアプリを作成しはじめました。


ここで悩んだのが、カレンダーを自前で作るorライブラリを使用

講師の方から「UI系のライブラリを最初から使うと、カスタマイズが大変で柔軟にできない」と言われていたので、まずはcollectionviewで自前カレンダーを実装してみることに。

![スクリーンショット-2022-01-30-11.06.51.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1112697/240a15e3-6988-7046-20e8-ea49d9b1185a.jpeg)
https://github.com/taro-ken/OriginalCalendarSample.git

Googleカレンダーのような見た目を目指して試行錯誤し
一応表示はできたものの、正直かなり微妙でした。

そこで、「あれ、カレンダーでなにしたいんだっけ？」と再考。

カレンダー日に保存したデータをTableViewで表示し、
その中のトレーニング項目だけカレンダーのLabelに反映させることをしたかったので
「これくらいならライブラリでもいけるんでは・・」と思いつく。

使い勝手の良さそうなFScalendarを使用してみることにしました。

#【自分で使いたいアプリが完成】

FScalendarを導入してから、サクサクと実装が進んでいく。

取り入れたかった機能は↓
・トレーニングした内容を日付の下（Labe）に表示
・体重の変化をグラフにする（1週間、1ヶ月）
・楽天レシピAPIを叩いてレシピを持ってくる
・PFCバランス（三大栄養素とカロリー）の計算機能

自分自身トレーニングと食事管理をしているので
その過程で使えるようなもの　、プラスαで他のユーザーが使いやすく継続できるようなアプリにしたいと思っていました。

データベースは1個目のアプリと同様、Firebaseを使用

#【苦労した点】

実装にあたり、特に手こずったのは

・ChartのLineChaetViewをつかったグラフ表示
・グラフをSegmentControlで切り替えする際の、Firestoreデータクエリ取得
・楽天レシピAPIで、Jsonを受け取るモデルの型作成
・PFCバランス計算のメソッド作成、配列操作

分からない箇所は自力で考え調べ、どうしても煮詰まったら講師の方に聞くようにしていました。

そしてなんとか実装は完了。


ストアに出す際のスクリーンショットは、現職でマーケティング関連の仕事をしているので
マーケ要素を入れてみました。

![56インチ1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1112697/f78644f4-850d-4ab6-25b8-868695c514ee.jpeg)


・横長タイプをチョイス
・見やすく、直感で分かりやすく
・色は優しい色（緑）を使用し、色使いはシンプルな色使いに不快にさせない
・ベネフィットではなく、何ができるか・どんな機能があるかを説明
・使い方はユーザー次第

上記を軸に作成しました。
Photoshopを使用して作成。


スクショ作成にあたり、この記事がとても参考になりました↓
https://moduleapps.com/mobile-marketing/16860rpt/
https://developers.cyberagent.co.jp/blog/archives/9194/


自分がストアでアプリを選ぶ視点から見ても、その通りだな・・と実感。
技術はもちろん、マーケ視点からも見れるエンジニアになりたいと思いました。

#【おわりに】
現在アプリ申請中で、無事通ることを祈っています。

結論、なぜiOSエンジニアになりたいかというと
プログラムを使用してiPhoneアプリを開発に参加し、クライアントやユーザーの役に立つことで社会に貢献したいと思っているからです。

そしてなによりも”なにかを作ること”が好きなので
最終的にプログラミングに行き着きました。

技術で勝負し、社会に貢献できるエンジニアを目指して日々努力していきたいと思います。

長い文章をここまで読んでいただきありがとうございました！