実務未経験からiOSエンジニアへ

2020年10月からフラー株式会社に入社して約３ヶ月になります。
念願だったiOSアプリ開発に携わっています。

iOS開発に関するチャレンジングな知見はまだ持ち合わせていないこともあり、
今回は、個人開発した時を振り返ってみて、iOS開発に興味を持っている方や、iOSアプリを仕事としてやっていきたいという方向けに意識して書きました。

**本記事は技術的観点というより、就業するまでどんな行動をしたのかという点に重きを置いています。**
最初は身の上話が続くので、アプリ開発については「[取り組んだこと](#取り組んだこと)」に飛んでいただければと思います。

#わたし
情報系専門学校卒
約10年、COBOLやJavaで業務システムを開発・保守とか、医療システムの保守をしたり。

#きっかけ
４,５年前に、Swift、モダン。お、かっこよさそう。アプリ作れたら楽しいだろうな。
きっかけはこんな感じでした。
ずっとAndroidユーザーでしたが、Appleの統合された美しさによろめいていた時期でした。

何事も形から入りたかったので、
まずは、無印Macbook（スペック盛り盛り）を購入しました。

#仕事の傍ら作る → 中断
仕事の傍らだけど、どうせ作るなら、「自分が使ってみたい」「世に出ていない」アプリを作ろう。
宇宙・ロケットが好きなので、思いついたのがISS（国際宇宙ステーション）の現在位置とライブ映像を閲覧できるというアプリでした。

###作る
そして、次の機能なら簡単に作れるやろ精神でいました。
・画面上半分にマップを表示
・ISSの現在位置を「どこか」から取得してマップに表示
・ISSが現在位置に近づいたら通知
・画面下半分にUSTREAM（今はもうない）から引っ張ってきたISSのライブストリーミングを表示
画面は一つだけなのでシンプルです。

ただ、「ISSの現在位置をどこかから取得」が曲者でした。
現在位置が取得できるライブラリはあるにはあったのですが、
http://www.zeptomoby.com/satellites/
C++で書かれており、swiftから呼ぶ方法も分からずちんぷんかんぷんです。
そもそもISSの現在位置を知って喜ぶ物好きなんていないよなと調べていくと、

国際宇宙ステーション(ISS)の座標を取得するAPIを作ろう
http://tsujimotter.info/2013/01/02/iss-api/

＞宇宙に対する興味は専門家だけのものではないはずです！！

本当にその通りです。救いの神が現れました。ISSの座標位置をJSONで出力してくれていたのです。
早速作者に連絡を取り、念の為使用許可を得ます。

###中断
マップにピンを立ててリアルタイムに動かせた！ライブ配信も見れる！
次はマップにISSの軌道を描いてISSが半径約500km以内に接近したら通知実装。
難しい…、あれ、うん。分からん。難しい。
仕事の忙しさからISSアプリの開発を中断し忘れてしまいます。

#再燃
アプリ開発を忘れて数年後、ある本に出会ってから、人生観が劇的に変わってしまいました。
（あるんですねこういう事って）
情熱が湧き上がる。

#iOSエンジニアへの道
同じIT業界とは言え、三十代で畑違いも甚だしいし、厳しい事を覚悟で、どうすれば転職できるかと考えた時に真っ先に浮かんだことは、
「アプリを自作してリリースしてアピールするしかない」
時間はかかるが、これが一番の方法だと思いました。

私はズボラなので、前述の中断の経験から、仕事の傍らでやっていたらアプリは絶対完成しないと悟り、
仕事を辞めてアプリ開発に集中することにしました。この頃のテンションは上がりっぱなしでした。
（ただ、仕事を辞めるという方法はあまりオススメしません…）

スクール等で教わりながら作る方法もありますが、あまりお金を使いたくなかったのと、
**一応**エンジニアで開発経験もあるので、これは一人でいけるやろ精神でいきました。
なので、退職して早速取り掛かる。

開発期間はSwiftの学習を含めると約１年程。

#場所
家にいると色々誘惑があり作れないと悟っていたので、無印Macbookを片手にほぼ毎日スタバに通う。
時には図書館、コメダ珈琲。
月〜金は仕事するかのごとく朝家を出て10:00〜17:00くらいやってました。（ある程度メリハリをつける）

#取り組んだこと
####どんなアプリを作るか。
まずは、自分が使ってみたいと思うアプリを目指しました。
以前中断したISSアプリを再開しようと思いましたが、初心者には難易度が高いと感じたため眠らせました。
先述のように、私は**宇宙・ロケットには目がない**ので、「ロケットの打ち上げを通知してくれるアプリ」を作ることにしました。

青写真
- 全世界の打ち上げ予定のロケット情報を表示
- 打ち上げ前にiPhoneに通知
- Youtubeにリンクさせて打ち上げライブを表示
- 過去の打ち上げ情報が確認できる（50年代～現在までの打ち上げ情報）

ただ、機能が単純だと、ストアリリースの審査でアップル様にリジェクトされてしまうことを事前に知っていたので、
ストアに出せない単純アプリはあまり有効ではないと考え、転職ということを見据えながら、
**以下のポイント**を踏まえて作りました。

- 画面は最低でも４～６個作る
  - タブを利用して画面遷移させる。
  - 画面は、「打ち上げ予定画面（メイン）」 「過去の打ち上げ一覧画面（検索機能）」 「お気に入り一覧画面」 「設定画面」 「ロケット詳細画面（通知のオン・オフ、Youtubeへのリンク）」 「課金画面」
- サーバーを利用する（通信）
  - サーバーを立てる力はありません。幸いにも**無類のロケット好きの同志**たちが公開しているAPIがあるので、打ち上げ情報をJSON形式でいただきました。
  - Launch Library https://launchlibrary.net/
- 検索機能
  - 受け取った情報をただ表示するのは味気ないので、過去の打ち上げ情報の条件（打ち上げ年月・宇宙機関・ロケットの種類）を指定して検索できるようにする。
- データ保存機能（お気に入り登録）
  - Realm・UserDefaultsを利用して過去の打ち上げ情報や設定情報を保存。
- 通知機能
  - 打ち上げ直前にiPhoneに通知。
- 設定機能
  - 通知時間の設定ができるようにする。（打ち上げ５分前〜60分前の間）
- 課金機能
  - 収益目的は全くないが、実装したかった。（SwiftyStoreKit）
- ウィジェット機能
  - 打ち上げ情報をカウントダウン表示。これはクール。
- デザインを作る（アプリアイコン、アプリ内アイコン、アプリストア用画像など）
  - ド素人なりに作る（ProCreateというアプリを使ってデザインを作る。）
- 一人だけどGithubを使ってみる
  - ソース管理をほぼ使ったことがなかったが、リポジトリを作ってPUSHするくらいはやってみる
- 全部オレ一人で作ったんだぞアピール

###開発の大まかな流れ （あくまでアプリ素人が作った方法です）
####モックを作る
POP
アプリの全体像を見るために、画面をノートに手書きして、「POP」というアプリを使って画面遷移してイメージを掴みました。
https://apps.apple.com/jp/app/pop-prototyping-on-paper/id555647796

Keynote
ペンでノートに画面を書いてPOPで確認するのはよかったのですが、
色までは付けられなかったので いい方法がないか調べてました。
そこで、Keynoteで画面を作成してPOPのように画面を遷移する方法を取りました。
この方法はアップルストアのToday at Appleで教えていただきました。（アップル店員さんに感謝感謝です）

####デザイン
実は開発で一番楽しかったかもしれません。
デザインは何十種類と作り、あーでもないこーでもないと、自分で取捨選択していきました。
モックを作り、画面のデザイン・配色・アプリアイコン・アプリ内のアイコンを作る。
当時、Figmaというすごいツールの存在を知らなかったので、Procreateというアプリを使ってデザインを作りました。
Procreate https://apps.apple.com/jp/app/procreate/id425073498
（もちろんフリー素材を利用したりプロに発注することも全然ありだと思います。）

####ネット・技術本をフル活用して開発を進める
設計パターンを利用する方法が保守性・可読性の観点から最適だと思いますが、すぐに理解できる能力もなく、
時間に限りがあり、学習に時間を取られ挫折する恐れがあったので、「設計パターンとかそういうのは無視」と、割り切って開発を進めました。

#####とにかく調べまくる
大抵の情報はネットに載っているので、つまずいた所や分からない所は、とにかく検索しまくりました。
（ネットがなかったら完成しなかった…）
とりわけ私が大変大変お世話になった本は、「絶対に挫折しない iPhoneアプリ開発「超」入門」という本です。
分かりやすく、タイトルに偽りなしでした。神です。
プログラムとは～Swiftの基本的な考え方から、xcodeの各項目の説明、テーブルビューなどの基本的な作り方が手順で示されています。

「絶対に挫折しない iPhoneアプリ開発「超」入門」
www.amazon.co.jp/dp/4815604622
（余談：あまりにも参考になったので、著者に連絡をとり、他にもiOS開発でオススメの本や情報はないかとお聞きして、
「try! Swift」というコミュニティがあることを知り、2019年に参加しました。正直講義の内容はちんぷんかんぷんでしたが、海外の方と知り合いになれたので良い経験になりました。）

Swiftの文法でお世話になった本
「Swift実践入門」
www.amazon.co.jp/dp/4297112132

####モチベーションの継続と気合い
ありきたりですが、作ることの「面白さ」「楽しさ」がモチベーション維持に繋がりました。
コードで書いたものが画面になって表示されて動作したときの達成感はひとしおです。
特に個人開発はこれに尽きると思っています。

#アプリ申請 → 審査 → リジェクト → 審査 → リリース
####アプリ申請では主に次の記事を参考にさせていただきました。
「iPhoneアプリ申請やAppleの審査に関するメモ」
https://qiita.com/koogawa/items/5e2ff5a0312cb1f657f8
「2019年最新版、iOSアプリ申請時に必要な情報まとめ」
https://www.bravesoft.co.jp/blog/archives/4840

####ストアのスクリーンショットの作成
ここが地味に苦労しました。
スクリーンショットのサイズの制約や、デザイン周り。
この面倒なスクリーンショットを自動作成してくれるサービスがありますが、なぜか私はペイントで地道に作りました。
あのwindowsのペイントです。

スクリーンショット作成サービス
「APPLAUNCHPAD」
https://theapplaunchpad.com/

####アプリ申請 → リジェクト → リリース
夕方に申請して、日本時間の明け方にメールが届きます。
一発で通る自信がありましたが、早朝に眠気まなこでドキドキしながらメールを見ると「Reject」の文字が。
リジェクトの内容を見ると、アプリ起動後にインジケーターがクルクル回ったまま情報が表示されていないというのです。
私の拙い英語で、もう一回確認しください。少し待てば表示できるはずです。と返信。
そして、数日後の早朝に審査が通ってました。（しっかりと審査してくれていれば一発で行っていたはず…）
晴れてアップストアに公開されました。
自分の名前がアップストアに表示されたときは何とも言えない達成感でした。
（今思うとリジェクトを経験できたのはよかった）

#転職活動 → フラーに入社
[Wantedly](https://www.wantedly.com/)を利用して転職先を探していました。
実務未経験でありながら、採用していただいて感謝しています。

####３ヶ月が経ち
入社後１ヶ月は、フラーの文化や業務の事を重点に教えていただきました。
若い人が多く、私のように年上は少数派で、不安で不安で一杯でしたが手厚く迎えていただきました。
（年齢の差なんて些細な事です）
現在はクライアントワークでiOSアプリ開発に関わっています。

####一番成長を実感した瞬間
レビューでコードを見てもらい、指摘を受けてコードを改善していけることです。
もちろん独学では得られないことでした。
また、ペアプロしていただいてコードを書いている瞬間が成長していると感じます。

####フラーに入社して驚いたこと
- 働きやすさ
  - 今までは、ザ・会社って感じの場所で働いていたので、リモートワークやコアタイム以外は比較的自由など、最初は慣れなくてビビりました。
- 皆がプロダクトに真剣に向き合って、より良いものを作っている！
- デザイナーさんが身近にいて新鮮
  - 業務系システムしか関わっていなかったので、プロのデザイナーの方たちが身近にいること、デザインが目の前で見れることは本当にワクワクするし楽しい！
- Slackでのコミュニケーション
  - 今までほぼメール（毎回、「お疲れさまです。XXです。」から始まり、大量の返信引用文が蓄積）でしたが、短い文章でのやり取り、リアクションが付けられるという機能にカルチャーショックのようなものを受けましたが、盛り上がり凄くて楽しいし、即座に反応があって嬉しい。
- 勤怠管理・進捗管理やドキュメント管理が新鮮
  - JIRAやコンフルといったツールで管理する方法が効率が良く新鮮。
- 書籍購入
  - 月３冊まで技術本やビジネス書が購入できるのはすごくありがたい。
- 端末
  - 今まではWindows7で最低限動作すればいいだろうな環境だったので、Macbook Pro 13インチ i7 16G は感動ものでした。

#まとめ
振り返ると、一人で作りきったのは良い経験になりました。
入社から手厚く歓迎していただいたり、根気よく教えてもらえているので、すごく恵まれていると感じています。
早く一人前になってバリバリやっていきたい！！
私のようなケースはあまりないかもしれませんが、今後どうしようか悩んでいる方がいたら、
この記事を少しでも参考にしていただければ幸いです。
（今後は技術的な事を書きたい…）