LaravelとReactは相性抜群?導入手順やメリットを解説
thumb_laravelreact_01
LaravelとReactは相性抜群?導入手順やメリットを解説
開発ツール
アンドエンジニア編集部
2022.01.14
この記事でわかること
LaravelにReactを導入するには、Laravel/UIコンポーネントをインストールし、BladeテンプレートにReactコンポーネントをレンダリングする設定が必要
バックエンドとフロントエンドを分けるメリットは、再利用性の向上・並行タスク化ができること・デプロイサイクルを短くできることの3つ
Laravelのバージョン5ではフロント技術としてVueが標準だが、Reactを選択しても問題ない

LaravelとReactとは?

img_laravelreact_01

Laravelとは、PHP言語の開発に役立つフレームワークの1つです。Microsoft製フレームワークである「.NET」チームにも参加していたTaylor Otwellが開発しており、2011年にリリースされました。LaravelはRuby on Railsのように手軽にアプリケーション開発を始めることが可能であり、PHPフレームワークのシェアとしては1位を誇っています。 【参考】:Laravel

一方、ReactはJavaScript言語のライブラリの1つです。メタ・プラットフォームズ社(旧Facebook社)により2013年にリリースされました。ReactはWEB開発におけるシングルページアプリケーション(以下、SPA)や、モバイルアプリケーションの開発に特化しています。 【参考】:React

本記事では、バックエンド技術であるLaravelと、フロントエンド技術であるReactを連携させるメリットや、連携時の手順について解説します。

PHPとは一体何か?他のプログラミング言語と異なるポイントを解説!
JavaScriptとは?人気のJavaScriptを5分で学ぶ

LaravelにReactを導入し、シングルページ化する手順

img_laravelreact_02

本章では、既存のLaravelプロジェクトにReactを導入する手順を紹介します。本来、「リクエストに対してLaravelがJSONを返し、ReactがJSONをレンダリングしてWebページやアプリ画面を表示する」という構成が一般的なのですが、実現には別途API開発の知識が必要になってきます。そのため、今回はJSON連携部分に関しては割愛することにします。

導入後の動作確認では、Reactコンポーネントがブラウザで表示できたことまでを確認します。

UIパッケージ導入〜Reactインストール

Laravelプロジェクトに、Laravel UIパッケージを導入します。Laravelプロジェクトのルートディレクトリで、以下のコマンドを実行してください。



composer require laravel/ui


php artisan ui react --auth


npm install


npm run dev

Laravel UIは認証関連機能の雛型を提供するLaravel公式のライブラリです。「composer」はPHPのライブラリの依存関係を管理するツールであり、「require」をつけて実行することでライブラリを追加することができます。

また、上記で使われているartisan(アーティザン)はPHP用のコマンドラインインターフェースの1種です。PHPアプリケーション上で様々なコマンドを実行することができます。

シングルページ用のphpファイルを残し、他は除外

シングルページアプリケーション化のため、サーバーサイドで出力するPHPファイルを1つに絞ります。今回はLaravelのプロジェクト開始時に作成される「app.blade.php」を出力することにします。「resources/views」フォルダ配下にはapp.blade.phpファイルのみがある状態とし、ファイル内には下記を記載してください。



<!doctype html>


<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">


<head>


    <meta charset="utf-8">


    <meta name="viewport" content="width=device-width, initial-scale=1">


    <!-- CSRF Token -->


    <meta name="csrf-token" content="{{ csrf_token() }}">


    <title>{{ config('app.name', 'Laravel') }}</title>


    <!-- Scripts -->


    <script src="{{ asset('js/app.js') }}" defer></script>


    <!-- Fonts -->


    <link rel="dns-prefetch" href="//fonts.gstatic.com">


    <link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">


    <!-- Styles -->


    <link href="{{ asset('css/app.css') }}" rel="stylesheet">


</head>


<body>


    <div id="app">


    </div>


</body>


</html>

resources/js/components/Example.jsを修正

app.blade.phpの「id=”app”」部分に、Exampleコンポーネントをレンダリングするよう修正します。 getElementById部分を下記コードに修正してください。



if (document.getElementById('app')) {


    ReactDOM.render(<Example />, document.getElementById('app'));


}

これにより、Laravelが動いているWEBサーバはHTMLファイルのみを返し、フロント側でHTMLファイルをレンダリングするようになります。

routes/web.phpを修正

どのURLからもWEBサーバがapp.blade.phpを返すように修正します。 routes/web.phpに下記を追記してください。



Route::get('{any}', function () {


    return view('app');


})->where('any','.*');

再度ビルド実行

Laravelプロジェクトのルートディレクトリで、以下のコマンドを実行してください。

npm run dev

localhostにアクセスして、ブラウザに「Example Component」が出力されていることを確認してください。確認できれば、Reactを導入できています。

バックエンドとフロントエンドを分けるメリット

img_laravelreact_03

従来のWEBアプリケーション開発では、「ブラウザからのリクエストがあった際にDBからデータを取得し、適切な処理をした後ブラウザにHTMLを返却する」処理を1つのアプリケーションとして捉えていました。

一方で近年では、「バックエンド」「フロントエンド」といった呼び分けをして技術を細分化する傾向があります。バックエンドとは「サーバサイド」とも呼ばれ、フロントからのリクエストに応じてDBのデータを参照し、適切な処理を行う部分を指します。今回だとLaravelやPHPがここに当たります。

「フロントエンド」とはバックエンドから取得したデータをどのように画面に表示するかを担当する部分を指します。React.jsやVue.jsもその1つです。

本記事ではLaravel + Reactという「バックエンド」+「フロントエンド」構成でアプリケーションを作りましたが、この構成を用いるメリットについて以下で解説します。

バックエンドの再利用性が高まる

多くの場合、バックエンドとフロントエンドで担当領域を分けることで、バックエンド側のプロダクトはHTTPリクエストに対してレスポンスを返すAPIとして作成されます。これにより、画面の作りを意識することなく、サーバがデータのみを返すことができるようになります。

この場合、フロント側で表示方法を調整するだけで、1度作ったアプリケーションをPCやスマホなど別デバイスから利用可能にすることができます。

並行開発が可能になる

バックエンドとフロントエンドを分けて開発することで、別チームとして開発タスクを割り振り、並行開発が可能になります。結果として、1チームで開発した場合と比べてより効率的な開発が行える可能性が高いです。

デプロイサイクルが短くなる

従来のアプリ開発では、少し画面の見せ方が変更になるだけでも、バックエンド部分とフロントエンド部分を両方一気にデプロイする必要がありました。

一方、バックエンドとフロントエンドを分けることで、フロント側だけの修正をデプロイすることができるので、リリース期間を短く保つことができます。

Laravelのフロント技術としてReactを選ぶメリットは?

img_laravelreact_04

Laravelのバージョン5ではプロジェクト生成時にVue.jsのリソースが自動生成されます。Laravelのフロントエンド技術として、VueではなくあえてReactを選ぶメリットはあるのでしょうか。

結論として、LaravelとVue、LaravelとReactの相性に大きな差はありません。

そのため、ReactとVue、自分の得意な開発手法を選択していただいて問題ありません。敢えてVueではなくReactを用いる利点を下記に挙げておきます。スマホアプリ開発者としてのキャリアを考えている場合や、TypeScriptを書きたい開発者の方はReactを選択しても良いでしょう。

【Reactを用いる利点】 ・スマホアプリ開発言語「React Native」の習得に繋げやすい ・JSX(Javascriptの拡張言語)で記述するため、実行前に型付けによるエラーが検知できる ・TypeScriptがサポートされている

LaravelにReactを導入して、快適にSPAを作ろう

img_laravelreact_05

本記事では、Laravelプロジェクトにフロントエンド技術としてReactを導入する手順と、そのメリットを紹介してきました。また、VueではなくReactを選択した際のメリットに関しても解説しています。バックエンドとフロントエンドを分けて開発することで、あなたのチームの開発を効率化することができます。

LaravelとReactを使いこなして、より良いアプリケーション開発に繋げていきましょう。

フロントエンドエンジニアとバックエンドエンジニアを詳しく解説!
気になる人のTwitterをフォローしよう!
アンドエンジニア公式LINEでは
新着記事やエンジニアに役立つ情報をお届け!
日々のキャッチアップをお手伝いします!
マイナビITエージェント

編集部オススメコンテンツ

eyecatch_visual_coder
Adobe製品を使わない"デザイナー"?「ビジュアルコーダー」が考える、自己満足で終わらないWebデザインとは
三角
2020.06.16

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供
この記事をシェア
Twitter
Facebook
LINE
Hatena

編集部おすすめコンテンツ

アンドエンジニアへの取材依頼、情報提供などはこちらから

Powered by マイナビ AGENT