既存システムのフロントエンド・バックエンド分離 / meetup0706-seki
by
Rakus_Dev
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
#RAKUSMeetup ©2022 RAKUS Co., Ltd. 既存システムのフロントエ ンド・バックエンド分離 株式会社ラクス 関 淳志
Slide 2
Slide 2 text
#RAKUSMeetup 自己紹介 関 淳志 ■経歴 前職にてスマートフォンアプリのバックエンド開発、業務ツール系Webアプリの フロントエンド開発に従事 2021年にラクスに入社し、ChatDealerのフロントエンドの開発業務を担当 ■趣味 野球観戦 そろそろ球場に行って現地観戦したい
Slide 3
Slide 3 text
#RAKUSMeetup セクション ● フロントエンド/バックエンドを分離しようと考えた経緯 ● ビジネスサイドへの提案 ● ソースコード分離の実施 ● ソースコードの分離を行い、見えてきた今後の課題
Slide 4
Slide 4 text
#RAKUSMeetup フロントエンド/バックエンドを 分離しようと考えた経緯
Slide 5
Slide 5 text
#RAKUSMeetup ChatDealerの技術スタック
Slide 6
Slide 6 text
#RAKUSMeetup 分離しようと考えた経緯 HTML/CSS/JavaScript/PHPと さまざまなソースコードがbladeファイル内で混在している 問題
Slide 7
Slide 7 text
#RAKUSMeetup 分離しようと考えた経緯 HTML/CSS/JavaScriptとPHPはファイルが 別ファイルであって欲しい! 理想
Slide 8
Slide 8 text
#RAKUSMeetup 実装がやりづらい… コードを分離しよう!
Slide 9
Slide 9 text
#RAKUSMeetup ビジネスサイドへの提案
Slide 10
Slide 10 text
#RAKUSMeetup ビジネスサイドへの提案 フロントエンドとバックエン ドのコードを分離したいで す!
Slide 11
Slide 11 text
#RAKUSMeetup 費用対効果はあるの…? 工数はどれくらいかかる…? それにどんなメリットがあるの…?
Slide 12
Slide 12 text
#RAKUSMeetup 分離後のメリットをアピール ● 分業できることで実装工数が短縮する ○ 並行作業ができる ○ それぞれのエンジニアが実装することで効率UP ● フロントエンドの実装を巻き取ることで 開発工数が下がる
Slide 13
Slide 13 text
#RAKUSMeetup ソースコード分離の実施
Slide 14
Slide 14 text
#RAKUSMeetup ソースコード分離の方針 ● MPAの方針は変えない ○ MPA:毎回サーバーにリクエストしてレスポンスが返る ○ SPA:初回リクエストはMPAと同じ。以降Ajaxなどで 必要なデータを取得し差分更新 ● 通常開発と並行して実施
Slide 15
Slide 15 text
#RAKUSMeetup リファクタリング対応 ● HTMLはVueをマウントするエレメントのみ ● データの受け取り ● @includeしているbladeをVueコンポーネント化 ● x-templateしているVueコードをVueコンポーネント化
Slide 16
Slide 16 text
#RAKUSMeetup HTMLはVueをマウントする エレメントのみ @section('body')
タイトル
これはテキストです。
@stop 実施前 bladeファイルに直接HTML コードが書いている。
Slide 17
Slide 17 text
#RAKUSMeetup HTMLはVueをマウントする エレメントのみ 実施前 @section('body')
@stop 実施後 bladeファイルに記述する HTMLコードはVueをマウン トするタグのみを記述する ルールにしました。
Slide 18
Slide 18 text
#RAKUSMeetup データの受け取り const parameter = { key1: $value1, key2: $value2, key3: $value3 }; Blade データはオブジェクト形式で作 成。 将来的にAPI化した際にコン ポーネント内のロジックを変更 しないで済むため。
Slide 19
Slide 19 text
#RAKUSMeetup @includeしているbladeを コンポーネント化 @include('frame', [ 'title' => 'テキスト', 'description' => 'これはテキストです。', ]) // frame.blade.php
{{ $title }}
{{ $description }}
@yield(‘content’)
実施前 includeしているファイル内 でパーツ化を行なっていてい る。
Slide 20
Slide 20 text
#RAKUSMeetup
{{ title }}
{{ description }}
export default { name: "VueFrame", components: { VueContent }, props: ['title', 'description'] }; @includeしているbladeを コンポーネント化 実施後 includeファイル内のパーツ をコンポーネント化。
Slide 21
Slide 21 text
#RAKUSMeetup x-templateしているVueコードを コンポーネント化 <h1>@{{ title }}</h1> Vue.component('title-text', { template: '#template', props: ['title'] } }); 実施前 blade内でVueコンポーネ ントコードが記述されてい る。
Slide 22
Slide 22 text
#RAKUSMeetup
{{ title }}
export default { name: "TitleText", props: ['title'] }; x-templateしているVueコードを コンポーネント化 実施後 SFC(単一ファイルコンポー ネント化しました。
Slide 23
Slide 23 text
#RAKUSMeetup ソースコードの分離を行い、 見えてきた今後の課題
Slide 24
Slide 24 text
#RAKUSMeetup 課題①バックエンドのAPI化 現状 グローバル変数にphp変数 を格納しVueに渡している … 理想 API化し基底コンポーネント でパラメーターを受け取るだ けにしたい。
Slide 25
Slide 25 text
#RAKUSMeetup 課題②テストツールの導入 現状 リファクタリング後、手動で 単体テスト、画面の差異がな いか確認している… 理想 単体テストやビジュアルリグ レッションテストの導入をし てテストを楽にしたい。
Slide 26
Slide 26 text
#RAKUSMeetup 課題③ビルドコストの増加 現状 1画面につき1エントリー1ア ウトプットしているのでVue コンポーネント化する度にエ ントリー数が増える… 理想 webpackの最適化をして 少しでもビルドコストを下げ たい。
Slide 27
Slide 27 text
#RAKUSMeetup まとめ ● フロントエンド部分のコードが複雑だった ● 提案は分離したことによるメリットを強調 ● フロントエンドコードはVueに置き換え ● 課題についてはこれから要検討
Slide 28
Slide 28 text
#RAKUSMeetup ご静聴ありがとうございました