Perplexity Proと作るアプリ開発

先日、レシピ・献立記録アプリ「レシレコ」をリリースしました。
iOS版は以下のリンクからダウンロードできます。

Android版は現在クローズドテスト中です。製品版リリースは出来ればしたいのですが、20人以上のテスターが必要なので少し先の話になりそうです。もし、クローズドテストにご興味ある方は以下のXにてお声がけいただけると幸いです(Xへのリンク)。

この記事ではPerplexity Pro(以降、Perplexity)を利用したアプリ開発について、本アプリの開発を例にご紹介できればと思います。Perplexityを使った開発の前にまずはどのようなアプリなのか、どのような技術を使用しているのかをご紹介します。

また、Perplexityについては以下のページより説明をご覧ください。ソフトバンクユーザーだと有料版のPerplexity Proが1年間0円で利用できるので気になった方は利用してみてください。

アプリの紹介

「レシレコ」はレシピや献立を記録するためのアプリです。

ストア画像

ブラウザ・アプリの共有ボタンからレシピの登録ができるので、「料理をするときにレシピサイトやYouTube、Instagramにあるレシピをよく使う」、「前に使ったレシピをもう一度使うときに毎回同じワードで検索している」という方にオススメしたいアプリです。

以下の記事でアプリの詳細な説明(特徴や機能など)をしているので、気になる方は見てください。

使用技術とその理由

レシレコでは以下の技術を利用しています。

  • 言語: Dart

  • フレームワーク: Flutter

  • DB: Supabase

  • その他

    • Firebase Remote Config

    • Firebase Crashlytics

私は仕事ではサーバーサイドの開発をメインとしており、モバイルアプリの開発を仕事でしたことはありません。ただ、趣味でFlutterを使ったアプリの開発を少し行なっており、今回のアプリはiOS / Android で提供したいという考えから、両プラットフォームに対応でき、多少の経験のあるFlutterを採用しています。両プラットフォームに対応できるフレームワークとしては他にもReact Nativeがあり、そちらを使ったアプリも作ったことはありますが、はるか昔で忘れていることも多いので直近使ったことがあるFlutterを採用しています。

DBはアプリ開発の場合はこれまではFirestoreを使っていたのですが、普段仕事ではRDBを使っており、またFirestoreを使ったテーブル設計になかなか慣れなかったので、慣れているRDBかつ無料枠も多くドキュメントも多いSupabaseとしました。

ここまでがアプリや使用技術の紹介でした。ここからはどのようにPerplexityと開発を進めたかについて書いていきます。

Perplexityを使ったアプリ開発

Perplexityを使ったアプリ開発ですが、実現方法の相談、コードの実装や実装時のエラーの対応をお願いしていました。どういった機能を作るか、どういったデザインにするか、画面遷移をどうするか等は自分の中でイメージしておいて、それらをベースにPerplexityに質問してコードを出力してもらうという形を取りました。

ほぼ全ての機能を一緒に作ったので、いくつか例を出しつつ説明します。

アプリの更新を促す機能

アプリのバージョンが古くなったまま利用され続けることで、今後のアップデートで問題が発生する可能性もあるのでアプリの更新をお願いする機能を最初から実装しようと思い、作りました。

実現方針としては、「Firebase Remote Configを使って作りたい」ということを決めていたくらいで、他は何も決めてませんでした。

まずは、以下のようにざっくりと質問をしています。

パッケージで「upgraderを利用する」と出てきましたが、Firebase Remote Configを利用して実装したかったので、次の質問をしました。

この時点でFirebaseのセットアップが出来ていなかったのでセットアップの手順を聞いてみました。

セットアップ途中にエラーが出たのでそれについても聞いてみました。ここではエラーメッセージもそのままコピペしています。

セットアップが完了したので、改めて実現方法を質問しています。

色々と説明されましたが一般的な内容だったので、具体的にどこに書けばよいかを実際のコードを貼り付けて修正するように依頼しています。

出力結果は以下のとおりでした。必要なメソッド定義とどこに組めば良いかを出力してくれます。

このまま実行するとエラーになったので、エラー原因の候補を聞いています。

これらを試したら解消したので実装完了しました。

アプリクラッシュを検知する機能

実機による動作確認を行なっていますが、特定端末で発生する問題があると検知することが出来ないため、こちらも最初から導入しました。

こちらは実現方針は特になく、どうやって作るかから調査しました。

まずは実現方法から質問しました。

Firebase CrashlyticsとSentryを勧められたので、どちらが良いかを質問しました。

長所・短所について深堀りして、最終的には以下の質問からFirebase Crashlyticsを導入することにしました。

その後はFirebase Crashlyticsについて、質問していきます。

対応を進めていくとAndroidの場合は設定が必要と出力されたのですが、どこに追加すれば良いか分からなかったのでbuild.gradleを丸々貼り付けて質問してみました。

回答通りに実行してエラーが出たので、修正方法を質問しました。

以降は割愛しますが、変更する → エラーが出る → Perplexityで質問するを繰り返すことで実装ができました。

所感

実際に動くまでが早くなった

先ほどの例の通り、コードの出力もしてもらえるので、出力されたコードをVSCodeにそのまま貼り付ける → 実行 → エラーがあれば再度質問、動いた場合に挙動やデザインで気に入らない所があれば自分で直す or 再度Perplexityに質問するといったことが出来るようになり、動くところまでがとても早くなったと思います。

もちろん、言語やフレームワークの習熟度が高い場合は自分で全部作った方が早いのかもしれませんが、私のようにまだそこまで使いこなせてない場合は今回の方法が良いなと思いました。

エラー対応についても、質問してみると解決できることが多々あったので良かったです。もちろん、延々と繰り返し質問した場合もありましたが、それはどちらかと言えば少数でした。

1つのファイルに処理がまとまっている方が楽

コードをPerplexityに丸々投げている関係で複数ファイルに分かれていると関係するファイルを1つ1つアップロードしないといけないので面倒です。明らかに共通化したほうが良い処理を分けるべきとまでは言いませんが、ファイル分割や共通化は極力少なくしたほうが楽だと思いました。

チーム開発には不向きなやり方

一方で、上記の方法は個人開発においては良いですが、これがチーム開発になるとあまり上手くいかないのではないかと思いました。1つのファイルに様々な処理がまとまっているとそのファイル内で何をやってるか分かりにくいですし、同じファイルに対して同時期に複数人が編集するといったことが起こりやすくなり、それによってコンフリクトが頻繁に起こりそうですし、テストコードも書きにくいので難しいと思います。処理内容の理解についてはファイル内の処理を要約してくれとファイル全文と共に質問すれば分かるかもしれませんが、コンフリクトやテストなどは解決が難しいです。

そのため、チーム開発においては少し手間になりますがファイルを適切に分割することを意識したほうが良いなと思いました。その方が変更の影響範囲も限定的に出来ますし、テストも書きやすくなりそうです。

あくまで個人開発なのでやっていませんが、コードを丸々貼り付けて役割や責務毎にコードを分割するようにお願いしてみると上手く分割できるかもしれません。

非推奨メソッドを提案されることも

これはデータソースの問題だと思いますが、たびたび非推奨メソッドを出力されることがあります。VSCodeを使ってコードを書いていたので非推奨メソッドであることを認識することができましたが、何も知らないとそのまま使ってしまいそうなのであまり良くないなと思いました。

一定の知識や経験はある方が良い

言語やフレームワーク、データベース、そして、アプリの知識が全くない人がアプリを作ってストアリリースしようとなったときに、AIに質問しつつ進めれば時間はかかりますがある程度のものをリリースすることはできると思います。ただ、知識や経験の有無によって、開発時間やクオリティの差は出やすそうだなと思いました。

例えば以下のような話です。

  • 開発環境と本番環境を分けたいので--dart-define-from-fileを使う。

  • 一覧画面でデータを表示する際に一気にデータを取得して表示すると取得に時間がかかったりパフォーマンスに影響出たりする可能性があるので、最初は10件だけ取得して、画面最下部まで表示したら追加取得する。

  • 一覧画面でデータが1件もない時に画面が真っ白になってしまうので、エンプティステートの画面を用意する。

  • etc…

このような知識はAIへの質問の中でたどり着くこともできますが、知識が何もない状態で漠然と作りたいものだけを考えていると、こういった細かいことや+αに疑問を持ちにくく、問題が起こってから対応することになったり、後から困ることがありそうだと思いました。

また、AIが出力するコードやエラー対応が必ず正しいというわけでもないため、どれが良いかを判断するためにも知識はある方が良いです。もちろん、ただ動くだけで良ければ動くまでAIに対して質問攻めをするというのも手ではありますが、開発スピードという点を考えると出力されたコードに少し手を加えて済む場合もあるので、当たり前ではあるのですが諸々知っていたり分かっていたりする方が有利です。

AIとの開発における知識や経験の話を書きましたが、この話はAIを使っていなかったとしても同じことが言える話だと思います。初めてアプリ開発をする際に、本やネットで調べなから作ったとしても同じことは起こるかと思います。例えば、「とあるブログの記事を参考にしたらその記事が間違っていた」、「情報が古くなっており動かない」なんてことは生成AIの普及以前にもよくある話ですし、経験がないからこういったケースを考慮できていなかったなんてことはあるある話だと思います。

何が言いたいかというと、現時点ではAIを使う・使わないに関係なく知識や経験はある方が良いという話です。ただ、これもデータソースやプロンプトに依存する話なのだろうなと思いますし、もしAIがスーパーエンジニアと同等の振る舞いが出来るようになると、全てAIの言う通りに進めるだけで上手くいくようになるかもしれません。そうなるとAIを使っている側の知識や経験が関係なくなってしまいます。

「いやいや、さすがにそれは難しいでしょ」と思う人も多いかと思います。私の経験の話にはなりますが、約1年半前にChatGPTを使ってFlutterアプリを作ってみようとした時は「提示される情報が2021年までのものしかないし、最近のライブラリについて聞いても期待する回答が返ってこないからまだAIにコードを書かせるのは難しいな・・・」と思っていました。そんなところから1年半でここまで来たので、意外とそんな未来は近いのかもしれません。

ただ、ここから先を実現することは難しそうな感覚がなんとなくあるので、なんでもやってくれることを期待せずに知識や経験は積み上げていった方が良いだろうなと思います。

おわりに

ここまでPerplexity Proを使ったアプリ開発の流れを、実際にPerplexity Proに質問しているスクショと共に紹介し、思ったことについて書きました。

今回紹介したアプリの機能拡張時はもちろんのこと、今後もし他のアプリを作ることがあれば、上手く活用しつつ開発していければと思います。

宣伝

最後にもう一度アプリの宣伝をさせてください!

レシピ・献立記録アプリ「レシレコ」をリリースしました。「料理をするときにレシピサイトやYouTube、Instagramのレシピをよく使う」、「前に使ったレシピをもう一度使うときに毎回同じワードで検索している」という方にオススメしたいアプリです。

iOS版は以下のリンクからダウンロードできます。

Android版も現在クローズドテスト中です。製品版リリースは出来ればしたいのですが、20人以上のテスターが必要なので少し先の話になりそうです。もし、クローズドテストにご興味ある方は以下のXにてお声がけいただけると幸いです(Xへのリンク)。

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?