Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
LIFULL Co., Ltd.
PPTX, PDF
1,284 views
大きめレガシープロジェクトのフロント行く末
2021/03/02 Ltech#14 「LIFULL HOME'S」のフロントエンドについて語り尽くします! 中島拓哉
Technology
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 19
2
/ 19
3
/ 19
4
/ 19
5
/ 19
6
/ 19
7
/ 19
8
/ 19
9
/ 19
10
/ 19
11
/ 19
12
/ 19
13
/ 19
14
/ 19
15
/ 19
16
/ 19
17
/ 19
18
/ 19
19
/ 19
More Related Content
PDF
Kubernetesセキュリティの歩き方
by
LIFULL Co., Ltd.
PDF
趣味と仕事の違い、現場で求められるアプリケーションの可観測性
by
LIFULL Co., Ltd.
PPTX
LIFULL HOME'SでのSolrの構成と運用の変遷
by
LIFULL Co., Ltd.
PDF
Kubernetesクラスタバージョンアップを支える技術
by
LIFULL Co., Ltd.
PDF
LIFULLの全社アプリケーション実行基盤 KEEL について
by
LIFULL Co., Ltd.
PDF
20220319_新卒から活躍し続けるエンジニアが大切にしている5つのこと
by
LIFULL Co., Ltd.
PPTX
SaPID を導入するまでとそれから
by
LIFULL Co., Ltd.
PPTX
LIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっている
by
LIFULL Co., Ltd.
Kubernetesセキュリティの歩き方
by
LIFULL Co., Ltd.
趣味と仕事の違い、現場で求められるアプリケーションの可観測性
by
LIFULL Co., Ltd.
LIFULL HOME'SでのSolrの構成と運用の変遷
by
LIFULL Co., Ltd.
Kubernetesクラスタバージョンアップを支える技術
by
LIFULL Co., Ltd.
LIFULLの全社アプリケーション実行基盤 KEEL について
by
LIFULL Co., Ltd.
20220319_新卒から活躍し続けるエンジニアが大切にしている5つのこと
by
LIFULL Co., Ltd.
SaPID を導入するまでとそれから
by
LIFULL Co., Ltd.
LIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっている
by
LIFULL Co., Ltd.
More from LIFULL Co., Ltd.
PPTX
3D間取りを支える技術
by
LIFULL Co., Ltd.
PPTX
ウェブアクセシビリティ推進活動はじめました
by
LIFULL Co., Ltd.
PPTX
大企業でアジャイル開発を推進できる条件とその心構え
by
LIFULL Co., Ltd.
PDF
㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと
by
LIFULL Co., Ltd.
PPTX
新しい検索体験とデザインシステム
by
LIFULL Co., Ltd.
PPTX
【Ltech#11】Kubernetesを利用した機械学習モデルの本番適用例
by
LIFULL Co., Ltd.
PDF
CTOの考えるエンジニアマネジメント2
by
LIFULL Co., Ltd.
PPTX
LIFULL HOME'Sのおとり広告予測モデルの開発
by
LIFULL Co., Ltd.
PPTX
【Ltech#11】住まい探しにおける対話AIの自然言語解析技術
by
LIFULL Co., Ltd.
PPTX
【Ltech#11】ディープラーニングで間取り図を3Dにする
by
LIFULL Co., Ltd.
PDF
実践 マーケティングテクノロジーエンジニア
by
LIFULL Co., Ltd.
PPTX
Well-beingを測る「LIFE WILL」開発の舞台裏
by
LIFULL Co., Ltd.
PPTX
ニオイセンサで思索する街の新たな指標
by
LIFULL Co., Ltd.
PDF
【Web系ベンチャーが語るAWS利用事例】社内ソリューションアーキテクトのすすめ
by
LIFULL Co., Ltd.
PPTX
スクラムを利用したアジャイルオフショア開発のとりくみ
by
LIFULL Co., Ltd.
PPTX
エンジニア × マーケティングテクノロジー が必要な理由
by
LIFULL Co., Ltd.
PPTX
「空飛ぶホームズくん」を実現するVR技術
by
LIFULL Co., Ltd.
PPTX
【Ltech#11】ガウス過程回帰を用いた広宣費予測と可視化
by
LIFULL Co., Ltd.
PDF
大規模サイト開発と新規事業開発の経験から見たそれぞれの違い
by
LIFULL Co., Ltd.
PPTX
3時間でプロトタイプをユーザーにお届け!LIFULLの高速仮説検証プログラムとは?
by
LIFULL Co., Ltd.
3D間取りを支える技術
by
LIFULL Co., Ltd.
ウェブアクセシビリティ推進活動はじめました
by
LIFULL Co., Ltd.
大企業でアジャイル開発を推進できる条件とその心構え
by
LIFULL Co., Ltd.
㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと
by
LIFULL Co., Ltd.
新しい検索体験とデザインシステム
by
LIFULL Co., Ltd.
【Ltech#11】Kubernetesを利用した機械学習モデルの本番適用例
by
LIFULL Co., Ltd.
CTOの考えるエンジニアマネジメント2
by
LIFULL Co., Ltd.
LIFULL HOME'Sのおとり広告予測モデルの開発
by
LIFULL Co., Ltd.
【Ltech#11】住まい探しにおける対話AIの自然言語解析技術
by
LIFULL Co., Ltd.
【Ltech#11】ディープラーニングで間取り図を3Dにする
by
LIFULL Co., Ltd.
実践 マーケティングテクノロジーエンジニア
by
LIFULL Co., Ltd.
Well-beingを測る「LIFE WILL」開発の舞台裏
by
LIFULL Co., Ltd.
ニオイセンサで思索する街の新たな指標
by
LIFULL Co., Ltd.
【Web系ベンチャーが語るAWS利用事例】社内ソリューションアーキテクトのすすめ
by
LIFULL Co., Ltd.
スクラムを利用したアジャイルオフショア開発のとりくみ
by
LIFULL Co., Ltd.
エンジニア × マーケティングテクノロジー が必要な理由
by
LIFULL Co., Ltd.
「空飛ぶホームズくん」を実現するVR技術
by
LIFULL Co., Ltd.
【Ltech#11】ガウス過程回帰を用いた広宣費予測と可視化
by
LIFULL Co., Ltd.
大規模サイト開発と新規事業開発の経験から見たそれぞれの違い
by
LIFULL Co., Ltd.
3時間でプロトタイプをユーザーにお届け!LIFULLの高速仮説検証プログラムとは?
by
LIFULL Co., Ltd.
Recently uploaded
PDF
エンジニアが選ぶべきAIエディタ & Antigravity 活用例@ウェビナー「触ってみてどうだった?Google Antigravity 既存IDEと...
by
NorihiroSunada
PDF
20251210_MultiDevinForEnterprise on Devin 1st Anniv Meetup
by
Masaki Yamakawa
PDF
流行りに乗っかるClaris FileMaker 〜AI関連機能の紹介〜 by 合同会社イボルブ
by
Evolve LLC.
PPTX
楽々ナレッジベース「楽ナレ」3種比較 - Dify / AWS S3 Vector / Google File Search Tool
by
Kiyohide Yamaguchi
PDF
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #2
by
Tasuku Takahashi
PDF
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #1
by
Tasuku Takahashi
エンジニアが選ぶべきAIエディタ & Antigravity 活用例@ウェビナー「触ってみてどうだった?Google Antigravity 既存IDEと...
by
NorihiroSunada
20251210_MultiDevinForEnterprise on Devin 1st Anniv Meetup
by
Masaki Yamakawa
流行りに乗っかるClaris FileMaker 〜AI関連機能の紹介〜 by 合同会社イボルブ
by
Evolve LLC.
楽々ナレッジベース「楽ナレ」3種比較 - Dify / AWS S3 Vector / Google File Search Tool
by
Kiyohide Yamaguchi
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #2
by
Tasuku Takahashi
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #1
by
Tasuku Takahashi
大きめレガシープロジェクトのフロント行く末
1.
Copyright© LIFULL Co.,Ltd.
All Rights Reserved. 大きめレガシープロジェクトのフロン ト行く末 約10年前に作られたLIFULL HOME'Sの現行サイト。負債化したJSは何が不十分で負債化したのか、最小限のコストでよりよい設計・規則を 導入するためにどう立ち向かっていくか 2021.03
2.
Copyright© LIFULL Co.,Ltd.
All Rights Reserved. 2010年4月入社 アプリケーションエンジニアと入社して10年、現 在はややフロント寄りの業務をしている 学生時代にネトゲで嶌田氏と知り合い、その辺が きっかけでウェブ開発を始めた ウェブとDHHが大好き Nakajima Takuya Twitter: @nazomikan 大きめレガシープロジェクトのフロント行く末
3.
Copyright© LIFULL Co.,Ltd.
All Rights Reserved. 大きめレガシープロジェクトのフロント行く末 10年前にリニューアル後、以降大きなリニューアルもなく開発され続けてきたサイト(部分的にマイクロサービス化して いる) アプリケーション側の技術スタック • Symfony2 • Twig • jQuery + Backbone.View的な設計 • Babel/Rollup/Sass/部分的にtypescript LIFULL HOME’Sのサイト内情 1498 files. 136565 lines. JavaScript files (ignore library) おかしいな、さほど大きめではないような…
4.
Copyright© LIFULL Co.,Ltd.
All Rights Reserved. 大きめレガシープロジェクトのフロント行く末 基本的にはBackbone.Viewと同じ考え方 テンプレートパーツと対になるJavaScript側のViewがあって、それ単位で 振る舞いを記述している Backbone同様にイベント機構の統一などは重なっている View同士の連携はグローバルなカスタムイベントを使ってやりとりして いた。 (Backbone.Eventsをグローバル放出してpubsubするのとほぼ同じ) 既存コードでのViewの考え方
5.
Copyright© LIFULL Co.,Ltd.
All Rights Reserved. 大きめレガシープロジェクトのフロント行く末 • コードの流れの統一 • eventsを見ればそのUIの振る舞いがわかる • 全てのviewでそうなのでリードコストが削減される • Viewごとの振る舞い定義によるファイル分割 (問題あり) 解決されている問題
6.
Copyright© LIFULL Co.,Ltd.
All Rights Reserved. 大きめレガシープロジェクトのフロント行く末 結局なくならないDOM探索 • DOM探索で埋漏れるビジネスロジック • セレクタに依存してDOMの変更に弱い • 似た少し違うコードが量産されて、build時間が増大して いく • 横方向の区切りはできても縦方向のviewの境目が守られない • 安易なDOM探索が子,親viewを犯してしまう • 親・子分割がうまく行かず巨大な親だけ作られていく • インスタンスが露出して外部から使役される懸念が残る • XHR等で後に挿入されたHTMLへの振る舞いのアタッチが手動 になり、それでまたビジネスロジックが汚染される 後にわかるコードの隙
7.
Copyright© LIFULL Co.,Ltd.
All Rights Reserved.
8.
Copyright© LIFULL Co.,Ltd.
All Rights Reserved. 「HTMLとJavaScriptの概念的距離を圧縮したい」 DHH say: HTMLとJavaScriptはよく見ると、PHPとmysqlみたいな関係にある セレクタというQueryを投げてDOMを得ている データアクセスには手続きが必要で、壊れやすく、ビジネスロジックはそ のコードに埋もれ、さらには独特なそのデータ形式(NodeList等)の normalizeに苦心する DOMが変数やプロパティにアクセスするかのように簡単に参照でき、それ らへのアクセスに制限を設けることができれば問題は軽減する
9.
Copyright© LIFULL Co.,Ltd.
All Rights Reserved. 大きめレガシープロジェクトのフロント行く末 • JavaScriptの中にDOMを記述することでDOMの参照を探索せ ずに実現している • これもHTMLとJavaScriptの概念的距離の圧縮に成功し ている At modern library
10.
Copyright© LIFULL Co.,Ltd.
All Rights Reserved. Use React/Vue?
11.
Copyright© LIFULL Co.,Ltd.
All Rights Reserved. 大きめレガシープロジェクトのフロント行く末 • Existing DOMの安心感はなんだかんだ半端ない • JavaScriptが最悪動かなくてもHTMLドキュメントとして最低限機能を果たしてくれる • SEO的な懸念の回避 • インデックスが遅いだけで大丈夫とか、心配ならSSRすればとかあるけどそもそも そんな不安や複雑性を抱えたくない • 現行の資産(負債)の大きさ故にシステム構成レベルの変革を望まない • 負債は一括返済ではなく分割で返済したい • 返さなくていい負債は返すつもりもない • カバーする領域がJavaScript領域に閉じてない • 将来的な別ソリューションの登場時に撤退容易性が低い • 命預けるなら普遍的なHTMLを軸にしたライブラリにしたい • 将来的にビルドプロセスをなくしたいのでxxx-loader系と縁を持ちたくない • ビルド時間を気にしたり、ビルド設定に時間を費やすのはソフトウェアライターとして本 質的ではない しぶり続けて早5年、理由はよくあるやつ
12.
Copyright© LIFULL Co.,Ltd.
All Rights Reserved. 大きめレガシープロジェクトのフロント行く末 • Existing DOMのアプローチでDOMアクセスを省略できて、インスタンスを隠蔽できて、振る 舞いのアタッチを自動化できたらそれが一番いい • ついでに流行りのライブラリのようにHTML側からみて振る舞いが宣言的であれば嬉しい • ブラウザの敷いた道から離れたくない (戻るの大変なので) • WebComponentsがやや近しい?気がしてそれの発展に期待していた • 振る舞いの自動アタッチ • インスタンスの隠蔽 • DOMアクセスの制限(shadow root内に限られる) わがままな私たち
13.
Copyright© LIFULL Co.,Ltd.
All Rights Reserved. そんなこんなで負債を 垂れ流し続けたある日 Basecamp製のStimulusが熱いゾ
14.
Copyright© LIFULL Co.,Ltd.
All Rights Reserved. 大きめレガシープロジェクトのフロント行く末 • Basecamp製のJavaScriptライブラリ (thx. dhh, sstephenson, javan • Existing DOMアプローチ • DOMの変更をMutationObserverで監視し、対象のDOMが出現したら自動で定義した振る舞いをアタッチする。 • 操作したいDOMを明記しておくとgetterメソッドが自動で作られてプロパティのようにアクセスできる Stimulus data-[controller]-target=“xxx” の要素にthis.xxxTargetでアク セス data-action=“evt- >controller#method”で要素に 振る舞いをアタッチ data-cotrollerでHTMLと JavaScriptを接続
15.
Copyright© LIFULL Co.,Ltd.
All Rights Reserved.
16.
Copyright© LIFULL Co.,Ltd.
All Rights Reserved. 大きめレガシープロジェクトのフロント行く末 • Existing DOMの絶対的安心感 • アクセスするDOMは事前に定義でき、それらはシームレスにプロパティとしてアクセスできる • HTML側にアクセスする要素を記述するのでJavaScript側はHTMLの構造変更の影響をほぼ受けない • 振る舞いは自動でアタッチされインスタンスの隠蔽で悩む必要はない • HTML側からみて振る舞い、状態が宣言的である • HTMLの出現時に自動で振る舞いや状態がアタッチされるのでサーバ側からは大きなjsonを返す必要はなくHTMLを返 せばいい • 必然的に型・スキーマの重要性が下がる • Primitiveなcontrollerの再利用製の高さ • DOMをセレクタで探索するのではなくDOM側に対象を明記するのでDOMの構造差異に強く振る舞い自体の再利 用製が高い • disclosure/remover/modal/content-loader等、再利用製高い単一用途のcontrollerを作ってガンガン再利用できる Stimulus is great solution
17.
Copyright© LIFULL Co.,Ltd.
All Rights Reserved. 大きめレガシープロジェクトのフロント行く末 • stimulusでHTMLとJavaScriptの概念的距離を縮め、さらには振る舞いを宣言的にする • 全移行はコストかかるので本気ださない • 長い期間、既存設計と併用になるがそれを厭わない(困らないので) • 新しくそこを触るときにstimulusで置き換えられるところをそっと切り出すだけでいい • Build Processをいつか捨てるという夢は諦めない (ie11が死んだ暁には…) • bye babel, bye bundler, bye transpiler • アプリケーションの設定的な複雑性から解放されたい • PrimitiveなControllerを大量生産してコード量を1/20(次期目標)にしていく • 新規開発において既存のcontrollerをロードしてhtml側で属性組み立てるだけでそのページの振る舞いが完成すること が夢 • 書いたコードは例外なく将来負債になる • コードは書かないに越したことはない LIFULL HOME’Sの戦略
18.
Copyright© LIFULL Co.,Ltd.
All Rights Reserved. 大きめレガシープロジェクトのフロント行く末 LIFULL HOME’Sの戦略 HTMLを大事に Webに素直に
19.
Copyright© LIFULL Co.,Ltd.
All Rights Reserved. 大きめレガシープロジェクトのフロント行く末 終
Download