Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2023/10/28 Vue Fes Tokyo Vue.js プロジェクト設計のベストプラクティスを求めて

cyber_snufkin
October 27, 2023

2023/10/28 Vue Fes Tokyo Vue.js プロジェクト設計のベストプラクティスを求めて

cyber_snufkin

October 27, 2023
Tweet

More Decks by cyber_snufkin

Other Decks in Technology

Transcript

  1. ©MNTSQ, Ltd. 2 自己紹介 MNTSQ株式会社 ソフトウェアエンジニア フロントエンド担当 安積洋(Azumi Hiroshi)(@cyber_snufkin) エンジニア的変遷

    LAMPでバックエンド > フロントエンド > ネイティブアプリPjM > アナリティクス > フロントエンドに戻る(今ここ) Vue.jsはv0.11からv1, v2, v3 2023/08 のv-tokyoでもお話させていただきました Vue.jsの今までをざっくり https://speakerdeck.com/cyber_snufkin/vue-dot-jsnojin-madewozatukuri
  2. ©MNTSQ, Ltd. 11 コードレベルでの変化 ゼロイチの次のMNTSQ 書く速さが重要 使われて初めてPSF (Problem Solution Fit)

    しているか判断出来る PMF前 プロダクトの価値を決めるのは市場 とにかく使ってもらえるものを 早く出したい Scrap & Build ! Feedbackはすぐに反映させたい コードレベルでも、価値観は随分変化しました。
  3. ©MNTSQ, Ltd. 12 コードレベルでの変化 ゼロイチの次のMNTSQ 読む速さが重要 書く速さが重要 PMF前 現在 プロダクトの価値を決めるのは市場

    とにかく使ってもらえるものを早く 出したい プロダクトはすでにBizの前提に なっている 新機能も既存コードとの界面は 意識しながら書く 改修はもちろん 既存コードを読んで直す コードレベルでも、価値観は随分変化しました。 使われて初めてPSF (Problem Solution Fit) しているか判断出来る Feedbackはすぐに反映させたい Scrap & Build !
  4. ©MNTSQ, Ltd. 22 設計と開発においてチーム内では、以下の2つを意識するようにお願いしています。 Principle 開放閉鎖の原則(SOLID原則の1つ) • 拡張に対しては開いている ◦ ファイルを追加するだけで機能を拡張できるのがベスト

    ◦ 既存ファイルへの改修は最小限になるように • 修正に対しては閉じている ◦ 修正が必要な場合は、その対象が限定されている YAGNI (You ain't gonna need it) • いま必要ないものは実装しない
  5. ©MNTSQ, Ltd. 30 MNTSQのSLAで定めている対象ブラウザは Microsoft Edge(Chromium版)と Google Chrome の最新バージョンです。 何と言ってもブラウザ

    ブラウザの進化を追いかける 流行とのお付き合い 新しい事はどんどん試せます。 ブラウザの進化を味方につけたい! FrontendチームではChromiumの更新タイミングに合わせて、 その内容を皆でチェックする会を開催しています。 あまりに面白いのでmtg時間が伸びる傾向に
  6. ©MNTSQ, Ltd. 33 現在MNTSQのフロントエンドはVue.jsで書かれています。 使い続ける理由としては幾つかありますが、 フロントエンド領域での標準的なエコシステムと、乖離が比較的少ない と考えている事も大きな理由です。 Vue.jsを使い続ける理由 標準との乖離をコントロールする •

    ブラウザのレンダリングエンジンがパースするのはHTMLであってJSXではない ◦ JSX、Pug等は使っていません ◦ エディタで書いているものをDevToolsでもそのまま見たい ◦ 最後の手段でDOMを弄る選択肢も残しておきたい ▪ そんな時は余裕なんて無いのでサクッと出来るようにしておきたい • 将来的な視野にWebComponentsを入れたい ◦ 現在すでに大きな開発はComponent志向 ▪ PageComponentではなく、個別のComponentから開発するスタイル • 親から作ると、子コンポーネントに親の知識が入ってしまいがちなのが理由です。
  7. ©MNTSQ, Ltd. 37 どのような情報なのか 機械学習プロダクトのフロントエンドの設計 MNTSQ Company Deckより抜粋 https://speakerdeck.com/mntsq/mntsq-careersdeck?slide=19 •

    構造解析 ◦ 文書の木構造 ◦ 条項分解 ◦ 照応解析 ◦ 当事者抽出(契約書上の「甲」「乙」) • NER ◦ 契約締結日 ◦ 契約期間 • 文書分類 ◦ 契約類型分類 • 紐付け ◦ 新たに契約書を作成する際に、内容が似てい たり、同一当事者と取り交わした過去の文書 を抽出
  8. ©MNTSQ, Ltd. 38 実際にケースの爆発に立ち向かうために、 エンティティの型と輪郭(境界)をはっきりさせて、 複雑なリレーションを整理することが重要としてアプローチしています。 (リレーションって境界を跨ぐものですしね) リレーションの境界で爆発するケースと、エンティティに閉じて起こるケース、分けて考えます。 フロントエンドエンジニアもE-R図を見ます。 基本的方針として

    ・今あるAPI設計を信じて乗っかる(追加、改善は一緒にしますが) ・エンティティの定義はバックエンドと共通化する ・新たな世界を作ったりはしない(勝手にリレーションを想定しない) としています。 機械学習プロダクトのデータを扱う ディテールについて公開するのはやはりちょっと難しく、ここでは割愛します。