supabaseとRender.comを使って無料で簡単にウェブアプリケーションを公開する

## 概要
supabaseのデータベースとRender.comを使って無料で簡単にウェブアプリケーションを作りたい！
今回はNode.jsを使って作った雑な天気予報サービスをsupabaseとRender.comを使って公開する方法についてまとめました。

今回実装した雑な天気予報サービス↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982152/6fdba084-10fe-0791-f45b-c30a5a6aa17f.png)
※ 天気の情報が英語だったのでSpreadsheetに英文全文(100行くらい)突っ込んでchatGPTで和訳させたので、ちょっと変な日本語があるかも知れないけれどそこはご愛嬌。

### この記事で書くこと
- supabaseのデータベースを使った簡単な連携
- Render.comへのビルド

### この記事で書かないこと
- Node.jsでの実装方法
- ドメインの取得や連携

## supabaseを使った簡単な連携

### supabaseとは
いわゆるBaaSと呼ばれるサービスで、Firebaseみたいなもの。
こちらの記事が詳しかったので詳細知りたい方は↓を参照ください。

https://qiita.com/kabochapo/items/6a2a391832825d17af7d

### 連携する方法

#### 1. 会員登録
まずは会員登録が必要です。
↓こちらよりサインアップを完了してください。

https://app.supabase.com/sign-up

#### 2. プロジェクトとテーブルを作る
サインアップが完了したらプロジェクトを作ります。
↓このような画面に遷移しますので、`New　project` をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982152/cc42ea0b-4abf-7cc6-214d-4d83b75a69f2.png)

最初にサービスのオーナー的なものを決める必要があるので、チーム開発の場合はわかりやすいチーム名など、個人開発なら名前なんかをつけるとよいのではないかと思います。
自分は面倒くさいので `main` にしちゃいました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982152/eb9cea80-df0b-56c1-0d72-53a5eda9e615.png)

次に新しいプロジェクトを作ります。
プロジェクト名とデータベースパスワードを設定してください。
Regionは `Tokyo` で。
できたら `Create new project` をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982152/7d08e35f-64fd-3190-b65b-04a62f2d95ba.png)

↓こんな感じ。
これでプロジェクトの作成は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982152/802c83d1-35b5-b62b-eb8b-3b5f34675eaf.png)

今回はデータベースを使いたいので、左のメニューアイコンから `Database` を選択し、`Tables` をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982152/538dca2e-a799-c3da-7ee4-a8c80d5c4356.png)

右上にある `New tables` をクリックすると↓こんな画面が表示されるので、必要なカラムを設定していきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982152/2920c9fe-c862-65d6-7092-75827b937fb1.png)

今回はこんな感じになりました↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982152/1952d2f2-7eff-e383-284c-f3d56854bb2b.png)

#### 3. 連携に必要な情報を取得
プロジェクトができたら、連携に必要な情報を取得します。
左メニューアイコンの `Project Setting` に移動し、 `API` をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982152/379e7b14-1f8a-4930-c6a5-f09668d3c0e2.png)

↓こんな感じの画面が出るので、 `Project URL` と `Project API keys` (`anon`って書いてある方)をメモっておきましょう。
![スクリーンショット 2023-03-19 12.13.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982152/749cf319-516c-f4d0-ab8c-aa3d16077a79.png)

#### 4.　実装する
ここまでできたら、実際にソースコードに組み込んで実装していきましょう。
公式ドキュメントはこちら↓

https://supabase.com/docs

実装方法について詳細はドキュメントを見ていただければと思いますが、↓こんな感じで使いました。
```javascript
const env = require('dotenv').config();
const { createClient } = require('@supabase/supabase-js');

// Create a single supabase client for interacting with your database
const supabaseUrl = process.env.SUPABASE_URL;
const supabaseKey = process.env.SUPABASE_API_KEY;
const supabase = createClient(supabaseUrl, supabaseKey);

module.exports = {
  fetchData: async () => {
    const { data, error } = await supabase
      .from('dailyData')
      .select()
      .gte('date', new Date().toLocaleDateString().slice(0, 10));
    return data;
  },
  insertData: async (params) => {
    const { error } = await supabase
      .from('dailyData')
      .insert(params);
    return error ? error : true;
  }
}
```

今回実装したソースコード:

https://github.com/ryoohshima/weatherForecast

これで、supabaseのデータベースを使うことができるようになりました。


## Render.comへのビルド

### Render.comとは
一言でいうと、ウェブアプリケーションを簡単に運用できるプラットフォームを提供するサービスです。
Herokuの代わりとして注目されています。
↓このあたりの記事が詳しかったので参考までに。

https://zenn.dev/mitsuruokura/articles/12b17d406902ab

### ビルドする方法

#### 1. 会員登録
まずは会員登録しましょう。
↓こちらからサインアップできます。

https://dashboard.render.com/register?next=/

#### 2. デプロイ環境を作る
登録できたら↓こんな画面が出てきます。
今回はウェブサービスなので、 `Web Services` を選択します。
![スクリーンショット 2023-03-18 8.52.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982152/6dd2834c-3d95-a290-eaa5-ec74f8b8e6d0.png)

GithubかGitlabと接続することができるので、ソースコードをアップしている方のアカウントを連携してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982152/1e3c50f8-14d7-7489-bc41-a89f6f4dd584.png)

gitアカウントを連携すると、↓こんな感じでアップされているリポジトリ一覧が表示されます。
デプロイしたいリポジトリを選択してください。
![スクリーンショット 2023-03-19 9.37.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982152/bb2caa1f-e584-ca29-cb38-5b35c9ed11e4.png)

次にデプロイするための設定をしていきます。
今回はこんな感じ↓
Regionは東京がなかったので、一番近そうなシンガポールにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982152/c1881c02-bd7c-fc38-a1e2-3266c392ca97.png)

後は右上の `Manual Deploy` をクリックするだけ。
アプリケーションがちゃんと実装できていれば、これでデプロイできるはずです。
できたら左上のURLをクリックすると、公開されたアプリケーションにアクセスすることができます。
![スクリーンショット 2023-03-19 11.32.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982152/39a7ecd4-ce7f-1486-0310-c2a2dcf5d3fa.png)

もし環境変数を設定する必要がある場合は、左メニューの `Environment` から設定することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982152/ab7650b2-8e46-22bf-dead-0b1f1f5e2071.png)

## まとめ
ここまで、supabaseとRender.comを使ってウェブアプリケーションを公開する方法についてまとめました。
どちらも簡単に使うことができ、わかりにくい点もそんなになかったので、プロトタイプなどを公開する際などには手早くできていいのではないかと思います。