既存システムのフロントエンド・バックエンド分離 / meetup0706-seki
by
Rakus_Dev
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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 ご静聴ありがとうございました