Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ANDPADにおけるVue.js活用事例紹介
Search
ANDPAD inc
October 12, 2019
Technology
0
1.8k
ANDPADにおけるVue.js活用事例紹介
とあるイベントのセッションで話す予定だった資料になります。
ANDPAD inc
October 12, 2019
Tweet
Share
More Decks by ANDPAD inc
See All by ANDPAD inc
OSS開発者という働き方
andpad
5
1.6k
Vue・React マルチプロダクト開発を支える Vite
andpad
0
110
プロダクト開発を支えるデータ利活用:中央集権から「民主化」までの軌跡
andpad
0
140
アンドパッドの Go 勉強会「 gopher 会」とその内容の紹介
andpad
0
370
読もう! Android build ドキュメント
andpad
1
430
アンドパッドにおける CocoaPods ライブラリ群の SwiftPackageManager への移行戦略
andpad
0
210
Flutter は DCM が 9 割
andpad
1
350
Amplify で SPA をホスティングする際の注意点
andpad
1
290
マルチプロダクト開発の現場でAWS Security Hubを1年以上運用して得た教訓
andpad
0
140
Other Decks in Technology
See All in Technology
トヨタ生産方式(TPS)入門
recruitengineers
PRO
5
1.4k
生成AI時代のデータ基盤設計〜ペースレイヤリングで実現する高速開発と持続性〜 / Levtech Meetup_Session_2
sansan_randd
1
100
つくって納得、つかって実感! 大規模言語モデルことはじめ
recruitengineers
PRO
32
12k
実践アプリケーション設計 ②トランザクションスクリプトへの対応
recruitengineers
PRO
4
1.2k
mruby(PicoRuby)で ファミコン音楽を奏でる
kishima
2
490
生成AI時代に必要な価値ある意思決定を育てる「開発プロセス定義」を用いた中期戦略
kakehashi
PRO
1
240
Kubernetes における cgroup v2 でのOut-Of-Memory 問題の解決
pfn
PRO
0
430
ここ一年のCCoEとしてのAWSコスト最適化を振り返る / CCoE AWS Cost Optimization devio2025
masahirokawahara
1
940
まだ間に合う! StrandsとBedrock AgentCoreでAIエージェント構築に入門しよう
minorun365
PRO
10
680
知られざるprops命名の慣習 アクション編
uhyo
11
2.8k
人と組織に偏重したEMへのアンチテーゼ──なぜ、EMに設計力が必要なのか/An antithesis to the overemphasis of people and organizations in EM
dskst
7
840
Grafana MCPサーバーによるAIエージェント経由でのGrafanaダッシュボード動的生成
hamadakoji
1
900
Featured
See All Featured
Thoughts on Productivity
jonyablonski
69
4.8k
KATA
mclloyd
32
14k
Site-Speed That Sticks
csswizardry
10
800
[RailsConf 2023] Rails as a piece of cake
palkan
56
5.8k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.8k
Typedesign – Prime Four
hannesfritz
42
2.8k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
Six Lessons from altMBA
skipperchong
28
4k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Transcript
ANDPADにおけるVue.js活用事例紹介
藤井 洋平 Twitter @yohei_fujii1127 Yohei Fujii ANDPAD フロントエンドエンジニア 大学卒業後、インドネシア現地企業に就職。営業・ 管理部門職を経験。ジャカルタを中心に4年ほど
勤務。帰国後、エンジニアに転職し、 2019年1月か らOct.incにジョイン。当初は新規開発チームで短 工事サービスの開発をしていたが、今は工程管理 チームで工 程 表 開 発をメインに、フロントエンド業 務に携わる(Vue/Nuxt)。 Web開 発のみならず、プライベートでは筋 肉の開 発にも力を入れている。好きな食べ物は、お寿司 自己紹介
会社名 :株式会社オクト(Oct.inc) 住所 :〒101-0022 東京都千代田区神田練塀町 300 住友不動産秋葉原駅前ビル 8階 従業員 :約150名(内エンジニア約40名、業務委託含む)
*2019/10現在 事業内容 :メディア事業・システム開発 クラウド型施工管理ソフト ANDPADの開発および運営 会社紹介 今週引っ越したばかりです!
会社紹介 Ruby(Rails)での開発にも力を入れています Ruby Bizにて Ruby Kaigiにて Ruby on Railsコミッター 兼
Rubyコミッターである松田 明氏 に技術顧問として就任して頂きま した
は 施工管理アプリです 2016年3月のサービスリリース以来、現場の効率化から経営改善ま で一元で管理していただけるクラウド型建設プロジェクト管理サービ スを提供し、2019年3月現在で1,600社の企業に導入頂いておりま す。 ANDPADとは?
ANDPADとは? 現場の情報を一元管理 案件発生~完工までに関連する情報を集約できる。 個人管理だった情報がANDPADに統一した形式で保存され、会社管理になる。 案件管理 現場までの地図 工程表共有 現場からの報告 写真
ANDPADにおける仕様技術 ANDPADエンジニア採用サイト( https://engineer.88oct.co.jp)より
ANDPADにおけるWeb画面 施工管理 引合粗利管理 工程表 などなどまだまだ たくさんの機能画面があります チャット
ANDPADにおけるフロントエンドの移り変わり Angular.js v1を使用しており、v2のアップデートにおける大幅な更新をやらなかったために、 v1でのメンテを 余儀なくされていた。 Angularのバージョンを上げてメンテしていくよりも、新しいフレームワークを採用し、作り変えていった方が 早いと判断 当時2018年終わり頃Vueの人気が伸びており興味があったこと、そして 新しい技術は積極的に取り入れて 試してみようぜということからVue.jsを使ってみようとなった。
順次置き換えを行っている段階 (今でも、jQueryやCoffeeScriptが残っている箇所はある)
ANDPADにおけるVue.js採用パターン Vue on Rails ANDPAD本体で使っているSlimテンプレート の上に、WebpackerでVueを読み込ませて いる。本体機能のフロントリニューアルから 機能改修の際に利用。 メンテナンス性や開発効率を重視し、今後も 適用画面が増えていくと予想。ページ数が
多く、他プロジェクトとの兼ね合い上、段階的 に対応中。将来的には完全にフロントの切り 出しを計画している部分。 Vue on Nuxt マイクロサービス化の一環として、本体からの切り 出しを行なっている。 Nuxtの恩恵を受けながら開 発を進めることができ、1サービスとして成り立つ 部分であり、リポジトリも別れている。 Atomic Designをベースとしたコンポーネント設計を行って おり、粒度の低いものは社内共通ライブラリにて管 理。 サーバー側(Rails)はAPIを返すだけ。Nuxtはコン テナ化し、Kubernetesで管理。 • 新工程表(ガントチャート) • 写真出力編集ページ • 図面管理ページ • etc... • 短工事 • 真チャット • 真横断工程表
ANDPADにおけるフロントエンドの取り組んでいる課題 ① ページ数の多い本体における置き換え ④ 社内ライブラリによる共通パーツ化 ③ マルチブラウザ対応 ② タブレット対応 建築業界ではIEを使っているお客様が
まだ多く、一定の割合を占めている。リ ニューアルの際には動作確認を進めな がらの実装が必然となる。 現場監督さんなどが現場でも使える サービスを意識。全ての機能ではな いが、必要な機能には タッチイベント を考慮する必要がある 機能が多く、ページ数も多い。 案件/工程/写真/資料/報告/検査/発注/メンバー/メ モ/カレンダー/設定/etc…… andpad-uiというライブラリをRollupで構 築。デザイン面での統一感も課題 であり、 共通パーツなどを順次、拡張&適用して いっている。
ANDPADにおけるVue.js利用例3つ 1. 写真出力編集画面 カスタムディレクティブと v-forの基本的な問題 2. 新工程表 vue-draggable-resizableの活用とガントチャート作成 3. 新横断工程表
アイテムの一元管理
ANDPAD写真出力編集画面におけるVue.js 【特徴】 1. 出力形式と同じ見た目での直感的な編集機能 2. 違ったフォーマット(1ページあたり2枚、3枚、4枚、6枚など)への対応 3. 画像を扱う上での負荷削減処理 1. HTML5で標準的機能となっているdrag
イベントを利用。ストアでドラッグ中のア イテムを管理。ドロップするときもその データを使うことでコンポーネントをまた いでのドラッグ&ドロップ機能を使用。 2. vue-draggableを活用し、行の並び替 えを可能にしている 3. ページを超えた並び替えが必要であっ たため、ページという概念は使わず、 フォーマットによってスタイルを利用して 空白を作り、ページっぽく表現した 実装面
ANDPAD写真出力編集画面におけるVue.js ① ② ③ ④ lazyloadを使いたいが、今回のように画像を差し 替えたりする場合は、カスタムディレクティブにお いて、bind(対象の要素に紐づいた時に一度しか 呼ばれない)でやると、見た目上、画像の置換が 行われなかった。
insertedとupdate併用しこれに対応。insertedの時 にvnode.contextに$_apImageSrcという名で画像 のパスを登録しておき、 updateの際に呼び出して 更新することで、画像差し替えや行の並び替えに よる画像の変更に対応した。 またnew IntersectionObserver*を使い、見えてい るものだけオリジナルの画像パスを、そうでない viewport外のものは、1x1のpngに置き換えてブラ ウザへの負荷を減らしている。 *IE動作のためpolyfill対応のものを利用 ポイント
ANDPAD新工程表に見るVue.js 【特徴】 1. 工程管理ガントチャート(旧 verからのリニューアル) 2. 画面数は多くないが動的な計算ロジック部分が多く占める 3. ANDPADにおける一番最初の Vue.js適用画面。Slim(Rails)の上に乗っている
1. vue-draggable-resizableの利用 (y軸には制限をかけ、x軸での操 作を可能化) 2. dragとresizeイベントで更新処理 (ただし、外部影響によるバーの 長さ変更は検知しないので、fork してカスタマイズ、もしくは forceUpdateを使う必要がある) 3. canvasを使い文字列の長さを取 得し出し分けを行っている 実装面
ANDPAD新工程表に見るVue.js propsで縦横長さ、位置、リサイズのためのハンドル位置が設定できる。 イベントハンドリングも簡単に操作。 slotに様々なものを入れることができるので、付属情報も簡単にカスタマイズできる *サンプルデータ ポイント
ANDPAD新横断工程表に見るVue.js 【特徴】 1. 先ほどの案件ベースの工程表を並べて「横断的に」見る機能(旧 verからのリニューアル) 2. 開発背景としては、施工管理会社によっては同時にいくつもの案件を抱えており、横断的にスケジュール を見たいとのニーズから。 3. 新工程表に似ているがこちらは
Viewサービスとしての色が強い 実装面 1. Vuexモジュールを「認証」「共通」「画面」に 区分して管理している。 2. 新工程表で課題となっていた日付幅調整 やドラッグ&リサイズ感の改善 3. 案件、担当者、担当会社と並べて表示す ることで同じアイテムを表示する必要性が 出た。連動する必要があるので、「一元管 理」を意識してVuexを利用。
ANDPAD新横断工程表に見るVue.js 配列の下にあるオブジェクトをそのまま使うのではなく、 stateに別のオブジェクトとして一元管理した。 参照する際は、gettersを介して、idを投げ、対象のオブジェクトを取得。 こうすることでリアルタイムに変更を別の箇所でも反映されるように。 ← state → ←getters mutations↓
ポイント こいつの中に存在するアイテム (workloadItem)は直接参照しない chart.js
さいごに 仲間を募集しています! • Vue.jsをがっつりやりたい人 • フロントエンドを引っ張って行くポジションに興 味がある人 • 建築業界に革命をもたらしてみたい人 •
リニューアルプロジェクトに興味がある人 テックブログ :https://tech.88oct.co.jp/ 会社サイト :https://88oct.co.jp/ 3周年記念サイト :https://lp.andpad.jp/andpad-3rd-anniversary/ エンジニア採用サイト :https://engineer.88oct.co.jp/ みんなで議論しながら設計とか技術を決めていく文化です! 詰まった時に相談できる環境があって、技術顧問もいますのでぜひ ぜひお気軽にお声掛けください
ありがとうございました!