Lento con forza

大学生気分のIT系エンジニアが色々書いてく何か。ブログ名決めました。

ChatGPTでアプリを作る Part1 技術選定編

ChatGPTが異常な勢いで浸透していますね。ミーハーな僕としては、この波に乗らないわけにはいかないです。

僕はエンジニアなので、まずは自分の得意な領域であるアプリ開発を試してみようと思います。イメージとしては、ChatGPTとのペアプロです。僕がナビゲータで、ChatGPTがドライバです。でも、ChatGPTはチャットしかできないので、コミットなどは僕が代わりにやることにします。

まずは、何を作るかを決めていきましょう。

冷凍庫の中身をアプリで管理したいと考えています。課題としては、冷凍庫に入れ忘れたまま冷凍焼けしてしまうことがあり、それをアプリで防げないかと考えています。このアイデアについてどう思いますか? このアイデアは非常に有用であり、家庭の食品管理や食品ロス削減に役立つ可能性があります。冷凍庫の中身をアプリで管理することで、消費期限や在庫状況を把握し、冷凍焼けを防ぐことができるでしょう。  以下の機能がアプリに実装されていると、さらに便利になるでしょう。  バーコードスキャナー: 冷凍食品を冷凍庫に入れる際にバーコードをスキャンし、アプリに情報を登録することで簡単に在庫管理ができます。 通知機能: 消費期限が近づく食品や、冷凍庫に長期間放置されている食品について、アプリが通知を送ってくれるようにすると、冷凍焼けを防ぐことができます。 レシピ提案: 冷凍庫の中身に応じてレシピを提案する機能があれば、食品の消費を促進し、冷凍焼けを防ぐことができます。 家族やルームメイトとの共有機能: 同じ冷凍庫を共有している家族やルームメイトとアプリの情報を共有できると、誰が何を使ったかを把握しやすくなります。 ショッピングリスト機能: 冷凍庫の在庫状況に応じて必要な食材のショッピングリストを作成できる機能があれば、買い物の際に不足している食材を購入しやすくなります。 このようなアプリが実現されれば、冷凍庫の中身を効果的に管理し、冷凍焼けを防ぐことができるでしょう。ただし、アプリを活用するためには、ユーザーが継続的にアプリを使用し、食品の登録や消費情報の更新を行うことが重要です。

いきなりめっちゃ肯定されて、やる気が上がってきました。実はこの前に、どんなアプリを作るかもChatGPTに決めてもらおうとしたのですが、うまくいかなかったので即席でそれっぽいものを考えました。アプリのアイデアをChatGPTに出させる良い方法を知ってる人がいたら教えてください!!


僕はエンジニアで、さっそくアプリ開発に取り組みたいと思います。GitHubにリポジトリを作るところから始めようと思います。アプリ名のおすすめはなにかありますか? アプリ名は、機能や目的を表すとともに、ユーザーに覚えやすいものが良いでしょう。いくつかのアプリ名の提案を以下に示します。  FrostGuard(フロストガード): 冷凍庫の中身を守るという意味を持ち、シンプルで分かりやすい名前です。 Freezify(フリージファイ): 冷凍庫(Freezer)に関連するアプリであることを示唆しています。 IceInvent(アイスインベント): 冷凍庫の在庫(Inventory)を管理することを表しています。 ChillTrack(チルトラック): 冷凍庫の中身を追跡(Track)するアプリであることを伝えます。 CoolKeeper(クールキーパー): 冷凍庫の中身を管理し、冷凍焼けを防ぐという役割を表現しています。 これらの提案の中から、あなたが最も好みでアプリの目的に適した名前を選んでください。また、他のアプリや商標と重複しないように注意してください。

やる気を焚き付けられた僕は、開発をスタートすることにしました。いくつか提案してもらった中で、Freezerが気に入ったので、さらに提案をもらいました。

freezerに関連するのが良さそうです。freezifyのような名前を他にも提案して貰えませんか?  もちろんです。Freezifyに類似したアプリ名の提案をいくつかご紹介します。  FreezMate(フリーズメイト): 冷凍庫管理の"友達"のような存在であることを表しています。 FreezOrganizer(フリーズオーガナイザー): 冷凍庫の内容を整理・管理するアプリであることを示しています。 FreezSaver(フリーズセイバー): 冷凍庫内の食品を救う(Save)アプリであることを表現しています。 FreezSmart(フリーズスマート): スマートな冷凍庫管理を提供するアプリであることを示しています。 FreezMaster(フリーズマスター): 冷凍庫管理のエキスパートとして役立つアプリであることを伝えています。 これらの名前の中から、あなたが好むものを選んでください。ただし、他のアプリや商標と重複しないように注意してください。

すごい、あらゆる選択肢を一瞬で出してくれるのはとても良いですね。もう少し思考の幅を広げるために、こちらからも提案してみました。

stockやtrackのような用語は向かないですか? すみません、もちろんそれらの用語もアプリ名に適しています。以下に、stockやtrackを含むアプリ名の提案をいくつか挙げます。  FreezStock(フリーズストック): 冷凍庫の在庫管理に焦点を当てた名前です。 StockFreezer(ストックフリーザー): 在庫管理と冷凍庫を組み合わせた名前で、機能が明確に伝わります。 FreezTracker(フリーズトラッカー): 冷凍庫内の食品の追跡・管理に重点を置いていることを示す名前です。 TrackFreez(トラックフリーズ): 冷凍庫の在庫追跡を強調したシンプルな名前です。 これらの名前も検討してみてください。最終的には、あなたが好む名前であり、アプリの目的や機能を適切に表すものを選んでください。また、他のアプリや商標と重複しないように注意してください。

ただ単に組み合わせただけで、広がりはしませんでしたが、それぞれの理由を一緒に考えてくれるのは心強いです。

ただ、ここまで作って僕が感じたことが一つあります。このChatGPTってやつ、僕が変なことを言っても全く否定してくれないのでは・・・・?

そう思った僕は、ChatGPTを試すような発言をしてみました。

fireやhotのような用語はどうでしょう? 冷凍庫管理アプリに「fire」や「hot」のような用語を含めることで、ユーモアやユニークさを加えることができます。ただし、一部のユーザーには混乱を招く可能性もあるため、注意が必要です。以下に、「fire」や「hot」を含むアプリ名の提案をいくつか挙げます。  FireFreezer(ファイヤーフリーザー): 矛盾する単語を組み合わせた、ユニークな名前です。 HotFreez(ホットフリーズ): 冷凍庫管理をホットなトピックに変えるという意味合いで、独特な名前です。 IceOnFire(アイスオンファイア): 冷たい氷と熱い火を組み合わせた、興味深い名前です。 HeatFreez(ヒートフリーズ): 熱と冷凍の矛盾した単語が、個性的な印象を与えます。 これらの名前を検討してみてください。ただし、アプリ名が機能や目的と関連性が低い場合、ユーザーに混乱を招く可能性があるため注意が必要です。最終的には、あなたが好む名前であり、アプリの目的や機能を適切に表すものを選んでください。また、他のアプリや商標と重複しないように注意してください。

冷凍庫とは相性の悪い、熱い用語を提案してみましたが、圧巻の返事です。注意しなくてはいけないことを付け加えた上での完全肯定選択肢。凄すぎますね。

ここで僕は、ファイヤーフリーザーが気に入ってしまいました。ポケモンミームもあれば、ChatGPTが説明している 「矛盾する単語を組み合わせた、ユニークな名前です。」という説明も気に入っています。

しかし、混乱を招く可能性を指摘してもらっているので、冷静になった僕は、FreezStockを使用することにしました。

FireFreezerはいいですね。ユーモアがあって好きですが、ユーザーが混乱するという指摘ももっともです。 今回は、FreezStockにしようと思います。FreezStockとFreezStockerはどちらが良いですか? どちらの名前も冷凍庫の在庫管理に焦点を当てており、似た印象を与えますが、若干の違いがあります。  FreezStock(フリーズストック)は、冷凍庫内の「在庫」(Stock)に重点を置いたシンプルな名前です。この名前は、アプリが冷凍庫の在庫管理に特化していることを明確に伝えます。  FreezStocker(フリーズストッカー)は、「ストッカー」(Stocker)という言葉が、アプリが冷凍庫の在庫管理をサポートする「ツール」や「助け手」であることを示唆しています。この名前は、アプリが冷凍庫管理を行う際のアシスタントのような役割を果たしていることを強調しています。  どちらの名前も適切であり、好みによって選ぶことができます。FreezStockはよりシンプルで明確な印象を与える一方で、FreezStockerはアプリがアシスタントのような役割を果たすことを強調しています。どちらのアプローチがあなたのアプリの目的や機能を最も適切に表すかを考慮して選んでください。また、他のアプリや商標と重複しないように注意してください。

最後に別の選択肢を与えてみました。このような些細な違いにも、真摯に向き合ってくれるChatGPT、凄すぎませんか・・・?

という会話を行い、アプリ名が決定しました!

アプリ名はFreezStockにします  素晴らしい選択です!FreezStock(フリーズストック)は、冷凍庫の在庫管理に焦点を当てたシンプルで明確な名前で、ユーザーにアプリの目的をすぐに理解してもらえるでしょう。  アプリ開発がスムーズに進み、多くのユーザーにとって役立つアプリになることを願っています。もし途中で何か質問があれば、お気軽にお問い合わせください。開発の成功をお祈りしています!


さて、いよいよ開発に入っていきましょう。まずは技術選定をお願いしてみました。

さっそくGitHubにリポジトリを作成しました。開発言語や、サービスに使用するバックエンドを決めなければいけません。何かおすすめはありますか? 開発言語やバックエンドサービスの選択は、アプリの要件、対象プラットフォーム(iOS、Android、Webなど)、開発チームのスキルセット、および開発期間や予算によって異なります。以下に、いくつかの一般的な選択肢を示します。  開発言語:  iOSアプリ: Swift(推奨)またはObjective-C Androidアプリ: Kotlin(推奨)またはJava クロスプラットフォームアプリ: React Native(JavaScript/TypeScript)、Flutter(Dart)、Xamarin(C#) バックエンドサービス:  Firebase: Googleが提供するリアルタイムデータベース、認証、ストレージなどを含む、使いやすくスケーラブルなサービスです。短期間で開発を進める場合に適しています。 AWS (Amazon Web Services): 豊富なサービスを提供するクラウドプラットフォームで、Lambda(サーバーレスコンピューティング)、DynamoDB(NoSQLデータベース)、S3(ストレージ)などがあります。 Heroku: シンプルで使いやすいプラットフォームで、Node.js、Ruby、Python、Javaなどの言語でバックエンドを開発できます。初期のプロトタイピングや中小規模のプロジェクトに適しています。 Microsoft Azure: Microsoftが提供するクラウドプラットフォームで、App Service(Webアプリ、APIのホスティング)、Cosmos DB(NoSQLデータベース)、Azure Functions(サーバーレスコンピューティング)などがあります。 どの技術を選択するかは、あなたのプロジェクトの要件や開発チームのスキルセットによって決まります。それぞれの技術には利点と欠点があるため、プロジェクトの要件と目標を検討し、最適な選択肢を選んでください。     Kouki Saito 開発人数は一人で、効率を良く開発を進めたいので、バックエンドサービスはFirebaseにしましょう。  開発言語は悩んでいます。この中で1番得意なのはSwiftです。KotlinやTypeScript、Dartは少しだけ経験があります。 あなたのスキルセットと効率を考慮すると、以下の2つの選択肢が適切だと思われます。  iOSアプリ (Swift): あなたが一番得意とするSwiftを使用して、iOSアプリを開発することが最も効率的である可能性が高いです。しかし、この選択肢ではAndroidユーザーを対象としていないため、将来的にAndroid版を開発することを検討する場合は、異なる言語での開発が必要になります。  クロスプラットフォームアプリ (React Native/TypeScript): 既にTypeScriptの経験があるとのことで、React Nativeを使用してクロスプラットフォームアプリを開発することを検討してみても良いでしょう。これにより、iOSとAndroidの両方のプラットフォームに対応したアプリを効率的に開発することができます。ただし、あなたにとってTypeScriptがSwiftよりも不慣れであることを考慮して、学習曲線があることを覚悟してください。  どちらの選択肢を選ぶかは、あなたの開発目標やプラットフォーム対応の重要性によって異なります。最初にiOSアプリだけを開発し、その後Android版を検討することも可能ですし、最初からクロスプラットフォーム対応を目指すこともできます。最適な選択肢を選んでください。

会話をしていくと、どんどん選択肢を出してくれます。僕はこれの中で良さそうと思うものを選ぶだけです。バックエンドは明らかにFirebaseが良さそうでしたが、開発言語はどれも良さそうに思ったので相談してみました。もちろんそれにも一瞬で回答をしてくれます・・・。

クロスプラットフォームで行くことに決めました。

新しいことに挑戦してみたいので、クロスプラットフォームにします。React Natve、Fluttep、Xamarinの選び方を教えてください クロスプラットフォームアプリ開発には、React Native、Flutter、Xamarinの3つの主要なフレームワークがあります。それぞれのフレームワークには独自の特徴や利点があります。以下に、それぞれのフレームワークの特徴を示します。  React Native: 開発言語: JavaScript/TypeScript 特徴: Facebookが開発し、広く使われているフレームワーク。多くのライブラリやコミュニティサポートがあります。 利点: JavaScriptの人気と広範なサポート、リアルタイムでのホットリロード機能、ネイティブコンポーネントを利用してネイティブアプリに近いパフォーマンスが得られます。 Flutter: 開発言語: Dart 特徴: Googleが開発し、急速に人気を集めているフレームワーク。ウィジェットベースのアプローチで美しいUIを作成できます。 利点: 独自のウィジェットシステムによる高度なUIカスタマイズ、ホットリロード機能、将来的にFuchsia OSへの対応が期待されています。 Xamarin: 開発言語: C# 特徴: Microsoftが開発し、.NETエコシステムを活用するフレームワーク。C#言語を使用してアプリを開発します。 利点: C#や.NETエコシステムに慣れている開発者にとっては学習コストが低い、Visual Studioとの統合が強力であり、開発効率が高い。 これらのフレームワークの選択は、あなたの開発スキル、目標、そして好みによって異なります。JavaScript/TypeScriptの経験がある場合は、React Nativeが最も適切な選択肢となることが多いです。しかし、Googleが支持する新しいフレームワークに挑戦したい場合は、Flutterも良い選択肢です。また、C#や.NETエコシステムに慣れている場合は、Xamarinが適切です。  それぞれのフレームワークについて調査し、あなたの要件に最も適したものを選んでください。どのフレームワークも強力な機能とサポートがありますので、選択したフ

タイプミスがあっても気にせず文脈を汲み取ってくれていますね。C#は書いたことがないのでXamarinはやめることにしました。

C#の経験がないのでXamarinは除外します。 DartとJavaScpiptの経験は同じくらいです。今回のアプリに適したものはどちらですか? Dart(Flutter)とJavaScript(React Native)のどちらが今回のアプリに適しているかを判断するために、それぞれのフレームワークの特徴と利点を比較してみましょう。  React Native:  JavaScriptという広く使われている言語を使用し、TypeScriptにも対応しています。 豊富なライブラリとコミュニティサポートがあります。 ネイティブコンポーネントを使用してネイティブアプリに近いパフォーマンスを提供します。 リアルタイムでのホットリロード機能があり、開発速度が向上します。 Flutter:  Dartという新しい言語を使用しますが、学習コストは比較的低いです。 ウィジェットベースのアプローチで美しいUIを作成できます。 高度なUIカスタマイズが可能で、一貫したUIを提供できます。 ホットリロード機能があり、開発速度が向上します。 どちらのフレームワークも強力で、クロスプラットフォームアプリ開発に適しています。以下に、それぞれのフレームワークを選択する理由を示します。  React Nativeを選ぶ理由:JavaScript/TypeScriptの経験がある場合や、豊富なライブラリとコミュニティサポートが必要な場合。 Flutterを選ぶ理由:美しいUIや高度なUIカスタマイズが重要な場合、Googleが支持する新しいフレームワークに挑戦したい場合。 冷凍庫の在庫管理アプリであることを考慮すると、どちらのフレームワークでも十分に機能を実現できます。選択は主に好みや、どのフレームワークで開発を進めたいかによって決まります。どちらの言語にも経験があるとのことですので、あなたがより興味を持っているフレームワークを選んでください。

React NativeとFlutterはどちらでも良いそうですね。興味を持っているのはFlutterなので、今回はFlutterでやることにしましょう!

説明いただいた内容ですと、Flutterの理由の方が好みです。Firebaseとの相性で注意しなければいけないことはありますか?  FlutterとFirebaseを組み合わせて使用する際に注意すべき点はいくつかありますが、両者は基本的にうまく連携できます。以下に、FlutterとFirebaseを使用する際のいくつかの注意点を挙げておきます。  ライブラリのバージョン:FlutterとFirebaseのライブラリは定期的にアップデートされます。これらのライブラリのバージョンが互換性のあるものであることを確認してください。また、ライブラリをアップデートする際には、変更履歴やリリースノートを確認して、影響を受ける機能がないかどうかを確認してください。  プラグインの利用:FlutterでFirebaseを使用するには、いくつかのプラグインが必要です。firebase_coreプラグインを始めとする、Firebaseの各機能に対応するプラグインをインストールして設定する必要があります。これらのプラグインのドキュメントを参照し、正しく設定してください。  ネイティブ設定の適用:Firebaseを使用するには、iOSとAndroidの両方のネイティブプロジェクトにFirebaseの設定を適用する必要があります。これには、Firebaseの設定ファイル(GoogleService-Info.plistおよびgoogle-services.json)をプロジェクトに追加し、ネイティブ側の設定を行う必要があります。Firebaseのドキュメントに従って、これらの設定を正しく行ってください。  エラーハンドリング:Firebaseの機能を使用する際には、エラーハンドリングを適切に行うことが重要です。例外処理やエラーメッセージの表示を適切に実装し、ユーザーに対して適切なフィードバックを提供するようにしてください。  これらの注意点を考慮して開発を進めることで、FlutterとFirebaseをスムーズに連携させることができます。両者のドキュメントやサンプルコードを参照し、適切な実装を行ってください。


Flutterを使うことにします。次にしなければいけないことはなんですか? Flutterを使ってアプリ開発を始めるためには、以下の手順を実行してください。  環境設定: Flutter SDKをダウンロードし、環境変数にパスを追加してください。また、必要に応じてAndroid StudioやXcodeをインストールして設定します。  エディタの設定: 開発に使用するエディタ(VSCode、Android Studioなど)にFlutterプラグインとDartプラグインをインストールします。これにより、エディタがFlutterとDartの開発をサポートするようになります。  プロジェクトの作成: コマンドラインかエディタを使って新しいFlutterプロジェクトを作成します。これにより、プロジェクトのベース構造が自動的に生成されます。  lua Copy code flutter create freezstock ライブラリの追加: pubspec.yamlファイルに、必要な外部ライブラリ(Firebase関連ライブラリや他のパッケージ)を追加します。その後、flutter pub getコマンドを実行してライブラリをプロジェクトにインストールします。  Firebaseの設定: Firebaseプロジェクトを作成し、Flutterアプリに必要な設定ファイル(GoogleService-Info.plistおよびgoogle-services.json)を追加します。また、Firebaseの各機能に対応するプラグインをインストールして設定してください。  コードの記述: 生成されたプロジェクトの構造をもとに、アプリのコードを記述していきます。libディレクトリ内にあるmain.dartファイルから開発を始め、必要に応じて新しいファイルやディレクトリを作成してコードを整理してください。

このように、やらなきゃいけないことをどんどん教えてくれます、これに従って、リポジトリやFlutterの準備を進めました。(実際はFlutterのSDKは既に入っていたりするけど)

と、いうことで、Part1ではアプリ名を決めて、技術選定を行い、リポジトリが出来上がりました。時間がある時に、どんどんChatGPTと一緒に開発を進めていこうと思います!

github.com

開発の様子はTwitterでも紹介していきます!