Reactとフロントエンドの話

めちゃくちゃいい取り組みなので、噛み砕いてわかりやすくまとめます!


🎯 フロントエンド刷新の取り組み

🚀 なぜやっているのか

今までの Blade + JavaScript 開発が正直しんどかった。

特に フロントとバックエンドのつなぎ目(動的な値をJavaScriptに渡したり、複雑な動きが必要なところ)で苦労していた。

なので…

将来的な拡張性(今後どんどんサービスが大きくなる)

フロントエンドを整理したい

という目的で フロントエンドライブラリ (React) を導入した。

VueじゃなくてReactなのは、

Vue3に不安があったり、Svelteは情報が少なかったりして、Reactが一番無難だったため。


⚙️ どうやっているのか

いきなり全部React化はせず、

SEOに影響がない場所(ログイン後画面など)から、少しずつ導入

具体的な戦略としては…

メインのHTML構造(枠組み)はBladeでそのまま残す

→ SEOや表示速度の観点

中の動的部分だけReactコンポーネントにする

→ 具体的には「マイページ配下」

技術的ポイント

Blade → Reactへ値を渡す方法

<div id="profile-edit-form" data-value="{{ json_encode($value) }}"></div>

➡️ data-value 属性で渡す。

hidden input などよりシンプルで管理しやすい。

React側でその値を受け取ってレンダリング

const container = document.querySelector('#profile-edit-form') as HTMLElement
const root = createRoot(container)

const {
  formUrl,
  refusalUrl,
  customer,
  ...
} = JSON.parse(container.dataset.value)

root.render(
  <ProfileEditForm
    formUrl={formUrl}
    refusalUrl={refusalUrl}
    ...
  />
)

✏️ 具体的にやったこと

app.tsx にReactのエントリーポイントを作成

Blade側で必要なデータをJSONにして渡す

Reactコンポーネントはマイページ配下に限定

webpackの設定変更

• .tsxの読み込み対応

• Vue用とReact用でエントリーポイントを分けた

entry: {
  admin: './resources/assets/js/admin.ts', // Vue
  app: './resources/assets/js/Front/app.tsx' // React
}

ビルド時間短縮

→ compression系を一時的に外して、開発体験改善


⚠️ 課題

• React化したからといって 開発がめちゃくちゃ楽になった! という実感は正直まだない。

CSSのスコープ問題

→ SCSSはコンポーネント単位でimportしてるけど、最終的にまとめて1つのCSSファイルになるため、グローバルで当たってしまう

BEMとかFLOCSSとかの設計ちゃんとしないと危険

Redux, Recoil などのステート管理はまだ導入していない

→ 増えてくるとどこかで考えないといけない


🌱 まとめと感想

今は 開発効率が爆上がり! というほどではないけど、

• 型安全なTypeScript

• しっかりしたエコシステム

• 将来的な拡張性

この辺を考えると 早めにReact導入したのは良かった と思っている。

「PHP + JavaScript + jQuery」でずっとやっているより 保守・拡張性 は圧倒的に良くなる。


もし、この説明を社内Wikiとか資料用に「まとめフォーマット」でほしい場合は言ってくれたら整えます!

コメント

タイトルとURLをコピーしました