Slide 1

Slide 1 text

クライアントワークと管理画面の話

Slide 2

Slide 2 text

自己紹介
 森田 勝駿(@texdeath) AI事業本部 DX本部 アプリ運用センター フロントエンドエンジニア ● 2021/08 ~ 中途入社 ● 業務はクライアントワーク中心 ● 技術選定・設計・実装 ● 要件定義・チームマネジメントなども担当

Slide 3

Slide 3 text

今やっていること ● アプリ運用センターでフロントエンドのテックリード ○ 案件を横断したフロントエンドの品質管理 ● いろんなプロジェクトの管理画面開発 ● いくつかのプロジェクトのフロントチームマネジメント ● ほか、採用や新卒育成など

Slide 4

Slide 4 text

Agenda ● クライアントワークと管理画面 ● 使用した技術の話 ● 開発で工夫したところ ● プロジェクトでつらいところ ○ どんな対策をとっているか

Slide 5

Slide 5 text

クライアントワークで管理画面? ● 管理画面と聞くと自社開発におけるシステムの運用などに使用する イメージが強い ● あとはFirebaseとかGCPのコンソールのイメージ

Slide 6

Slide 6 text

クライアントワークで管理画面? ● クライアントワークにおいても、アプリやWebサイトだけでなく管 理画面を同時開発する案件はよくある ○ たとえば顧客管理システムも一緒にリニューアルしたいとか ○ リニューアルに伴って取り扱っている機能の仕様も変わるから 合わせて一新したいとか

Slide 7

Slide 7 text

選定した技術 ● React ● Recoil ● TypeScript ● grpc-web / connect-web ● Nx ○ リリースするものが多かったので、monorepo構成にしたかった

Slide 8

Slide 8 text

Nxとは ● モノレポ管理ツールの一種 ● Webフロントエンドのサービスを 一つのリポジトリに集約 ● ビルドやテスト環境なんかもいい 感じにセットアップしてくれる

Slide 9

Slide 9 text

Recoilを採用した理由 ● 状態管理はしたかった ● 管理画面でグローバルな状態管理をすると往々にして複雑化した 経験があった ● 参画するプロジェクトメンバーが多く、スキルもまちまちだった ので、ある程度とっつきやすいライブラリを選びたかった ● 複雑になりがちな管理画面の概念をなるべく平易化したい ● Familyの概念を上手く使えばエンティティの共通化も容易かと 思った

Slide 10

Slide 10 text

connect ● gRPC 互換の HTTP API を構築するためのライブラリ ● バックエンドが grpc を採用していた ● 当初はgrpc-web+envoy を使用する予定だった ● 2022年の8月にES版も本格利用できそうだったので、使用してみた ● コンパクトで取り回ししやすく、TSの型保管も効いて便利

Slide 11

Slide 11 text

Recoilと通信層のつなぎこみ ● 結構設計に苦労した ● メンバーの提案もあり、Custom Hooksをドメイン単位で呼び出し、grpc 通信とRecoilのstate更新をひとまとめにした ● 実装メンバーが通信プロトコルの違いを意識しなくていいように配慮

Slide 12

Slide 12 text

Recoilと通信層のつなぎこみ

Slide 13

Slide 13 text

Protoファイルからの型ファイル生成 ● grpcの型定義元になるProtoファイ ルはバックエンド側のリポジトリに 置いてあった ● 二重管理はしたくなかった ○ バックエンド側のリポジトリを 見にいき、自動で型定義ファイ ルをgenerateする仕組みを作 成 ● バックエンドのリポジトリに更新が あればPull Requestを出す

Slide 14

Slide 14 text

ディレクトリ・コンポーネント設計方針 ● フィーチャー駆動パターンもどきを採用 ○ 機能単位でディレクトリ設計 ○ 基本設計を理解していれば、構築の際に迷うことがないのがいい ○ 運用時も改修しやすい ● Atomic Designなど、いろいろコンポーネント設計のデザインパターンは あるが、現実的に運用が難しいと判断した ○ 管理画面は基本的にエンジニアのみで作ることが多い ○ エンジニアだけでは「このコンポーネントはどの分類に属するの か?」などを判断するのは難しい ○ エンジニアと連携して動いてくれるデザイナーがいれば話は別

Slide 15

Slide 15 text

工夫したところ(開発) ● 開発人数が多かったので、先に方針を決めておいた ○ ドキュメントやCI/CDの整備、リリースフローの簡略化、チケットの 切り方、など ○ ドメインに紐づくビジネスロジックをほぼすべてドキュメント化し、 オンボーディング時に展開 ○ チームの中で役割を分け、それぞれにサブリーダーをつけた ■ ビジネスロジックを実装するチーム ■ リファクタリングを行うチーム ■ 動作確認をメインで行うチーム(単体テスト実装含) ● それでも全体的にテスト不足が目立ったので、現在E2Eテストの導入中

Slide 16

Slide 16 text

そのほか(開発) ● なるべく自動化/簡略化して、ヒューマンエラーや取りこぼしを防ぐ ● RELEASE NOTEを残すようにした

Slide 17

Slide 17 text

つらいところ(全体) ● 変わりゆく要件定義(要件定義とは・・・) ● 大半は考慮不足だったりする ● クライアントワークだと担当者が変わると方針も変わったりする ● これまでOKだったものが急にNGになったり、急に仕様追加されたり

Slide 18

Slide 18 text

どうしているか ● 工数と工期を同時に出さない ○ 工数は見積もりできても、工期はプロジェクトの色々な都合がからん でくる ○ 工数バッファ+工期バッファを加味したスケジュールにする ○ どんなにブロックしても、差し込みタスクはある

Slide 19

Slide 19 text

どうしているか ● メンバーにお願いするタスクは概要から細部まで丁寧に記載 ○ 「このファイルのここを変更するといいと思います」くらいまで ○ メンバーとの意思疎通の齟齬を限りなくなくしつつ、無駄なミーティング を減らす

Slide 20

Slide 20 text

まとめ ● クライアントワークでも管理画面は作ることが多い ● 花形にはなれないが、管理画面は大事なもの。 ● それだけに、要件定義や基本設計はしっかり行ったほうがいいです ● 大規模なメンバーの開発になってきた場合は、自分自身が実装することも 減ってきます。適切なドメイン知識をメンバーにつけてもらうことが大事 ● 「できると思います」は自分の首を絞めます(n敗)

Slide 21

Slide 21 text

EOF