1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravel アプリケーションを Railway にデプロイしてみる

1
Last updated at Posted at 2026-08-12

前提条件

  • Railwayにアカウントを作成しておきます。
    • サインインは GitHub アカウント、または、メールアドレスを利用します。
      • image.png
    • アカウント作成から30日間または5ドル分のクレジットを消費するまでは無料で利用可能なようです。
      • image.png
    • メールアドレスでサインインを行った場合は GitHub アカウントとの連携が行われていないので、「Account Settings」→「Account Integrations」から GitHub に接続しておきます。
      • 接続前
        • image.png
      • 接続後
        • image.png
    • GitHub との連携時にデプロイ対象のリポジトリを設定しておきます。設定したリポジトリは GitHub の「Integrations」→「Applications」→「Railway App」の画面で確認可能です。
      • image.png

事前準備

まず、Laravel 13を使ってデプロイの対象となるアプリケーションを準備します。
今回は cc-sddを使って、以下のような簡単なTodoリストのアプリケーションを開発して、 GitHub に push しました。

image.png


Railway にアプリケーションを登録

それでは、Deploy a Laravel Appの説明に従いながら Railway にデプロイするための設定を行っていきます。

Railway のwebページにアクセスしてサインインを行います。

image.png


サインインするとこのような構成のダッシュボードが表示されます。

image.png


初期状態ではプロジェクト(アプリケーションやデータベースをインストールするための枠)が存在しないため、「Projects」の画面で「New」ボタンをクリックして、まずプロジェクトを作成します。

image.png


アプリケーションの設定を進める前にデータベースの準備を行う必要があるため、メニューから「Database」を選択します。

image.png


データベースの選択肢の中から、今回は「MySQL」を選択します。

image.png


データベースの作成が始まりますのでしばらく待ちます。

image.png


データベースの作成が完了すると「Online」と表示されるので、こちらをクリックします。

image.png


「Deployments」のタブで MySQL 9.4 がデプロイされたことが確認できます。

image.png


「Variables」のタブで接続に関する各値を確認して控えておきます。

image.png


Railway では composer.json 内の require を参照して PHP のバージョンを確定するので、設定内容に不備がないか事前に確認しておきます。

{
    ・
    ・
    "require": {
        "php": "^8.4",
        "laravel/framework": "^13.8",
        "laravel/tinker": "^3.0"
    },

データベースが作成できたら、次は画面右上の「Add」ボタンをクリックして Laravel アプリケーションの追加を行います。

image.png


今回は GitHub のリポジトリと連携してデプロイを行いたいので、「GitHub Repository」を選択します。

image.png


GitHub との連携の際に設定しておいたデプロイ対象の GitHub のリポジトリを選択します。

image.png


以下のようにデプロイ待ちの状態になったら「Deploy」ボタンをクリックします。

image.png


アプリケーションの作成が始まります。

image.png


アプリケーションの作成が完了すると「Online」と表示されるので、こちらをクリックします。

image.png


「Deployments」のタブでデプロイが成功していることが確認できます。

image.png


「View logs」ボタンをクリックします。

image.png


「Details」タブの「Configuration」から PHP 8.4.24 がインストールされていることが確認できます。

image.png


画面右上の「×」ボタンをクリックして、「View logs」の画面を閉じます。

image.png


「Variables」のタブに「Suggested Variables」とあるように必要と思われる変数を提示してくれていますので、必要・不要を判断して追加します。

image.png

Laravel のアプリケーションを動作させるには最低でも以下の変数は必要と思われます。

  • APP_NAME
  • APP_ENV
  • APP_KEY
  • APP_DEBUG
  • APP_URL
  • APP_LOCALE
  • APP_FALLBACK_LOCALE
  • APP_FAKER_LOCALE
  • DB_CONNECTION
  • DB_URL

「APP_KEY」を発行するため「Console」のタブに移動して php artisan key:generate --show を実行して、発行された値を控えておきます。

key_generate.png


「Variables」のタブで「New Variable」ボタンをクリックします。

image.png


php artisan key:generate --show で発行された値を APP_KEY として入力して「Add」ボタンをクリックします。

app_key.png


APP_KEY と同様にアプリケーションの動作やDB接続に関連する値を以下のように登録します。

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png


「Variables」のタブにこのように表示されます。

image.png


変更が発生したことによりデプロイ待ちの状態になるので「Deploy」ボタンをクリックします。
※データベースの接続に関する変数を設定しようとしているためなのか、アプリケーションからデータベースに対して矢印が伸びています。

image.png


データベースのマイグレーションが成功していることを確認するため、 MySQL をクリックします。

image.png


「Database」の「Tables」の欄に各テーブルが表示されているので、マイグレーションが成功しているようです。

image.png


「migrations」のテーブルをクリックします。

image.png


マイグレーションの履歴がこのように表示されます。

image.png


同様に Query の欄から select * from migrations; を実行すると、同じ結果が得られます。

image.png


ここまでの作業でデータベースとアプリケーションのデプロイは完了していますが、 Railway ではデプロイと同時に自動的に外部からアクセス可能なURLが発行されない仕組みのようです。

外部からアクセス可能なURLを発行するため、アプリケーションをクリックします。

image.png


「Settings」のタブに移動します。

image.png


「Networking」→「Public Networking」の「Generate Domain」ボタンをクリックします。

image.png


外部からアクセス可能な以下のような形式のURLが発行されました。
https://[アプリケーション名]-[Environment名]-[XXXX].up.railway.app/

public_url.png


発行されたURLにアクセスすると、CSSが適用されていない状態のページが表示されました。

image.png

開発ツールで確認すると「Mixed Content」の警告が発生していることがわかります。

Screenshot from 2026-08-12 11-21-47.png


「Variables」のタブから発行されたURLを「APP_URL」、「ASSET_URL」として登録します。

app_url.png

asset_url.png


デプロイを実行します。

image.png


発行されたURLにアクセスすると、今度はCSSが適用された形で表示されました。

image.png


Todoリストのページのルーティングパスにアクセスすると、Todoリストの初期画面が表示されました。

image.png


タスクを追加しようとすると、「送信しようとしている情報は保護されません」と表示されましたので、「このまま送信」を押します。

image.png

image.png


画面遷移が発生し、再びタスク一覧が表示されました。

image.png


この状態でソースを確認すると、以下のタグのURLが「http://」となっています。

  • <form method="POST" action="http://
  • <a href="http://

どうやら、「Trusted Proxies」の機能が関係してそうです。なので、開発環境で以下のコマンドを実行して app/Http/Middleware/TrustProxies.php を作成します。

$ php artisan make:middleware TrustProxies

bootstrap/app.php を以下のように修正します。

修正前

    ->withMiddleware(function (Middleware $middleware): void {
        //
    })

修正後

    ->withMiddleware(function (Middleware $middleware): void {
        $middleware->trustProxies(at: '*');
    })

デプロイ対象のリポジトリに上記の修正を push します。


「Mixed Content」や「送信しようとしている情報は保護されません」といった警告が表示されることなく、Todoの追加・更新・削除が行える(DBにデータが保存される)ことが確認できました。

image.png


まとめ

先日触った「Laravel Cloud」と比較すると、随分面倒くさかったなという印象です。

特に環境変数周りなんですが、 Fly.io のように環境変数を一括で登録できるコマンドがあると便利なんだけどなぁと考えながら、GUIから変数を1項目ずつ丁寧に登録しました。
このあたりは、「Railway CLI」を利用することで解決するのかもしれません。

$ fly secrets set `cat .env.production`

色々と設定が完了したあとに、「Variables」のタブに「Raw Editor」というのを見つけました。。。
まぁ、気づかなかった自分が悪いんですが、もっと早く言ってよという気持ちになっちゃいました。

raw_editor.png

初めて触ったこともあり、わからない面は多々ありましたが、慣れてしまえば個人開発などで利用する際には扱いやすいのではないでしょうか。
Laravel Cloud と同様にアプリケーションとデータベースが同じプラットフォーム上にマネージドで利用可能なのは管理が非常に楽かと思います。

コスト面ですが、PHPのアプリケーションをPaaSで動かせる環境は限られていますし、そのあたりを考慮すると月額5ドルでLaravel、PHPがちゃんと動く環境を手に入れられるのはわりとアリかもしれません。

image.png


関連記事

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?