Posted at

1年前までプログラミング初心者だった人間が爆速でアプリリリースしたのでノウハウをまとめてみた


目次

-対象者

-簡単な自己紹介

-アプリ紹介

-開発テーマ

-アイデア出し

-市場調査

-アプリ開発で意識した事

-開発過程

-デザイン

-工数期間

-技術的に意識した事

-開発環境

-ライブラリ

-ライブラリ管理ツール

-CI/CDツール

-ソースコード管理

-タスク管理

-アーキテクチャ

-運用

-参考書籍

-個人開発参考リンク

-最後に

-(余談)今まで作成したアプリ紹介


対象者


  • アプリ開発に興味がある方

  • エンジニアを目指したい方

  • 駆け出しエンジニアの方


簡単な自己紹介

今年1月から未経験としてエンジニア採用して頂き、開発会社で働いています。

プログラミング自体は2018年4月から本格的に開始し、それまではずっと営業をしてました。

当時のパソコンスキルは完全素人です。Youtube視聴とWord以外本当に使った事が無く、ファイルの意味も分かりませんでした。

そんな自分がアプリ開発を一人で完遂できたので、開発過程のノウハウなど共有出来たらと思っています。


アプリ紹介


『ReeMap』

目的地と、その場所に行った時に思い出したいメモを一緒に登録

時間でリマインドが来るのではなく、目的地に到着するとリマインドしてくれるアプリです!

happy birthday.png

Screen Shot 2019-10-16 at 19.58.08.png

Screen Shot 2019-10-16 at 19.58.24.png


使い道例

目的地のスーパーを選択

⬇︎

買い物内容を登録

⬇︎

スーパーに到着

⬇︎

買い物内容リマインド!


開発テーマ


  • 実戦に近い形で行う

     ポートフォリオにもしたいという目的があったので、ブランチ・CI/CD・PR・Issueなど活用し、実践を意識したい


  • モダンなツールやアーキテクチャを学習する

     技術的な勉強も兼ねており、iOS界隈で流行っているMVVMやCleanArchitectureなど積極的に取り入れたい


  • サービスをローンチ・グロースさせる

     コードを書けるだけのエンジニアにはなりたくないので、グロースを意識して改善保守を行いたい



アイデア出し


市場調査

とにかく何かしらリリースがしたかったので、同じアプリがないかサクッと調べただけです。


アプリ開発で意識した事


開発過程


  • 実装したい事の書き出し

    メモ帳などに簡単に実現したいことを箇条書き


  • 実現出来るか簡単に調査

    箇条書きした内容を実装に落とし込むために出来るだけ粒度を細かく分けて、実現可能性を簡単に調査


  • 画面構成作成

    必要な画面構成をメモ帳に簡単にまとめ


  • データベース設計(Firestore使用)

    画面構成まで終わればデータの書き込みや読み込み部分の設計を簡単に実装

    Cloud Firestoreを実践投入するにあたって考えたこと

    Firestoreを使う際、@1amageek さんの記事は必ず参考になります


  • 実装

    2日程で上記の工程を終わらし、早々に実装に取り掛かりました



実装したい事の書き出し例

・マップ画面

 初回起動時に(スプラッシュ画面)、端末のUUIDをkeychainに登録できるか → 可能
 横スライド → ライブラリで対応
 半モーダル → ライブラリで対応

・リマインド登録画面
 選択した座標を登録画面に持ってきて逆GeoCodingしてTableViewのHeaderに反映させれるか → 可能だが、文字サイズによりHeaderが可変するのでViewの調整にリソースが大きく割かれる可能性あり

・リマインド一覧画面
 一覧を削除(ユーザー任意)できるか → 可能

・アプリ全体
 Backgroundに入った時に一覧の情報を保持できるか → 可能
 Backgroundで位置情報を取得できるか → 可能
 Backgroundで取得し続けるデータをリモートに反映させ続ける → Apple規約的にグレー
 Backgroundで取得した位置情報とStructで格納している位置情報を比較できるか → 可能

etc...



デザイン


手書きデザイン (汚くてすみません)


アイコン

必要なアイコンはFlaticonで全部調達できました!優秀!


アイコンサイズ生成


アニメーション


App Store用Screenshot作成


工数期間

6週間 + アプリ申請(1週間)

作業時間としては、始業前・始業後 + 土日をフル活用しました。


技術的に意識した事


  • 保守しやすいようにSOLID原則は常に意識


  • リソース(時間)の意識


  • 1つの実装やコードの書き方にこだわりすぎない



開発環境

IDE: Xcode 11.1

Lang: Swift5

OS: MacOS(Mojave)


ライブラリ


ライブラリ管理ツール

Firebase系のSDKはビルドが相当重いのでCocoapodは使用せず、Carthageのみの運用にしました。

※CarthageでFirebaseを導入する際は直接Githubから指定して落とす必要あり

参考記事【Firebase環境構築メモ】


CI/CDツール


  • Fastlane

  • Bitrise


ソースコード管理


  • Github

GithubのPrivateリポジトリが2019年1月から無料!!

GitHubが無料でプライベートリポジトリを無制限に作れるようになったぞ☆


タスク管理


  • Github Issue

Githubリポジトリ内で一元管理できるから重宝してます(初心者は使い慣れるのに少し時間が掛かるかも)。

未経験がWeb系転職成功したいならgithubでissue管理して開発しよう


アーキテクチャ


  • MVVM + CleanArchitecture

MVVM自体の導入は保守向上の観点で良かったが、アプリ規模的にModel層をCleanArchitectureで構成する必要はなかったと反省(工数がかさんでしまった.....)。


運用


参考書籍


個人開発参考リンク


最後に

最初にも言いましたが、プログラミング始めた当初は本当にファイルの意味も分からないレベルでした。

そんな自分が1年とちょっとでアプリリリース出来るまでに成長したのには正直ビックリです。

今後はReeMapのグロースを地道にやりながら、iOSの色んなSDKを試してアプリ開発を継続していきたいです。

プログラミング学習継続の仕方や自分の成長過程などをツイッターでつぶやいたりしてますので、よければこちらもフォローして頂けると幸いです(いつでも質問受け付けてます)。

Twitter: YUKI_個人アプリ開発@未経験からエンジニア


(余談)今まで作成したアプリ紹介


これらはGithubでPublicで公開しているので、開発の参考にして頂ければ幸いです。


分からない実装など有ればツイッター等でいつでも質問して頂ければお答えします😄

Github: omurayuki