前提条件
- Sevallaにアカウントを作成しておきます。
事前準備
まず、Laravel 13を使ってデプロイの対象となるアプリケーションを準備します。
今回は cc-sddを使って、以下のような簡単なTodoリストのアプリケーションを開発して、 GitHub に push しました。
Sevalla にアプリケーションを登録
それでは、 Sevalla にデプロイするための設定を行っていきます。
Sevalla のwebページにアクセスしてサインインを行います。
サインアップ後の初回サインイン時は支払い方法の入力が求められるで、画面の指示に従い入力します。
支払い方法の入力が終わるとアカウントが有効状態に切り替わり利用開始となるようです。
画面の右側に「Welcome to Sevalla」といったメッセージが表示され、アプリケーションやデータベースのデプロイが促されますが、ここは一旦「Skip for now」をクリックします。
このような構成のダッシュボードが表示されます。
50日間で20ドル分のクレジット付与はかなりお得な気がしますね。
まずは、プロジェクトを作成するため、左側のメニューから「Projects」を選択して、「Create project」をクリックします。
「C3PO」や「Darth Vader」のようにスターウォーズ的なミームのプロジェクト名が初期表示されるようです。
今回は特に気にせずデフォルトで表示されたものをそのまま採用しました。
このような表示に切り替わるので、作成されたプロジェクトをクリックします。
アプリケーションの設定を進める前にデータベースの準備を行う必要があるため、「Create or add service」ボタンをクリックして、「create database」を選択します。
データベースの選択肢の中から、今回は「MySQL」を選択します。
MySQL Version、Location(リージョン)、Resource(スペック)等の選択、及び、Database name や Database userなど接続に関する情報の入力が必要となります。
今回、接続情報については初期表示されている内容をそのまま利用することにしました。
Location の選択肢を確認すると、「Asia」地域にて「Tokyo, Japan」が選択可能なので、こちらを選択しましょう。(なお、「Osaka, Japan」も選択可能なようです)
Resource の選択肢は様々ありますが、今回は検証用途なので最も低いスペックの「DB1(月額5ドル)」を選択しておきます。
「Create database」をクリックします。
データベースの作成が完了すると、このように表示されます。
データベースが作成できたら「Projects」の画面に戻って、次は「Create or add service」ボタンをクリックして、「create application」を選択します。
Git Provider、Repository、Location(リージョン)、Resource(スペック)等の選択、及び、Name(アプリケーション名)の入力が必要となります。
今回は GitHub のリポジトリと連携してデプロイを行いたいので「Private GIT repository」、「GitHub」が選択された状態で「Connect to GitHub」をクリックします。
デプロイ対象のリポジトリが未指定の状態なのでプルダウンに選択肢が表示されていません。
リポジトリの設定を行うため「Adjust GitHub repository access」をクリックします。
Kinsta(Sevallaの運営会社)と GitHub リポジトリとの連携設定が完了したら、リロードボタンをクリックして、デプロイ対象のリポジトリとブランチ名を選択します。
プルダウンからリポジトリを選択すると、「Name(アプリケーション名)」はリポジトリ名が自動的に入力されます。
「Location(リージョン)」についてはデータベースと同様に「Tokyo, Japan」を選択し、「Resource(スペック)」についてもデータベースと合わせる形で最も低いスペックの「0.3 CPU / 0.3 GB RAM(月額5ドル)」を選択しておきます。
「Create application」をクリックします。
アプリケーションの作成が完了すると、このように表示されます。
開発環境で以下のコマンドを実行して「APP_KEY」を発行します。
$ php artisan key:generate --show
base64:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
次は環境変数を設定するため、左側のメニューから「Applications」→「Environment variables」を選択して、「Add environment variables」をクリックし、必要な項目を追加します。
.env ファイルから一括で入力を行いたい場合は、「Import .env」をクリックしてください。
「APP_KEY」については事前に開発環境で発行しておいたものを転記します。
「DB_URL」についてはデータベースの画面の「Internal connection」の欄に表示されていた「URL」の値を転記します。
必要な環境変数の入力が終わったら「Add environment variables」をクリックします。
「Environment variables」の画面にこのように表示されます。
デプロイの準備が整ったので、左側のメニューから「Applications」→「Deployments」を選択します。
「Build environment」を確認すると、デフォルトでは「Nixpacks」が選択されている状態です。
「Update build strategy」をクリックして、「Nixpacks」以外のビルド方法を確認します。
デフォルトは「Nixpacks」で、こちらはリポジトリの内容から自動的に判断して環境構築を行ってくれるようです。
「Railpack」は Railway の環境で採用されているもので、こちらは Railway で既に動作確認が取れているため、これを選択することで恐らく問題なく動作するでしょう。
「Buildpacks」は Heroku で採用されているビルドの仕組みになりますが、 Buildpacks は随分触っていないため知見がありません。
「Dockerfile」についてはリポジトリ内に準備していないため、今回は選択対象から外れます。
ということで、今回はデフォルトで選択されている「Nixpacks」を利用することとします。
「Deploy now」をクリックします。
デプロイ対象は「main」ブランチになるので、そのまま画面下部の「Deploy」をクリックします。
デプロイが完了するまでしばらく待ちます。
残念ながらデプロイが失敗したようなので、対象のデプロイをクリックして内容を確認します。
「Deployment logs」を確認すると、PHP 8.4系、Node.js 18系、npm 9系が利用されていることがわかります。
npm ci 実行時に上記のバージョンでは条件を満たしていないことがわかります。
その結果、 npm run build の際にエラーが発生しているようです。
ということで、「Update build strategy」をクリックして「Railpack」に切り替えます。
「Build environment」に「Railpack」と表示されていることを確認して「Deploy now」をクリックします。
デプロイが完了するまでしばらく待ちます。
緑のチェックマークが表示されているのでビルド自体は通っているように見えますが、「The app exited with code 1 (Error)」という不穏なメッセージが表示されたので、これをクリックします。
とても不穏な内容が表示されました。
左側のメニューから「Applications」→「Logs」を選択します。
ログを確認すると、どうやらそもそもデータベースに接続できていないようです。
左側のメニューから「Databases」→「Networking」を選択します。
Sevalla のデータベースはデフォルトで「Internal connection」になっているので、データベースに接続できるアプリケーションを指定して許可する必要がありそうです。
「Add internal connection」をクリックして、「Application」から既に作成済みの「my-todo-list」を選択し、「Add internal connection」をクリックすることで、アプリケーション側からデータベースに接続することができるようです。
ちなみに、「Add environment variables to the application」のトグルをオンにすると、データベースの接続情報をアプリケーション側の環境変数に登録してくれる親切設計になっています。
今回は「DB_URL」を既に登録済みですので、このトグルはオフのままで問題ないでしょう。
「Connected applications」にアプリケーション名が表示されていることを確認します。
改めてデプロイを実行してしばらく待ちます。
今度は警告が表示されることなくデプロイが完了したようです。
データベースのマイグレーションが成功していることを確認するため、左側のメニューから「Databases」→「Studio」を選択します。
画面上に各テーブル名が表示されていて、「migrations」のテーブルをクリックすると履歴が登録されているので、マイグレーションが成功しているようです。
左側のメニューから「Applications」→「Domains」と選択するか
もしくは、「Applications」→「Networking」と選択することで、外部からアクセス可能なURLを確認することができます。
URLは以下のような形式になっています。
https://[アプリケーション名]-[XXXXX].sevalla.app/
Todoリストのページのルーティングパスにアクセスすると、Todoリストの初期画面が表示されました。
Todoの追加・更新・削除が行える(DBにデータが保存される)ことも確認できました。
まとめ
まず、初回登録時の20ドル分のクレジット付与についてですが、これだけのクレジットがあれば検証したいことが色々と試せるので、これはかなりありがたい特典と言えます。
Laravel Cloud、Railwayの5ドル分のクレジット枠と比較するとその違いがはっきりとわかります。
データベースについてはどのPaaSを使っても同じかと思いますが、データベースを利用する場合の金額の高さは結構ネックかもしれません。
本番環境として利用するのであれば、それくらい払いましょうという話ではあるかもしれませんが、小規模なアプリケーションでもデータベースを使いたいシーンは多いので、データベースの利用料がもう少し抑えられると嬉しいかもしれませんね。
Laravel Cloudで言うところの「Scale to Zero」と同様に「Hibernation」の機能があるので、トラフィックが発生していない場合のコスト抑制については考えられてそうでした。
操作感については、 .env 形式のファイルをアップロードできたり、データベースの接続情報を連携できたりと、環境変数の登録周りにおいて気が利いてるの感じました。
「Nixpacks」がうまく動かなかった点は少々残念でしたが、「Railpack」を選択することでスルッとデプロイが成功したのでかなり楽でした。
以前、Fly.ioを触った際に、 Dockerfile を自動生成してくれるのはすごく便利だなぁと感じましたが、最近のPaaSはリポジトリの内容からいい感じに読み取ってデプロイに必要な環境を整えてくれるので、本当に便利だなと改めて感じました。
また、全体的に操作する際に迷う箇所がなくわかりやすかったですし、この機能とこの機能がこういう風に繋がってるのね、という納得感のある作りになっている面も非常に好印象でした。
関連記事























































