無料で使える！ render.comとは？

# 初めに
[myjlab advent calender 2022](https://qiita.com/advent-calendar/2022/myjlab) 5日目。

個人的には2年目の参加になりますね。4年の阿左見です。
最近は卒論に追われながら内定者インターンに勤しんでいます。卒論やばいです。

昨日は@yoshiki495くんが[HARK](https://qiita.com/yoshiki495/items/5702b164346e9f6aa0a1)に関する記事を書いてくれました。後輩の成長速度が恐ろしいです。

さて、先日とうとうherokuが無料で使用できなくなってしまいました。
円安も相まって学生、いや、全ての日本人個人開発者にとって悲しい出来事だったことと思います。

そんな中友人に[render.com](https://render.com)なるサービスを教えてもらいました。
使ってみるとこれがまたいい感じだったので、今日はそんなrender.comについて書いていこうと思います。

教えてくれたセイには非常に感謝しています。ありがとう。卒論のサーバー代が(たぶん)安くなりました。

今回はrender.comの簡単な紹介を兼ねてtodoアプリをデプロイしてみようと思います。~~アプリは今回の本質じゃないから簡単でいいよね~~

# renderって何ができるの
ここに載ってるサービスを使用することができます。
Cronとかやってくれるのは便利でいいですね。
* Static Site 
* Web Services
* Private Service
* Background Worker
* Cron Job
* PostgreSQL
* Redis
* Blue Print

いくつか以下で紹介します。

※プラン紹介は[来年プラン変更が走りそうなので](https://render.com/pricing-jan-1-2023)省きました。
# Static Site

基本無料でwebフロントエンドをデプロイすることができます。
GithubやGitlabのリポジトリを紐づけることで指定ブランチへのpush毎/マージ毎にデプロイしてくれます。Github　Actions等なしにCI/CDチックなことができるのは非常に魅力的です。

月間100gbまで無料だそうなので個人開発レベルだと何も困ることはなさそうですね。

またWeb Serviceと共に、 Pull Request Previewsという機能が存在します。この機能はPRが開いた時、renderが自動で検知し、一意のonrender.comがドメインのURLでインスタンスを作成してくれます。
もはやステージング環境までいらないのです。またPRがクローズされたタイミングでインスタンスも破棄されるため、容量圧迫の心配はありません。
PRの修正コミットも自動反映してくれるので非常に良心的なサーバーなのではないでしょうか。

reactやvue,Next,Svelteのドキュメントがありますが今回はちょっと気になってた[Solid.js](https://www.solidjs.com/)でデプロイしてみようと思います。

# Web Services
簡単にwebサービスをデプロイできるサービス。
Static Siteと同じくGithubやGitlabと連携することで自動的にデプロイをしてくれます。Node.js, Python, Ruby, Elixir, Go, Rustあたりをメインにサポートしているようです。

Dockerに関して知見のある方であればDockerfileを使って任意のプログラミング言語でデプロイすることがきます。

SPA等の構成であればバックエンドとして使用することが多いと思います。

リアルタイムにログを取得したい場合は、[logtail](https://betterstack.com/logtail)のようなログストリーミングサービスを使用することもできます。複数あるサーバーのログを1画面で管理、監視できるのは非常に便利ですね。

# Postgre SQL
特に説明する必要もないとは思いますが、Postgre SQLのインスタンスです。
使えるpostgresのバージョンは13,14,15です。
dbに接続するための情報は画像のようなUIで取得可能です
(公式サイトより引用)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695469/b825e43a-fbb3-9713-f3ce-c4434eb1dba4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695469/b5de419d-16a5-bfeb-2c84-a0fe93f58c3f.png)
psqlコマンドも置いておいてくれるなんて優しさが滲み出ている。

# デプロイしてみよう
今回は[こちら](https://github.com/renasami/advents-2022-myjlab)のリポジトリを使用しています。

<b>バックエンドから始めます</b>
![スクリーンショット 2022-12-05 1.04.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695469/ca7798f9-a214-2251-487a-7e98f99a1254.png)
新規作成を始めると最初このような画面に飛ぶので項目を埋めていきましょう。
Regionがアジア圏はSingaporeだけなのがちょっと悲しいですが、今後のサービスの延長に期待です。
Branchは自動デプロイのためのブランチです。
Root Directoryはフロントエンドもバックエンドも全て同じリポジトリでカバーしているのでバックエンドが入ってるディレクトリを指定します(今回は/api)。
![スクリーンショット 2022-11-09 20.57.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695469/c09ac030-a260-f818-0ba5-c3b1bbb1a86a.png)

planはfreeを選択します。(最初はfreeが選択されていますが、一度でも課金するとStarterがデフォルトで選択されるトラップあるので気をつけてください)

<b>フロントエンド</b>
![スクリーンショット 2022-12-05 1.22.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695469/20a69795-4abb-88b8-b42e-5e33b8b03320.png)

バックエンドと違うのはBuild CommandとPublish Directoryでしょうか。
Firebase等使用したことがある方は馴染み深いと思いますが,Publish Directoryでビルド後のファイルが格納されるディレクトリを指定します。
これをしないと真っ白なページが表示されたりするなど悲しいことになります。

<b>データベース</b>
![スクリーンショット 2022-12-05 1.25.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695469/60c90799-5297-0584-fc2c-c59e3b969740.png)
Datadogと連携したい人はDatadogのapiを先に取得しておくことをお勧めします。
特筆する内容はないように感じますが、インスタンス名、DB名、psqlのユーザーを入力していきます。

これらを入力するとDBインスタンスが立ち上がります。
psqlコマンドを使用してリモート接続することで複数DBを単一インスタンスに作ることができます。

# いざデプロイ
![スクリーンショット 2022-12-05 12.51.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695469/a9127b79-8eb1-c350-58bc-b047ca578cbc.png)
プルリクエストをマージします。
![スクリーンショット 2022-12-05 12.51.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695469/dbd76d4f-46b1-73ee-e165-01cf358c1fa5.png)
こんな感じで、deployイベントが走るので待ちます。
成功するとこのような感じの画面でログを見ることができます(UI画面)

![スクリーンショット 2022-12-05 12.52.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695469/3da6ece1-fd1a-63f4-5a78-b1caf70ce019.png)

Dockerfileの不備で失敗したAPI側のログはこのようになります。
Failedになっている場合はインスタンスのスペック不足orデプロイコマンドの不備になるので見直してデプロイします。
![スクリーンショット 2022-12-05 12.53.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695469/b206593a-bd28-f8bb-b10e-0392edc02c6b.png)

このように成功するとonrender.comの画面で自分のアプリを確認することができます。
![スクリーンショット 2022-12-05 12.55.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695469/e33510f1-eb9b-141a-fc75-d3c543c8b6da.png)

# まとめ
だいぶ雑に紹介しましたrender.comでした。

* CIを勝手に回してくれる
* PR Reviewの機能はstg等が不要なので動作確認が楽(DBへの接続等は考慮の必要あり)
* 無料で使える範囲が広いのでスタートアップ等でも有用性がありそう。
* 学生のチーム開発には非常に便利
* 英語を受け付けない人には向いてないのが難点

特徴としてはこんな感じかと思います。

renderは個人的に好きなサービスなので(需要あれば)もう少し詳しくデプロイ周りやサービスの詳細について書いてみようと思います。

次回も@yoshiki495くんの記事だそうです。乞うご期待。