プログラミング初心者が個人開発でiOSアプリをリリースするまで

iOSプログラミングを勉強し始めて、9ヶ月もかかってしまいましたが
なんとか挫折することなくアプリをリリースできたので、そこまでのプロセスをお示ししたいと思います。
少しでも同じように頑張るプログラミング初心者の参考になれば幸いです！

リリースしたアプリ
---

今まで知らなかった漫画を見つけるためのレコメンドアプリとして作成しました。
ComicとRecommendを組み合わせて「ComiReco」と名付けました。

昔から漫画が好きだったので、漫画に関わるサービスを作ってみたいなぁという漠然とした思いに加え、
知人から教えてもらった「約束のネバーランド」がものすごく面白かったので
漫画をレコメンドすることに価値はあるなと感じたのがきっかけ。

少しでも気になった方はこちら
https://itunes.apple.com/jp/app/comireco/id1462177392


自分のこと
---
SIerで10年目だけど実務でのプログラミング経験は無しの30代。
ずっとプロジェクトマネジメント系の仕事をやってます。
一応、情報系の大学で、CとかJavaは講義はあって、プログラミングの基礎知識はあるくらいで
モバイルアプリとかWeb系の技術はほとんどないので、プログラミング初心者とさせてもらいました。


プログラミングを勉強しようと思い立つ（0ヶ月目）
---
働き方改革の影響を受けて、残業がかなりしづらくなってて
SIerの仕事にフルコミットしていた時間が空いてきたのが去年の夏ごろ。

昔からプログラミングは興味があったけど、仕事でもやる機会に恵まれず、ズルズルと１０年経ってしまったことにこれからのキャリアに危機感を覚えた。
なので時間かかっても良いのでリリースするまで頑張ろうと奮起したのがスタート。
仕事でiOSアプリの企画話もあったので、勉強がてら「Swift」でまずはやってみようと思いました。
（storyboardでUI部品をポチポチするほうが楽しそうだと思った程度です）

これから学ぶのならクロスプラットフォームとかに対応している言語の方が良いかなと思ったけど
まずは基礎を学び、何かしらリリースすることが重要だぞ、と自分に言い聞かせました。


本を買って学習する（1ヶ月目 〜 ２ヶ月目）
---
一番最初にやったのは「大きい本屋」に行くことでした。
探すポイントとして、以下の３つを意識しました。

- 通信するサンプルがあること
- kindle版があること
- 言語のバージョンが最新に近いこと

長期的には通信するアプリケーションを知っておかないと出来る幅が狭くなると思ったし、
だいたいプログラミングの本って分厚く持ち運べないので、いつでも見られるようにkindle対応してほしかった。
あとは、言語のバージョンが違って、サンプルのままで動かないのは最悪なので、、という理由からです。

そのときに一番フィットしたのは以下の書籍でした。
９ヶ月間たまに見返したりしたので、これを選んで良かったと思ってます。

[本気ではじめるiPhoneアプリ作り Xcode 9.x＋Swift 4.x対応]
https://www.amazon.co.jp/dp/B07887R9ZN/ref=cm_sw_em_r_mt_dp_U_Uoc2Cb76SC2PN


ひたすら本のサンプルを打って内容確認して動かしてみる。
ここで重要なのは「完璧に理解するまで考えずに、大体わかったら先に進むこと」だと思う。
仕事の合間に少しずつ進めていたけど、一通り終わるのに、2ヶ月もかかってしまった。


作りたいアプリをイメージして、実現したい機能が自分にも実装できるか確認する（3ヶ月目 〜 4ヶ月目）
---
「protto」というwebサービスで、ポチポチと作りたいアプリの画面イメージを簡単に作ってみたりと、UIイメージをつくることをはじめました。やっぱり見た目がとりあえずできると、やる気がでるのでオススメですね。

「Sketch」で見れるサンプルは以下のサイトが良かった。ボタンの配置とか参考にしました。
・https://www.sketchappsources.com/category/ui.html
<br />
あとはライブラリをうまく使うという手もあります。以下のサイトも勉強させてもらいました。
・【初心者向け】iOSアプリの個人開発で便利だったライブラリ・ツール・サイト
　https://qiita.com/jun1009/items/14ca3cc0ed458ff54bb1

・2018年これだけは知っておきたいiOSライブラリ31選
　https://qiita.com/kohei1218/items/275fcee7406395919885
<br />
作りたいイメージができたら、本で学んだ知識をもとに、ひたすらググる行為を繰り返して作っていく。
ブレークポイント、printを多用しながらバグを取り除いていく地道な作業を楽しめるかどうかがポイント。
ここは苦労して地道な作業しているからこそしっかり身についていると、進捗が無いときも前向きに捉えて頑張るようにしてました。

作業を繰り返すと、おそらくイメージした通りに作れない、というかどう作れば良いかわからないのが現実にぶち当たるので、このタイミングで挫折せずに「その機能を作らずに、他の機能に代替できないか」を考えることが大事だと思う。

ちなみに、この過程でFirebaseというmBaaSに出会った。
本当に良いサービスで、これに出会って無かったら、多分挫折してたかも。
認証、データベース、ストレージまで簡単にサーバーサイドの機能が準備できる。
良い時代になりましたね！


自分で作れそうな機能から完成形を描き、作り始める（5ヶ月目 〜 6ヶ月目）
---
この時期が一番ダレて厳しい時期だった。。
冬のせいで風邪引いたというのもあるけど全然進捗しないし、
プログラミング学習のモチベーションも、プログラミングをやらないと徐々に下がってきます。

twitterで少しの進捗をつぶやくと「いいね」がもらえたり、
同じようなプログラミング初心者の進捗とか見て、励みにしながら少しずつ進捗。
アクティブな人は、このタイミングで、自分の作りたいアプリの目標を公開したりするのが良いと思う。

自分はあまりそういうのは得意じゃないので宣言はしなかったけど、「2019年中にアプリをリリースする」とは宣言していたので、このままじゃまずいと思った。
そこで、いままで仕事が終わってからプログラミングをしていたのを、早く寝て、朝にプログラミングすることにしてみました。

結果、功を奏したので、なんだかんだ自分の中で
「プログラミングをやることの優先順位を低くしていただけ」なんだろうなーと思ったりしました。


プログラミングが加速する（7ヶ月目 〜 8ヶ月目）
---

毎日欠かさずやるようになると、習慣化され、大きな変化が訪れてきました。

- プログラミングをやりたくて仕方ない状態になる
- 学習していた知識が増えてきて、実装のスピードが早くなる

こうなると止まらないので、この状態になることが、プログラミング初心者の最初の目標なんだろうな。
いま振り返ると、アプリ機能の8割はこの2ヶ月で実装していました。


＜＜参考になったサイト＞＞
・【2019年版】もう配色デザインには迷わない！すごい無料カラーツール44個まとめ
　http://photoshopvip.net/72189

・個人アプリ開発を支える技術と開発フロー
　https://qiita.com/tattn/items/f1ad65d9d29c9d8b154d

・iOSアプリ個人開発で使ってるツールとかノウハウを公開してみる
　https://qiita.com/shtnkgm/items/8d8d633be9e3ab1a504a

・Xcode のデータを削除してディスクスペースを確保する
　https://blog.kakeragames.com/2015/12/18/slim-xcode-data.html

・icon8（アプリのアイコンはここで探しました）
　https://icons8.jp/

・[2019年版]有名/人気iOSアプリがどんなOSSライブラリを使っているか調べてみた
　https://qiita.com/kntkymt/items/67883dd8cd214996a21f


リリースに向けて（9ヶ月目）
---

一通り機能ができると不具合が無いかテストをしたり等、リリースに向けた準備を行いました。

すぐにできると思ったけど、細かいところ気になりだしたり、不具合見つけたりと
「プロトタイプから、アプリケーションを完成させる」にはものすごい手間がかかっていると感じました。
<br/>
ちなみに、アプリの申請とアイコン作成はこちらを参考にしました。

【2019年版】iOSアプリをApp Storeに公開するための全手順まとめ
・https://qiita.com/kenny_J_7/items/92378e2a09bee6080677

ノンデザイナー開発者向け 学習コストをかけずにiOSアプリ用アイコンを作る方法(Mac)
・https://qiita.com/seihmd/items/25f2a42e20e88ea5d86f
 （アイコンの角はAppleが勝手にマスクしているから、丸くしなくても良いっぽいです）
<br />
ストア審査ではSNS機能を実装している場合、
非表示にしたり、不適切なユーザーを通報したりする機能が必須の模様。
リジェクトは１回くらいました。

ガイドラインは以下にあるけど、まぁ事前には読んでなかったです。。
https://developer.apple.com/jp/app-store/review/guidelines/


そして無事、リリースできて現在に至ります。


最後に
---

長々とお読みいただき、ありがとうございました。

リリースしたアプリの完成度は、まだまだ使ってもらえるようなレベルではないですが
一通り、リリースまでやりきれたことが嬉しいです。
これからはこのアプリをじっくり育てていくようなことに取り組んでいきたいと思っています。

あと、これは勉強してて思ったことなのですが
なにか１つのアプリやサービスを参考にした作り方があるようなサイトがあまり無いと感じています。
（スキルが高い人はGithubとかのOSSを見るんだろうけど、初心者には理解が難しいと思う）

Qiitaにもだいぶお世話になったので、本アプリの機能の作り方をアウトプットできればなーと思ったりします。
ぜひ使ってみて頂いて、ここの作り方気になる等、コメントいただければ幸いです。