はじめに
こんにちわ。
いきなりですが私は去年大阪で勤めていた会社を辞め、今は離島に移住して無職をしています。
そしてこの度、高校時代の友人と共同開発という形でスマホアプリをリリースしました。1
Deskmateというアプリです。
シンプルな時計・ポモドーロタイマー・ストップウォッチを同梱した卓上の集中支援アプリです。
最近流行りのスクリーンタイムAPIを使ったアプリブロックの機能も備わっています。
現在DL数は1,000を超えていて全世界にユーザがいます。
そうつまり、ホットなアプリです。ぜひ一度使ってみてください。
気に入らなかったらせめてレビューをしてからアンインストールしてもらえると助かります。
さて、宣伝はそんなところにして、
今回はDeskmateの開発記という形を取りつつ、個人開発の楽しさや苦労について話してみようと思います。
まだまだDeskmateは開発途中でマネタイズに成功しているわけではありませんが、1,000DL突破記念ということで振り返りも兼ねて書いてみます。
開発記
0. 離島に於て
少しだけバックグラウンドについて。
先述の通り、私は今広島県は尾道市の離島・百島(ももしま)に住んでいます。
人口は300人を切る勢いの限界離島です。
私は元々大阪に住んでいて会社も大阪にありました。
新卒で入った会社で6年目を迎える年に、自分の夢を追うために退職しそのまま百島に移住しました。
自給自足の暮らしを送るのが私の人生の夢なのです。
というわけで今私は百島でニートをしています。
積立NISA万歳。
1. アイデア出し
ある日私は友人から「一緒にアプリを作らないか」と声をかけられました。
それなりに時間に余裕のあった私は承諾してこのDeskmateが発足しました。
彼はすでに解決したい世の中の課題を持っており、それは「ついついSNS・Youtubeなどの動画を見てしまうこと」でした。
それを起点にしてコンセプトを詰めていくところから始まりました。
これはキックオフの議事録です。
このような感じで最初はキーワードや課題など、断片的な情報を寄せ集めるような形でブレストをしていました。
彼とは友人関係がすでにあったので、ほぼ雑談に近い雰囲気で進めていました。
コンセプトやMVPが固まるまでは2~3日に1回のペースで定例を開催していましたね。
そして最終的にiPhoneの『スタンバイモード』から着想を得て、今のコンセプトに落ち着きました。
2. 開発環境
今回はVibe Codingで進めようと最初から決めており、最初からClaudeCodeを使って実装しました。
Wezterm(ターミナルエミュ)からNeovimを起動して、NeovimからClaudeCodeを起動して指示を出しています。
ふと思ったのは、「もはやエディタってオワコンになってゆくのではないか」ということです。
なぜならVibe Codingにおいては、ソースコードはエンジニアにとって完全なブラックボックスと化す2ためです。
今回の開発では私がコードを読んだり書いたりすることはほとんど(というか一切)なく、代わりにターミナル越しにClaudeCodeのチューニングをする機会の方が多かったです。
なので必然的にソースコードと人間のインターフェースであるエディタという存在にあまり価値を感じなくなり、
代わりにAIエージェントと人間のインターフェースであるターミナルという存在に価値を感じるようになりました。3
余談ですが、筆者は歴4年ほどのVimmerであり、このこと自体結構悲しくはあります。
ClaudeCodeのプラグインを入れて以降Configを触らなくなりました。。
私はDeskmateのソースコードについてほとんど理解していません。
考え方としては、『満たしたい機能要件があってそれが満たせていればOK』という結果主義で進めています。
システム開発の文脈ではTDDの発想と近いかもしれません。
3. プロジェクトの進め方
定例で決まった機能や画面を実装するにあたり、最初に仕様書から書き起こすという進め方はしませんでした。
代わりにDeskmateでは、ClaudeCodeにプロトタイプを作らせてそれをベースに改善点やアイデアを議論する方針を試しています。
結論この進め方は結構気に入っており今もそれを継続しています。プロトタイプ駆動開発とでも名付けておきましょうか。
またその結果実装が完了した時点でも、仕様書を作ることはしていません。
つまり、Deskmateには仕様書がありません。
仕様を確認する場合は、ClaudeCodeにソースコードを読ませて回答させます。
これは先ほど話した「ソースコードはエンジニアにとって完全なブラックボックスと化す」現象の一環です。
つまり、ソースコードと人間のインターフェースであるエディタが存在価値を無くしたのと同様に、仕様書にもあまり存在価値を感じなくなりました。
だってClaudeCodeくんはソースコード(≠自然言語)を読めば仕様キャッチアップできるんだもん。。
システム開発にありがちな「嘘をつく仕様書」に惑わされることもなくなります。やったね。
4. 唯一の手作業
さて、実装が終わると動作確認とリリース作業が待っています。
この2つだけは、ClaudeCodeには任せることができていません。
現状、ClaudeCodeからAndroidStudioやXCodeを動かすためのMCPは存在しておらず動作確認は手動で行なっており、これはリリース作業についても同様です。4
そしてこれが本当に面倒臭い。
ストアに掲載するプレビュー画像はサイズの指定があり、シミュレータを起動してスクリーンショットを撮る必要がありました。
また、基本的にGUIで画面をポチポチしながら進めるため、Vimmerである筆者には苦行そのものです。
誰かこのあたりの作業を簡易化している方がいたらコメントで教えてください。
さて、開発記としてはこの辺りとして、次に個人開発をしていて楽しいこと・大変なこと・そして最後に教訓を提示して終わろうかと思います。
楽しいこと
1. ユーザの反応が直接届く
個人開発の冥利はこれに尽きるのではないでしょうか。
ストアの評価数やコメント、機能リクエストってこんなに嬉しいんだと思いました。
不具合の問い合わせすら嬉しく感じます。
そしてこれはやっぱりなかなか企業のエンジニアという立場では味わえない感覚なのかなと思います。
少し自分の話になりますが、私が会社員だった頃に座談会などでやりがいを聞かれることがたまにありました。
私はその時「設計するのが楽しい」「設計通りに動いた時が楽しい」などと話していました。
これは確かに嘘ではなかったのですが、今思うのは、私にとってこういったやりがいには限界があったなと感じます。
つまり、自分を喜ばせるだけのやりがいは長続きしないということを学びました。
私は『自分の働きには社会的な価値がある』という実感が欲しかったのかもしれません。5
少し脱線しましたが、個人開発はそれを直接獲得できる機会に恵まれているように感じていて、このことは精神衛生の維持に非常に貢献してくれております。
2. 好きな技術を使い放題
これも会社ではあまり味わえない醍醐味かと思います。
何せ個人開発ですから。好きに選定してやっています。
ついでにDeskmateの技術スタックを載せておきます。
- 言語・フレームワーク
- ReactNative・Expo・Typescript
- バックエンド
- Firebase
元々私は実務でモバイルアプリを作ったことがなかった上に、
「XCodeとかAndroidStudioとかで開発したくね〜。なんだ専用のIDEって。」という偏った思想の良くないVimmerなので、
『専用のIDEが不要でVimでも書ける(=TypescriptのLSPがあれば書ける)』という点からReactNativeを選定しました。
というか、先述のプロトタイプ駆動開発を進めるにあたって一番早くプロトタイプを仕上げることができそうだったのがReactNativeでした。
バックエンドも元々はAWSの方が慣れていましたが、「有名だし使ってみよ」っていう軽い気持ちでFirebaseにも手を出してみました。
使ってみた感想としては、AWSにもフルマネージドのサービスはあるにはあるけど、とはいえ手軽さという点ではFirebaseの方が楽だな〜って感じました。
あと、単純にモバイルアプリとの親和性みたいな点においてもFirebaseの方が使いやすいのかな?と感じました。6
大変なこと
1. 開発以外の領域
アプリケーションの運営には様々な領域の仕事が不可欠という至極当たり前の事実を再確認しました。
と同時に、その領域の広さや(無知ゆえの)大変さを感じています。
アプリ名やサブタイトルを考えるだけでも一苦労しています。
また、ユーザからどういったデータを吸い上げるか?というデータの設計や実際にそのデータを分析し活用するまでの一連のプロセスも手探りでやっています。
特にマーケティングやブランディングについては全くの無知なので、それこそClaudeに壁打ちしたり書籍から情報を仕入れたりしながら進めています。
また我々は数字のあるSNSアカウントを持っているわけでもなかったため、広報についても色々と試作を打ちながらなるべく自力で頑張ってみています。
2. 収益化までの道のり
Deskmateはちょうど今からペイウォールの実装が控えている段階ですが、
アプリで収益を得るのって大変なんだなーって思います。
今でこそサブスクというシステムが普及してくれているのでそれにどっぷりと肖ろうと思っていますが、
そもそも会社員時代の大前提であった『システム開発自体に報酬が発生する』という仕組みはもはや機能しておらず、
「自分の作っているアプリはどういった価値をユーザに提供できるのか?」
「どのようなUI/UXであればその価値をうまく訴求できるか?」
「単価はいくらに設定するか?」
など、とにかく考えることがなんだか増えた気がします。
まあ実際は考えることが増えたというかは、「リソースの割り当て方が以前と変わった」という方が正しいかもしれませんね。
慣れないことばかりです。
教訓(超主観)
最後に、教訓です。
1. モチベーションを常に補給しろ
Deskmateはかれこれ半年近く無賃稼働をしています。
まあ個人開発においてこの期間はペイウォール実装までの投資と見做すことになるので、特に辛いこととも思っていませんが。
では無賃稼働期間は、何をモチベーションにして開発を進めるべきでしょうか?
会社に属していた頃にあったはずの『給料』はもちろんありません。
開発自体の楽しさは据え置かれるでしょう。しかし、その喜びだけではいつか動けなくなってしまうことを私は知ってしまっています。
では何をモチベーションにしているか。
それは、ユーザの反応を確かめることでした。
具体的には以下がそれにあたります。
- 毎日のアプリDL数
- アクティブユーザ数
- ストアでのアプリ評価・コメント
そして大事だと思うことは、自分をモチベートしてくれる外的要因とこまめに接触することです。
私の場合は、上記は全て毎日確認しています。
日課にしているというのもありますが、単純に自分たちの作ったアプリが1人でも誰かの手元に渡って価値を発揮しているという事実が嬉しくてたまりません。
2. 技術にこだわるな
先述の通り、アプリケーションを運営することは思った以上に複雑で大変なことでした。
技術に割けるリソースは必然的に少なくなります。
というか、今までは開発に投下されるコストそのものが私の仕事になっていたので、今もソースコードに対する多少なりの美学やこだわりはまだ捨てきれていませんが、
一方で今単純に思うのは(すごく冷徹な言い方をすると)開発はROIの極めて低い領域だなというふうに捉えなおしつつあります。
アプリケーションは期待通りに動くことが何よりの正義です。
別にそれがDDDで書かれていようが、ヘキサゴナルで書かれていようが、どうだっていいです。7
多少稚拙な実装でもいいからとっとと実装して世の中にリリースしてしまう方が、よっぽど効率的にリソースを配分できるのではないでしょうか。
3. 健やかであれ ~Be Healthy~
普通にパソコンばっか触ってると身体に良くないって最近気づいた。
最近は疲れたと感じたら海を見に歩いたり、島民と酒を飲んだり、草刈りをするようにしています。
最後に
記事のタイトルにある『離島に移住して』の部分は冒頭で触れたきりになってしまいましたが、
もし私の暮らしに興味のある方は以下に色々上げていますのでぜひご覧ください!
ご連絡はなんでもお気軽に!!!
そして最後に改めて、Deskmateをよろしくお願いいたします!
-
厳密には個人開発ではないですが、「法人ではない個人」という広義の個人開発と捉えてもらえれば。 ↩
-
もし完全なブラックボックスになってないなら、それは「Vibe Codingをできていない」ということになるのではないか?と最近思う。 ↩
-
近い未来ではターミナルからAIエージェントを動かす必要もないのでしょうけど。 ↩
-
webアプリの場合はplaywrightのskillを使えば動作確認もClaudeCodeに任せられるのですが。。 ↩
-
別の言い方をすれば、「たった1つの価値基準を使い果たしてしまった」とも言えるかもしれません。 ↩
-
AWSほぼエアプなんで違ったら教えてください。 ↩
-
Vibe Codingに汚染されすぎた発想。だけど実際正しい。 ↩
