自作アプリの醍醐味
今回は、個人でアプリ開発した経験を基に、アプリ開発の苦しみや楽しさなどについて記載してみました。これから個人でアプリ開発する方の参考になればと思います。
個人でアプリを開発することの楽しみは、なんと言っても自由に作れるということだと思います。私は30年以上システムエンジニアとして企業で働いた経験がありますが、自由に開発できる機会というのはなかなかなかったです。
特に大きな企業や組織での開発は、製品の初期段階から参加できるのは本当に運が良いのだと思います。多くは途中からの参加となり機能追加や維持管理といった形態での参加が多いのではと思います。
個人でのアプリの開発は大変なこともありますが、自由に好きなように作れるというのは本当に個人で自作アプリを開発することの醍醐味だと思います。
私の場合は、開発するアプリの機能について最初はボヤ〜とした感じから作り始めます。最初は、こんな機能を持ったアプリを作りたいな〜という構想から始まるのですが、最初はノートや紙に、数枚の画面案とボタンを押した時の画面繊維などを描いて頭の中のイメージを少し具体化します。このときは核となる機能のほんの数枚の画面でしかないです。
で、次に実際にiPhoneの開発環境(xcode)で画面を作り始めます。で作りながら試行錯誤で画面を作っていきます。...と同時に機能を実現するためのデータ構造も同時に設計して、実際にコーディングしていきます。
これを繰り返しながら、機能の拡張を行いつつ、自分で使ってみながらこんな機能もあったらいいな〜、これ作ってみたけどいらないや〜みたいな感じで追加したり、削ったりしながら作っていきます。
私は既に60才を超えていて、プログラムの開発についてはC言語,Javaなどをかじった経験があるのですが本当にコーディングしていたな〜というのは20才代の頃で、iPhone の開発言語である swift については本当に初学者なので、壁にぶつかりながら、調べながらの試行錯誤の連続でした。(今も思考錯誤です...でも少しずつ早くなっていると思います。)
でも、この試行錯誤しながらこんな機能あったらいいな〜、この部分はもう少しこんなふうにしたら使い勝手が良くなるな〜と妄想しながら修正を繰り返している時が本当に楽しいです。
これまでに開発したのは、以下の4つのアプリです。
誰だっけかな?
このアプリは、一番最初に開発したアプリです。このアプリは、自分のために開発したアプリです。私は人の名前がなかなか覚えられなくて、顔と名前が一致しない人です。そんな私のために開発したアプリです。ゲーム感覚で人の顔をランダムに表示して名前や誕生日などを確認するというもの。
作っていくうちに、こんな機能もあったらいいかなっていう感じで誕生日が直近な人の検索ができたらいいかな〜みたいな感じで好きに機能を追加ました。
実は、実際には機能していませんが(その画面が呼ばれていない)課金処理もののアプリの開発時に実装して、iPhoneの試験環境では動作するのを確認しました。当時は一番最初のアプリ開発ということもあり、これで大儲けなど妄想が膨らんでいたのです。という感じで、実際には組み込んんでいない機能もあれこれ試しながら作りました。
一応課金処理について補足しておくとアプリ内課金は以下の4種類があります。
- 消耗型(ゲームなどでよく使われています)
- 非消耗型(無料のアプリで広告を非表示にするのによく使われています)
- 自動更新サブスクリプション (個人的に一番難易度が高いかな〜)
- 非自動更新サブスクリプション
上の機能のうち、非自動更新サブスクリプション 以外の動作は一通り作成してみました。(自動更新サブスクリプション については、ituneからの通知を受ける方式ではなく、iPhone 単体で有効期限切などを行う方式で確認しました)
おっと、モバイルアプリのデータベースに適したRealm(レルム)についても述べておかねば!
Realm については、オンラインスクールで、その存在を知り基礎を勉強しましたが、今開発している全てのアプリで使用してるベースとなるデータベースです。使いやすいですよ。速いし!
このアプリで一番苦労したのは、なんと言ってもアプリを公開する時です。
公開するためにはappleの審査があるのですが、通常は数日で長くても1週間みたいなのですが私の場合一月以上かかりました。否認の理由はメタデータ(ユーザへの説明)が不十分とのことすが、そもそも指摘している理由を私が理解できない部分もあり審査を通すのに本当に苦労しました。コロナ過の影響もあったのだと思いますが本当にもうダメかと思いました。
まだあります。アプリを作って公開するためには、「特定商取引法に基づく表記」の必要性があります。つまり販売する人や企業の連絡先などを明記する必要がるということです。個人開発者にとっては少しハードルが高い面でもありますが、開発したアプリを責任持ってメンテナンスしていくという自身の決意も含めて個人名の開示と本ホームページを作成して公開しました。
(App Store でアプリを公開するためには、プライバシーポリシーなども開示する必要があるので必然的にホームページも作成する必要があるのです。)
お薬カレンダー
これは、お薬の飲み忘れ防止のために作ったアプリです。なぜこんなアプリを作り始めたかというと90才を超えるおばーちゃんがいるのですが、そのおばーちゃんのためにと思い作成したアプリです。
結論からするとこのアプリは、以下の理由で、今は公開していません。
このアプリは、クラウドサービスを利用してサイレント通知という機能を使用しているのですが、サイレント通知の送信が手動なのでメンテナンスが大変!(サーバ側でスクリプトを作成すれば自動化できると思うのですが、手が回っていない。)
アプリがバックグラウンド に入ったときに、たまに勝手に終了させられる時があり原因が特定できていない。(一週間以上元気で動いている時もあるけど、数時間後に停止している時もある。なぜかまだわかっていない。時間もなくて追求できていない)
DayRecorder
これも自分のために作成したアプリです。私は少し前まで英語の勉強をしていてTOEICとかにチャレンジしていました。(今はやることがありすぎて中断していますが)
TOEICは 例えば100点 点数を伸ばすためには平均何時間勉強する必要があるみたいなのがネット上に出ています。私はもう十分に歳をとっているので多分若い方よりもいっぱい勉強する必要があると思うのですが、実際どれくらい勉強したのかな〜というのが見えるようにしたいというのが 発想の原点です。
これも作りながら機能を追加しました。(最初の構想にはなかった機能)
例えば、2時間勉強していても集中していない時もあるよな〜。通勤時に単語帳を片手にぶつぶつ言いながらの時間がどうカウントすればいいのかな〜みたいな。......と言うわけで集中の度合いを%で入力できる機能を追加。
また、ゲームとかテレビとか勉強を邪魔する時間もあるよな〜。だから例えばゲームは1日2時間までなんてことが管理できたらいいな〜と言う感じでそんな機能も追加しました。
作っていたら、お風呂に入ったり、食事をしたりした時間も記録できたらいいんじゃないかな〜と思い。1日の行動の記録ができるような機能も追加しました。
ついでに、その時々でのメモを残すことができれば、もっと便利かな〜みたいな感じでメモ機能を追加しました。
SelfTweet737
これは、簡単に言うとTwitterのクライアント機能を持ったアプリです。
開発の発端は、自作アプリのDL(ダウンロード)数を増やすために、Twitterを初めてみたのですが、Titterに投稿するときは、緊張してどうしても建前的なツイートになってしまう自分に気がつきました。(公開されるのですから当然ですよね。誰かを傷つけたりしないかな〜とか思っていしまい)
そこで、Twitterに投稿する感覚で、Twitterに投稿しない自分だけの今の正直な気持ちを記録できるツールを作ってみよう。で公開してもいいな〜と言うつぶやきはTwitterにも投稿できるアプリを作ってみようと言うのが発端です。
で、これも作っていくうちにフォローしている人やフォローされているユーザの管理が楽にできたらいいな〜と言うことでそんな機能も後から追加していきました。(ブロックやミュート、フォローの機能を実装しました。)
また、おまけで登録したユーザのツイートをフォローしないで見るだけ機能も追加してみました。
このアプリで苦労したのは、Twitter社が提供しているAPIを使用しているのですが、Twitterから送信されてくるJSON形式のデータの解析についてです。まだ、完全にわかっていない部分もありますが、時間があればわかった部分をまとめてみたいな〜とも思ってます。(このアプリについては、今後も色々と機能を追加して自分が使いやすいように改善したいと思っています。既にこんな機能があったらといいな〜といった妄想はいっぱいあります。)
個人でのアプリ開発で大変なこと!
なんと言っても、企画から制作、品質の確保までを全部一人でやる必要があると言うことだと思います。
企業での開発はいろいろな立場の人がいて、それぞれの立場で助言や審査、試験による不具合の検出を開発のプロセスを通してやってくれます。個人の場合は、それを全部一人でやる必要があると言うこと。特に品質は公開するからには十分な配慮が必要です。
次に大変なのが行き詰まった時の対応です。開発していれば必ず不具合や行き詰まりには遭遇します。そんな時、企業での開発ではチームで開発したり相談する先輩やチームメートなどがいて解決の助言をもらうことができますが、個人ではそんな助言を得る事はできません。全部一人で解決する必要があります。
今一番お世話になっているのがGoogl先生です。本当に便利な時代です。
たまにオンラインスクールのテキストを読み直しています。私は昨年iPhone のアプリを開発するためにオンラインスクール(TechAcademy [テックアカデミー] )で勉強をしたのですが、スクール選定の一つが学習期間が終わっても、オンラインでのテキストにず〜とアクセスできるからでした。
後、不具合は自分が作った不具合だけでは無いとこと。たまにですがこれはライブラリ側の不具合だと思われる現象に出会右ことがあります。これに対してどうやって対応するかということも自分だけで対処する必要があります。(ライブラリ側の不具合については、自分ではライブラリを直せないので、代替えを探したり、機能の代替を検討したりします。)
最後に
それでもやっぱり個人でのアプリ開発は楽しい。自分で開発したアプリが自分のiPhoneで動いているのは本当に... この気持ちはきっとアプリを開発している人でないとわからないと思います。
おまけ(開発を楽しむためのコツ)
開発をしていると必ず不具合というものに遭遇します。そんな時に開発を楽しむためのエッセイを記載してみました。
・自分を追い込まないこと。
これは、特に企業の中でソフトウェア開発をしているエンジニアの方に伝えたい。時には諦めも必要!あまり、自分を追い込むと体を壊したり病気になったりするので!。そうならないように情報を共有して責任が集中しないようにするという仕事の進め方も大事。
・不具合には必ず原因があり、必ず解決または、回避できるという信念を持つ。
不具合には必ず原因があります。ただ、その不具合の原因は、自分で作成したプログラム以外の部分(OSや、開発言語、外部のライブラリなど)であったり、また原因が一つでは無い場合もあります。それでも一つ一つ潰していけば必ず原因はどこかにあります。テクニック的なチップを!
- ブレークポイント/デバッグライト(基本)
- 調べる問題の範囲を狭める(コードのコメントアウト・機能の削除など)
最後は、ソースコードを見て、頭に入れて、コンピュータの気持ちになって動作が追えるように頭の中で妄想を展開し、この妄想を楽しむことができればソフトウェア開発は楽しくなる。(それでも 時間に追われてはいけない。時間のある期限は諦めることも時には重要(病気になるので))