0から始めたiOSアプリ開発で学んだこと


はじめに

Qiitaアドベントカレンダー初参加です。
プログラミング未経験から始めてAppStoreリリースまで持っていった個人開発アプリについて書かせていただきます。
私は非エンジニアで、2020年5月下旬にSwiftで人生初Hello, WorldしてAppStoreにver1.0.0をリリースしたのが6月、そこから少しずつ改良を加えていって11/30にver3.0.0をリリースしました。

アプリ制作の理由、きっかけ

吃音サポートアプリとして、ゆっくりもーどを作りました。
吃音症を説明するのは難しいのでWikipediaより引用します。

吃音(きつおん、英: stuttering,stammering)とは、言葉が円滑に話せない、スムーズに言葉が出てこないこと。「発語時に言葉が連続して発せられる(連発)」、「瞬間あるいは一時的に無音状態が続く(難発)」「語頭を伸ばして発音してしまう(延発)」などの症状を示す[1]。WHO(世界保健機関)の疾病分類ICD-10では、吃音であり[2]、米国精神医学会の以前のDSM-IVでは吃音、2013年のDSM-5(『精神障害の診断と統計マニュアル』第5版)では 小児期発症流暢症/小児期発症流暢障害(吃音)と、と障害が併記され、英語表記で、Childhood‒Onset Fluency Disorder (Stuttering) の診断名である。非流暢発話状態のひとつ[3][4]。

端的に言うと、「おおお、お...おはようございます..」「.........おはようございます」のように何らかの形で言葉が吃ってしまう症状です。
私自身難発の症状を持っており、かなり人生や実生活上で辛い思いをしてきました。
そのような中、ある時ふと思い立ってAppStoreで吃音関係のアプリを一通りダウンロードしてみたところ、以下の課題を見つけました。

  • 有料アプリが多い(無料でもアプリ内課金をしないとまともに使えないアプリも多い)
  • 単機能で比較的シンプルなアプリが多い
  • 外国製で日本語対応していない(一応していても上手くローカライズできておらず日本語が不自然)
  • 単純に数が少ない

自分が吃音関係で「あったらいいなぁ」と望んでいたアプリは、

  • 完全無料
  • 日本語話者専用
  • 吃音の症状の状態管理ができる
  • 人によって症状は違う(その時のメンタルによって吃る頻度等が変わる、人によって〜行が言いにくいor〜段が言いにくい)ので、"何となく分かっている"自分特有の症状の特徴を管理したい

のようなアプリだったので、現状iPhoneユーザーである私のニーズを満たすアプリは存在していなかったのです。
そこで、「ないなら自分で作ってみよう」と思い立ち、アプリリリースを目標に0からiOSアプリを独学で勉強し始めました。以上がアプリ制作の理由、きっかけです。

アプリ概要&使用技術

アプリ概要

最新リリースのver3.0.0では以下のことができます。

  • 一定間隔で音or振動を起こし、そのリズムを使って音読練習ができる機能
  • 一定間隔で様々なタイプの振動を起こす機能(こちらは注文時や面接時にリズムを取る用で、画面ロックできるようにしました)
  • 吃りやすさとその時の吃音のメンタルの調子を線グラフにし、いわゆる"吃音の波"を管理する機能
  • 人によって違う言いにくい言葉をリストに追加していき、ユーザーごとに苦手な五十音の行・段を円グラフで表すことができる機能

使用技術

アーキテクチャはMVC, バージョン管理はGitとGitHubです。
個人開発なのですが、実務を見据えてブランチモデルはGitFlowを参考にしました。

具体的にはmaster, developの二本柱を元に、機能追加の場合はdevelopブランチからfeature/~を生やし、タスクが完了したらdevelopに合流させます。機能改善の場合も同様にdevelopブランチからimprovement/~を生やし、目処がついた時点で同じようにdevelopブランチに合流させます。基本masterブランチには触らず、Appleに審査を申請する最終段階でdevelopブランチをmasterブランチに合流させ、masterブランチのものを審査に出す という形です。

また、機能追加や機能改善などのタスクは全てGitHubのプロジェクトに(自分で)issueを作り、そのissueに則る形で開発を進めていきました。
あとver3.0.0リリース前には頑張ってベータ版配布にも手を出してみました。

機能 ライブラリ
アプリ内広告 AdMob
グラフ描写 Charts
アニメーション Lottie-iOS
キーボード調整 IQKeyboardManager
お問い合わせ MessageUI
機能 mBaas
ユーザー管理, ログイン機能 Firebase Auth
データ保存 Firebase Firestore
アナリティクス Firebase Analytics
クラッシュ情報解析 Firebase Crashlytics
ベータ版配布 Firebase AppDistribution

頑張ったこと

割と色々あるのですが、ここは的を絞って2点に集約させます。

  1. 小さく産んで大きく育てる
  2. 生のユーザーの声を聞きにいく

小さく産んで大きく育てる

(なんかこんなことどこかの大臣が言ってたな...)

私は非エンジニアで全くのプログラミング未経験から始めたので、まず自分に期待することをやめました。
初めてAppStoreにver1.0.0をリリースした時点ではGit管理もしておりませんでしたし、アプリにログイン機能なども実装しておりませんでした。
まずは最低限超えるべきハードルを自分の中で設定し、プラスアルファで実現したいことはその最低限のハードルを超えた後に取り組むLv.2タスクとして設定するよう心がけました。
こうすることでモチベーション維持につながりますし、段階的にレベルアップしていけるので挫折にもなりにくいです。

生のユーザーの声を聞きにいく

吃音者が定期的に集まる自助団体(NPO法人)が各都道府県にあります。
私もたまに参加しているのですが、開発者としてフィードバックを得るために、リリース後の段階でアプリ紹介をしにお邪魔させてもらうことがありました。

基本的にアプリ開発者は、アナリティクスの動向やストア評価を通してユーザーと間接的に接点を持つと思います。
私の場合は、潜在的にユーザーになり得る特定集団が身近に存在していたこともあり、「これ以上的確なフィードバックを得る手段はおそらくないであろう」という思いから、ボロクソ言われるのを承知の上、決死覚悟で飛び込みました。
まぁ案の定ボロクソ言われることもありましたが、反面ポジティブな反響をいただくことも多々あり、今ではやってよかったとつくづく感じています。

学んだこと

これも色々ありますが、特に印象に残ったこととしてウォークスルー画面の重要性について書きます。

初めて吃音の自助団体でアプリ紹介を行なった時、アプリはver1.0.0リリース直後でした。
その頃は機能も限定的だったため、ウォークスルー画面の必要性を感じず、全く実装していない状態でした。

しかしいざダウンロードして使ってもらう段階になると、特にスマホの操作に慣れていない比較的ご年配の方々を中心に
「どう操作すればいいのか分からない」「ここを押すと何ができるのか分からない」
といったご指摘が挙がりました。

これは当然で、個人開発者は自作アプリの機能について100を知っているが、ユーザーは0しか知らないという情報の非対称性が存在することに私が気付いていなかったことが原因です。スマホネイティブではないご年配の方々なら尚更ですね。
「このアプリは何のためのアプリなのか」「このアイコンは何を表すのか」といった、橋渡し的な役割を果たすのがウォークスルー画面です。
「ウォークスルー?別にあってもなくてもどっちでもいいでしょ」という認識だったのですが、この経験を元に、ウォークスルーのようなものは絶対作るべきだと考えが180度変わりました。

今後の課題

RxSwiftを使ってMVVMに書き換えてみる

今RxSwiftを現在進行形で勉強中なのでもう少し時間はかかりそうなのですが、直近の目標として定めています。

ユーザー数を増やす

こればっかりは努力で何とかできるものではないので何とも言えませんが、機能追加や改善・SNSでアピールするなどして頑張っていこうと思っています。

引用