〜拝啓〜 アプリ開発を始める半年前の自分へ。アプリ公開初日に300ユーザーを獲得できるぞ!!!

# 対象者
・これからアプリ開発をしようと思っている人
・Swift初心者の方

# はじめに自己紹介と経歴
こんにちは！iOSエンジニアのやまたつです！
Swiftを始めたのは**去年の12月末**です。

プログラミング歴はちょうど一年くらいです。
Swift始める前まではJavaをやっていましたが、仕事でコードを書く機会はほぼありませんでした。

半年間 必死に勉強してきて、**iOSアプリを開発し人生初のリリース**をしました🎉
そのときに体験した失敗談と成功談を書くことで、これからアプリ開発をする初心者の方の参考になれば良いな。と思いこの記事を書いています！

リリースしたアプリは、夫婦やカップルの関係づくりをお手伝いするアシスタントアプリで、[Oshidori](https://apps.apple.com/jp/app/oshidori/id1463179915#?platform=iphone
)と言います！
「おしどりちゃん」はデザイナーの方に描いていただきました☺️

現在インストール数は **400** ほど。
AppStoreの評価では **4.9/5** と高評価を頂いています！(2019/7/2現在)

<img width="883" alt="oshidori.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326574/99424af1-1687-d07a-a8d8-2a8cebfedfd7.png">


#✉️ここからは半年前の自分に向けてメッセージを送る形式で書かせていただきます✉️

#目次
### 反省点
1. MVPでアプリを作れ。余計な機能を盛り込むな
2. お前の作業時間の見積もりは間違っている
3. 認証とデータ連携は後でいい！！！
4. 初心者なのにデータ設計できるわけない
5. 初心者なのにデザインができるわけない

### 良かった点
1. アプリを作る理由をよく考えれてたね
2. 追い込みすぎたのが良かったかもね
3. Twitterやってて良かったね
4. Firebase の選択はめちゃ良かったぞ
5. 勉強会ともくもく会も良い


#反省点
## 1. MVPでアプリを作れ。余計な機能を盛り込むな

作ろうしていたのは、夫婦やカップル向けのコミュニケーションアプリだよね？
全体像はLINEとTwitterの組み合わせみたいだと思うけど、それは初心者にはまだ早いぞ！
[MVP](https://growthhackjournal.com/why-you-need-to-know-about-minimum-viable-product/)という概念があるのをよく知っておこう。
> MVP (Minimum Viable Product：実用最小限の製品) を開発しておけば、不必要な機能に無駄なコストをかける前に、市場の評価を理解できます。早い段階でユーザーの反応やフィードバックを集めれば、現在のリソースで実装できる機能や不要な機能を予測できるでしょう。

作っているうちにその機能必要か？っていう部分が必ず出てくる！
その機能に時間を費やすのは本当にもったいない！

まずは必要最低限の機能を作って、リリースをしよう。
アプリ作成に時間がかかればかかるほど、**モチベーションが下がってくる。**
熱量があるのは最初だけで、少しずつモチベが下がるのは想定しておくんだ。
挫折の原因を作らないためにも、小さくリリースするのが吉だ。
リリースしてから改善すれば良い。出さなきゃ始まらない。
***deploy or die*** という有名な言葉通り、リリースが正義だぞ！！！

### *最低限の機能でリリースまで持っていこう！*



## 2. お前の作業時間の見積もりは間違っている
作業時間の見積もりが甘すぎる！
従来の予定では3月末にはリリースする計画だったが、5月末になってしまった。
これは一つの機能にどれだけの工数がかかるか分からないのが原因だと思うが、初心者が見積もりを出すというのは酷だと思う。

でも見積もりをつける癖をつけるのはとても重要だ！
これから仕事をする上で必須のスキルになってくる。

初心者のうちは、自分がこのくらいで実装できるだろうと思う時間の**「3倍の時間」**を見積もろう！！！
このくらいがちょうど良くて、時間通りにいかない時にモチベが下がることもない。
3倍の時間で実装できたら上出来だ！

### *見積もりは３倍の時間で出そう！*



## 3. 認証とデータ連携は後でいい！！！

毎回ビルドのたびに、認証して、データをDBから取ってくるあの時間は死ぬほど無駄な時間だった。。。
認証やDB接続はUIを作り終わったらにしよう！
DBの構造もUIを作っている時に変更になったりするし、UIが確定しないとその実装も無駄になる確率が上がるぞ。。。

1. UI完成 （この時点ではモック的なデータを入れよう）
2. DB接続
3. 認証

の順番がベスト🔥

### *UIの完成を最初に達成しよう！*


## 4. 初心者なのにデータ設計できるわけない

データ設計に時間かけてたのは本当に無駄だったな。。。
大規模なUI変更でDB設計は初期化された。
想定されていたUserのデータ設計も間違っていた。

UIが完成したら、初心者でも
「こんなデータが必要では！？」と想像が容易になるぞ！
アプリのコアな機能を達成するために必要なUIを考え、そこにどんなデータが必要かを考える。
これでデータ設計も行けるはず！

### *UIが完成したら、初心者でも必要なデータが見えてくる！*


## 5. 初心者なのにデザインができるわけない
オリジナリティを出すなwww
そのUIは死ぬほど使いにくい！！！
というデザインを作ってきたね。
運よくデザイナーさんが入ってくれたから、まともなUIになったけどあのままでは危なかった。

ユーザーは見慣れたデザインを好みます！
デザインを学んできた人が、おしゃれなデザインをするのは構わないかもしれないが、
やまたつみたいにデザインセンスがない人は他のアプリの真似をするべきだ！

例として、インスタやLINE,Twitterなどは考え抜かれたデザインをしている。
マイページやチャット画面は積極的にパクろう！
パクっても全く同じにはできないから、結局あなたのオリジナルになるし、ユーザーも見慣れたデザインだから直感的にアプリの操作ができる！

### *デザインは他のアプリをパクれ！パクってもオリジナルになる！*


#良かった点
## 1. アプリを作る理由をよく考えれてたね

アプリを作る理由は、
1.自分のポートフォリオにすること
2.自分の中の課題感をアプリにしたこと

母子家庭っていうバックグラウンドと周りの結婚ラッシュなどもあって、このアプリを作ろうと思ったんだよね〜。
自分も使えるし、他の人のためになるアプリを作ろうと考えたのが良かった！
最後まで継続してアプリ開発ができたのはこのおかげかもしれない。

ポートフォリオにもなったのはとても良いぞ！

### 作る理由を明確化しよう！内的と外的要因の２つあると良い☺️


## 2. 追い込みすぎたのが良かったかもね

金銭的にも肉体的にも追い込みすぎてた！
Mac買って、プログラミングスクールに通って、Apple Developerに登録してたのが良かったかも。
（仕事終わりのスクール、土日のプログラミングは慣れるまではしんどい）

これだけお金使ったらやらなきゃいけないと思うし。
もともとサボり癖があるからこれくらいやってちょうど良かった！

### *Apple Developerに登録してリリースしないと元が取れなくしよう！*

後、スクールの選択も良かった。
[G's Academy](https://gsacademy.tokyo/)というスクールに通い始めて、周りのレベルに驚愕した。
初心者ばかりなのに、毎回の課題提出の時のクオリティが高くて本当に刺激をもらった。
卒業生の卒業制作のクオリティは起業する人もいるくらい高い。メンターもすごい人ばかり。
刺激が強かったのが継続できた理由かも。負けず嫌いだから自分もやろうと思えたね！
（※受け身の初心者にはお勧めできないです。自分で努力できて、質問しに行けて、自走ができる人なら合うと思います！）

### *やらなきゃいけない環境を作ろう！*


## 3. Twitterやってて良かったね

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">昨日悩んでいたFirebaseのGoogle認証できました！！！ただapplicationメソッドのスペースを消していただけでした。。。xcodeがエラーを吐かないの珍しい。xcodeに頼りっぱなしだったんだな。よし！チャットアプリを実装しよう！<a href="https://twitter.com/hashtag/xcode?src=hash&amp;ref_src=twsrc%5Etfw">#xcode</a> <a href="https://twitter.com/hashtag/swift?src=hash&amp;ref_src=twsrc%5Etfw">#swift</a> <a href="https://twitter.com/hashtag/firebase?src=hash&amp;ref_src=twsrc%5Etfw">#firebase</a> <a href="https://twitter.com/hashtag/100DaysOfSwift?src=hash&amp;ref_src=twsrc%5Etfw">#100DaysOfSwift</a></p>&mdash; やまたつ(25)@Oshidori開発者_Swiftエンジニア (@ta__ta01) <a href="https://twitter.com/ta__ta01/status/1101055457903271936?ref_src=twsrc%5Etfw">February 28, 2019</a></blockquote> 



仲間がたくさんできたのは良い！！！
初心者のうちは挫折ポイントがたくさんあるから仲間を作ってたのはナイスだった。
G'sにも仲間いるし、Twitterにアプリの進捗をあげると、少しずつ仲間が増えていった！
特に、ハッシュタグ 
\#駆け出しエンジニアと繋がりたい 
\#100DaysOfCode
をつけて発信すると、仲間ができます！

### *積極的に発信して仲間作って、「アプリリリースします」宣言して、後戻りできなくしよう！*



<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Appleの審査通って、人生初のアプリ公開!! 感動😂アプリ名は「Oshidori」です。夫婦、カップルの関係作りをサポートするアプリです! 日頃、パートナーに伝えていないことをこれをきっかけに伝えてみませんか？リツイートしていただけると嬉しいです🙇‍♂️達成感で泣きそう。。。<a href="https://t.co/UNuvxrVUIM">https://t.co/UNuvxrVUIM</a> <a href="https://t.co/vlaD6YINGl">pic.twitter.com/vlaD6YINGl</a></p>&mdash; やまたつ(25)@Oshidori開発者_Swiftエンジニア (@ta__ta01) <a href="https://twitter.com/ta__ta01/status/1133706736211128322?ref_src=twsrc%5Etfw">May 29, 2019</a></blockquote>



### *アプリのリリースの時も、Twitterで呼びかけたらたくさんの反響があってユーザ登録につながる可能性もあるぞ！*


## 4. Firebase の選択はめちゃ良かったぞ

フロント（ユーザが見える部分）に集中できたのもFirebaseのおかげだ！！！
例えばAuth機能の実装なんかは、他の言語でやる時はとても時間かかるのにFirebaseなら１時間もあればできてしまう。
チャットのようなリアルタイムのやりとりもFirebaseでの実装なら比較的簡単。
これからもFirebaseは積極的に使っていこう！

Cloud Functionは Node.js使うから難しかったけどね。。。


### *個人開発ならサーバーサイドはFirebaseが最高！*


## 5. 勉強会ともくもく会も良い
分からないところができたら勉強会ともくもく会に行っていた点が良かった！
強いエンジニアさんに聞くことですぐに解決できたからね！
エンジニアは基本的に優しい人ばかり。特に初心者には超絶優しい。
積極的に聞いていこう。Twitterで分からないところを聞いてもOKだと思う！

MENTAというサービスで教えていたただいたのも良かったね！

### *詰まったら、外部の人に聞こう！先輩エンジニアは超優しいぞ！*



## 余談
iOSアプリは Appleに申請して、審査をしてもらいます！
そのため、Appleからの連絡は***全て英語***です！！！😭

英語でやりとりをしなきゃと思うかもしれませんが、自分は全て日本語でやりました。笑
普通なら英語で来た連絡に対して、英語で返すのが普通かもしれませんが、日本語で返していました。笑（後で気づいた）

Google翻訳にかけて、日本語で返信してましたね。
Appleも「こいつ英語できんのやな。しょうがねえやつだわ。」と思っていたでしょう。
日本人もいるはずだからおそらくその人が対応してくれたと思います。
圧倒的感謝🙏

### *申請周りは日本語で行けます！安心ですね！笑*



#宣伝
Oshidori というアプリをリリースしています！
ぜひダウンロードしてみてください！！！ 
[AppStore Oshidori](https://apps.apple.com/jp/app/oshidori/id1463179915#?platform=iphone
)

アプリの機能を紹介できるように、Youtubeに動画をあげています！動画も自作です！
渾身の出来なのでぜひ見てください！
[Youtube Oshidori](https://www.youtube.com/watch?v=6zM6k0XHZFU&t=6s)


#最後に
最後までお読みいただきありがとうございました！！！
これからアプリ開発をする人の助けになればと思います！
アプリ開発をすることで、**自分の得意なところ** が分かるし、**ポートフォリオ**になります！
良いことづくめです！アプリをリリースするって嬉しいものですよ！
アプリ開発でスキルも身に付けて、楽しいエンジニアライフを送りましょう☺️