どうもkazyです。
実は先日、2週間を期限にしていた個人開発アプリをリリースすることができました。色々バタバタしていてもっと実装したかった機能はあったんですが、ひとまずリリースするという目標は達成することができました。
【Spire】

https://apps.apple.com/jp/app/spire/id1461442936
前回のPart.1で書かせていただきましたが、一言で言うとセルフコンディションの記録アプリです。

開発に至った経緯などは前回の記事に載せていますので、そちらを見ていただければと思います。
需要があるのかはさておき、
今回は、実際の開発の流れやらを書こうかと思います。
目次
目的
まず、このアプリを作成するに当たっての目的は下記です。
- 僕自身がアプリを使いたい
- リリース実績を作る
- アプリ開発の全行程を経験する
欲しいアプリがストアになかったこととや、実績と呼べる個人開発アプリはなかったこと、業務では主に開発しか経験してこなかったことからこの目標にしました。
そういえば、前職在籍中に、簡単な画像認識アプリを開発してリリースしていました。
ただiOS Developer登録の期限切れになり、ストアからアプリが消えてしまったという…笑
なので、それはもう実績とは呼べないのでノーカウントとしていますね。はい。
スケジュール
2週間とうたっている以上は完全リリースまでの納期は2週間ですw
結構短く設定してしまったなーとも思いましたが、決めた以上は達成させようと思いました。
2週間という期間なので、ゆっくりと思考錯誤しながら作っていたら絶対に間に合いません。
しかしながら、ある程度機能の洗い出しと画面設計、ライブラリの選定あたりは決めてから進めていかないと、手戻りが発生しそう。
それだけは避けたいので、基盤は固めてから開発することにしました。
機能の洗い出し
では、まず機能の洗い出しですが、
主な機能は
・数値を記録する
・記録した数値を一覧表示する
としています。
ただ、この後画面設計をする上でもっと具体的に機能を決めておく必要があると思ったので、さらに細かく洗い出しました。
機能の洗い出しというか、要件定義でしょうか。
・数値を記録する場合は、直感的に操作できるようメータースワイプ機能にする
・過去のデータにアクセス、また記録ができるようにカレンダー表示できるようにする
・記録した数値の一覧表示は小型のメーターと数値が見れるようにする
・過去のデータをグラフ表示できるようにする
・過去のデータを削除、編集ができるようにする
・メータースワイプの感度を調節できるようにする
・ブログの宣伝もしたいので、アプリ内にリンクを追加する
・学習も兼ねて積極的にモダンなライブラリを導入する
・アクセス解析を導入する
過去のデータをグラフ表示できるようにする
これに関しては、間に合わないのは目に見えていたので、追加機能として初回は実装しないことにしました。
要件定義はこんなところで終わらせました。
画面設計
続いて画面設計を行いました。
使用したデザインツールはSketchです。
もともとSketchは1ヶ月だけ無料で使用できるんですが、使い始めてから1ヶ月以上経ってしまっていたので、今後のことを考え有料版を購入しました。
金額は確か1万くらいです。
有料版を購入すると1年間は無料でアップデートが可能で、1年後に再度課金すれば、またその後1年間は無料でアップデートが可能という流れだそうです。
1年後に期限が切れても、それまでに使っていたバージョンはそのまま使い続けることができますが、アップデートができなくなります。
課金し続けるかどうかは、1年後に考えるとして、画面設計していくことにしました。
SketchにはArtBoardという機能があり、広大なSketchのキャンバス内で作業をするための台紙のようなものです。スマホサイズが元からいくつかプリセットされているのでそれらを選べば、そのサイズの台紙が画面上に表示されるよになります。
これを画面ごとに用意して画面構成を考えていきました。
できた画面構成は下記になります。

画面数としては、非常に少なくシンプルな構成です。
先に画面デザインを作成しておくことで、レイアウトの実装がはるかに楽になります。基本的なことですがこれをしておかないと、あとで大幅なデザイン変更があった場合に、時間を持って行かれてしまいます。
細かなUI部品に関しては、Sketch用に無料で公開されているデザインファイルを使用させていただいたり、部品を合成したりして作成しています。
実装時に必要な画像はSketchから@2、@3で書き出せるので、いちいちサイズ変更して書き出してという手間もかかりません。本当に便利になりました。
画面デザインの作成にかかった日数はだいたい3人日くらいでしょうか。
開発しながら、デザインを直したりもしているので、それを合わせるとそのくらいです。
ライブラリの選定
次にライブラリの選定に入りました。
先に今回のアプリで導入したライブラリを記載しておきます。
・RxSwift
・Realm
・FSCalender
・Firebase Analytics
・Crashlytics
・LicensePlist
上記導入時付随するその他ライブラリに関しては割愛しています。
それでは、まず選定方法ですが、
主に下記の3点を軸に選定しました。
機能も少ないし、もともと使いたいライブラリもあったので、全然時間はかかりませんでした。
・使ってみたいライブラリ
・ライブラリを使わないと工数がかかる処理や表示
・その他入れる必要があるライブラリ
使ってみたいライブラリ
使ってみたいライブラリとしては、
・RxSwift
・Realm
の2つです。
RxSwiftに関しては、近年主流になってきていて、多くのアプリで採用されてきているので、覚えておいて損はないですし、市場価値的も高いみたいなので使いたい→よって決定!
Realmは、オープンソースで開発されている軽量のモバイルアプリ向けのデータベースです。
数値と日付だけしか保存しないので、UserDefaultでもFMDBでも自力キャッシュファイル保存でも良かったんですが、結構いいとの話を聞くので、使いたい→よって決定!
どちらもQiitaではよく名前は出てくるのですが、全然使ってなかったので、せっかくなので導入しようかなと。完全に使ってみたいだけの選定です。
ライブラリを使わないと工数がかかる処理や表示
要件定義で出たカレンダー表示の実装くらいしかなさそうですね。
有名なカレンダーライブラリって何があるんだろうと調べたところ、
結構Starも多くてカスタマイズしやすそうなのでFSCalenderに決定しました。
僕はライブラリを探す時は、Qiitaの記事も参考にしますが、基本的には、
・Cocoa Controlsというサイトを活用しています。
https://www.cocoacontrols.com/
このサイトは、全世界のiOS/OSXユーザが作ったライブラリ、UIなどのオープンソースを紹介しているサイトのようで、ライブラリもジャンルごとに色々見ることができるので結構便利かもしれません。
その他入れる必要があるライブラリ
あとは要件定義でも書いたようにアクセス解析をしたいので、GoogleAnalyticsは必須かなということで決定!
クラッシュ解析もしたいので、ついでにCrashlyticsも同じく決定です。
そしてライブラリを使用する以上、ライセンス規約に則って、使用ライブラリの明記が必要となってきます。
ただ無駄に設定画面にライセンス画面を設けて工数を増やしたくないので、端末の設定アプリ内でライセンスを表示するようにします。
そこで便利なライブラリがLicensePlist。
これは別記事で書いてるので詳細はこちらをご覧ください。
というわけで、LicensePlistも導入決定。今回は、CocoaPodsで入れずにBrew経由で使いました。
ようやく開発フェーズへ…
というわけで、ようやくスケジュール、要件定義、画面設計、ライブラリの選定が完了したので、ゴリゴリ開発していくことになります。
もし需要があればですが、続きは、Part.3の記事で取り上げようかと思います。
それでは、最後まで読んでいただきまして、ありがとうございました。
追記:Spire ver2.0.0をリリースしました。
コメントを残す