Galileo AIとVercelでAndroidハンズオンをサクッと用意した話

この記事はレコチョク [Advent Calendar 2024](https://qiita.com/advent-calendar/2024/recochoku) の14日目の記事になります。

## 自己紹介
こんにちは、株式会社レコチョク NX開発推進部Androidアプリ開発グループの齋藤です。

自分は趣味がスノーボードなのですが、昨シーズンは冬らしい寒さにならず、スキー場は雪不足でスノーボードに出かける機会が減ってしまいました。
予報では、今シーズンはラニーニャ現象で冬らしい寒さが訪れるそうです！
積雪も期待して、スノーボードに出かける機会が増えることを楽しみに過ごしています。

## 背景
レコチョクでは新卒向けのAndroidアプリ開発学習で、グループ配属後のOJTとしてGoogleコードラボに取り組むカリキュラムを用意しています。

Googleコードラボで写経しながら体系的に学べる点は良いですが、中途入社者に対しても同じカリキュラムを実施するか迷いました。
スキルスタックがあるエンジニアでしたので、機能要件を伝えて開発するほうが実践に近い形で学習できると考え、テーマを決めて用意したハンズオンを取り組んでもらうことにしました。

しかし、これを業務と並行して0から用意するにはなかなか大変そうです。。

そこで、最近個人的に気になっていたデザイン系の生成AIであるGalileo AIと、デプロイまでの敷居が低いホスティングサービスであるVercelを利用して、手軽にAndroidアプリ開発のハンズオンを用意できないか試してみることにしました。

## ハンズオン作成まで
1. ハンズオンのテーマ決定
   - 端末内のメディア再生&APIを利用したメディアDL機能を備えたプレイヤーアプリ開発
2. アプリ仕様をGalileo AIに入力し、デザインと機能要件をFigmaで作成 ★
3. ハンズオンアプリ開発に利用するAPIをVercelでセットアップ ★
4. 技術要件をreadme.mdにまとめ、ハンズオンカリキュラムを完成
<br>

### おことわり
今回「★」の部分を解決したかったので、1と4についての内容は記事で触れません


## Galileo AIとは
<br>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125567/87fcc5a9-6160-75f1-2b71-0d50bba73c04.png" width="25%">
<br>

GalileoAIはChatGPTのようにプロンプト(AIに対する簡単な指示文)によって、UIを自動で生成することができる生成AIツールです。<br>英語だけでなく日本語入力にも対応し、PC・SPどちらのデザインも生成できます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125567/dcd5786a-8fcf-db65-22b1-abd7829a6cf5.png" width="75%">

### Galileo AIの主な機能
- Text to UI：作りたいサイトについてチャットボットとやり取りして生成
- Image to UI：スクショなどの画像を参照してUIを生成
- Explorer：公開設定されたユーザーの投稿作品を参照

### Galileo AIの料金
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125567/da39d0e6-5e9b-e5b9-003e-f1207b1d18a0.png" width="75%">

サインアップの過程で案内された料金プランのページです
無料版を利用したい方は、右上のSkip nowをクリック

## デザインを作成してみる
1. Galileo AIにプロジェクトの要件を入力
   <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125567/6f20eae8-c596-40c6-b06e-136c5ecde47a.png" width="75%">
   <br>
1. 生成されたデザインのスタイルを選択（カラーテーマ、角丸、フォント）
   <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125567/8328c538-1026-3e9c-552f-71c30afdf593.png" width="75%">
   <br>
1. 自動生成されたUIを確認し・必要に応じてテキストで指示して調整
   <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125567/34433211-8ba9-d8fb-8295-b08605ee8136.png" width="75%">
   <br>
1. 大まかなUIが確定できたら、Figmaに貼り付け細かい編集を行います
   <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125567/873e521a-c706-5d49-45ca-fb30fdb0a110.png" width="75%">
   ※ 階層構造はいい感じでしたが、レイヤー名は自動でつけてくれないので、リネームは適宜自分で行う必要があります。
   <br>
5. 機能要件はFigmaの各画面上に記載してみました。Figmaの既存のコメント機能は1クリックしないと詳細が見られなく不便でしたので、ウィジェットの[Comment Note](https://www.figma.com/community/widget/1168789542647357646/comment-note)を利用させていただきました。

   ※ ハンズオンのアプリ要件を一部を添付
   <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125567/c87eb970-a064-33eb-cf45-6806fa41490d.png" width="75%">
   <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125567/6e5ab306-7b17-34bf-d9a4-58087859b5a2.png" width="75%">

デザイン、機能要件の作成は以上です。

以下オレンジ枠の画面はAPIから返却された情報を表示しますので、Vercelについて軽く紹介した後、デプロイまでの手順を紹介します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125567/f6a6c1c7-2087-51d7-a204-f58d5b39a84e.png" width="75%">

## Vercelとは
Vercel社が提供するフロントエンド向けのホスティングサービスです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125567/d446a9eb-ad1f-3063-537d-688e704ed7d1.png" width="40%">

### Vercelの特徴
- CD (継続的デリバリー) のサポート
- グローバルなCDNによる高速な配信
- 簡単なカスタムドメイン設定
- GitHub連携でプッシュするだけで、自動的にビルドとDeployが可能

### Vercelの料金プラン
料金プランはHobby・Pro・Enterprise の 3 種類があります。

| 機能                          | Hobby   | Pro       | Enterprise   |
|-------------------------------|---------|-----------|--------------|
| 価格                          | 無料    | $20/月    | カスタム価格 |
| デプロイメント                | 無制限  | 無制限    | 無制限       |
| 帯域幅                        | 100GB/月| 1TB/月    | カスタム     |
| Serverless Function実行       | 100時間/月 | 1000時間/月 | カスタム     |
| チームメンバー                | -       | 無制限    | 無制限       |
| 同時ビルド                    | 1       | 1(追加ごとに+$50) | カスタム     |
| プレビューデプロイメント      | ✓       | ✓         | ✓            |
| カスタムドメイン              | ✓       | ✓         | ✓            |
| HTTPS                         | ✓       | ✓         | ✓            |
| 継続的デプロイメント          | ✓       | ✓         | ✓            |
| Deployしたコンテンツのパスワード保護 | -       | ✓         | ✓            |
| チーム管理機能                | -       | ✓         | ✓            |
| 優先サポート                  | -       | -         | ✓            |
| SLA                           | -       | -         | ✓            |
| SSO                           | -       | -         | ✓            |
| セキュリティレビュー          | -       | -         | ✓            |


<br>

## APIデプロイまで
1. API実装
   - APIは[Hono](https://hono.dev/)というCloudflare Workers上で動く、軽量なWebフレームワークを使用します。
     - Honoについての詳細は上記リンクを御覧ください、アプリ側で使用するAPIはBasic認証付きで用意したかったので以下のように実装しました

        ```typescript
        import { Hono } from 'hono'
        import { basicAuth } from 'hono/basic-auth'
        import { handle } from 'hono/nextjs'
    
        export const config = {
          runtime: 'edge',
        }
        // ルートパス
        const app = new Hono().basePath('/api/media')
        // 全てのパスにBasic認証を適用
        app.use(
          "/*",
          basicAuth({
            username: username,
            password: pass,
          })
        );
        // 楽曲データを返す
        app.get('/songs',(c) => {
          return c.json(songsData)
        })
        ```
        <br>
1. 実装ができたらGitHubへPush
   <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125567/4fcdf0ad-66b9-883f-f8d4-4bdcbb34b70b.png" width="75%">

1. Vercelへデプロイ
   1. Vercelアカウントを作成
   1. プロジェクトを作成
      <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125567/ec682f4c-2a3f-31d3-5063-e4b4ef157d56.png" width="75%">
   1. GitHubリポジトリを選択
      <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125567/a80715d3-6ff4-cec0-ab50-db1471481002.png" width="75%">
   1. フレームワーク、環境変数の設定
      - 対応フレームワークは[こちら](https://vercel.com/docs/frameworks/more-frameworks#all-frameworks)
      <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125567/577979cc-083a-5a24-a7f8-3115602bad11.png" width="75%">
   1. デプロイ実行
      <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125567/5ba11f9f-2574-10b7-a76f-6399a4676d0b.png" width="75%">
   1. デプロイ完了
      <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125567/5d015731-7951-c234-438c-6bd6451fdccd.png" width="75%">
      - 以降、Pushをトリガーにビルド&デプロイが走るようになります。Vercelのdashboardを確認し、ステータスバッジが`Building`から`Ready`になったらデプロイ完了です
      ![vercel_building.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125567/05c1ebf2-406c-ad47-cc5a-ac95acaf95f0.png)<br> ↓ <br> ![vercel_ready.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125567/ae7b1cd3-b7dc-d68e-6530-c2b07e0239ce.png)

1. エンドポイントを確認
    ``` bash
    ❯ https://<vercelエンドポイント>/api/media/songs -u 'username:password' | jq
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:-- --:-100   750    0   750    0     0   4310      0 --:--:-- --:--:-- --:--:--  4335
    [
      {
        "title": "hoge_1",
        "artist": "fuga_1",
        "duration": 164000,
        "cover": "https://hogefuga.demo.com/media/covers/hoge_1.jpg",
        "url": "https://hogefuga.demo.com/media/tracks/hoge_1.mp3"
      },
      {
        "title": "hoge_2",
        "artist": "fuga_2",
        "duration": 164000,
        "cover": "https://hogefuga.demo.com/media/covers/hoge_2.jpg",
        "url": "https://hogefuga.demo.com/media/tracks/hoge_2.mp3"
      },
      {
        "title": "hoge_3",
        "artist": "fuga_3",
        "duration": 753000,
        "cover": "https://hogefuga.demo.com/media/covers/hoge_3.jpg",
        "url": "https://hogefuga.demo.com/media/tracks/hoge_3.mp3"
      }
    ]
    ```

無事レスポンスが返ってきました🎉
ここまでの準備はざっくり2日程度です

---

## 使用してみた感想
- Galileo AIとVercelを活用することで、専門知識が浅くてもFigmaを使ってデザイン要件を作成し、API環境を用意することができました
- Galileo AIで出力されたデザインは、細かい調整、コンポーネント化などはFigma上で編集を行う必要がありますが、デザインの大枠を作成するのには十分活用できそう
- Vercelはデプロイまでが容易でコストも掛からないので、手軽にAPI環境を構築するには便利そうでした
- ビルド&デプロイまで10秒ちょい
   - 早い！コードが少なかったからかも

## おわりに
ここまでお読みくださりありがとうございました！
明日の レコチョク Advent Calendar 2024 は15日目「大量のアクセスが来た時にサーバーで何が起きているのか」となります。お楽しみに！

この記事はレコチョクのエンジニアブログの記事を転載したものとなります。

https://techblog.recochoku.jp/11435