個人開発のすゝめ

# はじめに
普段から個人開発について考えていることを書き出してみました。
私自身はこの記事の初版を書いた2年ほど前に[のぞきみ](https://play.google.com/store/apps/details?id=com.masaibar.nozokimi)というアプリをリリースし
~~有り難いことに現在30万ほどダウンロードしていただいています。~~
~~2019年末についに50万DLの大台に乗りました、嬉しい🎉 （2020/01/09追記）~~
~~2021年12月時点で82万を超え、佐賀県の人口を上回りました🎉 （2021/12/02追記）~~ 
 **2023年6月、ついに大台の100万ダウンロードを達成しました💯** （2023/06/09追記）

想定読者としては「アプリ開発初中級者で個人開発未経験、なかなか一歩目を踏み出せなかった二年半前の自分」に宛てて書いています。
私はAndroidエンジニアですが、コードについては全く触れませんのでiOSでも共通する部分が多いと思っています、Webはよく分かりませんごめんなさい。

長いので要約すると **「個人開発はいいぞ、気になるなら御託並べてないでアプリ作ってさっさと公開しようぜ！」** です。

# 個人開発は敷居が高いのか？
「アプリ開発を個人でやる」というと一件ハードルが高いように見えるかもしれませんが、まったくもってそんなことはありません。
全部が全部LINEやTwitterのようなアプリである必要性はないからです。

実際に[GooglePlayでHello Worldと検索](https://play.google.com/store/search?q=Hello%20World&c=apps)してみると先人たちの素晴らしい「Hello Worldを表示するだけのシンプルなアプリ」がたくさん出てきます、[私も一時期公開していました](https://qiita.com/masaibar/items/dbf55fbac17ab6895e2c)。
（ここに関してはiOSは審査が厳しく、もう少し発展的な単機能アプリが求められるかもしれません。）

入門書を一周終えたならば、単機能で良いので必要に応じて調べながら実際にアプリを作っていったほうが力が身に付きます。

# 個人開発のメリット・デメリット
私の考える個人開発のメリット・デメリットを挙げてみます、まずはデメリットから。

## デメリット
基本的にデメリットは多くないと思っています。

### 睡眠時間が減る
業務とは別に開発をする以上どこかしらで時間を捻出する必要があり、結果として睡眠が犠牲になるケースが多いです。
私自身も帰宅後にコーディングに夢中になっていて気がついたら日付が変わっていることが多々あります。
睡眠時間と作業効率はある程度比例するものなので、本業に支障が出ない程度に頑張り、翌日も極力残業をせずに帰宅してから開発するのが継続のカギです。

### お金がかかる
それぞれのストアにアプリを公開しようとする場合、GooglePlayの場合は`$25`、 AppStoreの場合は`$99/year`がそれぞれ開発者登録の費用として掛かってきます。
決して安い金額とは思いませんが、後述のメリットにより払う価値は十分にある金額だと思います。

## メリット
個人開発推しの記事なのでメリットはたくさん紹介できます。

### 自由に開発できる
まずはじめに、精神的に何にも縛られずに開発することができます。
普段サラリーマンとしてモノづくりをする以上は、自分の意見とは異なる組織の意向が優先される局面がありますよね？
個人開発にはそのようなしがらみは一切ありません、好きなように考え好きなように実装することができます。

### 技術力が身につく
一番技術が身に付きやすいのは何らかの必要性にかられているときだと思っています。
仕事と違うのでそこまでの強制力はないですが、アプリを一本作り上げるために何かしらの問題にぶつかり、そしてそれを解決していくという経験は技術力を伸ばすためのいい経験になると考えています。
また、逆は難しいかもしれませんが個人で書いたコードは会社に持ち込みやすいですし、より多く踏んだ地雷の知見は当然仕事にも活かせる場面があると思います。

### ポートフォリオにもなる
ストアに公開しない自分だけの適当なアプリを作るのは割と簡単だったりするのですが、各種画像を用意したりストア説明文を考えて書いたりと、実際に一つのアプリをストアに公開までするのはそれなりに大変です。
そんな大変な作業でも「一本作り上げた＝やりきったことがある」という実績は、その作品と共にその人自身のポートフォリオになり、就職・転職活動の際に強力な武器になり得ます。

### 年収が上がる（かもしれない）
保険のために明言しておきますが、必ずしも年収アップを保証するものではありません。
ですが、以下の2つの側面で年収が上がりやすいと考えています。

#### お小遣い稼ぎ
アプリに広告を入れることによって、最初は雀の涙程度かもしれませんが広告収入が入ってくることがあります。
ちなみに私のアプリの初月収入は55円でした。

#### 人材価値の上昇
お小遣い稼ぎだけが目当てなら正直コンビニでバイトしたほうが時給は良いと思うのですが、前述の技術力を手に入れた結果として、仕事で成果を出しやすくなり昇給のチャンスが掴みやすくなります（理論上は）。

その他様々な要素が重なった結果、技術力が身についたのにも関わらずお給料が上がらないことが稀によくあるのですが、その時は技術力と同時に手に入れたポートフォリオを手に転職活動をすることで年収を上げることのできる確率が上がります。

例えどんなに汚いソースコードでも、一般的な面接官はあなたのことを「仕事以外でアプリを一本作ったすごい人」だと認識してくれます。
また、アプリを一本リリースし終えていれば、技術力以外にも「やりきる力」が身についているはずなのでそれもアピール材料の一つにしていきましょう。

### 低リスクで始められる
ここまでメリットが多いことを、低リスクで始められるのが一番のメリットだと思っています。
「メルカリ転売で月○万円稼ぐ」でも良いんですが元手が必要で且つ在庫リスクを抱える必要もなく、やりたくない時は無理にやらなくても損しないのが良いです。
また、お金は置いておくとしてもやればやった分だけ自分の力になるというのは複利的に効いてきます。

# どうすれば実際にリリースできるのか
どのように一本目のアプリをリリースまで持っていけるか、大事なのは以下の3点です。

## 恥は一旦置いておく
「こんな機能で大丈夫だろうか」
「こんなダサいアイコンで笑われないだろうか」
「こんな変な名前でダウンロードされるだろうか」
という不安はよく分かりますが、とにかく**まずは一本リリースすること**を目標にするのが良いと思います。
一番避けるべきなのは時間かけて出せないことです。

あと、自分が思っている以上に周りの人はあなたのアプリのことを気にしてくれず、ダウンロードもさほどされません。
もし気になるならアプリ名もアイコンも後で変えられますし、様々な機能も後で追加すれば良いのです。

## 本質以外に時間をかけない
ビルドはローカルでやれればいいし、初めての個人プロダクトに複雑すぎるアーキテクチャを持ち込むと途中で息切れします。
この辺りはかっちりハマるとメチャクチャ気持ちよかったりしますが、かなり時間を食う部分でもあると思います。
本格的なCI/CD対応や重厚なクラス設計など拘ればキリがないので、宗教上の理由がない場合などはあまり拘りすぎず最低限に留めておき、気になるならば後で対応すればいいです。
[Androidの場合メイン以外のテキスト表示するだけの画面はAlertDialogで誤魔化す](https://qiita.com/masaibar/items/33ac44545c0d37caee50)のも時短に有効です。

## 極力シンプルにする
「○○したら△△するだけのアプリ」のような、まずは多機能より単機能で作ってみるのが良いです。
例） ボタンを押したら音が鳴る、色を選択したらカラーコードを表示する…etc

理由は単純で、大きければ大きいほど工数が膨らみ、それに比例して頓挫しやすくなっていくからです。
また、同様の理由でサーバー側のAPIまで自作しようとすると辛みが増すので、入門のオススメはクライアント完結型ないし既存の提供されているAPIを叩くアプリです。

やることよりも**やらないことを決める**ことが重要です。

# もう少し具体的な話
ここまで抽象的な話が多くなってしまったので、実際の作業工程や使っているツールを紹介していきます。
あくまでも一例ですので、もっと良いものをご存知の方はコメント欄にて教えてください！

## アイデア出し
既にアイデアがある場合は不要な工程ですが、ない場合は日常生活の中で不満や不便を感じたタイミングが一番のチャンスです。
「後でメモしとこう」は99%忘れ去るので、思い立ったタイミングでEvernoteにアプリ案としてメモを残すようにしています。
あまり凝った内容を残す必要はなく、シンプルに「○○するアプリ」程度のメモでもアプリを作るネタとしては十分です。

## 市場調査
一本目のアプリをリリースするという観点ではあまり気にせず作り始めてよいと思いますが、既存アプリがあるかどうかはチェックしても良いと思います。
既存がある場合は一通り触ってみることで自分の作ろうとしているイメージが明確になりますし、使いづらい点がある場合はどうやったら使いやすくなるかを考えて作ってみると後発でも追い抜くチャンスがあるかもしれません。

## 画面構成
Prottなどのプロトタイピングツールでリッチに作るのも良いのですが、そこまで手間をかけず紙に画面と主な要素を書き出すくらいが時間をかけすぎずに頭の中が整理できて良いです。
最近試みた中では「[付箋](https://www.amazon.co.jp/dp/B0013N1TWG/)1枚に付き1画面」で書き出してみて、そのまま並び替えると画面遷移が分かりやすかったです。

## コード管理
私は開発初期段階ではGitHubの公開リポジトリでコード管理をしていました。
やはり他のサービスと比較しても使いやすいですし、芝が可視化され隙間なく埋めていくのがモチベーションにもなります。
しかし、後述の広告の導入後や諸々のAPIキーをインターネットに公開しておくのはまずいと判断したため現在は[Bitbucket](https://bitbucket.org/)のプライベートリポジトリで管理しています。
なぜBitbucketかというと、プライベートリポジトリが無料（GitHubは$7/month）だからで、あまり使いやすくはないですが年額1万円払うのと天秤にかけた結果の選択です。
[学生はGitHubのプライベートリポジトリが無料で使えるらしい](https://qiita.com/mtfum/items/d8c06c9a28ce04d3043a)です、羨ましい。

なんと[GitHubがprivateリポジトリも無料になったようです](https://jp.techcrunch.com/2019/01/08/2019-01-07-github-free-users-now-get-unlimited-private-repositories/)、今までありがとうBitbucket君のことは忘れないよ（2019/01/08追記）

## タスク管理
　業務と同様にTrelloを使ってみた時期もありましたが、1人での開発であるためツールの恩恵よりも管理コストのほうが嵩んでしまったので、現在は[Evernote](https://evernote.com/intl/jp/)にチェックボックス付きで箇条書きにして管理しています。
アプリに関するアイディアなども思いついたらその場でメモを追加でき、何より1アプリについての情報を1枚のノートにまとめられるので重宝しています。

ちなみになのですが、Evernoteアプリは「1アカウントにつき端末2台まで、それ以上は有料プランに入らないと使えない」という仕様なのですが、Webブラウザで開くとその上限カウントに含まれないようなのでスマホにはアプリ、PCから見るときはWebアプリと使い分けることで同じノートにアクセスできるというライフハックがあります。

## 広告
とりあえず拘りがないなら思考停止で良いので[AdMob](https://www.google.co.jp/admob/)のバナーを入れちゃいましょう。
雀の涙でも公開後に広告収入が発生しているのを目にするとそれがモチベーションの一つになります。

手前味噌ですが[AdMobのapp-ads.txt対応を無料で実現する方法](https://qiita.com/masaibar/items/c378b4f01b707ac2506a)もありますので導入の際は参考にどうぞ。

## 分析
こちらも拘ると色々できてしまうのですが、とりあえず[Firebase Analytics](https://firebase.google.com/docs/analytics/)と[Crashlytics](https://firebase.google.com/docs/crashlytics)を入れておくくらいで良いと思います。
リアルタイムにユーザー数が見えるのも個人開発を続けるモチベーションに繋がります。

## ASO
まず前提としてストアのランキングはアプリのレビューやクラッシュ率などの要素も絡みますが、基本的にはDL数が如実に反映されます。
そのため、ランキング上位に入るためには少しでも検索に引っかかりやすくすることが必須事項です。
[SearchMan](https://searchman.com/ja/)あたりでキーワードのボリュームや順位を追いながら適宜変更していくと良いです。

## アイコン
本質的でない部分はあまり力を入れるべきでないと言ってきましたが、アイコンは言わばアプリの顔になるわけなので、IllustratorやSketchを使って作れるのがベストだとは思います。

どちらも使えない私は、[こちらの記事](https://qiita.com/2UTom_3/items/104b460630f5b885602c)を参考にしつつPowerPointを使って幾何学図形を組み合わせてゴリ押しで作りました。

また、大きめサイズのアイコンを作ってアップロードすると、必要なアイコンの大きさに良しなにリサイズしてくれるサイトがあるのでそこを活用するのがオススメです。

* https://resizeappicon.com/
* https://makeappicon.com/

## 問い合わせ対応
私の場合はアプリ内にメールアプリが起動するリンクを作っておき、メールにて問い合わせを受け付けしています。
99%のユーザーはリテラシーが高くなく利用環境問診の手間が発生するため、OSバージョンやアプリバージョンなどの必要な情報が自動で入力されるようにしておくと一往復楽になります。

お問い合わせ口がない場合はレビュー欄で不具合報告を投げてくるユーザーが多く、レビューが荒れやすくなるため予め用意しておいたほうが無難ではあります。
しかしながら割に合わない感[^1]もあるのでユーザーが増えてきてから追加するくらいで十分です。

## 利用規約 / プライバシーポリシー
各種分析系のSDKを導入している場合、個人情報を取得しているとみなされ厳密にはプライバシーポリシーの表示が必要になります。
「個人アプリだし正直いらんやろ」と楽観視していた結果、「一週間以内にプライバシーポリシー入れないとBANするで（意訳）」とメールが来て慌てて対応したGoogle秋のBAN祭[^2]は記憶に新しいのでやっておくべきです。

よく使われるSDKはあらかた網羅してくれている[App Privacy Policy Generatorという神ツール](https://app-privacy-policy-generator.firebaseapp.com/)があるので、このジェネレータに任せて1分でサクッと作るのがおすすめです。

更に生成されたファイルの公開についてですが、ただの静的ファイルなので手間やお金をかけずに公開するには[GitHub Pagesが簡単](https://qiita.com/ririli/items/0e06b21cb709beae4514)です。

もう少しカッチリと作りたい場合なんかは今だったら[KIYAC](https://www.kiyac.app/)とか使っても良いかもです（2022/12/05追記）

## 時間の捻出
業務中にやるわけにいかないので平日の帰宅後もしくは休日のどちらかもしくは両方を使って進めて行くことになります。
私の場合は休日は1日使えるはずなのですが逆にどうにもエンジンがかからず、逆に平日は仕事という制限があることによって「帰ったら今日はあの部分を実装しよう」という飢えた状態が作り出せるので平日の方が捗る派です。
あまり根を詰めすぎると続かないので睡眠時間が短くなりすぎないように意識していきたい部分です。

## モチベーションの維持
GitHubの芝生、ユーザー数などの数字、ユーザーレビューや広告収入など、モチベーションに繋がる変数は多数あると思います。
また、なんとなくやる気が起きない日でも実際にPCに向かって作業してみると平気で2,3時間過ぎていることもあるので、とにかく椅子に座って画面に向かうことも重要だったりします。
そういうとき用の軽めのタスク(typoの修正など)を敢えて残しておき、作業の足がかりにするとエンジンがかかりやすいです。

# おわりに
二年半前に前職で少しコードが書けるようになってきたとき、先輩に「特に資格とか持ってないんですが、何か取ったほうが良いんですかね？」と質問したところ「履歴書に箔はつくけど、それよりもなんかアプリを作って出したほうが良いよ」と言っていただき、その言葉に背中を押されて個人開発を始めました。
（後日聞いてみたところ覚えていないようでしたが、きっかけを作ってくださった先輩にはとても感謝しています:pray:）
それからどっぷりとハマった結果、早く家に返ってコードが書きたい一心で仕事をするようになり、作った個人プロダクトがきっかけで転職もしました。

と、ここまで個人開発推しの文章を書いてきましたが、正直向き不向きはあると思うので楽しめなかったら無理にやる必要はないと思います。
でも、もし少しでも個人開発が気になっていてまだ一歩踏み出していない方がいらっしゃいましたら是非この年末年始にアプリを一本作ってリリースしてみてください！
私も今年の年末年始は今までやったことがなかったiOSアプリ開発に挑戦してみようと思っています:muscle:

よければTwitterもフォローしてください！
<a href="https://twitter.com/masaibar?ref_src=twsrc%5Etfw" class="twitter-follow-button" data-show-count="false">Follow @masaibar</a><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

2019/03/27追記
実際に年末年始休暇を使って~~iOSアプリではなく~~Androidアプリを作ってみた実践編を書きました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">下書きのまま放置してた記事を手直ししてはてなブログに投稿しました。<br>個人開発のすゝめ 実践編 - masaibarの雑記 <a href="https://t.co/WZFmKQmYbD">https://t.co/WZFmKQmYbD</a> <a href="https://twitter.com/hashtag/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0?src=hash&amp;ref_src=twsrc%5Etfw">#はてなブログ</a></p>&mdash; masaibar (@masaibar) <a href="https://twitter.com/masaibar/status/1110397447640014849?ref_src=twsrc%5Etfw">March 26, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

2019/12/24追記
上記で作ったアプリが1年間経ってどうだったかを書きました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">今年のAdventCalendarで初note書いた✎<br>気に入ったら「スキ」と「オススメする」を押してもらえると嬉しいです🙏<br><br>年始にPayまとめアプリを作ったらキャッシュレス決済戦国時代に突入したのでこの1年を振り返る｜masaibar <a href="https://twitter.com/masaibar?ref_src=twsrc%5Etfw">@masaibar</a> <a href="https://twitter.com/hashtag/note?src=hash&amp;ref_src=twsrc%5Etfw">#note</a> <a href="https://t.co/5JQs1xHeJD">https://t.co/5JQs1xHeJD</a></p>&mdash; masaibar (@masaibar) <a href="https://twitter.com/masaibar/status/1209325648277200896?ref_src=twsrc%5Etfw">December 24, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

[^1]: ユーザー層によっては稀に笑っちゃうくらいド直球の暴言が飛んできますが、その時は動物園からお手紙が届いたと思って微笑ましく見守りましょう。
[^2]: 同様の警告が来た人と予告なしに一発BANされた人がタイムライン上に散見され、私のもう一つのアプリは一発BANされました。仮にBANされても利用規約を追加してアプリをアップデートしたら戻してくれるみたいなので落ち着いて対応しましょう。