【自分用備忘録】LaravelとVue.jsで作成したコードの追い方
はじめに
新しく案件ジョインされ、そこがLaravelとVue.jsを使用したWeb開発だったため
勉強&忘れたときに見返す用に作成。
補足
⚠️ あくまでもフロントエンドを書く者としての視点です
⚠️ 自分がジョインした案件のコードを読むためのものです
前提条件とか知識とか飛ばしているものも多いです
まずは画面とコードから
画面を見てもそのコードがどこにあるか分からんと遊んでみることもできない...
ということでURL(画面)とコードの関係性を明らかにしてみる。
ChatGPTくんによると
一般的に、LaravelとVue.jsで構成されたWebサイトのコードディレクトリ構成を教えてください。
という質問に対して
LaravelとVue.jsを組み合わせたWebサイトの場合、一般的なコードディレクトリ構成は以下のようになります。
- app/
- Http/
- Controllers/
- Models/
- Providers/
- resources/
- js/
- components/
- views/
- routes/
- database/
- public/
と教えてくれたので名前的に routes/
配下に記載があると予測、
実際入ってみたらそれっぽいコードが書いてあった。
// ホーム画面に遷移したときはこんな感じ
Route::get('/', 'HomeController@index');
// ログインするときはこんな感じ
Route::post('/login', 'Auth\LoginController@login');
// どっかで参照できるnameなるものも付けられるらしい
Route::post('/login', 'Auth\LoginController@login')->name('login');
// middlewareなるものを使うときはこういう書き方をするっぽい
Route::middleware('middleware')->group(function () {
Route::get('/', 'HomeController@index');
});
後はLaravelで書いてあるのControllerをみてビューを特定し、そこの.vueファイルとかでうじゃうじゃやってみるという計画で進めます。
不明点
ジョインした案件では routes/
配下に記載がないところもあったので
他で制御している部分もあるかも...??
Controllerを見てみる
さっきのホーム画面を例に。
Route::get('/', 'HomeController@index');
と記載があったので app/Http/Controllers/HomeController.php
を確認して index()
を見てみる。
public function index()
{
return view('home.index');
}
ということでここでビューを呼んでいるんだろうなと推測できました。
変数を渡したいときは↓みたいな書き方をしてビューを呼ぶときに一緒に定義してあげる
public function index()
{
$variable = 'こんな感じで変数を入れてあげる';
return view('home.index')
->with([
'variable'=> $variable
]);
}
viewsを見てみる
ここでvueファイルにありつけると思ったらそんなことなかった。
どうやらLaravelには Blade というものがあるらしく、まずはそこを確認する。
BladeについてChatGPTに聞いてみた
Bladeは、Laravelフレームワークに組み込まれているテンプレートエンジンです。テンプレートエンジンは、HTMLコードの中に動的なデータを埋め込むための仕組みを提供します。
Bladeテンプレートエンジンは、直感的で簡潔なシンタックスを持っており、可読性や保守性の高いテンプレートを作成することができます。例えば、ループや条件分岐などの制御構造を含むテンプレートを簡単に記述することができます。
Bladeテンプレートは、.blade.php
という拡張子のファイルとして保存されます。これらのファイル内では、通常のHTMLコードに加えて、Blade独自の指示や構文を使用することができます。例えば、{{ $variable }}
のような形式で変数の値を表示したり、@if
や@for
などのディレクティブを使用して条件分岐やループ処理を行ったりすることができます。
Bladeはパワフルなテンプレートエンジンであり、コードの再利用性やメンテナンス性を向上させるための便利な機能を提供します。また、ビューのレンダリングやコンポーネントの再利用に最適です。Laravelフレームワークでは、Bladeテンプレートエンジンがデフォルトで使用されており、Laravelの文法と互換性があります。
@extends('layouts.layout')
@section('head')
@endsection
@section('title') ホーム画面 @endsection
@section('content')
<div class="home-container">
<home-title :title="Hello, World"></home-title>
</div>
@endsection
見た所感としてはページのレイアウトを記載する場所という印象。
同時に、 extends
という英語から共通レイアウトを :resources/views/layouts/ layout.blade.php
で作成されているなということを予測。
そして home-title
は新規のHTMLタグではなくvueで作成したコンポーネントだろうということも予測。
だいぶ雰囲気が掴めてきたなという気持ちになってきました。
components/たち
先ほど予測した home-title
コンポーネントは resources/components/HomeTitle.vue
にあり、そこでHTMLなりCSSファイルに書いていないスタイルや挙動なりが記載されている。
というわけで、後はこの conponents/
たちを見て色々やってみればOK!
とは思ったものの、1つ疑問点が残っていました。
bladeから使用しているコンポーネントはどこで指定しているんだ...??
JavaScriptの皆様
ここまででコンポーネントを指定する件がなかったなと思ったらJavaScriptのファイルが活躍してくれていた。
resources/js/app.js
にパスに対応するコンポーネントを呼んでいる処理がありそうだったので見てみる。
page('/', () => {
import(/* webpackChunkName: "home" */ './Home').then(
({ Home }) => {
return new Home();
},
);
});
routes/web.php
で定義したパスに対して必要な処理があればここで記載してあげるってイメージ。
なので resources/js/home.js
に行ってみると↓があったので詳細なHTML構成とかは.vueファイル見れば分かりそう!
import Vue from 'vue';
import HomeTitleComponent from '../components/HomeTitle.vue';
class Home {
constructor() {
const app = new Vue({
el: '#app',
components: {
'home-title': HomeTitleComponent,
},
});
app.$mount('#app');
}
}
export { Home, Vue };
でひとまず追えたかなと!
詳細なコードはまだまだ勉強しつつ他のスクラップとか記事とかにまとめます