Vue.js + TypeScriptによる 新規サービス開発の振り返り/frontend-looking-back
by
hatsune
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
Vue.js + TypeScriptによる 新規サービス開発の振り返り 株式会社ラクス 開発本部 第一開発部 UI開発課 北嶋 初音
Slide 2
Slide 2 text
#RAKUSMeetup 自己紹介 ● 北嶋 初音 / Hatsune Kitajima ● 経歴 ○ 2016年4月:Web系のITベンチャーに新卒入社 ○ 2020年1月:ラクスに中途入社 ● 現在 ○ ラクス初のフロントエンドエンジニア ○ 新規サービス(楽楽勤怠)の機能開発を担当 ○ フロントエンド組織のベース作り
Slide 3
Slide 3 text
#RAKUSMeetup 楽楽勤怠 ● 2020年10月1日に無事リリース ● 今後も新機能を続々追加予定
Slide 4
Slide 4 text
#RAKUSMeetup 今日お話しすること 楽楽勤怠の開発初期〜リリースまでの振り返り 開発体制 利用技術 今後の開発
Slide 5
Slide 5 text
開発体制
Slide 6
Slide 6 text
#RAKUSMeetup 開発体制 - エンジニア ● SPA(Single Page Application)を採用 ● FE・BEを分けて開発(社内初) FE 画面表示 BE Web API Ajax通信
Slide 7
Slide 7 text
#RAKUSMeetup 開発体制 - 全体 FEエンジニア(4) BEエンジニア(6) PdM(1) UIデザイナー(2)
Slide 8
Slide 8 text
#RAKUSMeetup 開発体制 - 全体 FEエンジニア(4) BEエンジニア(6) PdM(1) UIデザイナー(2) FE,BEを分けて開発
Slide 9
Slide 9 text
#RAKUSMeetup 開発体制 - 開発フロー FEエンジニア 画面実装 BEエンジニア API仕様書作成 UIデザイナー デザイン作成 PdM 要件仕様書作成 BEエンジニア API実装
Slide 10
Slide 10 text
#RAKUSMeetup 開発体制 - 開発フロー FEエンジニア 画面実装 BEエンジニア API仕様書作成 UIデザイナー デザイン作成 PdM 要件仕様書作成 BEエンジニア API実装 ・FE,BEが並行開発 ・APIは初めはモック ・実装後に繋ぎ込み
Slide 11
Slide 11 text
#RAKUSMeetup 開発体制 - 良かった点 ● SPA ○ 最小限のデータのやりとりでOK ○ スムーズなUI/UXを実現できる ● Web API ○ SPAと相性が良い ○ FEのモダンなフレームワークを利用しやすい ■ 楽楽勤怠ではVue.js採用 ○ 再利用ができる ■ PC版・スマホ版で同じAPIを呼べばOK
Slide 12
Slide 12 text
#RAKUSMeetup 開発体制 - 良かった点 ● BE,FEを分けて開発 ○ それぞれの作業に集中できる ○ FE的には ■ デザインの再現、画面表示・動作に注力できる ■ APIのインターフェースだけ把握しておけばOK ○ BE,FEが並行開発できる ■ 開発スピードが早い(工数削減)
Slide 13
Slide 13 text
#RAKUSMeetup 開発体制 - 辛かった点 ● 開発フロー ○ FEが要件仕様書・デザイン・API仕様書のすべてをウォッチする必要が あり、変更に気付けないときがある ○ 【対応】ウォッチできる仕組みを作る必要がある ■ 現状は変更者が忘れないように通知するしかない ■ 例)チャットに自動投稿するなど
Slide 14
Slide 14 text
#RAKUSMeetup 開発体制 - 辛かった点 ● 開発フロー ○ デザインだけでは細かい挙動は読み取れない ○ FEで要件仕様書・デザイン・API仕様書を組み合わせて、動作を想像し て実装する必要がある ○ 実装者以外が動作の正当性を分からない(レビューできない) ○ 【対応】画面仕様書を作成する ■ 細かい動作について記載した資料を作る ■ 実装前にデザイナーや要件定義者のレビューを挟む
Slide 15
Slide 15 text
#RAKUSMeetup 開発体制 - 辛かった点 ● 開発フロー ○ FEでAPI仕様書を参考にAPIモックを作成しなければならない ○ localで各自JSONサーバーを立ち上げて対応 ○ 正常系・異常系の全パターン網羅などがつらい ○ API変更時の出戻りが大きい ○ 【対応】OpenAPIでモックサーバーを立てる ■ npmかDockerで定義ファイルからモックサーバーを立てられない か調査中(参考:swagger-typescript-codegen)
Slide 16
Slide 16 text
利用技術について
Slide 17
Slide 17 text
#RAKUSMeetup 利用技術 - フロントエンド開発 ● Vue CLI(4.0.5) ○ Babel ○ TypeScript ○ SCSS ○ Vuex ○ Vue Router ○ Vuetify ○ ESLint ○ Prettier
Slide 18
Slide 18 text
#RAKUSMeetup 利用技術 - 良かった点 ● Vue.js ○ コンポーネント化 ■ 基底コンポーネントが再利用可能 ■ 開発が進むほど実装スピードが上がる ■ PC版・スマホ版でも別スタイルを当てるだけで済む ■ scopedなCSS記述が可能 ■ アトミックデザインとの相性が良い ○ 高度なUI/UXの表現が可能
Slide 19
Slide 19 text
#RAKUSMeetup 利用技術 - 良かった点 ● TypeScript ○ 型指定で安全な開発が行える ○ エディタの補完機能が効く ○ ドキュメントとしても機能する ■ 例)メソッドに型指定があると使い方が分かる
Slide 20
Slide 20 text
#RAKUSMeetup 利用技術 - 辛かった点 ● TypeScript ○ Vue.jsとの相性の悪さ、型が衝突する ○ anyや!で型指定から逃げてしまっている所が多い ■ 既存箇所は徐々に指定していくしかない ■ 【対応】最終的にはlintではじく ○ API仕様書の変更に気付けないと型定義がずれる ■ 【対応】定義ファイルから型生成する仕組みを導入する ○ enumの利用が推奨されていない ■ 【対応】Union Types + as constに置き換える
Slide 21
Slide 21 text
#RAKUSMeetup 利用技術 - 辛かった点 ● Vuex ○ Storeで持つべきでない値を持ってしまっている ■ グローバルな値なので、最小限にすべき ■ 【対応】local変数に移動する ○ 他画面でfetchした情報がクリアされておらず、別画面に影響を与えて いる ■ 今までは遷移前に画面で利用したModuleの情報をクリア ■ 【対応】画面で利用するModuleを画面呼び出し時にクリア
Slide 22
Slide 22 text
#RAKUSMeetup 利用技術 - 辛かった点 ● Vue router ○ 履歴管理が大変 ■ historyに積む?積まない? ■ 【対応】画面仕様書に記載する ○ URLのparamを直接参照していると、画面間を高速遷移時に別画面の 同名のparam値でAPIを叩いてしまう ■ 【対応】ローカル変数に代入することで対応
Slide 23
Slide 23 text
#RAKUSMeetup 利用技術 - 辛かった点 ● パフォーマンス ○ SPAなので初期表示のパフォーマンスが悪い ■ 特にテーブル(複数API、要素数が膨大) ■ 【対応】要素の描画を段階的に行うことで回避 ○ 基底コンポーネントがリッチになるとパフォーマンスが劣化する ■ 基底コンポーネントはVuetifyをラップしたもの ■ 【対応】使っていない機能が多いので、オリジナルのものに置き換 えていくと良さそう
Slide 24
Slide 24 text
#RAKUSMeetup 利用技術 - 辛かった点 ● テストコードがない ○ リファクタリング時などにデグレが発生が検知できない ■ 【対応1】テスト環境(jest)の導入 ■ 【対応2】自動テストの仕組みを作成(CI) ○ テストを意識したコーティングになっていない ■ Vueファイルにロジックを持ちすぎている ■ 【対応1】helperファイルにロジックを移行 ■ 【対応2】Vue3.0への移行、ドメイン駆動思想の導入 ● Composition API
Slide 25
Slide 25 text
これからの開発
Slide 26
Slide 26 text
#RAKUSMeetup 振り返り作業 ● FEチームでリリースまでの開発の振り返りを行なった ○ 先ほどの辛かった点は振り返りで出たもの(全40件ほど) ○ 各々がスプレッドシートに改善したい項目を記載 ○ 重要度・緊急度の2軸でHigh・Middle・Lowで評価 ○ 緊急度Highから対応していく予定
Slide 27
Slide 27 text
#RAKUSMeetup これからの開発 ● 新規開発・改善タスクを並行で進めていく ○ 優先度は新規開発>改善タスク ● FEの新規開発にかかる時間はコンポーネント化により少なく なってくる想定 ○ BEよりも工数は小さくなるはず ○ 前倒しで進めて改善タスクを対応したい
Slide 28
Slide 28 text
ラクスでは定期的にMeetupや 勉強会を開催しています! ご参加お待ちしています! ラクス 中途 フロントエンドエンジニアも募集しています。