rosh-1228のメモ

自身の勉強したことをメモしてます。

Railwayの紹介

フィヨルドブートキャンプ Part 2 Advent Calendar 2022 の8日目の記事です。(Part1はこちら)

昨日は、ham-capさんの「Vimが好きだ」でした。

目次

はじめに

Minoru MaedaさんがHeroku の代替 OSS を試した話を書かれておりますが、私もHerokuの代替として使用できそうなRailwayというホスティングサービスについて簡単に紹介をします。

プラン

プランは以下の3つあり、私が使ったStarter PlanDeveloper Planについて説明します。

  • Starter Plan
  • Developer Plan
  • Team Plan Offering

Starter Plan

メモリは512MB、最大1GBのディスク容量、メモリは共有型になってます。

価格は無料ですが、上限が決まっており、毎月5ドル分のリソースを使いきるか、500時間(約20日)使用することができます。

逆にいうと、5ドル分のリソースを使用するか500時間稼働させるとデプロイしているサービスが停止されます。

上記のため、毎月約10日くらいはサービスが停止することになります。

Developer Plan

メモリは8GB、最大100GBのディスク容量、メモリは8Coreになってます。

価格はStarter Planと一緒で5$まで無料で、5$を超えたリソースを使用すると課金されます。

しかし、5$まで無料であるので、それを超えるリソースを使用しない限り無料であり、サービスが月の途中で停止される心配はありません。

また、5$を超えない限りでリソースを使用しながら、スペックはStarter Planより大幅にアップデートされます。

そのため、私が自作したWebサービスFjordBootCamp Contiburotrsでは、Developer Planを使用しています。

デプロイ

Githubリポジトリと連携させることで、mainブランチにマージされたタイミングで自動でデプロイをしてくれるようになります。

また、ブランチも選択できるので、mainではないブラントをデプロイしたい時は、設定から変更できます。

CLI

Railwayは、コマンドも使うことができ、ローカルのディレクトリをRailwayにデプロイすることができます。

詳細に知りたい方はこちら

使うであろう代表的なコマンド以下に紹介します。

インストール

NPMをインストールします。

npm i -g @railway/cli

ログイン

railwayにコマンドでログインします。 以下を実行するとブラウザが立ち上がります。

railway login

ブラウザを立ち上げない場合は、以下のように--browserlessをつけます。

railway login --browserless

コマンド実行

railway runを使うことで、Railwayの環境でコマンドを実行することができます。

私の場合、railsバッチ処理を実行しており、以下の様にgithub actionsにてrailway runを使用しています。

name: run batch
run: railway run bundle exec rails runner lib/batch/contributor_commit_collector.rb
  env:
          RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}

デプロイ

デプロイしたいプロジェクトディレクトリに移動し、以下のコマンドを実行します。

cd [プロジェクトディレクトリ]
railway up

これだけで、ローカル環境をRailwayにデプロイできます。とても簡単ですね!

スケジューラ

Railwayではスケジューラはサービスとしてありません。

そのため、私はGithub Actionsを使い、Railway環境でバッチ処理を実装しております。

私のworkflowファイルはこちらです。

Github Actionsは時間通り動かないことがありますが、私の自作サービスの場合は、そこまできっちり時間通りにランキングを更新することは要件として重要ではないのでGithub Actionsで十分スケジューラとして機能しています。

おわりに

以上、Railwayというホスティングサービスについての紹介記事でした。

Railwayについては日本語記事が少なくあまり見かけることが少なかったのでここで紹介させていただきました。 詳しくRailwayについて知りたい方はこちらのDocumentを参考にしてください。

個人的にはシンプルで使いやすいという印象です。

想定外の事が起こり、日がずれちゃいましたが、なんとか記事を書かせてもらいました💦

明日はchocoさんが記事を書いてくださいます。