Vue.js + TypeScriptによる 新規サービス開発の振り返り/frontend-looking-back
by
hatsune
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
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や 勉強会を開催しています! ご参加お待ちしています! ラクス 中途 フロントエンドエンジニアも募集しています。