複数プロダクトで利用する共通ライブラリの戦略と運用経験

Battle Conference Under30
Leko

About me

  • チーフエンジニア at 株式会社CureApp
  • TypeScript, Node.js, React, React Native
  • 言語処理系、ASTいじり

CureApp, Inc

医療 / ヘルスケア

最近のメディア掲載

  • ニコチン依存症治療用アプリが治験で効果確認:日経メディカル
  • 「新しい治療効果をアプリで生み出す」--キュア・アップ、総額22億円の資金調達 - CNET Japan
  • 医師から「アプリを処方される」時代が来る? ニコチン依存症治療用アプリ開発の裏側 | Forbes JAPAN(フォーブス ジャパン)

インフラ

技術

  • JavaScript / TypeScript
  • React, React Native, Node.js, Redux, etc
  • CQRS + Event sourcing

lib, util, common, shared

これ別のプロダクトで書いたな... 🤔

  • 共通の画面
  • 認証、認可
  • アセット管理
  • コンテンツ管理
  • 共通のUIパーツ
  • CIの設定の設定
  • ボイラープレート
  • 医学的な値のバリデーション
  • 通知の有無、タイミング・優先度制御
  • 利用規約、個人情報保護指針の同意チェック

バグが少なく

高品質なプロダクト開発を

素早く遂行する

この1年のnpm publish

  • 仕事: 473回
  • 個人OSS: 196回

1. 〜を作るために先にライブラリを作っておく

  • 能書きだけで書くと使えないものになりやすい

2. ドッグフーディングしすぎて汎用性がない

  • PoCが作ってバグ取り済んだら早めに分離

ボイラープレートは作らない

  • 維持コストの方が高い、ペイしない
  • 形骸化、ブラックボックス化
  • ベストプラクティス集くらいにしとく

3. アップデートで情報格差

  • Pushの情報共有は自動化
  • あとからPullできる情報整備
  • Release note書く

4. 1プロダクト都合でアップデート

  • スコープを明示
  • プラグイン機構を用意
  • 2プロダクト以上のエンジニアがレビュー
  • 破壊的変更はProposal PR/Issue作る

5. 新規メンバーのキャッチアップが大変

  • 命名で妥協しない
  • 型をちゃんと効かせる
  • ドキュメントの作成・維持コストを加味

定期的にモブプロ・ペアプロ

  • 内部設計や思想を共有
  • 実プロダクトに投入をワイワイやる
  • 破壊的変更のマイグレーション
  • times警察 👮‍♂️

登壇してフィードバックを得る

  • 機密を抜き汎用的な技術の話に変えて話す
  • 懇親会でフィードバックもらう、議論する

Code and Learn

プロダクトから離れて集中合宿

エンジニアの中でだけ「共通」

  • 共通(にしたい)UIパーツ
  • デザイナー、意思決定者も巻き込む

結果

  • 生産性上がるライブラリが何個かできた
  • 縦割りが薄らぎチーム間で助け合い
  • OSSに貢献するエンジニアが増えた

まとめ

  • 作って得する勝算はあるか
  • コード書く以外のフォローもする
  • 事業の優先順位に併せて手を打つ
  • OSSをリスペクトし運用する

We are hiring

こだわり、考え抜くJavaScriptエンジニア集団に加わろう

Thanks

  • GitHub: Leko
  • Twitter: @L_e_k_o
  • Blog: https://blog.leko.jp
  • Other talks: https://talks.leko.jp