【TSkaigi】2024/05/11 当日スライド
by
Kimita Shoichi
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
本資料は、トグルホールディングス株式会社に許可なく複製・転載をしないようお願いします。 トグルホールディングス株式会社 君田 祥一 フロントエンドも バックエンドも インフラも… 全てをTypeScriptで 統一したらこうなった!
Slide 2
Slide 2 text
君田 祥一 @kimi_koma1111 営業職からエンジニアに転職 現在はフルスタックに開発に携わる 減量中
Slide 3
Slide 3 text
会社紹介 ● 不動産、建築、金融の3つの業界を統合し、産業イン フラを構築することを目指しています ● TSをフル活用しプロダクト開発を行っています
Slide 4
Slide 4 text
プロダクト紹介
Slide 5
Slide 5 text
詳しく知りたいかたは
Slide 6
Slide 6 text
ホームページ https://toggle.co.jp/
Slide 7
Slide 7 text
note https://note.com/toggle/
Slide 8
Slide 8 text
toggle holdings Engineering Handbook https://engineer.toggle.co.jp/
Slide 9
Slide 9 text
ブースを出展していますので ぜひ遊びに来てください!
Slide 10
Slide 10 text
アジェンダ ● TSを利用する前の自分の経験 ● TSを使い始めてからどうなったか ● 実際にどのような環境で開発を行っているか ● 統一したらどうなったか ● 終わりに
Slide 11
Slide 11 text
アジェンダ ● TSを利用する前の自分の経験 ● TSを使うとどうなるか ● 実際にどのような環境で開発を行っているか ● 統一したらどうなったか ● 終わりに
Slide 12
Slide 12 text
● 主にJSでの開発 ○ toB向けのWEBサービス ■ エンジニアにキャリアチェンジして最初の会社 ○ toC向けのWEBサービス ■ 繁忙期を体験 自分はフロントエンドエンジニアでした
Slide 13
Slide 13 text
フロントエンドエンジニアの方で 次のような経験はありませんか?
Slide 14
Slide 14 text
No content
Slide 15
Slide 15 text
どんなデータかわからない ● productDataってどんなデータ型なの? ○ どんなプロパティ持っているの ○ それのデータ型は何?
Slide 16
Slide 16 text
もう一例
Slide 17
Slide 17 text
No content
Slide 18
Slide 18 text
どんな値を渡せばいいかわからない ● 関数の中身を見ないとどんな引数を渡せばいいかわからない ● 間違った値を渡してもエディタ上ではエラーにならない ○ あたかも実行できるように見える
Slide 19
Slide 19 text
綱渡りをしている気分だった ● 取得できるデータの型はなんだろう ● この関数はどんなデータ型の値が返されるんだろう? ● この関数にはどんなデータ型の引数を渡せばいいんだろう? ○ オブジェクトだったとしたらどんなプロパティが必要なんだろう?
Slide 20
Slide 20 text
綱渡りをしている気分だった ● 取得できるデータの型はなんだろう ● この関数はどんなデータ型の値が返されるんだろう? ● この関数にはどんなデータ型の引数を渡せばいいんだろう? ○ オブジェクトだったとしたらどんなプロパティが必要なんだろう? 動かしてみないとわからない
Slide 21
Slide 21 text
みなさんどうですか?
Slide 22
Slide 22 text
アジェンダ ● TSを利用する前の自分の経験 ● TSを使うとどうなるか ● 実際にどのような環境で開発を行っているか ● 統一したらどうなったか ● 終わりに
Slide 23
Slide 23 text
No content
Slide 24
Slide 24 text
No content
Slide 25
Slide 25 text
どんなデータかがわかる! ● fetchProduct関数にはstringを渡せばいいんだ! ● productDataはProduct型なんだ!
Slide 26
Slide 26 text
どんなデータかがわかる! ● Productがどんなプロパティを持っ ているかわかる! ● 各プロパティがどんなデータ型な のかわかる!
Slide 27
Slide 27 text
もう一例の方は
Slide 28
Slide 28 text
No content
Slide 29
Slide 29 text
No content
Slide 30
Slide 30 text
どんな値を渡せばよいかがわかる! ● updateUserInfo関数にはUserInfo型を渡せばいいんだ!
Slide 31
Slide 31 text
どんな値を渡せばよいかがわかる!
Slide 32
Slide 32 text
石橋を叩いて渡っている気分 ● 取得できるデータの型がわかる! ● 関数がどんなデータ型の値を返すのかがわかる! ● 関数にはどんなデータ型の引数を渡せばいいかわかる! ○ オブジェクトだったとしてもどんなプロパティが必要なのかわかる!
Slide 33
Slide 33 text
動かさなくてもわかる 実装している時にエディターがエラーを示してくれる
Slide 34
Slide 34 text
アジェンダ ● TSを利用する前の自分の経験 ● TSを使うとどうなるか ● 実際にどのような環境で開発を行っているか ● 統一したらどうなったか ● 終わりに
Slide 35
Slide 35 text
TSで統一
Slide 36
Slide 36 text
技術スタック フロントエンド バックエンド インフラ
Slide 37
Slide 37 text
技術スタック
Slide 38
Slide 38 text
レイヤードアーキテクチャを採 用
Slide 39
Slide 39 text
構成 ● 各層ごとに明確な責務を負うことでコードをできるだけシンプルに保つ
Slide 40
Slide 40 text
構成 ● 依存関係が一方向である ○ infraはserviceからしか呼ばれない ○ transactionはhandlerからしか呼ばれない ○ etc…
Slide 41
Slide 41 text
環境 ● GitHub Codespacesを活用 ○ 手間がかかる環境構築をボタンのクリックだけで実現 ● モノレポ ○ 認知負荷が下がる ○ 管理コストが下がる
Slide 42
Slide 42 text
型について
Slide 43
Slide 43 text
どのように型を定義しているか ● Zodを採用している ○ バリデーションライブラリ ○ interfaceやtypeよりもさらに厳密なデータへの制約をつけることができる
Slide 44
Slide 44 text
型の定義 ● Zodで作成したスキーマから型を生成
Slide 45
Slide 45 text
型の定義 ● 型定義とスキーマ定義で二重管理にはならない ○ Zodで作成したスキーマから型を抽出するから ○ メンテナンス漏れを防ぐ
Slide 46
Slide 46 text
フロントエンドと バックエンドで 型を共有
Slide 47
Slide 47 text
型の共有 ● 共通のディレクトリから型を参照 ○ モノレポの強み ○ それぞれが型定義を持たなくて済む ● 型が変更された場合でも修正漏れがなくなる
Slide 48
Slide 48 text
より型安全に開発するために ● CIを利用してテスト実行 ○ もし仮に実装時に気づかなかったとしても ■ GitHub Actions
Slide 49
Slide 49 text
APIリクエストにおける型 ● Zodiosを採用 ○ Zodのスキーマ定義を活用したAPI定義がで きるツール ○ 型安全なAPIリクエスト ■ フロントが送信するデータ ■ レスポンスデータ
Slide 50
Slide 50 text
アジェンダ ● TSを利用する前の自分の経験 ● TSを使うとどうなるか ● 実際にどのような環境で開発を行っているか ● 統一したらどうなったか ● 終わりに
Slide 51
Slide 51 text
TSさえ使えればフルスタック開発が可能 ● TSで統一することでフルスタックな開発者体験を得ることができる強力な後押しに なる ○ TSで統一しているので学習コストが低い ○ 事実 ■ TSでの開発経験がなく、フロントエンドの経験しかなかった自分ですが、 現在はフルスタックに開発を行えている
Slide 52
Slide 52 text
作業量の偏りが減った ● フロントエンド、バックエンドという垣根がないから ○ どんな開発内容でも誰でもアサインできる ● もちろん開発する機能の難易度によっては作業量の違いが出る ○ ただ、フロントエンド、バックエンドの分業によるタスク量の偏りは減った
Slide 53
Slide 53 text
知識の共有が捗る ● メンバー間での得意領域の知識の共有が捗る! ○ 共通言語としてのTS ○ 知識の共有が開発言語の違いによって阻害されない ○ バックエンド開発の時に得ることができたTSに対する知見をフロントエンド開発に活 かしたり ○ その逆も然り
Slide 54
Slide 54 text
個人的な話
Slide 55
Slide 55 text
フロントエンド専任だった自分にとって ● 今の環境に出会う前からフルスタックに開発したいなぁとうっすら思っていた ○ 自分の今後のキャリアに良い影響を与えると思ったから ○ エンジニアとしての選択肢を広げることができると考えていたから
Slide 56
Slide 56 text
どうなったのか ● TSの実務経験がないTS素人だった ● TSで統一された環境に入り半年が経過しフルスタックな開発ができるように
Slide 57
Slide 57 text
まとめ
Slide 58
Slide 58 text
TSで統一した環境は 開発者体験が良い
Slide 59
Slide 59 text
● Zodを利用した型の抽出 ○ フロントエンド・バックエンド間での型の共通 ● Zodiosを利用したAPI定義 ● 学習コスト低くフルスタックな開発ができる ● 分業による作業量の偏りが減る ● 知識の共有が捗る ● エンジニアとしてのスキルアップが見込める
Slide 60
Slide 60 text
今後のTSライフに 少しでもお役に立てれば
Slide 61
Slide 61 text
エンジニア積極採用中です!! AIエンジニア Pythonを中心技術として 「データ収集・加工・分析・利用基盤 」を作る 「建築士がやる高度な計算ロジック 」を実装する ひたすらコードとデータに向き合いたい人 ソフトウェアエンジニア TypeScriptを中心技術として 「ユーザーと直接対話して」提供価値を発見する 「業界の仕事を変革するサービス 」を開発する フルスタックエンジニアを目指す人
Slide 62
Slide 62 text
東大前 ”UT-Lab” 2024年6月オープン!! 先端技術を掛け合わせた、 まちづくりの社会実装の拠点
Slide 63
Slide 63 text
● TypeScriptの経験ないけど大丈夫かなぁ ● バックエンド経験しかないけど大丈夫かなぁ ● フロントエンド経験しかないけど大丈夫かなぁ
Slide 64
Slide 64 text
飛び込んでもらいたい
Slide 65
Slide 65 text
採用情報はこちら https://toggle.co.jp/position/engineer/
Slide 66
Slide 66 text
今日の振り返りイベントを自社でやります ● 初めてだらけのTSKaigiを振り返り!! ● 【オンライン開催】 5/22(木)19:00~20:00 https://x.gd/HAe6c
Slide 67
Slide 67 text
少しでも気になった方は ぜひ弊社ブースにお越しください 実際のコードも公開してます
Slide 68
Slide 68 text
ご清聴ありがとうございました