SlideShare a Scribd company logo
1 of 68
Download to read offline
1
Copyright (C) 2021 Studist Corporation. All Rights Reserved
6万行の TypeScript 移行とその後
株式会社 スタディスト 笹木 信吾 @s_sasaki_0529
Tech Stand #6 TypeScript
2021.11.10
2
Copyright (C) 2021 Studist Corporation. All Rights Reserved
自己紹介
3
Copyright (C) 2021 Studist Corporation. All Rights Reserved
笹木 信吾 (@s_sasaki_0529)
● 株式会社スタディスト 開発部 技術支援ユニット
● 主に Webフロントエンドのリードがお仕事
● TypeScript が好き。IEが嫌い。
デグー (学名: Octodon degus) を多頭飼い
4
Copyright (C) 2021 Studist Corporation. All Rights Reserved
趣味: 健康でいること
5
Copyright (C) 2021 Studist Corporation. All Rights Reserved
本日はテックブログでも書いた話をします
6
Copyright (C) 2021 Studist Corporation. All Rights Reserved
Q. どんなサービスを作ってる?
7
Copyright (C) 2021 Studist Corporation. All Rights Reserved
引用元 スタディスト会社案内
8
Copyright (C) 2021 Studist Corporation. All Rights Reserved
引用元 スタディスト会社案内
9
Copyright (C) 2021 Studist Corporation. All Rights Reserved
引用元 スタディスト会社案内
本日はこちら
10
Copyright (C) 2021 Studist Corporation. All Rights Reserved
これまでの TeachmeBiz の技術構成
JavaScript vue 2.x
vuex 3.x
vue-router
webpack 5.x Jest
eslint
Storybook reg-suit
babel
11
Copyright (C) 2021 Studist Corporation. All Rights Reserved
これまでの TeachmeBiz の技術構成
vue 2.x
vuex 3.x
vue-router
webpack 5.x Jest
eslint
Storybook reg-suit
babel
JavaScript
TypeScript に差し替えたい
12
Copyright (C) 2021 Studist Corporation. All Rights Reserved
Q. なぜ TS 移行を決意した?
13
Copyright (C) 2021 Studist Corporation. All Rights Reserved
A. JavaScript では型が見えず、
多くの問題が潜んでいたため
14
Copyright (C) 2021 Studist Corporation. All Rights Reserved
JavaScript では型が見えず、多くの問題が潜んでいる
危険 非効率
無秩序 暗黙知
15
Copyright (C) 2021 Studist Corporation. All Rights Reserved
問題1: 危険
● 値に Null が入る可能性があるか判断できない
○ 必要なチェックを怠ると障害へ
○ 不要なチェックをやりすぎると冗長に
危険 非効率
無秩序 暗黙知
16
Copyright (C) 2021 Studist Corporation. All Rights Reserved
問題2: 無秩序
● 型情報がないと自由度が高まり、一貫性のないコードが量産されてしまう
○ 同じようなデータ構造が至るところで定義されている
○ 守られないアーキテクチャ
危険 非効率
無秩序 暗黙知
17
Copyright (C) 2021 Studist Corporation. All Rights Reserved
問題3: 非効率
● 型情報がないとエディタが型推論できず、開発生産性が下がる
○ 関数名や定数名の補完が効かず、参照先のファイルからコピペなどが必要
○ タイポなどの凡ミスも実行時まで気づけない
危険 非効率
無秩序 暗黙知
18
Copyright (C) 2021 Studist Corporation. All Rights Reserved
問題4: 暗黙知
● コードに関する情報が得づらい
○ データモデルにはどんな情報が入ってくるかは経験則でしか得られない
○ 関数の使い方は実装を読み込まないとわからない
危険 非効率
無秩序 暗黙知
19
Copyright (C) 2021 Studist Corporation. All Rights Reserved
4つの問題は、サービスがスケールするほどに顕著になる
危険 非効率
無秩序 暗黙知
20
Copyright (C) 2021 Studist Corporation. All Rights Reserved
TypeScript 移行で解決する
危険 非効率
無秩序 暗黙知
21
Copyright (C) 2021 Studist Corporation. All Rights Reserved
TypeScript 移行で解決する
Null 安全化 非効率
無秩序 暗黙知
22
Copyright (C) 2021 Studist Corporation. All Rights Reserved
TypeScript 移行で解決する
Null 安全化 非効率
厳密な型定義によるアー
キテクチャの保護 暗黙知
23
Copyright (C) 2021 Studist Corporation. All Rights Reserved
TypeScript 移行で解決する
Null 安全化
型定義によってエディタのパ
ワーを最大限に引き出す
厳密な型定義によるアー
キテクチャの保護 暗黙知
24
Copyright (C) 2021 Studist Corporation. All Rights Reserved
TypeScript 移行で解決する
Null 安全化
型定義によってエディタのパ
ワーを最大限に引き出す
型がそのままドキュメントに
厳密な型定義によるアー
キテクチャの保護
25
Copyright (C) 2021 Studist Corporation. All Rights Reserved
Q. 誰が移行作業する?
26
Copyright (C) 2021 Studist Corporation. All Rights Reserved
A. 一人専任
27
Copyright (C) 2021 Studist Corporation. All Rights Reserved
技術支援ユニットの責務として、一人で実施
技術支援ユニット
Web App 1U Web App 2U Web App 3U Web App 4U
28
Copyright (C) 2021 Studist Corporation. All Rights Reserved
技術支援ユニットの責務として、一人で実施
Web App 1U Web App 2U Web App 3U Web App 4U
技術支援U
機能A担当 機能B担当 機能C担当 機能D担当
29
Copyright (C) 2021 Studist Corporation. All Rights Reserved
チーム横断の技術支援ユニットが行うことで、機能開発を止めず
に移行作業を並走できる
技術支援ユニット
チームを横断した技術的な課題解決を担当
フロントエンドが得意な人 バックエンドが得意な人
Web App 1U Web App 2U Web App 3U Web App 4U
30
Copyright (C) 2021 Studist Corporation. All Rights Reserved
Q. TypeScript に詳しい人は居た?
31
Copyright (C) 2021 Studist Corporation. All Rights Reserved
A. いなかった
32
Copyright (C) 2021 Studist Corporation. All Rights Reserved
まずは自分がリードできるようになろう
33
Copyright (C) 2021 Studist Corporation. All Rights Reserved
社内輪読を通じて開発メンバーに布教しよう
34
Copyright (C) 2021 Studist Corporation. All Rights Reserved
Q. 移行対象は?
35
Copyright (C) 2021 Studist Corporation. All Rights Reserved
A. 全ての .js ファイル (≠ .vue)
36
Copyright (C) 2021 Studist Corporation. All Rights Reserved
全ての JS ファイルを厳しいルールで移行する
● strict: true
● @ts-ignore 禁止
● 明示的な any は許可
● ファイル内の一部のみの移行は禁止
37
Copyright (C) 2021 Studist Corporation. All Rights Reserved
Q. なぜ .vue を含まない?
38
Copyright (C) 2021 Studist Corporation. All Rights Reserved
A. Vue 3 への移行を見据えるため
39
Copyright (C) 2021 Studist Corporation. All Rights Reserved
将来的な Vue 3 移行を見据えると、TS化は二度手間に
● <script setup> など、 composition API でのコードの書き換えが発生する
● vuex との繋ぎ込み (eg. mapActions) を型安全にするのが不可能
● 型安全を必要とするロジックはコンポーネントから切り出すべき
40
Copyright (C) 2021 Studist Corporation. All Rights Reserved
Q. 移行時にリファクタはするのか?
41
Copyright (C) 2021 Studist Corporation. All Rights Reserved
A. 全力でする
42
Copyright (C) 2021 Studist Corporation. All Rights Reserved
43
Copyright (C) 2021 Studist Corporation. All Rights Reserved
素直に既存コードのまま型を付けるとカオ
スな型が出来上がりそう
44
Copyright (C) 2021 Studist Corporation. All Rights Reserved
リファクタリングと型定義を同時に行い、クリー
ンなコード、シンプルな型
にしてこそ価値が生まれる
45
Copyright (C) 2021 Studist Corporation. All Rights Reserved
TS移行とリファクタを同時に行うことは
アンチパターンとされるとも
引用元
46
Copyright (C) 2021 Studist Corporation. All Rights Reserved
アンチパターンとする主な理由
● 変更差分が大きくなり、通常の機能開発とのバッティングが起こりやすい
● レビューの観点が二重になる
● TS移行はデグレが起こらないが、リファクタリングはデグレが起こる
● 時間がかかりすぎる
47
Copyright (C) 2021 Studist Corporation. All Rights Reserved
開発組織によっては大した問題ではない
● アジャイルがそこそこ出来てるので、コードの合流が小さく早い
● 単体テスト、E2Eテスト、VRT が成熟しており、多くの問題は事前に拾える
● 技術支援Uという、機能開発を行わない専門チームであるため、時間をしっかりかけられる
48
Copyright (C) 2021 Studist Corporation. All Rights Reserved
Q. 移行期間は?
49
Copyright (C) 2021 Studist Corporation. All Rights Reserved
A. 半年で7割以上の移行完了
50
Copyright (C) 2021 Studist Corporation. All Rights Reserved
2021/03 - 2021/08 笹木の稼働時間の 4割 ≒ 2.4人月
約6ヶ月間の TypeScript 移行 + リファクタ期間を設ける
51
Copyright (C) 2021 Studist Corporation. All Rights Reserved
Q. どのように進める?
52
Copyright (C) 2021 Studist Corporation. All Rights Reserved
A. 関連するファイルの塊単位で
移行して本番リリース
53
Copyright (C) 2021 Studist Corporation. All Rights Reserved
移行順序
1. 副作用のない、ドメインに依存しない汎用ロジック
2. 副作用のない、ドメイン知識をもったロジック
3. ドメインと密接なデータモデル
4. Vuex ストア, VueRouter, Vueプラグイン
5. テストコードなど
54
Copyright (C) 2021 Studist Corporation. All Rights Reserved
105 PR (全てレビュー、本番リリース済み)
55
Copyright (C) 2021 Studist Corporation. All Rights Reserved
× 105
56
Copyright (C) 2021 Studist Corporation. All Rights Reserved
Q. 進捗をどう管理した?
57
Copyright (C) 2021 Studist Corporation. All Rights Reserved
A. 各コミット時点での移行率を可視化
58
Copyright (C) 2021 Studist Corporation. All Rights Reserved
移行率を毎コミットで計算
59
Copyright (C) 2021 Studist Corporation. All Rights Reserved
進捗率を可視化
60
Copyright (C) 2021 Studist Corporation. All Rights Reserved
Q. 移行して良くなった?
61
Copyright (C) 2021 Studist Corporation. All Rights Reserved
A. まだわからない!
62
Copyright (C) 2021 Studist Corporation. All Rights Reserved
移行が完了して開発に変化は起き始めた
● 各開発チームが新規コードを書く場合は必ず TypeScript を使うようになった
● データの型を意識した設計が求められるようになり、丁寧なコードを書くようになった
● エディタ上での補完が強力になり、開発効率が高まった
63
Copyright (C) 2021 Studist Corporation. All Rights Reserved
Q. なぜ移行が上手く行った?
64
Copyright (C) 2021 Studist Corporation. All Rights Reserved
TypeScript 移行が上手く行った理由
● 技術支援ユニットという、機能開発から独立した部隊が存在すること
● 各社の事例分析や TypeScript の学習を重ねる準備期間を充分に設けたこと
● 期間と範囲を決め、トラッキングしながら集中対応したこと
● CI/CD によって、自動テスト/手動テストのための仕組みが揃っていた
65
Copyright (C) 2021 Studist Corporation. All Rights Reserved
Q. 移行で上手く行かなかったことは?
66
Copyright (C) 2021 Studist Corporation. All Rights Reserved
TypeScript 移行における反省点
● TypeScript 強者が欲しかった
○ いくら事前準備したとはいえ、付け焼き刃な面も少なからずあり不安
● やっぱりデグレは起きた (3回)
○ いずれも軽微な問題だったので即日修正、テスト強化済み
67
Copyright (C) 2021 Studist Corporation. All Rights Reserved
まとめ
68
Copyright (C) 2021 Studist Corporation. All Rights Reserved
まとめ
● Teachme Biz では、(ほぼ) すべての JS ファイル の TypeScript 移行を行った
● 移行はリファクタリングを同時に行い、技術支援ユニットのメンバー一人で半年間行った
● CI/CD が整備されていたため、いくつかのファイルの塊ごとに移行し、すぐに本番反映した
● 移行により、コードが堅牢になったり、補完が効くようになったりと効果が見えてきた

More Related Content

What's hot

MLOps NYC 2019 and Strata Data Conference NY 2019 report nttdata
MLOps NYC 2019 and Strata Data Conference NY 2019 report nttdataMLOps NYC 2019 and Strata Data Conference NY 2019 report nttdata
MLOps NYC 2019 and Strata Data Conference NY 2019 report nttdataNTT DATA Technology & Innovation
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)NTT DATA Technology & Innovation
 
Machine Learning Night - Preferred Networksの顧客向けプロダクト開発 - 谷脇大輔
Machine Learning Night - Preferred Networksの顧客向けプロダクト開発 - 谷脇大輔Machine Learning Night - Preferred Networksの顧客向けプロダクト開発 - 谷脇大輔
Machine Learning Night - Preferred Networksの顧客向けプロダクト開発 - 谷脇大輔Preferred Networks
 
Struggle against cross-domain data complexity in Recruit group
Struggle against cross-domain data complexity in Recruit groupStruggle against cross-domain data complexity in Recruit group
Struggle against cross-domain data complexity in Recruit groupRecruit Technologies
 
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Preferred Networks
 
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1Takeshi Hirosue
 
Azure Stack HCI OS で HCI を構築してみた!(手順付)
Azure Stack HCI OS で HCI を構築してみた!(手順付)Azure Stack HCI OS で HCI を構築してみた!(手順付)
Azure Stack HCI OS で HCI を構築してみた!(手順付)Tomoya Katayama
 
JSUG20171027-spfingboot-k8s-ocp
JSUG20171027-spfingboot-k8s-ocpJSUG20171027-spfingboot-k8s-ocp
JSUG20171027-spfingboot-k8s-ocpNobuhiro Sue
 
GitLab Auto DevOps with Container CI/CD
GitLab Auto DevOps with Container CI/CDGitLab Auto DevOps with Container CI/CD
GitLab Auto DevOps with Container CI/CDShingo Kitayama
 
OpenStack Summit 2017 Boston 報告会 サミット全体概要
OpenStack Summit 2017 Boston 報告会 サミット全体概要OpenStack Summit 2017 Boston 報告会 サミット全体概要
OpenStack Summit 2017 Boston 報告会 サミット全体概要Yukinori Sagara
 
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話JustSystems Corporation
 
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43Preferred Networks
 
§2 DXを進めるための“5G”の基礎知識
§2 DXを進めるための“5G”の基礎知識§2 DXを進めるための“5G”の基礎知識
§2 DXを進めるための“5G”の基礎知識masaaki murakami
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢apkiban
 
クラウドを最大限活用するinfrastructure as codeを考えよう
クラウドを最大限活用するinfrastructure as codeを考えようクラウドを最大限活用するinfrastructure as codeを考えよう
クラウドを最大限活用するinfrastructure as codeを考えようNTT Communications Technology Development
 
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)NTT DATA Technology & Innovation
 
Spring native について
Spring native についてSpring native について
Spring native についてTakamasa Mitsuji
 
20170525 jsug バッチは地味だが役に立つ
20170525 jsug バッチは地味だが役に立つ20170525 jsug バッチは地味だが役に立つ
20170525 jsug バッチは地味だが役に立つYuichi Hasegawa
 
DeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in TestDeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in TestMasaki Nakagawa
 

What's hot (20)

MLOps NYC 2019 and Strata Data Conference NY 2019 report nttdata
MLOps NYC 2019 and Strata Data Conference NY 2019 report nttdataMLOps NYC 2019 and Strata Data Conference NY 2019 report nttdata
MLOps NYC 2019 and Strata Data Conference NY 2019 report nttdata
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
 
Machine Learning Night - Preferred Networksの顧客向けプロダクト開発 - 谷脇大輔
Machine Learning Night - Preferred Networksの顧客向けプロダクト開発 - 谷脇大輔Machine Learning Night - Preferred Networksの顧客向けプロダクト開発 - 谷脇大輔
Machine Learning Night - Preferred Networksの顧客向けプロダクト開発 - 谷脇大輔
 
Struggle against cross-domain data complexity in Recruit group
Struggle against cross-domain data complexity in Recruit groupStruggle against cross-domain data complexity in Recruit group
Struggle against cross-domain data complexity in Recruit group
 
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦
 
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
 
Azure Stack HCI OS で HCI を構築してみた!(手順付)
Azure Stack HCI OS で HCI を構築してみた!(手順付)Azure Stack HCI OS で HCI を構築してみた!(手順付)
Azure Stack HCI OS で HCI を構築してみた!(手順付)
 
JSUG20171027-spfingboot-k8s-ocp
JSUG20171027-spfingboot-k8s-ocpJSUG20171027-spfingboot-k8s-ocp
JSUG20171027-spfingboot-k8s-ocp
 
GitLab Auto DevOps with Container CI/CD
GitLab Auto DevOps with Container CI/CDGitLab Auto DevOps with Container CI/CD
GitLab Auto DevOps with Container CI/CD
 
OpenStack Summit 2017 Boston 報告会 サミット全体概要
OpenStack Summit 2017 Boston 報告会 サミット全体概要OpenStack Summit 2017 Boston 報告会 サミット全体概要
OpenStack Summit 2017 Boston 報告会 サミット全体概要
 
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
 
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
 
§2 DXを進めるための“5G”の基礎知識
§2 DXを進めるための“5G”の基礎知識§2 DXを進めるための“5G”の基礎知識
§2 DXを進めるための“5G”の基礎知識
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
 
Node.jsStreamについて
Node.jsStreamについてNode.jsStreamについて
Node.jsStreamについて
 
クラウドを最大限活用するinfrastructure as codeを考えよう
クラウドを最大限活用するinfrastructure as codeを考えようクラウドを最大限活用するinfrastructure as codeを考えよう
クラウドを最大限活用するinfrastructure as codeを考えよう
 
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
 
Spring native について
Spring native についてSpring native について
Spring native について
 
20170525 jsug バッチは地味だが役に立つ
20170525 jsug バッチは地味だが役に立つ20170525 jsug バッチは地味だが役に立つ
20170525 jsug バッチは地味だが役に立つ
 
DeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in TestDeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in Test
 

Similar to 6万行の TypeScript 移行とその後

OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)NTT DATA Technology & Innovation
 
ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発政雄 金森
 
Tech Dojo 02/09 IBM Japan CSM
Tech Dojo 02/09 IBM Japan CSMTech Dojo 02/09 IBM Japan CSM
Tech Dojo 02/09 IBM Japan CSM勇 黒沢
 
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことNode.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことbitbank, Inc. Tokyo, Japan
 
hbstudy#88 5G+MEC時代のシステム設計
hbstudy#88 5G+MEC時代のシステム設計hbstudy#88 5G+MEC時代のシステム設計
hbstudy#88 5G+MEC時代のシステム設計VirtualTech Japan Inc.
 
マイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with Karateマイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with KarateTakanori Suzuki
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割Toru Yamaguchi
 
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?Kuniyasu Suzaki
 
株式会社waja 安藤様 登壇資料
株式会社waja 安藤様 登壇資料株式会社waja 安藤様 登壇資料
株式会社waja 安藤様 登壇資料leverages_event
 
20151029 ヒカラボ講演資料
20151029 ヒカラボ講演資料20151029 ヒカラボ講演資料
20151029 ヒカラボ講演資料Daisuke Ando
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
ITフォーラム2024 AITCセッション(3)
ITフォーラム2024 AITCセッション(3)ITフォーラム2024 AITCセッション(3)
ITフォーラム2024 AITCセッション(3)aitc_jp
 
.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーションYuta Matsumura
 
RISC-Vのセキュリティ技術(TEE, Root of Trust, Remote Attestation)
RISC-Vのセキュリティ技術(TEE, Root of Trust, Remote Attestation)RISC-Vのセキュリティ技術(TEE, Root of Trust, Remote Attestation)
RISC-Vのセキュリティ技術(TEE, Root of Trust, Remote Attestation)Kuniyasu Suzaki
 
de:code2018 登壇資料
de:code2018 登壇資料de:code2018 登壇資料
de:code2018 登壇資料Hiroshi Senga
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)NTT DATA Technology & Innovation
 
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」Nobuyuki Tamaoki
 

Similar to 6万行の TypeScript 移行とその後 (20)

OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
 
ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発
 
Tech Dojo 02/09 IBM Japan CSM
Tech Dojo 02/09 IBM Japan CSMTech Dojo 02/09 IBM Japan CSM
Tech Dojo 02/09 IBM Japan CSM
 
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことNode.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたこと
 
hbstudy#88 5G+MEC時代のシステム設計
hbstudy#88 5G+MEC時代のシステム設計hbstudy#88 5G+MEC時代のシステム設計
hbstudy#88 5G+MEC時代のシステム設計
 
マイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with Karateマイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with Karate
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
 
株式会社waja 安藤様 登壇資料
株式会社waja 安藤様 登壇資料株式会社waja 安藤様 登壇資料
株式会社waja 安藤様 登壇資料
 
20151029 ヒカラボ講演資料
20151029 ヒカラボ講演資料20151029 ヒカラボ講演資料
20151029 ヒカラボ講演資料
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
ITフォーラム2024 AITCセッション(3)
ITフォーラム2024 AITCセッション(3)ITフォーラム2024 AITCセッション(3)
ITフォーラム2024 AITCセッション(3)
 
.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション
 
RISC-Vのセキュリティ技術(TEE, Root of Trust, Remote Attestation)
RISC-Vのセキュリティ技術(TEE, Root of Trust, Remote Attestation)RISC-Vのセキュリティ技術(TEE, Root of Trust, Remote Attestation)
RISC-Vのセキュリティ技術(TEE, Root of Trust, Remote Attestation)
 
de:code2018 登壇資料
de:code2018 登壇資料de:code2018 登壇資料
de:code2018 登壇資料
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
 
React vtecx20170822
React vtecx20170822React vtecx20170822
React vtecx20170822
 
Spring I/O 2015 報告
Spring I/O 2015 報告Spring I/O 2015 報告
Spring I/O 2015 報告
 
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
 
Angularreflex20141210
Angularreflex20141210Angularreflex20141210
Angularreflex20141210
 

Recently uploaded

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 

Recently uploaded (10)

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 

6万行の TypeScript 移行とその後

  • 1. 1 Copyright (C) 2021 Studist Corporation. All Rights Reserved 6万行の TypeScript 移行とその後 株式会社 スタディスト 笹木 信吾 @s_sasaki_0529 Tech Stand #6 TypeScript 2021.11.10
  • 2. 2 Copyright (C) 2021 Studist Corporation. All Rights Reserved 自己紹介
  • 3. 3 Copyright (C) 2021 Studist Corporation. All Rights Reserved 笹木 信吾 (@s_sasaki_0529) ● 株式会社スタディスト 開発部 技術支援ユニット ● 主に Webフロントエンドのリードがお仕事 ● TypeScript が好き。IEが嫌い。 デグー (学名: Octodon degus) を多頭飼い
  • 4. 4 Copyright (C) 2021 Studist Corporation. All Rights Reserved 趣味: 健康でいること
  • 5. 5 Copyright (C) 2021 Studist Corporation. All Rights Reserved 本日はテックブログでも書いた話をします
  • 6. 6 Copyright (C) 2021 Studist Corporation. All Rights Reserved Q. どんなサービスを作ってる?
  • 7. 7 Copyright (C) 2021 Studist Corporation. All Rights Reserved 引用元 スタディスト会社案内
  • 8. 8 Copyright (C) 2021 Studist Corporation. All Rights Reserved 引用元 スタディスト会社案内
  • 9. 9 Copyright (C) 2021 Studist Corporation. All Rights Reserved 引用元 スタディスト会社案内 本日はこちら
  • 10. 10 Copyright (C) 2021 Studist Corporation. All Rights Reserved これまでの TeachmeBiz の技術構成 JavaScript vue 2.x vuex 3.x vue-router webpack 5.x Jest eslint Storybook reg-suit babel
  • 11. 11 Copyright (C) 2021 Studist Corporation. All Rights Reserved これまでの TeachmeBiz の技術構成 vue 2.x vuex 3.x vue-router webpack 5.x Jest eslint Storybook reg-suit babel JavaScript TypeScript に差し替えたい
  • 12. 12 Copyright (C) 2021 Studist Corporation. All Rights Reserved Q. なぜ TS 移行を決意した?
  • 13. 13 Copyright (C) 2021 Studist Corporation. All Rights Reserved A. JavaScript では型が見えず、 多くの問題が潜んでいたため
  • 14. 14 Copyright (C) 2021 Studist Corporation. All Rights Reserved JavaScript では型が見えず、多くの問題が潜んでいる 危険 非効率 無秩序 暗黙知
  • 15. 15 Copyright (C) 2021 Studist Corporation. All Rights Reserved 問題1: 危険 ● 値に Null が入る可能性があるか判断できない ○ 必要なチェックを怠ると障害へ ○ 不要なチェックをやりすぎると冗長に 危険 非効率 無秩序 暗黙知
  • 16. 16 Copyright (C) 2021 Studist Corporation. All Rights Reserved 問題2: 無秩序 ● 型情報がないと自由度が高まり、一貫性のないコードが量産されてしまう ○ 同じようなデータ構造が至るところで定義されている ○ 守られないアーキテクチャ 危険 非効率 無秩序 暗黙知
  • 17. 17 Copyright (C) 2021 Studist Corporation. All Rights Reserved 問題3: 非効率 ● 型情報がないとエディタが型推論できず、開発生産性が下がる ○ 関数名や定数名の補完が効かず、参照先のファイルからコピペなどが必要 ○ タイポなどの凡ミスも実行時まで気づけない 危険 非効率 無秩序 暗黙知
  • 18. 18 Copyright (C) 2021 Studist Corporation. All Rights Reserved 問題4: 暗黙知 ● コードに関する情報が得づらい ○ データモデルにはどんな情報が入ってくるかは経験則でしか得られない ○ 関数の使い方は実装を読み込まないとわからない 危険 非効率 無秩序 暗黙知
  • 19. 19 Copyright (C) 2021 Studist Corporation. All Rights Reserved 4つの問題は、サービスがスケールするほどに顕著になる 危険 非効率 無秩序 暗黙知
  • 20. 20 Copyright (C) 2021 Studist Corporation. All Rights Reserved TypeScript 移行で解決する 危険 非効率 無秩序 暗黙知
  • 21. 21 Copyright (C) 2021 Studist Corporation. All Rights Reserved TypeScript 移行で解決する Null 安全化 非効率 無秩序 暗黙知
  • 22. 22 Copyright (C) 2021 Studist Corporation. All Rights Reserved TypeScript 移行で解決する Null 安全化 非効率 厳密な型定義によるアー キテクチャの保護 暗黙知
  • 23. 23 Copyright (C) 2021 Studist Corporation. All Rights Reserved TypeScript 移行で解決する Null 安全化 型定義によってエディタのパ ワーを最大限に引き出す 厳密な型定義によるアー キテクチャの保護 暗黙知
  • 24. 24 Copyright (C) 2021 Studist Corporation. All Rights Reserved TypeScript 移行で解決する Null 安全化 型定義によってエディタのパ ワーを最大限に引き出す 型がそのままドキュメントに 厳密な型定義によるアー キテクチャの保護
  • 25. 25 Copyright (C) 2021 Studist Corporation. All Rights Reserved Q. 誰が移行作業する?
  • 26. 26 Copyright (C) 2021 Studist Corporation. All Rights Reserved A. 一人専任
  • 27. 27 Copyright (C) 2021 Studist Corporation. All Rights Reserved 技術支援ユニットの責務として、一人で実施 技術支援ユニット Web App 1U Web App 2U Web App 3U Web App 4U
  • 28. 28 Copyright (C) 2021 Studist Corporation. All Rights Reserved 技術支援ユニットの責務として、一人で実施 Web App 1U Web App 2U Web App 3U Web App 4U 技術支援U 機能A担当 機能B担当 機能C担当 機能D担当
  • 29. 29 Copyright (C) 2021 Studist Corporation. All Rights Reserved チーム横断の技術支援ユニットが行うことで、機能開発を止めず に移行作業を並走できる 技術支援ユニット チームを横断した技術的な課題解決を担当 フロントエンドが得意な人 バックエンドが得意な人 Web App 1U Web App 2U Web App 3U Web App 4U
  • 30. 30 Copyright (C) 2021 Studist Corporation. All Rights Reserved Q. TypeScript に詳しい人は居た?
  • 31. 31 Copyright (C) 2021 Studist Corporation. All Rights Reserved A. いなかった
  • 32. 32 Copyright (C) 2021 Studist Corporation. All Rights Reserved まずは自分がリードできるようになろう
  • 33. 33 Copyright (C) 2021 Studist Corporation. All Rights Reserved 社内輪読を通じて開発メンバーに布教しよう
  • 34. 34 Copyright (C) 2021 Studist Corporation. All Rights Reserved Q. 移行対象は?
  • 35. 35 Copyright (C) 2021 Studist Corporation. All Rights Reserved A. 全ての .js ファイル (≠ .vue)
  • 36. 36 Copyright (C) 2021 Studist Corporation. All Rights Reserved 全ての JS ファイルを厳しいルールで移行する ● strict: true ● @ts-ignore 禁止 ● 明示的な any は許可 ● ファイル内の一部のみの移行は禁止
  • 37. 37 Copyright (C) 2021 Studist Corporation. All Rights Reserved Q. なぜ .vue を含まない?
  • 38. 38 Copyright (C) 2021 Studist Corporation. All Rights Reserved A. Vue 3 への移行を見据えるため
  • 39. 39 Copyright (C) 2021 Studist Corporation. All Rights Reserved 将来的な Vue 3 移行を見据えると、TS化は二度手間に ● <script setup> など、 composition API でのコードの書き換えが発生する ● vuex との繋ぎ込み (eg. mapActions) を型安全にするのが不可能 ● 型安全を必要とするロジックはコンポーネントから切り出すべき
  • 40. 40 Copyright (C) 2021 Studist Corporation. All Rights Reserved Q. 移行時にリファクタはするのか?
  • 41. 41 Copyright (C) 2021 Studist Corporation. All Rights Reserved A. 全力でする
  • 42. 42 Copyright (C) 2021 Studist Corporation. All Rights Reserved
  • 43. 43 Copyright (C) 2021 Studist Corporation. All Rights Reserved 素直に既存コードのまま型を付けるとカオ スな型が出来上がりそう
  • 44. 44 Copyright (C) 2021 Studist Corporation. All Rights Reserved リファクタリングと型定義を同時に行い、クリー ンなコード、シンプルな型 にしてこそ価値が生まれる
  • 45. 45 Copyright (C) 2021 Studist Corporation. All Rights Reserved TS移行とリファクタを同時に行うことは アンチパターンとされるとも 引用元
  • 46. 46 Copyright (C) 2021 Studist Corporation. All Rights Reserved アンチパターンとする主な理由 ● 変更差分が大きくなり、通常の機能開発とのバッティングが起こりやすい ● レビューの観点が二重になる ● TS移行はデグレが起こらないが、リファクタリングはデグレが起こる ● 時間がかかりすぎる
  • 47. 47 Copyright (C) 2021 Studist Corporation. All Rights Reserved 開発組織によっては大した問題ではない ● アジャイルがそこそこ出来てるので、コードの合流が小さく早い ● 単体テスト、E2Eテスト、VRT が成熟しており、多くの問題は事前に拾える ● 技術支援Uという、機能開発を行わない専門チームであるため、時間をしっかりかけられる
  • 48. 48 Copyright (C) 2021 Studist Corporation. All Rights Reserved Q. 移行期間は?
  • 49. 49 Copyright (C) 2021 Studist Corporation. All Rights Reserved A. 半年で7割以上の移行完了
  • 50. 50 Copyright (C) 2021 Studist Corporation. All Rights Reserved 2021/03 - 2021/08 笹木の稼働時間の 4割 ≒ 2.4人月 約6ヶ月間の TypeScript 移行 + リファクタ期間を設ける
  • 51. 51 Copyright (C) 2021 Studist Corporation. All Rights Reserved Q. どのように進める?
  • 52. 52 Copyright (C) 2021 Studist Corporation. All Rights Reserved A. 関連するファイルの塊単位で 移行して本番リリース
  • 53. 53 Copyright (C) 2021 Studist Corporation. All Rights Reserved 移行順序 1. 副作用のない、ドメインに依存しない汎用ロジック 2. 副作用のない、ドメイン知識をもったロジック 3. ドメインと密接なデータモデル 4. Vuex ストア, VueRouter, Vueプラグイン 5. テストコードなど
  • 54. 54 Copyright (C) 2021 Studist Corporation. All Rights Reserved 105 PR (全てレビュー、本番リリース済み)
  • 55. 55 Copyright (C) 2021 Studist Corporation. All Rights Reserved × 105
  • 56. 56 Copyright (C) 2021 Studist Corporation. All Rights Reserved Q. 進捗をどう管理した?
  • 57. 57 Copyright (C) 2021 Studist Corporation. All Rights Reserved A. 各コミット時点での移行率を可視化
  • 58. 58 Copyright (C) 2021 Studist Corporation. All Rights Reserved 移行率を毎コミットで計算
  • 59. 59 Copyright (C) 2021 Studist Corporation. All Rights Reserved 進捗率を可視化
  • 60. 60 Copyright (C) 2021 Studist Corporation. All Rights Reserved Q. 移行して良くなった?
  • 61. 61 Copyright (C) 2021 Studist Corporation. All Rights Reserved A. まだわからない!
  • 62. 62 Copyright (C) 2021 Studist Corporation. All Rights Reserved 移行が完了して開発に変化は起き始めた ● 各開発チームが新規コードを書く場合は必ず TypeScript を使うようになった ● データの型を意識した設計が求められるようになり、丁寧なコードを書くようになった ● エディタ上での補完が強力になり、開発効率が高まった
  • 63. 63 Copyright (C) 2021 Studist Corporation. All Rights Reserved Q. なぜ移行が上手く行った?
  • 64. 64 Copyright (C) 2021 Studist Corporation. All Rights Reserved TypeScript 移行が上手く行った理由 ● 技術支援ユニットという、機能開発から独立した部隊が存在すること ● 各社の事例分析や TypeScript の学習を重ねる準備期間を充分に設けたこと ● 期間と範囲を決め、トラッキングしながら集中対応したこと ● CI/CD によって、自動テスト/手動テストのための仕組みが揃っていた
  • 65. 65 Copyright (C) 2021 Studist Corporation. All Rights Reserved Q. 移行で上手く行かなかったことは?
  • 66. 66 Copyright (C) 2021 Studist Corporation. All Rights Reserved TypeScript 移行における反省点 ● TypeScript 強者が欲しかった ○ いくら事前準備したとはいえ、付け焼き刃な面も少なからずあり不安 ● やっぱりデグレは起きた (3回) ○ いずれも軽微な問題だったので即日修正、テスト強化済み
  • 67. 67 Copyright (C) 2021 Studist Corporation. All Rights Reserved まとめ
  • 68. 68 Copyright (C) 2021 Studist Corporation. All Rights Reserved まとめ ● Teachme Biz では、(ほぼ) すべての JS ファイル の TypeScript 移行を行った ● 移行はリファクタリングを同時に行い、技術支援ユニットのメンバー一人で半年間行った ● CI/CD が整備されていたため、いくつかのファイルの塊ごとに移行し、すぐに本番反映した ● 移行により、コードが堅牢になったり、補完が効くようになったりと効果が見えてきた