生成AIを使ってアプリを設計する

アプリ設計,生成AI

地図コンポーネントを使ったアプリのアイデアとして、レストラン検索アプリを作ろうと考えました。
本来なら食べログやぐるなびからレストラン情報を取得する方法が考えられますが、これらのサービスは有料だったり、無料でもアプリから情報を取得するためのAPIキーを一般公開できないなどの制約があります。
そこで、スプレッドシートコンポーネントを使用し、Google Sheets APIを経由してレストランの情報を取得し、地図上で検索できるようにすることにしました。

作り方はChatGPTとGeminiに相談してみました。

  1. MIT App Inventor 2 App Maker
  2. ChatGPT-o1
  3. Gemini 1.5 Pro
  4. Gemini 2.0 Experimental Advanced

ラフなアイデアから始めたところ、こんな結果です。

  • 1はスプレッドシートコンポーネントを無視したので却下。でもマーカークリック時に通知機能でレストラン情報を表示するのは良いアイデア。
  • 2もスプレッドシートコンポーネントを無視したので却下。
  • 3はスプレッドシートコンポーネントを使用しているが他の部分のデザインがおかしい。
  • 4はスプレッドシートコンポーネントを使用しているし、全体的によくできていて、コンポーネントの使い方で知らないものを教えてくれるのでありがたい。

4で作ってみます。

アプリのアイデア

地図コンポーネントを使って現在地の周辺にあるレストランを検索し、クリックしたときに以下の情報を表示するApp Inventorアプリを作りたい。APIは使わずにレストラン情報はGoogleスプレッドシートを使いたい。どうするといいか?

名前 料理 営業時間 定休日 住所 電話番号

MIT App Inventor 2 App Maker

地図コンポーネントを使って現在地の周辺にあるレストランを検索し、クリックしたときに以下の情報を表示するApp Inventorアプリを作りたい。APIは使わずにレストラン情報はGoogleスプレッドシートを使いたい。どうするといいか?
名前 料理 営業時間 定休日 住所 電話番号

以下の手順で、MIT App Inventorを使用して「地図コンポーネント」と「Googleスプレッドシート」を利用し、現在地周辺のレストラン情報を表示するアプリを作成できます。APIを使用せず、Googleスプレッドシートでデータを取得します。

---

### 必要な機能:
1. 現在地取得:`LocationSensor`を使用。
2. レストランリスト取得:Googleスプレッドシートから情報を取得。
3. 地図表示:`Map`コンポーネントを使用。
4. レストラン情報表示:`Notifier`または`Label`コンポーネントを利用。

---

### 実装ステップ

#### 1. Googleスプレッドシートの設定
1. **Googleスプレッドシートを作成**し、以下のようなフォーマットでデータを入力:
   | Name          | Cuisine    | Hours        | ClosedDay | Address       | PhoneNumber   | Latitude | Longitude |
   |---------------|------------|--------------|-----------|---------------|---------------|----------|-----------|
   | Restaurant A  | Italian    | 10:00-22:00  | Monday    | Example Addr  | 1234567890    | 35.6895  | 139.6917  |
   | Restaurant B  | Japanese   | 11:00-23:00  | Sunday    | Example Addr  | 0987654321    | 35.6896  | 139.6920  |

2. スプレッドシートを**公開**設定にし、共有リンクを作成します。

3. スプレッドシートのデータをCSV形式で取得できるURLを生成:
   - スプレッドシートのURL例:
     ```
     https://docs.google.com/spreadsheets/d/your_spreadsheet_id/edit#gid=0
     ```
   - データ取得用URL:
     ```
     https://docs.google.com/spreadsheets/d/your_spreadsheet_id/export?format=csv
     ```

#### 2. App Inventorの準備
1. **コンポーネント追加**:
   - `LocationSensor`(現在地を取得)
   - `Map`(地図表示)
   - `Web`(スプレッドシートデータ取得)
   - `Notifier`(レストラン情報の表示)
   - 必要に応じて`Button`や`Label`を追加。

---

#### 3. ブロックの設定

##### **現在地の取得**
- `LocationSensor.LocationChanged`イベントを使用し、緯度・経度を取得。
```plaintext
When LocationSensor1.LocationChanged
  set global CurrentLatitude to LocationSensor1.Latitude
  set global CurrentLongitude to LocationSensor1.Longitude
```

##### **スプレッドシートデータの取得**
- `Web1`を使用し、スプレッドシートからデータを取得。
```plaintext
When ButtonGetRestaurants.Click
  set Web1.Url to "https://docs.google.com/spreadsheets/d/your_spreadsheet_id/export?format=csv"
  call Web1.Get
```
- データ取得完了時の処理:
```plaintext
When Web1.GotText
  set global RestaurantData to call csv table to list Web1.ResponseContent
```

##### **地図にマーカーを追加**
- `Map`コンポーネントの`AddMarker`メソッドを使用。
```plaintext
for each item in global RestaurantData
  call Map1.AddMarker
    Latitude: select list item (item, 7)
    Longitude: select list item (item, 8)
    Title: select list item (item, 1)  // レストラン名
    Description: select list item (item, 2)  // 料理
```

##### **マーカークリック時に情報表示**
- `Map1.MarkerClick`イベントを使用:
```plaintext
When Map1.MarkerClick
  call Notifier1.ShowMessageDialog
    Message: join "Name: " + marker.Title + newline
                   "Cuisine: " + marker.Description + newline
                   "Phone: " + get restaurant phone (marker.Title)
    Title: "Restaurant Info"
    ButtonText: "OK"
```

##### **電話番号や住所の取得**
- タイトルに基づいて該当するレストラン情報を取得。
```plaintext
function get restaurant phone(name)
  for each item in global RestaurantData
    if select list item (item, 1) = name
      return select list item (item, 6)  // 電話番号
```

---

### 画面デザイン
1. 地図を画面いっぱいに配置。
2. ボタンでスプレッドシートからデータを取得。
3. マーカークリックで情報を表示。

---

これにより、Googleスプレッドシートを使用して現在地周辺のレストラン情報を表示し、詳細を確認できるアプリを構築できます!

ChatGPT-o1

残りのコンテンツを表示するにはログインする必要がありますどうぞ . 会員ではないですか ? 入会のご案内

アプリ設計,生成AI

地図コンポーネントを使ったアプリのアイデアを思いついたので、ChatGPTとGeminiに相談してみました。

  1. MIT App Inventor 2 App Maker
  2. ChatGPT-o1
  3. Gemini 2.0 Experimental Advanced

ラフなアイデアから始めたところアプリの感想から設計までいずれも一応それらしく行っていますが、は余計なことをしていてあまりうまく設計できていません。UIの設計はが良い感じです。もデータ保存に関してはJSONを使っていて良いですが、の方が丁寧に説明してくれています。他を参考にしながらで作ってみます。

作ってみたところ、とりあえず3時間で動きましたね。あとは使い勝手をよくするために調整。

アプリのアイデア

写真を撮るとGPSで位置も取って地図にその写真のアイコン入れる。クリックで写真を拡大表示

MIT App Inventor 2 App Maker

こんなアプリはどう思う?:写真を撮るとGPSで位置も取って地図にその写真のアイコン入れる。クリックで写真を拡大表示

このアプリのアイデアは非常に魅力的で、以下のような構成でMIT App Inventorを使用して実現できます。写真撮影とGPS座標の取得、さらに地図にその写真をマークする機能を組み合わせたアプリは、旅行記録、不動産の調査、プロジェクト管理など、多くの用途に役立ちます。

### 必要なコンポーネント
1. **カメラ (Camera)**:
   - ユーザーが写真を撮るために使用。
   - 撮影後、写真のファイルパスを取得。

2. **ロケーションセンサー (LocationSensor)**:
   - 写真が撮影されたときのGPS位置情報(緯度・経度)を取得。

3. **マップ (Map)**:
   - 地図を表示し、写真のアイコンをその位置にマッピング。

4. **マーカー (Marker)**:
   - 撮影された写真ごとにマップに追加されるポイント。クリックすると写真が表示される。

5. **ストレージ (TinyDB)**:
   - 写真とGPSデータを保存して、アプリを閉じた後もデータを保持する。

### 実装手順
1. **UIのデザイン**:
   - ボタン:「写真を撮る」ボタン。
   - マップ:地図を表示するエリア。
   - 表示用のコンポーネント(例えば、画像表示用のラベルやポップアップ)。

2. **ブロックの構成**:
   - 「写真を撮る」ボタンのクリック時に、カメラを起動し、撮影後に写真のファイルパスを取得。
   - ロケーションセンサーでGPS座標を取得。
   - 写真ファイルのパスとGPS座標をTinyDBに保存。
   - 取得したGPS座標に基づいて、マーカーをマップに追加。マーカークリック時に、対応する写真を表示する。

3. **データ保存と表示**:
   - TinyDBを使用して、各写真のデータを保存(ファイルパス、緯度、経度)。
   - アプリ起動時に、保存済みデータを読み込み、地図にマーカーを復元。

### 注意点
- 写真ファイルのストレージパスはAndroidの権限設定に依存するため、適切な権限(カメラ、ストレージ、位置情報)を要求する必要があります。
- 高精度なGPSデータを得るために、LocationSensorの設定を調整することを推奨します。

このアプリは、実用性とカスタマイズの可能性が高いプロジェクトであり、App Inventorの基本的な機能だけで実現可能です。さらに質問や特定のステップについての詳細が必要であれば教えてください!

詳細設計してください。追加で条件が必要ならば聞いてください。

詳細設計に進む前に、以下の質問をさせていただきます。この情報を基に、より具体的な設計を提案できます:

### 確認事項
1. **写真の保存場所**:
   - 写真はデバイスのローカルストレージに保存しますか?それともクラウド(例: Firebaseなど)にアップロードしますか?

2. **地図の機能**:
   - ユーザーがズームイン/ズームアウト、ドラッグして地図を移動できるようにしますか?
   - 写真を撮影した場所の詳細情報(例: 日時、説明など)をマーカークリック時に表示しますか?

3. **複数の写真管理**:
   - 複数の写真を同じ地図上に表示できますか?
   - 古いデータの削除や編集機能が必要ですか?

4. **アプリ使用の想定環境**:
   - アプリを主に使用する場面(例: 旅行、仕事の記録)。
   - オフラインでの地図表示やデータ管理が必要ですか?

5. **見た目と操作性**:
   - カメラ起動や地図表示時に特別なアニメーションやガイドが必要ですか?
   - UIデザインの好み(シンプル、カラフルなど)。

### 仮の前提条件
上記に回答をいただくまでの間、以下のような仕様で設計します:
1. 写真はローカルストレージに保存し、GPS座標と共に地図上にマッピング。
2. ユーザーは複数の写真を撮影して地図上に追加可能。
3. マーカーをクリックすると、写真と撮影日時を表示。
4. データはローカルストレージ(TinyDB)に保存。

これを基に詳細設計を進めますが、追加情報があれば適宜反映します。どうしますか?

これでお願いします

残りのコンテンツを表示するにはログインする必要がありますどうぞ . 会員ではないですか ? 入会のご案内

アプリ設計,生成AI

App Inventor 2のスプレッドシートコンポーネントを使うとGoogle Sheets API経由でリレーショナルデータベースの真似事ができそうなので、簡単なレストランの予約管理アプリを作ることにしました。

一から手で作るのも大変なのでChatGPTとGeminiに相談してみました。

  1. MIT App Inventor 2 App Maker
  2. ChatGPT-o1
  3. Gemini 1.5 Pro

UIはどれも同じように設計してくれました。スプレッドシートの設計ではそれぞれ違いが出ていますが、今回はリレーショナルデータベースの真似事をするのが一つの目的なので、リレーショナルデータベースっぽい作り方はしてくれない2は却下。3はコンポーネントの知識が無さそうなので3を参考にしながら1で作ってみます。

設計条件

  • テーブルは5卓、各テーブルは4席
  • 予約時間は18:00-20:00と20:00-22:00
  • 年中無休
  • データはGoogleスプレッドシートに格納
  • App Inventor 2のスプレッドシートコンポーネントを使ってGoogleスプレッドシートから読み込み、書き込み
  • 予約の一覧表示
  • 予約のキャンセル、変更が可能

MIT App Inventor 2 App Maker

まずは英語のApp Inventor 2の知識を持っているMIT App Inventor 2 App Makerです。

条件を与えて設計してもらいます。

次の条件でレストラン予約管理アプリを作ろうと思っているので設計してください。追加で条件が必要ならば聞いてください。
設計条件:
テーブルは5卓、各テーブルは4席
予約時間は18:00-20:00と20:00-22:00
年中無休
データはGoogleスプレッドシートに格納
App Inventor 2のスプレッドシートコンポーネントを使ってGoogleスプレッドシートから読み込み、書き込み
予約の一覧表示
予約のキャンセル、変更が可能

レストラン予約管理アプリの設計を以下に示します。この設計では、Googleスプレッドシートをデータベースとして使用し、MIT App Inventor 2のコンポーネントを活用して、予約管理を効率的に行えるようにします。

---

### **アプリ設計**
#### 1. **必要なコンポーネント**
- **ユーザーインターフェース**
  - **ListView**: 予約の一覧を表示
  - **TextBox**: 名前、電話番号などの入力
  - **DatePicker**: 予約日を選択
  - **Spinner**: テーブル番号と時間帯(18:00-20:00、20:00-22:00)の選択
  - **Buttons**: 予約作成、キャンセル、変更用
- **データ管理**
  - **Spreadsheetコンポーネント**: Googleスプレッドシートとのデータ連携

#### 2. **Googleスプレッドシートの構成**
| **列名**      | **内容**                      |
|---------------|-------------------------------|
| `ID`          | 各予約の一意識別子            |
| `Name`        | 顧客名                        |
| `Phone`       | 電話番号                      |
| `TableNumber` | テーブル番号 (1~5)            |
| `TimeSlot`    | 時間帯(18:00-20:00/20:00-22:00) |
| `Date`        | 予約日                        |

---

### **アプリの基本機能**
#### **1. 予約作成**
- **UI操作**: 名前、電話番号、テーブル番号、予約時間帯を入力し、「予約作成」ボタンを押す。
- **ブロック設計**:
  1. 入力データを取得。
  2. `Spreadsheet.AddRow` メソッドを使用してスプレッドシートに新規行を追加。
  3. 成功した場合は確認通知を表示。

#### **2. 予約一覧の表示**
- **UI操作**: アプリ起動時または「更新」ボタン押下時に予約データを表示。
- **ブロック設計**:
  1. `Spreadsheet.Query` メソッドでスプレッドシートの全データを取得。
  2. 結果をListViewに表示。

#### **3. 予約の変更**
- **UI操作**: ListViewで変更対象を選択し、入力フォームでデータを修正後、「変更」ボタンを押す。
- **ブロック設計**:
  1. `ID`をキーにスプレッドシートを検索。
  2. `Spreadsheet.UpdateRow` メソッドを使用して該当行を更新。

#### **4. 予約のキャンセル**
- **UI操作**: ListViewでキャンセル対象を選択し、「キャンセル」ボタンを押す。
- **ブロック設計**:
  1. `ID`をキーにスプレッドシートを検索。
  2. `Spreadsheet.DeleteRow` メソッドを使用して該当行を削除。

---

### **設計上の留意点**
1. **入力バリデーション**:
   - 名前や電話番号が未入力の場合、エラーメッセージを表示。
   - テーブルと時間帯の重複予約を防ぐロジックを追加。
2. **UI設計**:
   - フォームはシンプルにし、必要な情報のみを入力。
   - メッセージや通知を活用して操作の成功/失敗をわかりやすく表示。
3. **スプレッドシートの設定**:
   - スプレッドシートを事前に作成し、App InventorのSpreadsheetコンポーネントでアクセス許可を設定。

---

### **サンプルブロック例: 新規予約作成**
以下のようなブロックを使用します。

1. **予約作成ボタン押下イベント**
   ```blocks
   when CreateReservationButton.Click do
       if NameTextBox.Text ≠ "" and PhoneTextBox.Text ≠ "" then
           call Spreadsheet1.AddRow
               Data: (create a list (NameTextBox.Text, PhoneTextBox.Text, SelectedTable, SelectedTimeSlot, SelectedDate))
           notify User "予約が作成されました!"
       else
           notify User "すべての項目を入力してください。"
   ```

質問や追加要望があればお知らせください!

予約一覧の表示で全てを表示すると多すぎると思う。当日分だけとかにはできない?

残りのコンテンツを表示するにはログインする必要がありますどうぞ . 会員ではないですか ? 入会のご案内