今モバイルアプリを開発するならFlutter x バイブコーディングで決まり☆
これからアプリを開発しようとしている方、またはAndroidとiOSのアプリをそれぞれ個別の言語で開発してる方へ向けて、私の実体験を元に、今時のアプリ開発のおすすめ構成をお伝えしたいと思います。
結論から言うと、記事タイトルにもある通り、Flutterとバイブコーディングという組み合わせが現代のアプリ開発におけるベストプラクティスだと思っています。
バイブコーディングとは?
いたるところで話題になっているのでご存じの方も多いと思いますが、簡単に言うと、AIに指示を出してコードを書いてもらいながら開発を進めるスタイルの事です。
ただ、実際にやってみると分かるのですが、AIと言っても万能では無く、理路整然として無機質なものという一般的なイメージとは裏腹に、言動に一貫性はなく、意外とお茶目な一面があります。
そのため、思い通りに進まない事もかなり多いです。
Flutterとは?
Android、iOS用のアプリをワンソースで開発できます。それ以外にも、ウィンドウズやWebアプリの開発などもこれ一つで出来てしまいます。
Flutter x バイブコーディング
マルチプラットフォームの開発ができるというだけでもFlutterを使う強力な動機になりますが、バイブコーディングで開発をする場合、ワンソースでマルチプラットフォームの開発ができるという事が、かなり重要な要素となります。
先述の通り、AIは意外と一貫性が無く、同じ機能を異なるコードベースに同じ品質で実装するのがかなり難しいと思います。
バイブコーディングを始める前はAndroidはKotlinで、iOSはSwiftUIでそれぞれ開発していて、同じ機能をプラットフォーム毎に個別に実装するというのがそもそも苦痛に感じる事が多かったというのもありましたが、バイブコーディングを取り入れつつ、プラットフォーム毎に同一の機能を均一の品質で実装するという事は相当難しいだろうという事を始める前から感じていました。それが、Flutterに乗り換えた最大の動機です。
導入した後の感想
KotlinとSwiftUIという2つのコードベースがあったため、最初の取り組みはこれらをFlutterに移植する、というところから始まりました。
Flutterは初めて触るので作法も何もわからない状態です。
しかし、このまっさらな状態から何かを作るというのはAIの最も得意とするところだと思います。
膨大な学習データから生み出されたものだけあって、知識の広さという面において最早人間はAIに敵いません。
環境のセットアップやざっくりとした初期開発は本当に素早く完了することが出来ます。
今回、他の言語からの移植という事で、データのマイグレーションなどで結構苦労しましたが、そこはまた別の機会で語る事が出来ればと思っています。
Flutterという言語をよく知らない状態から始めたわけですが、他の言語でのプログラミングの経験さえあれば、その経験を元に指示を出していけば、いい具合にコードを書いてくれます。知らない言語を始める際のスタートダッシュは強力にサポートしてくれると感じました。
移植が無事完了した後は、プログラムを修正したり、新しい機能を追加したりするわけですが、やはりワンソースで複数プラットフォームの開発が完了するというのはかなり楽です。逆に複数ソースでそれぞれ個別にAIでコーディングというスタイルは、試してはいないものの、かなりしんどい開発になるのでは無いかと思っています。
もし、プラットフォーム毎にコードベースが分離しているのであれば、私の場合は調査や部分的なコーディングに限定してAIを使用する、という使い方をしていたと思います。
現在は、大部分をAIに書かせていて、かなり開発が楽になりました。
※ちなみに使用しているサービスはClaude Codeです。GitHub Copilotも試しましたが、両者の比較記事なんかもそのうち書ければと思ってます。
Flutterってどうなの?
Flutterを検討しているけど、Kotlin/SwiftUIと比べて、何かデメリットがあるんじゃないか?と躊躇している方も中にはおられるかと思います。
私もそうでした。
純正の言語があるのだから、あらゆる面で純正のものが一番良いに決まってるでしょう。というのが当初の考え方でした。初めは王道的なやり方で行って、基本的なところを経験しておきたい、という考えもありました。結果的に、学習・経験という面においては正解でしたが、初めからFlutterでやっておいても不正解では無かったと思います。ですので、今からやる人は、AIを用いてのバイブコーディングとの兼ね合いもあるので、初めからFlutterでやる事をお勧めしたいと思います。
FlutterとKotlin/SwiftUIとの違いというか、漠然とした不安のようなものの正体は、プラットフォーム毎に純正のものがあるにも関わらず、純正以外の異物を使った際に何か問題が発生したり、純正のものであれば得られるはずのメリットが享受できなかったりするのでは無いだろうか?というところにあるのだと思います。
結論をいうと、そのあたりの心配は完全に無用です。
まず、Kotlin/SwiftUIという純正のものでしか出来ない、ということは無いと考えて大丈夫です。といのも、Flutterから、メソッドチャンネルという仕組みでKotlin/SwiftUIのコードを呼び出す事が出来ますし、そもそも、直感的な理解とは逆に、それぞれの言語がベースにあり、Flutterがその上に乗っかっている、といのが実際には正しい構造です。
また、ライブラリが充実しているため、プラットフォーム毎に処理を分けるという事はほとんど必要ありません。アプリ内課金の処理でさえ、両プラットフォームにワンソースで対応できます。
また、標準的なUIのコンポーネントがAndroidとiOSで異なっており、そのあたりどうなるの?というのも、経験のある開発者であれば気になるところだと思います。
ここに関しては、プラットフォーム独自のUIコンポーネントは一切使われず、独自レンダリングになります。描画エンジンがFlutter独自のものになるので、「気にしなくて良い」というのが答えになります。もちろん、iOSの場合はiOSらしいUIになってほしい、という場合は個別に開発するという選択肢もあります。
UIのレンダリングが完全に独自のものという割り切りによって、OSの違いを全く意識する必要がなく、同一プラットフォームでもバージョン違いによる差異があったりするわけですが、そうい世界からも隔絶された環境となっているわけなので、逆に安心して使う事が出来ます。
速度などパフォーマンスも、特段問題になるような事はないと思います。
Flutter x バイブコーディングで開発したアプリの紹介
にゃんチャットというアプリをAndroid/iOS用に公開しています。よければダウンロードして使ってみてください🐱
コードの99%はClaude Codeさんが書いています。
Android
iOS
バイブコーディングの注意点
かなりいい感じにコードを書いてくれるClaude Codeですが、いきなり最高のコードを書いてくれるわけではありません。
人間が書く場合と同じように(あるいはそれ以上に)バグ入りのコードを書いてきます。それどころか、コードをぶっ壊す事すらあります。gitを使って、しっかりバージョン管理しましょう。
AIの書いたコードは過信してはいけません。間違えた理論や、改善の余地のあるコードを平気で書いてきます。
AIがプログラムを書いてくれるのでプログラマ不要、というわけにはまだいかないようです。むしろ、使う側がコードを読めて理論的な思考を伴わなければ、良い指示ができず、中々思った通りのコードが出来てきません。
場合によっては、AIが書いたコードの矛盾を指摘し、処理の流れを細かに指定し、やっと期待通りのコードになることもありました。
そのため、ある程度プログラムを理解できるようになる事は今後も必要ですし、AIを使いこなすためには理論的な思考力をより磨いていく必要があると感じます。結局、人力でプログラミングしようがAIに書かせようが、伸ばすべき能力というのはさほど違いが無いようです🐱
Discussion