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

Sales AI Cloud "ailead" TSConfig Strictly Adopted / セールスAIクラウド「ailead」の TSConfig厳格化対応した話 /

k2wanko
December 17, 2021

Sales AI Cloud "ailead" TSConfig Strictly Adopted / セールスAIクラウド「ailead」の TSConfig厳格化対応した話 /

k2wanko

December 17, 2021
Tweet

More Decks by k2wanko

Other Decks in Technology

Transcript

  1. © Babel, inc.
 セールスAIクラウド「ailead」の 
 TSConfig厳格化対応した話 
 2021.12.17 株式会社バベル CTO

    コキチーズ @k2wanko 
 
 
 
 2017年4月 LINE株式会社 セキュリティエンジニアエンジニア 入社 
 2021年9月 株式会社バベル 入社 CTO 就任 
 
 Firebase/GCP/Go/Node.js/TypeScript が好き 
 Harajuku.ts Meetup #1

  2. © Babel, inc.
 採用している技術
 4
 • TypeScript
 • React
 •

    Next.js
 • GraphQL
 • GCP / Firebase
 • Cloud SQL PostgreSQL
 • Prisma

  3. © Babel, inc.
 公式ドキュメントにはこう書かれている 
 6
 A TSConfig file in

    a directory indicates that the directory is the root of a TypeScript or JavaScript project. The TSConfig file can be either a tsconfig.json or jsconfig.json, both have the same set of config variables.
 https://www.typescriptlang.org/tsconfig
 TSConfig (tsconfig.json) とは 

  4. © Babel, inc.
 公式ドキュメントにはこう書かれている 
 7
 A TSConfig file in

    a directory indicates that the directory is the root of a TypeScript or JavaScript project. The TSConfig file can be either a tsconfig.json or jsconfig.json, both have the same set of config variables.
 プロジェクトのルートを示すための目印
 - tscコマンドのコンパイルオプションを定義できる
 https://www.typescriptlang.org/tsconfig
 TSConfig (tsconfig.json) とは 

  5. © Babel, inc.
 strict optionとは
 9
 “strict”: true 下記のオプションをtrueにする (2021年12月)

    
 strict option
 alwaysStrict コンパイルしたJSに ‘use strict’ をつける strictNullChecks falseだとnullとundefinedが無視される危険なオプション strictBindCallApply bind,apply の元の関数の型と一致するかチェックする strictFunctionTypes 有効にすると関数パラメーターを正確にチックする strictPropertyInitialization classのコンストラクタでプロパティが定義されていないとエラーになる noImplicitAny 型定義がないと自動でanyになる箇所でエラーになる (anyゆるさん絶対) useUnknownInCatchVariables TS 4.4 で追加されたやつ catchがanyからunkownにしてくれる
  6. © Babel, inc.
 バベル社のTypeScript採用理由 
 11
 1. 2021年6月から3年後を見据えて、
 今後TypeScript人口が伸びることはほぼ見えている
 a.

    インターネットの情報量とエコシステムによる開発速度に期待
 2. 型によるチーム開発者が気にすべきことを減らせる
 a. ドキュメントとにらめっこする時間の削減
 3. フロントとバックエンドを同じ言語にすることで
 開発者の脳コンテキストスイッチコストの最小化
 バベル社のTypeScriptの取り組み 

  7. © Babel, inc.
 プロダクト
 12
 2021年 6月 開発 開始
 技術アドバイスでGCPを起点に今のメンバーからWebでやることは確定していたので

    技術選定のところでインフラ含めて諸々アドバイス
 ここでTypeScriptも一緒に選定された
 2021年 7月 プロダクトβ リリース
 2021年 9月 k2wanko 入社
 strict option false であることに気づく
 「弊社のTypeScriptがヤバい...!!!」
 バベル社のTypeScriptの取り組み 

  8. © Babel, inc.
 プロダクト
 13
 2021年 11月 uhyo さん 技術顧問


    LINE社で活躍中のuhyoさんにヘルプを求めたところ
 フロントエンドの技術顧問としてお手伝いしてもらえることになった
 2021年 11月後半 Learning Professional Day
 1Qに1度くらいの頻度で改善をやる日
 11月は休日の関係で3日間あった
 全力の strict: true 対応
 バベル社のTypeScriptの取り組み 

  9. © Babel, inc.
 まずは計測
 18
 Day 1 で4人ほどのメンバーでそれぞれ1日どれだけエラーを潰せるか試してみた
 
 k2wankoで5時間で300ほど

    メンバー全員で 一日500くらい
 
 プロダクトのTSは10万8642行
 
 find . -name "*.ts*" | grep -v ./generated/graphql | grep -v ./prisma | grep -v './node_modules' | xargs wc -l | awk '{print $1}' | awk '{s += $1} END {print s}'
 
 厳格化への取り組み 

  10. © Babel, inc.
 泣きの@ts-expect-error 
 31
 PrismaとGraphQLでどうしても型の整合性がとれなかったところは泣く泣く 
 // eslint-disable-next-line

    @typescript-eslint/ban-ts-comment 
 // @ts-expect-error 
 を挟んだ
 17箇所の @ts-expect-error がいる 
 @ts-expect-errorはTypeScriptのコンパイルエラーを無視する危険なコメント 
 

  11. © Babel, inc.
 TypeScriptで最高のプロダクトを作りたい人を積極採用中! 
 41
 1. TypeScriptをstrictに取り組みたい人
 2. 型に嘘を付きたくない人


    3. AIサービスをTS + GCPに全力で取り組みたい人
 積極的に採用しています!
 サービスも引き合いはすごい来ているけど、
 エンジニアが圧倒的に足りてない状況です。
 k2wankoがカジュアル面談に全部出ます!(2021年12月から~2022年3月)
 https://jobs.babel.jp
 
 [PR] Recruit