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
明日から始めたくなる、フロントエンドのチーム開発における設計のすゝめ
Search
taga3s
November 03, 2024
0
25
明日から始めたくなる、フロントエンドのチーム開発における設計のすゝめ
学生チーム開発ノウハウ共有カンファレンス2024での登壇資料です。
taga3s
November 03, 2024
Tweet
Share
Featured
See All Featured
RailsConf 2023
tenderlove
29
940
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
Gamification - CAS2011
davidbonilla
80
5.1k
Designing Experiences People Love
moore
138
23k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.3k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.6k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Typedesign – Prime Four
hannesfritz
40
2.4k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.4k
Transcript
明日から始めたくなる、 フロントエンドのチーム開発における 設計のすゝめ 学生チーム開発ノウハウ共有カンファレンス @理工展
自己紹介 Seiya TAGAMI ・Waseda Law B3 ・Web開発がメイン ・大学1年にプログラミングに出会い、ずっと ハマっている GitHub
ID: taga3s
トーク10分で伝えたいこと ・初心者が集まったチーム開発でも、ベーシックな設計を取り入れること でスムーズに開発が行えたこと ※設計を取り入れ、チーム開発してみたことがない方向けの内容なの で、あしからず
前置き
どんなチーム開発だったか? ・ハッカソンで即席で集められたメンバー4人での開発 ・ほとんどがWeb開発初心者 ・「Reactって何?」「TypeScriptって何?」な状況
どんなチーム開発だったか? ・最終的に作ったもの: - ゲーミフィケーションにより習慣化を促進するWebアプリ
チームでやりたかったこと (1)きちんと動くものを作りきりたい (2)学びを多く吸収できる機会にしたい (3)話し合いで出てきた良い機能案は積極的に取り入れたい
チームに課せられた制約 (1)Web開発初心者が多めであり、コーディング以外にも慣れていない ことが多くあった (2)私たちが目指す完成形まで持っていけるかという不安
どうしたら期限内で、 完成まで持っていけるか?
色々な施策を取り入れた ・スキーマ駆動な開発 ・設計・デザインパターンの適用 ・Github Actionsを用いた自動化 ・フロントエンドツールチェインの活用 ・Github Projectの利用 ・公式ドキュメントをみんなで読み、キャッチアップ
設計を取り入れるまでの思考過程
ソフトウェア設計の目的や価値 > ソフトウェアアーキテクチャの目的は、求められるシステムを構築・保守す るために必要な人材を最小限に抑えること である。 Clean Architecture 達人に学ぶソフトウェアの構造と設計 第2章 >
ソフトウェアは「ソフト」になるように考案されたものだ。マシンの振る舞い を簡単に変更することを目的としたもの である。 Clean Architecture 達人に学ぶソフトウェアの構造と設計 第2章
チームでやりたかったこと(再掲) 変更のしやすさ コードの柔軟性 (1)きちんと動くものを作りきりたい (2)学びを多く吸収できる機会にしたい (3)話し合いで出てきた良い機能案は積極的に取り入れたい
チームに課せられた制約(再掲) 省エネで コードに集中できる環境づくり (1)Web開発初心者が多めであり、コーディング以外にも慣れていない ことが多くあった (2)私たちが目指す完成形まで持っていけるかという不安
設計を取り入れてみよう
実際にどんなことをしたの?
ディレクトリ設計: Features Directory 機能単位でディレクトリを分ける設計手法 → コードベースの凝縮や その間の疎結合を実現するのに有効
よかったこと ・メンバーの作業時の認知負荷が軽減された ・ある機能が他の機能への影響するということを抑制できた ・タスクの振り分けが行いやすく、コンフリクトもほとんど発生しなかった
API通信設計: Repository Patternの適用 データアクセスとロジックとの分離を図る → データソースへのアクセス方法を抽象化し、 呼び出し側での操作を容易に
各種データに対応したリポジトリを作成 呼び出し側で、関数経由でデータ操作
よかったこと ・データソースがAPI経由なのか、Web Storageなのか等気にすること なく、呼び出し側でロジックを記述できた ・バックエンドの実装がまだ進んでいなくとも、モック用のRepositoryに 切り替えることで、フロントエンドはそのまま開発を進めることができた
API通信設計: Factory Patternの適用 ファクトリ関数を用いて、オブジェクトを作成する → データの整合性を保つのに有効
ファクトリ関数を作って、 各種データに対応したファクトリ層を配置 必要に応じて、値チェックも行う
よかったこと ・整合性の保たれたデータを提供することで、不安なく実装を進められた ・データアクセス / オブジェクト生成・値チェック / UI という責務を意識し た階層化が行えたため、見通しが良くなった
まとめ
学んだこと ・設計を取り入れることは、チーム開発を円滑に回していくために効果的 な作業の1つである ・メンバーに対して設計の意図の共通認識を作るための時間を確保する べき ・まずは試せそうな箇所から気軽にやってみる
明日からあなたのチームのフロントエンドに設計 を取り入れてはいかが?
ご清聴ありがとうございました!