【Railway】Laravelアプリのデプロイ

この記事で、RailwayにLaravelアプリをデプロイする方法を学びます。クイックセットアップ、プライベートネットワーキング、データベース統合、ワンクリックデプロイ、その他のデプロイ戦略について説明します。

Railwayはこちら (←このリンクから登録すると20ドル分のクレジットがもらえます)

Laravelアプリのデプロイ

Laravelは、コードのシンプルさとエレガンスを重視するウェブ職人のために設計されたPHPフレームワークです。クリーンで表現力豊かな構文が特徴で、現代のウェブアプリケーションで一般的な多くのタスクを処理するための組み込みツールを提供し、開発をよりスムーズで楽しいものにします。

この記事では、3つの方法でRailwayにLaravelアプリをデプロイする方法について説明します。

  1. テンプレートからのワンクリックデプロイ
  2. GitHubリポジトリから
  3. CLIを使用

テンプレートからのワンクリックデプロイ

Railwayにデプロイ

このテンプレートは、基本的なLaravelアプリケーションとPostgresデータベースをRailwayにセットアップします。また、コミュニティによって作成されたさまざまなLaravelアプリテンプレートから選択することもできます。

デプロイ後はテンプレートから Eject して、GitHub アカウントにリポジトリのコピーを作成することを強くおすすめします。

GitHubリポジトリからデプロイ

GitHub上のLaravelアプリをRailwayにデプロイするには、以下の手順に従ってください。

  1. 新しいプロジェクトを作成します。
  2. Deploy from GitHub repo をクリックします。
  3. GitHubリポジトリを選択します。
    • Railwayは、有効なGitHubアカウントがリンクされている必要があります。Railwayアカウントが関連付けられていない場合は、リンクするように求められます。
  4. Add Variables をクリックします。
    • アプリのすべての環境変数を追加します。
  5. Deploy をクリックします。

デプロイが成功すると、Railwayサービスが作成されます。デフォルトでは、このサービスは公開されません。

注: Railwayはデプロイ中にLaravelアプリであることを自動的に検出し、php-fpmとnginxを介してアプリを実行します。

サービスの公開URLを設定するには、新しいサービスの「設定」タブのNetworkingセクションに移動し、「Generate Domain」をクリックします。

注: LaravelアプリをPostgres(またはMySQL)データベース、cronジョブ、およびワーカーとともに実行する方法については、データベース、マイグレーション、Cron、ワーカーのセットアップセクションに進んでください。

CLIからデプロイ

Laravelアプリがローカルにある場合は、次の手順に従います。

  1. Railway CLIをインストールして認証します。
  2. Laravelアプリのルートディレクトリ内で railway init を実行して、Railwayに新しいプロジェクトを作成します。
    • プロンプトの手順に従ってプロジェクトに名前を付けます。
  3. railway up を実行してデプロイします。
    • CLIはLaravelアプリのファイルをスキャン、圧縮し、Railwayのバックエンドにアップロードしてデプロイします。
    • ターミナルには、アプリがRailwayでデプロイされている間のリアルタイムログが表示されます。
  4. デプロイが成功したら、ダッシュボードの最近のデプロイで View logs をクリックします。
    • サーバーが実行されていることがわかります。ただし、環境変数を追加するように求めるログも表示されます。
  5. Railwayダッシュボードでサービスの Variables セクションをクリックします。
  6. Raw Editor をクリックし、アプリのすべての環境変数を追加します。
  7. Deploy をクリックしてアプリを再デプロイします。

サービスの公開URLを設定するには、新しいサービスの「設定」タブのNetworkingセクションに移動し、「Generate Domain」をクリックします。

注: 次のステップでは、Laravelアプリをデータベース、マイグレーション、cronジョブ、ワーカーとともに実行する方法を示します。

データベース、マイグレーション、Cron、ワーカーのセットアップ

このセットアップでは、LaravelアプリをRailwayにデプロイし、データベース、スケジュールされたタスク(cron)、およびキュワーカがすべて完全に機能することを確認します。

デプロイ構造は「雄大なモノリス」アーキテクチャに従い、Laravelアプリ全体が単一のコードベースとして管理されますが、Railwayでは4つの別々のサービスに分割されます。

  • アプリサービス:HTTPリクエストとユーザーインタラクションを処理します。
  • Cronサービス:スケジュールされたタスク(メール送信やレポート実行など)を管理します。
  • ワーカーサービス:キューからバックグラウンドジョブを処理します。
  • データベースサービス:アプリケーションのデータを保存および取得します。

私の雄大なモノリスLaravelアプリ

開始するには、次の手順に従ってください。

  1. Laravelアプリのルートディレクトリに、build-app.shrun-worker.shrun-cron.sh の4つのBashスクリプトを作成します。 これらのスクリプトには、Laravelアプリのアプリ、ワーカー、およびcronサービスをRailwayにデプロイして実行するために必要なコマンドが含まれます。
  2. プロジェクトキャンバスにPostgresデータベースサービスを作成します。
    • Deploy をクリックします。
  3. プロジェクトキャンバスに新しいサービスを作成します。
    • サービスに App service という名前を付け、Settings をクリックして構成します。
    • Source セクションでGitHubリポジトリを Source Repo に接続します。
    • Build セクションの Custom Build Commandchmod +x ./build-app.sh && sh ./build-app.sh を追加します。
    • Deploy セクションの Pre-Deploy Commandphp artisan migrate を追加します。
    • サービスの上部に戻り、Variables をクリックします。
    • Laravelアプリに必要なすべての環境変数、特に以下にリストされているものを追加します。
      • APP_KEYphp artisan key:generate コマンドから取得した値を設定します。
      • DB_CONNECTION:値を pgsql に設定します。
      • QUEUE_CONNECTION:値を database に設定します。
      • DB_URL:値を ${{Postgres.DATABASE_URL}} に設定します(これは新しいPostgresデータベースのURLを参照します)。サービス変数の参照について詳しく学びます。
    • Deploy をクリックします。
  4. プロジェクトキャンバスに新しいサービスを作成します。
    • サービスに cron service という名前を付け、Settings をクリックします。
    • Source セクションでGitHubリポジトリを Source Repo に接続します。
    • Deploy セクションの Custom Start Commandchmod +x ./run-cron.sh && sh ./run-cron.sh を追加します。
    • サービスの上部に戻り、Variables をクリックします。
    • ステップ3で既に強調表示されているすべての必要な環境変数を追加します。
    • Deploy をクリックします。
  5. プロジェクトキャンバスに再度新しいサービスを作成します。
    • サービスに worker service という名前を付け、Settings をクリックします。
    • Source セクションでGitHubリポジトリを Source Repo に接続します。
    • Deploy セクションの Custom Start Commandchmod +x ./run-worker.sh && sh ./run-worker.sh を追加します。
    • サービスの上部に戻り、Variables をクリックします。
    • ステップ3で既に強調表示されているすべての必要な環境変数を追加します。
    • Deploy をクリックします。

run-cron.sh ファイルに以下の内容を追加します。

#!/bin/bash
# このファイルに実行権限があることを確認してください。`chmod +x run-cron.sh` を実行します。
# このコードブロックは、Laravelスケジューラを1分ごとに実行します。
while [ true ]
    do
        echo "Running the scheduler..."
        php artisan schedule:run --verbose --no-interaction &
        sleep 60
    done

run-worker.sh ファイルに以下の内容を追加します。

#!/bin/bash
# このファイルに実行権限があることを確認してください。`chmod +x run-worker.sh` を実行します。
# このコマンドはキューワーカーを実行します。
# 代替案は、php artisan queue:listenコマンドを使用することです。
php artisan queue:work

build-app.sh ファイルに以下の内容を追加します。 注: アプリサービスがビルドされるたびに実行したい追加のコマンドをスクリプトに追加できます。

#!/bin/bash
# このファイルに実行権限があることを確認してください。`chmod +x build-app.sh` を実行します。
# いずれかのコマンドが失敗した場合はスクリプトを終了します。
set -e
# NPMを使用してアセットをビルド
npm run build
# キャッシュをクリア
php artisan optimize:clear
# Laravelアプリケーションのさまざまなコンポーネントをキャッシュ
php artisan config:cache
php artisan event:cache
php artisan route:cache
php artisan view:cache

この時点で、3つのサービスすべてがデプロイされ、Postgresデータベースサービスに接続されているはずです。

  • Cron Service:このサービスは、スケジュールされたタスクを管理するためにLaravelスケジューラを実行する必要があります。
  • Worker Service:このサービスは実行中であり、キューからジョブを処理する準備ができている必要があります。
  • App Service:このサービスは実行中であり、ユーザーがアプリケーションにアクセスできるように公開ドメインを持つ必要がある唯一のサービスです。

アプリサービス

注: このデプロイアプローチを示すコミュニティテンプレートが利用可能です。このテンプレートを簡単にデプロイし、アプリケーション用に独自のGitHubリポジトリに接続できます。

ロギング

Laravelは、デフォルトでディスク上のディレクトリにログを書き込みます。ただし、Railwayの一時的なファイルシステムでは、この設定ではログは永続化されません。

ログとエラーがRailwayのコンソールまたは railway logs で表示されるようにするには、LOG_CHANNEL 環境変数を errorlog に更新します。RailwayダッシュボードまたはCLIを介して次のように設定できます。

railway variables --set "LOG_CHANNEL=errorlog"

Laravel Sailでデプロイできますか?

DockerでLaravelアプリケーションをデプロイするための標準的なアプローチであるLaravel Sailの使用を考えているかもしれません。その核となるSailは、環境を管理するために docker-compose.yml ファイルに依存しています。

ただし、Railwayは現在Docker Composeをサポートしていないことに注意することが重要です。

次のステップ

Railwayでのエクスペリエンスを最大限に活用する方法については、次のリソースを参照してください。

Railwayはこちら (←このリンクから登録すると20ドル分のクレジットがもらえます)

Read more

リアルタイム投票アプリ5選【ライブ配信やイベントで】

リアルタイム投票アプリ5選【ライブ配信やイベントで】

ウェビナーやセミナー、社内研修を実施する際、「参加者が受け身になってしまう」「質問がなかなか出てこない」といった課題を感じたことはないでしょうか。 オンラインでの情報発信が当たり前になった今、一方的な配信だけでは参加者の満足度を高めることが難しくなっています。そこで注目されているのが、リアルタイムで参加者の意見を集約し、その場で結果を共有できる投票・質問ツールです。 本記事では、ライブ配信やイベント、研修などで活用できるリアルタイム投票アプリを5つ厳選してご紹介します。 リアルタイム投票でつながる参加者とイベント リアルタイム投票やQ&A機能を使うと、視聴者や参加者の意見を即座に集計・表示できます。講義や会議の進行を妨げず、参加者全員が自分の意見を簡単に表明できる仕組みです。 従来の挙手による質疑応答では、発言しづらいと感じる参加者も少なくありません。特にオンラインイベントでは、カメラがオンになっていることへの抵抗感や、大人数の前で質問することへのハードルが存在します。 しかし、スマートフォンから匿名で投票やコメントができる仕組みがあれば、参加者は気軽に自分の意見を伝えら

By 阿部 隼也
質問受付ツールの選び方とおすすめ5選を紹介

質問受付ツールの選び方とおすすめ5選を紹介

セミナーや講演会、社内研修などで「質問はありませんか?」と投げかけても、なかなか手が挙がらない経験はないでしょうか。参加者に有益な情報を提供しても、疑問や意見が共有されないまま終わってしまうのは、主催者にとっても参加者にとっても大きな機会損失です。 こうした課題を解決するために注目されているのが「質問受付ツール」です。参加者がスマートフォンから匿名で質問を投稿できるため、発言への抵抗感が下がり、活発なコミュニケーションが生まれます。 本記事では、質問受付ツールの基本機能から、実際に役立つおすすめツール5選、そして選定時に押さえておきたいポイントまで、実務に活かせる情報をまとめて解説します。 質問受付の現場課題 イベントやセミナーの運営で最も頭を悩ませる問題の一つが、参加者からの質問をいかに引き出すかという点です。質問タイムを設けても、会場がシーンと静まり返ってしまい、仕方なく「それでは時間になりましたので」と締めくくる光景は珍しくありません。 この背景には、日本特有の文化的要因も関係しています。大勢の前で発言することへの恥ずかしさ、自分の質問が的外れではないかという不安、他

By 阿部 隼也
オンラインセミナーアプリの選び方。参加者エンゲージメントを高めるポイント

オンラインセミナーアプリの選び方。参加者エンゲージメントを高めるポイント

近年、オンラインセミナーの活用が急速に広がっています。会場のコストや移動時間を気にすることなく、全国・世界中から参加者を集められる点は大きな魅力です。 しかし、せっかく開催しても 「参加者が途中で離脱してしまう」 「ただ見ているだけで反応が薄い」 といった課題を抱えている企業も少なくありません。 本記事では、参加者のエンゲージメントを高め、成果につながるオンラインセミナーアプリの選び方と、実務に役立つ具体的なポイントを解説します。 参加者とのつながりを生むオンライン環境の設計 オンラインセミナーにおける最大の課題は、画面越しの距離感です。会場で直接顔を合わせる機会がないからこそ、参加者が「ただ見ているだけ」にならないような仕組みが求められます。適切なツールと機能選びが、参加者のエンゲージメントを左右します。 従来のオフラインセミナーでは、会場の雰囲気や参加者同士の反応が自然と生まれましたが、オンラインではそうした「空気感」が伝わりにくくなります。だからこそ、双方向のコミュニケーション機能や、参加者の行動データを活用した設計が重要になるのです。 エンゲージメントを高

By 阿部 隼也
参加者の質問を効率的に管理!ZoomウェビナーQ&A機能の使い方を徹底解説

参加者の質問を効率的に管理!ZoomウェビナーQ&A機能の使い方を徹底解説

オンラインでのセミナーやイベントが日常化する中で、Zoomウェビナーを活用している企業が増えています。しかし、ウェビナーの開催で意外と頭を悩ませるのが「参加者からの質問をどう管理するか」という点ではないでしょうか。 セミナーが盛り上がり、次々と質問が寄せられるのは嬉しいことです。一方で、質問が多すぎて整理しきれない、どの質問に優先的に答えるべきか判断に迷う、といった課題も生じます。こうした問題を解決するために役立つのが、ZoomウェビナーのQ&A機能です。 本記事では、ZoomウェビナーのQ&A機能の基本的な使い方から、参加者の質問を効率的に管理する実践的なテクニックまで、詳しく解説していきます。 ZoomウェビナーのQ&A機能とは ZoomウェビナーのQ&A機能は、ウェビナー開催中に参加者が質問を投稿し、主催者側が回答を行うための専用機能です。この機能を使うことで、質問と回答がスレッド形式で整理され、効率的なコミュニケーションが可能になります。 チャット機能との違い Zoomには「チャット機能」もあるため、「Q&A機能とチャット機能の違いは何か」と疑問に思う方も多いで

By 阿部 隼也