システム開発

Heroku+Laravel+MySQLを独自ドメインで公開する

PHPの人気のフレームワークLaravelではWebサイトの管理画面を開発することができます。

開発の手順に関しては以下の記事にて具体的に紹介をしていきました。

これらは、開発後にデプロイして利用可能な状態にしていく必要があります。

そこで本記事でHeroku+Laravelこちらの記事でFirebase+Nuxt.jsのデプロイについて解説していきます。

  • Laravelを使って構築をしたい方
  • Webサイト構築の具体的な手法が知りたい方

これらに当てはまる方におすすめの記事となっています。このシリーズを読めばLaravel6とNuxt.jsで管理画面を作成することができますよ。

Herokuを使う理由

クラウドのインフラサービスといえば、Amazon Web Services(AWS)やGoogle Cloud Platform(GCP)が有名です。
しかし、スモールスタートならばHerokuも有力な選択肢の1つです。

エンジニアがほとんどインフラを意識しないで済みますし、初期コストが安く、Hobby プランなら 7ドル/月、Professional プランなら25ドル/月から使えるからです。

サービスが上手くいって売上もユーザー数も伸び始め、スケールが気になり始めたら、エンジニアを採用してAWSやGCPに引っ越せば良いのではないでしょうか。

今回の管理画面は社内で使う想定でスケールもしないため、Herokuを使うことにしました。

Herokuコマンドをインストール

まず以下のコマンドを実行してHerokuのコマンドをインストールします。

brew tap heroku/brew && brew install heroku

LaravelアプリケーションをHerokuへプッシュ

次に以下のコマンドを実行します。Herokuのログイン画面が表示されるので事前にアカウント登録は済ませておきましょう。

heroku login

ログインが完了したら下記のコマンドでLaravel用のアプリケーションを作成します。
Herokuは全体でユニークな名前である必要があるので、各自のアプリケーション名に置き換えるようにしましょう。

heroku create admin-nuxt-laravel-api --buildpack heroku/php

作成が完了したら、Heroku用のリモートリポジトリが登録されるので、
以下のコマンドを実行してLaravelのアプリケーションをHerokuへプッシュします。

git push heroku master:master

クレジットカードの登録

HerokuでMySQLを利用する場合、Clear DBというアドオンを追加する必要があります。
無料版の場合でもアドオンの追加にはクレジットカードの登録が求められるので、こちらから登録しておきましょう。

Clear DBアドオンの設定

クレジットカードの登録が完了したら、以下コマンドでClearDBをアドオンに追加します。

heroku addons:add cleardb

以下のような無料版のClearDB MySQLが追加されていればOKです。

次に以下のコマンドを実行してClearDBのデータベース情報を確認します。

heroku config | grep CLEARDB_DATABASE_URL

結果、以下のような内容が出力されるのでメモしておきましょう。

CLEARDB_DATABASE_URL: mysql://[ユーザー名]:[パスワード]@[ホスト名]/[データベース名]?reconnect=true

次に先程メモしておいた情報を使ってLaravelのデータベース用の環境変数を設定します。

heroku config:set DB_DATABASE=[データベース名]
heroku config:set DB_HOST=[ホスト名]
heroku config:set DB_USERNAME=[ユーザー名]
heroku config:set DB_PASSWORD=[パスワード]

これでClearDBの設定は完了です。

MySQLのインデックス用の文字列長の指定

LaravelではMySQLのバージョンが5.7.7より古い場合、インデックス用の文字列長を指定しないとマイグレーション時にエラーになります。

参考: インデックス長とMySQL/MariaDB

mysql -h <ホスト> -u <ユーザー名> -p -D <データベース名>

上記のコマンドでClearDBのMySQLのバージョンを確認できますが、最新バージョンでもMySQL5.5系のため、文字列長の指定が必要になります。

app/Providers/AppServiceProvider.php を以下のように編集すればOKです。

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
//追加
use Illuminate\Support\Facades\Schema;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */    public function boot()
    {
        //追加
        Schema::defaultStringLength(191);
    }
}

DBマイグレーション反映

次に以下のコマンドで修正をHerokuに反映し、マイグレーションを実行します。

git push heroku master:master
heroku run php artisan migrate

以下のように表示されればOKです。

WebサーバーにApacheを指定

以下の内容のProcfileをルートディレクトリに追加してHerokuにプッシュします。

web: vendor/bin/heroku-php-apache2 public/

これだけでWebサーバーはApacheを利用して起動するようになります。

アプリケーションキーを環境変数に設定

Laravelではcookie等の暗号化/復号化に使われるアプリケーションキーの設定が必ず必要なので、
以下コマンドで環境変数に設定します。

heroku config:set APP_KEY=$(php artisan key:generate --show)

独自ドメインの設定

今回の管理画面の認証に利用しているCookieですが、全く異なるドメイン間では送受信が出来ません。

サブドメイン間であれば可能なため、Heroku・Firebaseのデフォルトではなく独自ドメインの設定を行う必要があります。

独自ドメインを購入

まずはお名前.com等で設定したい独自ドメインを購入します。

HerokuにAPI用のサブドメインを追加

次に作成したアプリケーションのSettings > Domains の項目から、「Add domain」をクリックすると、
以下のような画面が表示されるので、購入したドメインのサブドメインをAPI用として追加します。

以下のような項目が追加されるので、
この「DNS Target」の値をCNAMEで各ドメイン事業者のDNSレコードに設定します。

お名前.comの場合は以下のような設定になります(値はサンプル用なのでダミーです)

反映後、しばらくすると設定したドメインでアクセスできるようになります。

HerokuのdynoをアップグレードしてSSLを有効化

HerokuではSSLを有効化するには有料プランにアップグレードする必要があります。
CloudFlare というCDNを利用すれば、無料でSSLを設定する方法もあるようですが、少し手間です。

Herokuは稼働分の課金制のため、すぐにfreeプランに戻せばほぼ課金されません。アップグレードしてサクッと動作確認することをオススメします。

上記の画面で、「Change Dyno Type」をクリックします。

次の画面で表示されるHobbyプランを選択してSaveします。

アップグレード後にSettings > SSL Certificates の項目を確認すると、設定が有効になっています。
証明書はLet's Encryptを利用しており自動で期限の更新も行ってくれます。

サイトを確認

設定が完了したら、https://api.独自ドメイン にアクセスしてみましょう。
SSLが有効になった状態で以下のような画面が表示されればOKです。(確認できたらDynoをFreeに戻すのを忘れずに)

おわりに

今回はHeroku+Laravel+MySQLを独自ドメイン(SSL)で公開まで行いました。
ほとんどコマンドとGUIからの操作だけでデプロイまで出来てしまいましたね。

こちらの記事で、Firebase+Nuxt.jsのデプロイを行いLaravel(API)と連携する手順を紹介しています。

合わせて確認して下さい。


本日紹介したようなものを外注してみるのはいかがでしょうか。 dehaソリューションズではオフショア開発によって低コストで迅速な開発をサポートしています。

Laravelに関して詳しくお話を聞きたい方、開発相談や無料お見積りをしたい方はこちらからご気軽にお問い合わせください。

▼ dehaソリューションへの簡単見積もりの依頼はこちら

Mai Tran

Recent Posts

3分でわかる「AX段階モデル」|自社のAI活用レベルを知る

「AIを導入したいけれど、何から始めればよいかわからない」「ChatGPTを試してはいるものの、業務改善にはつながっていない」「競合企業はAIを活用しているようだが、自社はどのレベルなのか知りたい」。 このような悩みを抱える企業は少なくありません。 近年、企業のAI活用は「AIツールを使う」段階から、「AIを前提とした企業へ変革する」段階へと進化しています。 その変革を体系的に理解するために注目されているのがAX(AI Transformation)段階モデルです。 この記事では、AX段階モデルの概要と各ステージの特徴、自社がどの段階にあるのかを判断するポイントについて、3分で理解できるようわかりやすく解説します。 AIを導入したいが、どこから始めればよいかわからない方 自社のAI活用レベルを客観的に把握したい方 AIを活用して生産性向上や競争力強化を目指したい方 に当てはまる方におすすめの記事となっています。これを読めばAIを活用するための具体的な方法とAXモデルの具体的な仕組みが分かりますよ。 AX段階モデルとは? AX(AI Transformation)とは、AIを単なる業務効率化ツールとして利用するだけではなく、企業の業務プロセスや組織、ビジネスモデルそのものをAIを中心に再構築する考え方です。 その成長プロセスを整理したものが「AX段階モデル」です。 DX(デジタルトランスフォーメーション)がデジタル技術による企業変革であるのに対し、AXはAIを中核に据えた企業変革を意味します。…

4 days ago

なぜ今、企業にAX(AIトランスフォーメーション)が必要なのか?

近年、AI(人工知能)は私たちの生活だけでなく、企業活動にも急速に浸透しています。 文章作成や画像生成、データ分析、問い合わせ対応など、これまで人が担っていた業務をAIが支援・代替できるようになり、多くの企業がAI活用に注目しています。 一方で、「AIツールを導入しただけ」で終わってしまう企業も少なくありません。 本当に競争力を高めるためには、単なるAI活用ではなく、企業全体をAI中心に変革する「AX(AIトランスフォーメーション)」という考え方が重要になります。 この記事では、AXとは何か、DXとの違い、そしてなぜ今企業にAXが必要なのかについて詳しく解説します。 AXに興味がある方 AIを活用したいとお考えの方 社内のIT人材が不足している方 これらに当てはまる方におすすめの記事となっています。これを読めば今注目のAXについて丸わかりですよ。 AXとは? AX(AI Transformation:AIトランスフォーメーション)とは、AIを単なる業務効率化ツールとして導入するのではなく、AIを中心に企業のビジネスモデルや組織、業務プロセス、意思決定までを根本的に変革する取り組みを指します。 例えば、これまでAIはメールの自動返信・チャットボット・売上予測・在庫管理など、一部の業務改善に使われるケースがほとんどでした。 しかしAXでは、AIを企業経営の中心に据えます。 例えば営業部門ではAIが顧客ごとの提案内容を作成し、マーケティング部門ではAIが市場分析を行い、人事部門ではAIが採用候補者を分析し、経営層はAIによる将来予測を参考に経営判断を行うといったように、企業全体がAIと共に動く組織へ変わっていきます。…

5 days ago

2034年に向け急拡大するベトナム企業AI市場:最新の市場規模・シェアと未来予測

生成AIの急速な普及を背景に、世界各国で企業のAI活用が加速しています。 その中でもベトナムは、政府による積極的なAI政策やデジタル化の推進、海外企業による投資拡大を追い風に、東南アジア有数の成長市場として注目を集めています。 この記事では、最新の市場規模や市場シェア、成長を支える要因、主要企業の動向をもとに、2034年に向けたベトナム企業AI市場の将来性と日本企業に広がるビジネスチャンスについて詳しく解説します。 AI市場に興味がある方 ベトナムのIT市場に興味がある方 社内のIT人材が不足している方 これらに当てはまる方におすすめの記事となっています。これを読めばベトナム企業のAI市場規模がわかるのはもちろん将来の予測もわかりますよ。 (more…)

3 weeks ago

アジャイル・ウォーターフォール・ハイブリッド:企業価値を最大化する開発戦略の選び方

近年、システム開発で代表的な手法として長年利用されてきたのが「ウォーターフォール開発」と「アジャイル開発」を組み合わせた「ハイブリッド開発」が新たな選択肢として注目されています。 この記事ではそんな「ハイブリッド開発」について、どう言った特徴があるのかや、企業価値を最大化するためにはどのような視点で開発戦略を選択すべきかについて見ていきます。 アジャイル開発に興味がある方 DX化を進めたい方 社内のIT人材が不足している方 これらに当てはまる方におすすめの記事となっています。これを読めば「ウォーターフォール開発」と「アジャイル開発」のそれぞれの特徴と、それを掛け合わせた「ハイブリッド開発」の特徴が丸わかりですよ。 アジャイル開発の特徴とメリット アジャイル開発とは、「素早い」「俊敏な」という意味を持つ言葉の通り、変化に柔軟に対応しながらシステムを開発する手法です。 従来のウォーターフォール開発では、要件定義、設計、開発、テスト、リリースという工程を順番に進め、最後に完成したシステムを利用者へ提供します。 一方、アジャイル開発では短期間の開発サイクル(スプリント)を繰り返します。一般的には1〜4週間程度の期間で、優先度の高い機能を開発し、動作する状態で提供します。 その後、利用者から意見をもらい、次の開発に反映します。 この流れを繰り返すことで、利用者の本当のニーズに近いシステムを作りやすくなります。 例えばECサイトの決済機能を開発する場合、最初からすべての決済方法を実装するのではなく、まずクレジットカード決済だけを提供し、その後電子マネーやQR決済などを追加していくことが可能です。 この方法では、早い段階でサービスを市場へ投入でき、利用状況を確認しながら改善できます。 アジャイル開発の主なメリットは以下の通りです。…

3 weeks ago

7Rフレームワークとは?生成AI活用で加速するレガシーシステムマイグレーション

企業の基幹システムの多くは、10年、20年、あるいは30年以上にわたって運用され続けています。 しかし近年、こうしたレガシーシステムを取り巻く環境は大きく変化しています。 近年、注目されているのが「7Rフレームワーク」です。 7Rフレームワークは既存システムをクラウド環境へ移行する際に採用される代表的な意思決定モデルであり、システムごとに最適な移行戦略を選択するための考え方です。 この記事ではそんな7Rフレームワークについて、特徴を紹介していきます。 7Rフレームワークに興味がある方 生成AIを活用したい方 社内のIT人材が不足している方 これらに当てはまる方におすすめの記事となっています。これを読めば7Rフレームワークの特徴がわかるのはもちろん、AI時代での7Rフレームワークについて丸わかりですよ。 (more…)

4 weeks ago

構造変化に直面するオフショア開発:「量」の補完から「AI Native」への転換期

オフショア開発は従来の「量」の補完から、しかし、生成AIの急速な進化によってその前提が大きく変わろうとしています。 今後は「どれだけ高い生産性を実現できるか」が重要です。 この記事ではそのようなオフショア開発のあり方の変化について見ていきます。 オフショア開発に興味がある方 社内のIT人材が不足している方 AIを使った開発に興味がある方 これらに当てはまる方におすすめの記事となっています。これを読めばオフショア開発の変化についてわかるのはもちろん、AI Nativeについても丸わかりですよ。 (more…)

1 month ago