Androidアプリ

Flutter開発特設サイトへ
アンドロイドアプリ特設サイトへ

コラム

スマートフォンアプリを50個開発・リリースした記録 (2026.04)

1. 挑戦の始まり:自らの「武器」としてのアプリ開発

最初は、単に今流行りのスマートフォン用アプリを作れるようになり、仕事の幅を広げたいという純粋な目的から始まりました。これからの時代、Web制作だけでなくアプリも扱えることがエンジニアとしての生存戦略になると確信したからです。
まずは簡単なものから着手しました。アイデアをゼロからひねり出すのは難しいため、構造がシンプルだと思った「ルーレットアプリ」を選びました。しかし、当時はLLM(生成AI)など存在しない時代です。AndroidとiOS、それぞれの作り方を学ぶために、書店で専門書を3冊ずつ買い込み、一歩ずつ進むしかありませんでした。一文字のタイポが数時間の停滞を招く、そんな時代でした。

2. 「暗黒時代」の技術的障壁:JavaとUIKitに翻弄された日々

当時の開発環境は、今振り返れば非常に過酷なものでした。Androidは冗長な記述が求められるJavaの時代。iOSも直感的なSwiftUIなどは影も形もなく、SwiftとUIKitの組み合わせでした。
特にUIKitの開発効率は、現代の基準から見ると驚くほど低く、画面一つ作るのにも膨大なコードと制約(AutoLayout)の設定が必要でした。少しの仕様変更がレイアウトの崩壊を招き、何度も最初から作り直しを余儀なくされる...。OSごとに全く異なる思想と言語を脳内に共存させる「スイッチングコスト」こそが、個人開発者の最大の敵でした。その後、SwiftUIやKotlinが登場したとき、その快適さに暗闇の中で光が差したような感動を覚えたのは言うまでもありません。

3. 1つの解決に3日。孤独なデバッグが育てた「検索力」

繰り返しますが、この頃はAIがいません。分からないことに直面したとき、頼れるのは自分自身の「検索力」だけでした。日本語サイトに情報がなければ英語、それでもだめなら中国語のサイトまで、あらゆる言語で検索しました。
たった1つの問題を解決するために、3日間パソコンにかじりつくことも珍しくありませんでした。答えが見つからない時は一旦作業を中断し、別のアプローチを脳内でシミュレーションしながら1週間後に再開する...。一つの機能を実装するだけでも、これほどまでに時間がかかるのかと、自分の未熟さに打ちのめされる日々でした。

4. 審査の壁と、モチベーションのための「神頼み」

ようやくアプリが完成しても、本当の試練は「公開手続き」にありました。App Storeの管理画面は意味不明な専門用語の羅列で、用意すべき画像素材や説明文も膨大です。
最初から無料公開することは決めていました。ただ、孤独な開発の中でモチベーションを維持するための「神頼み」のようなものとして、AdMob(広告)だけは申し込むことにしました。例え収益が1円であっても、画面の向こう側の誰かと繋がっているという「証」が、明日もコードを書くための心の支えになると信じたからです。ルーレットアプリは既に星の数ほど存在していましたが、まずは「1個作り上げた」という事実を、自分自身の揺るぎない自信に変えることに専念しました。

5. 仕事へ繋がる「5個の壁」と恩返しのコード公開

1個作ったからといって「アプリが作れます」などとおこがましいことは言えませんでした。仕事としてアピールするには最低5個の実績が必要だと考え、2個目、3個目と挑戦を続けました。
ここまでの苦労を支えてくれたのは、ネット上に知恵を遺してくれた先人たちでした。その恩返しとして、私は作成したソースコードを自社サイトで全て公開することに決めました。「きっと誰かの役に立つはずだ」という思いからです。
ほどなくして「アプリを作れますか?」という問い合わせをいただき、「はい、実績は5個あります」と胸を張って答えられたことが、初めての仕事に繋がりました。

6. 多言語化への執念:手動で挑んだ「10言語」の壁

「アプリを世界に広げたい」という思いから多言語化に着手しましたが、当時はAIもプロを雇う予算もありません。そこで私は、PHPを使いGoogle翻訳APIを叩く「自作の自動翻訳ツール」を開発しました。
誤翻訳を防ぐため、一度英語に訳してから他言語へ展開する「折り返し翻訳」でのチェック機能を盛り込み、翻訳後の文字数バランスを手動で調整(リフレーズ)する。この泥臭い作業の積み重ねが、後に50個のアプリを全世界で展開するエンジンとなりました。しかし、当時は翻訳の精度や手作業の限界もあり、10言語に対応させるだけでも気が遠くなるような労力を必要としたのです。

7. Flutterへの転換:個人開発者の最適解

20個ほど作った頃、私はFlutterへ舵を切りました。ネイティブ言語(Swift/Kotlin)の知識を脇に置くのは勇気がいりましたが、Dart言語はこれまでのC、PHP、JavaScriptなどの経験があれば驚くほど馴染みやすく、直感的なUI構築が可能でした。
「自分が長期メンテナンスしやすいコード」を追求した結果、Flutterこそが個人開発者にとっての最適解であると確信しました。

8. 世界展開のリアル:日本では無名、海外でヒット

50個も出していると、面白い現象が起きます。日本では全くダウンロードされないアプリが、特定の東南アジア諸国やブラジルなどで爆発的に伸びたり。
多言語で世界に放り投げれば、思わぬ国のニーズにヒットする。これこそが、個人で世界と対話できるアプリ開発の醍醐味です。

9. アイデアの枯渇と、10個の「ボツ」アプリ

30個を超えるとアイデアは枯渇します。実は、現在公開している50個以外にも、10個ほどリリースしたものの「ボツ」にしたアプリが存在します。
中にはAppleの審査で「機能性が不十分」と却下されたものもありました。これらはアイデアに苦しみ抜き、試行錯誤した末の「戦いの跡」です。今後は更新しませんが、今の50個を完成させるために必要だった、大切な産みの苦しみの証です。

10. AI(LLM)との出会い:10言語から「50言語」への劇的進化

そして現在、LLM(AI)の登場によって、私の多言語化戦略は劇的な進化を遂げました。
当初、10言語の対応を完成させた段階で、その保守と精度の維持に限界を感じていました。しかし、進化したLLMを翻訳パートナーとして迎えたことで、翻訳の質を担保しながら、対応言語を一気に「50言語」へと拡大するアップデートに成功しました。
かつて3日かかっていた技術調査が5分に短縮され、まる1日を要した翻訳作業が瞬時に終わる。この圧倒的なスピードを手に入れたことで、私は「アイデアを形にする」こと、そして「世界中に届ける」ことに全力を注げるようになりました。
ただし、私はAIが出力したコードやテキストをそのまま貼り付けることはしません。AIは優秀な「助手」ですが、決して「監督」ではありません。自分が100%理解し、数年後も責任を持ってメンテナンスできる。それが、AI時代に人間が担保すべきエンジニアの矜持だと考えています。

11. 50個の開発から得た「5つの教訓」

このアプリ開発で50個をリリースして確信したことがあります。

- 継続が才能を凌駕する: 最初の20個まではアイデアで勝負できますが、そこから先は「作り続ける」という執念が形になります。
- 多言語化は「数の分だけチャンスを増やす」戦略: 日本で100人に無視されても、50言語に対応していれば、地球の裏側の「まだ見ぬ1万人」に刺さる可能性があります。AIの力を借りて50言語まで広げたことで、市場は文字通り世界中に広がりました。
- 「ボツ」は無駄ではない: 10個のボツアプリは、ヒット作を生むための必要な投資(試行錯誤)でした。
- コードは「未来の自分」への手紙: 自分が理解できないコードは、1年後の自分を苦しめるバグの温床になります。
- 完璧よりも「公開」: 審査に落ちる恐怖を乗り越え、ストアに並べて初めて、ユーザーとの対話が始まります。

12. 50個作った後に見えた景色:これからのエンジニアへ

50個という数字は、ただの記録ではありません。解決できなかったエラー、翻訳の悩み、そして公開ボタンを押す瞬間の緊張感...その全ての積み重ねです。
もしあなたが今、最初の1個で苦しんでいるなら、あなたは今「正しい道」の上にいます。最初の1個がなければ、今の私の50個も存在しません。あなたの「最初の一歩」は、未来のあなたを作る大切なピースです。
これからも、誰かの役に立つコードを書き、世界中のデバイスに届けていきたいと考えています。

プロジェクトの詳細は下記でご覧いただけます:

50個のアプリを動画で紹介しているYouTubeチャンネル。
https://www.youtube.com/@TryThisAppNow

50個のアプリの主要ソースコードをGitHubで公開しています。
https://github.com/aosystem

皆様の開発やアプリ探しのヒントになれば幸いです。
なお、公開しているアプリはいずれも特定の機能に特化した「ミニアプリ」であり、私自身の学習と技術習得を主目的として開発したものです。決して複雑で巨大なシステムではありません。

* English translation below

 

A Record of Developing and Releasing 50 Smartphone Apps (2026.04)

1. The Beginning: Developing Apps as My Own "Weapon"

It all started with a simple goal: I wanted to learn how to build smartphone apps, which were becoming mainstream, to expand my professional range. I was convinced that being able to handle apps, not just web development, would be a vital survival strategy for an engineer in the coming era.
I started with something simple. Since coming up with a unique idea from scratch is difficult, I chose a "Roulette app" because its structure seemed straightforward. However, this was an era before LLMs (Generative AI) existed. To learn how to build for Android and iOS, I had to buy three technical books for each platform and progress one step at a time. It was a time when a single typo could lead to hours of stagnation.

2. Technical Barriers of the "Dark Ages": Days at the Mercy of Java and UIKit

Looking back, the development environment at that time was incredibly harsh. It was the era of Java for Android, which required redundant boilerplate code. For iOS, SwiftUI was nowhere to be found; it was the age of Swift and UIKit.
The development efficiency of UIKit, in particular, was extremely low by modern standards. Building a single screen required a massive amount of code and complex AutoLayout constraints. A minor specification change could cause the layout to collapse, forcing me to rebuild from scratch many times. The "switching cost" of having to coexist two entirely different philosophies and languages in my head was the greatest enemy of a solo developer. It goes without saying that when SwiftUI and Kotlin finally arrived, it felt like a light shining in the darkness.

3. Three Days for One Solution: "Search Skills" Forged by Lonely Debugging

Again, there was no AI at this time. When faced with something I didn't understand, I had to rely solely on my own "search skills." If there was no useful information on Japanese sites, I searched English sites, and if that failed, I even searched Chinese sites—every language possible.
It wasn't uncommon to be glued to my computer for three days just to solve a single problem. When I couldn't find an answer, I would pause the work, simulate different approaches in my mind, and finally resume a week later. There were days when I was overwhelmed by my own perceived incompetence, realizing just how much time it took to implement even a single function.

4. The Wall of App Review and "Praying for Motivation"

Even after finally finishing an app, the real trial lay in the "submission process." The App Store management screen was a series of incomprehensible technical terms, and the amount of image assets and descriptions required was staggering.
I had decided from the start to release my apps for free. However, as a way to maintain motivation during the lonely development process, I decided to apply for AdMob. I believed that even if the revenue was only 1 yen, the "proof" of being connected to someone on the other side of the screen would be the emotional support I needed to keep writing code the next day. While many roulette apps already existed, I focused on turning the fact that I had "completed one app" into unshakable self-confidence.

5. The "Five-App Wall" Leading to Work and Giving Back via Open Source

I felt I couldn't presumptuously say "I can build apps" just because I had made one. I believed I needed at least five achievements to pitch myself professionally, so I continued with a second and third app.
What supported me through these struggles were the predecessors who left their wisdom on the internet. As a way of giving back, I decided to release all the source code I created on my own website. It was out of the hope that "this will surely be useful to someone."
Soon after, I received an inquiry: "Can you build an app?" Being able to answer with confidence, "Yes, I can. I have five apps as a track record," led to my first professional contract.

6. Persistence in Localization: The Wall of "10 Languages" Tackled Manually

With the desire to spread my apps to the world, I began localization. However, at that time, there was no AI and no budget to hire professionals. So, I developed my own "automatic translation tool" in PHP that called the Google Translate API.
To prevent mistranslations, I implemented a "back-translation" check—translating to English first and then to other languages—and manually adjusted the character balance after translation (rephrasing). This accumulation of tedious work became the engine for later deploying 50 apps globally. However, due to limits in translation accuracy and manual labor at the time, supporting even 10 languages required an exhausting amount of effort.

7. Transition to Flutter: The Optimal Solution for Solo Developers

After building about 20 apps, I pivoted to Flutter. While it took courage to set aside my knowledge of native languages (Swift/Kotlin), Dart was surprisingly easy to pick up for someone with experience in C, PHP, and JavaScript, and it allowed for intuitive UI construction.
Through my pursuit of code that is easy to maintain over the long term, I became convinced that Flutter is the optimal solution for solo developers.

8. The Reality of Global Deployment: Unknown in Japan, Hits Overseas

When you release 50 apps, interesting phenomena occur. Apps that aren't downloaded at all in Japan might explode in popularity in certain Southeast Asian countries or Brazil.
By throwing your work out into the world with multi-language support, you hit the needs of unexpected countries. This is the true pleasure of app development—being able to communicate with the world as an individual.

9. Depletion of Ideas and 10 "Scrapped" Apps

Once you exceed 30 apps, ideas start to run dry. In fact, in addition to the 50 currently public apps, there are about 10 apps that I released but ultimately "scrapped."
Some were rejected by Apple's review for "insufficient functionality." These are the "scars of battle" from struggling and agonizing over ideas. I will not update these in the future, but they are proof of the vital "growing pains" necessary to complete the current 50.

10. Meeting AI (LLM): The Dramatic Evolution from 10 to "50 Languages"

And now, with the advent of LLMs (AI), my localization strategy has undergone a dramatic evolution.
Initially, when I completed support for 10 languages, I felt the limits of maintaining them and ensuring accuracy. However, by welcoming advanced LLMs as translation partners, I succeeded in an update that expanded the supported languages to 50 all at once while ensuring quality.
Technical research that used to take three days is now shortened to five minutes, and translation work that took a whole day is finished instantly. Gaining this overwhelming speed has allowed me to pour all my energy into "giving shape to ideas" and "delivering them to the world."
However, I do not simply paste code or text output by AI. AI is an excellent "assistant," but never a "director." I write only code that I 100% understand and can responsibly maintain years from now. I believe this is the professional pride an engineer must uphold in the AI era: "Ensuring my intent reaches every last line of code."

11. Five Lessons from Developing 50 Apps

Through the release of these 50 apps, I have confirmed a few things:

- Persistence Surpasses Talent: You can compete on ideas for the first 20, but from there on, it's the sheer persistence to "keep building" that takes shape.

- Localization is a Strategy to Increase Chances: Even if you are ignored by 100 people in Japan, if you support 50 languages, there is a chance you will resonate with "10,000 people you haven't met yet" on the other side of the planet. By expanding to 50 languages with the help of AI, the market literally opened up to the world.

- "Scrapped" Apps are Not Wasted: The 10 scrapped apps were necessary investments (trial and error) to produce successful ones.

- Code is a Letter to Your "Future Self": Code you don't understand becomes a breeding ground for bugs that will plague you a year later.

- "Release" is Better Than Perfection: Only after overcoming the fear of rejection and getting your app into the store does the dialogue with users truly begin.

12. The View After Building 50 Apps: To the Engineers of the Future

The number 50 is not just a record. It is the accumulation of every error I couldn't solve, every translation struggle, and the tension of the moment I pressed the release button.
If you are struggling with your first app right now, you are on the "right path." Without that first one, my current 50 would not exist. Your "first step" is a vital piece that builds your future self.
I intend to keep writing code that is useful to someone and delivering it to devices all over the world.

Project Details:

- YouTube Channel (App Demos): https://www.youtube.com/@TryThisAppNow

- GitHub (Source Code): https://github.com/aosystem

I hope this serves as a helpful reference for your development or app search.

Note on the scope of these apps:
All of the apps I have released are "mini-apps" focused on specific, simple functions, developed primarily for my own learning and skill-building. They are by no means complex or large-scale systems.

Note on currency:
For context, 1 yen is approximately 0.62 cents (USD). In my journey, it represents the value of reaching even a single user.