Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
【TSkaigi】2024/05/11 当日スライド
Search
Kimita Shoichi
May 10, 2024
Technology
17
5.1k
【TSkaigi】2024/05/11 当日スライド
2024/05/11開催されたTSKaigiに登壇した際のプレゼン資料です。
Kimita Shoichi
May 10, 2024
Tweet
Share
Other Decks in Technology
See All in Technology
スモールスタート、不都合な真実 〜 耳障りの良い言葉に現場が振り回されないために/20240930-ssmjp-small-start
opelab
1
130
DockerのマルチプラットフォームイメージをGitHub Actionsでビルドして公開する際に、参考にしたドキュメントと便利だったツール
iwamot
3
110
ビジネスに必要な全てを担い、 自分の専門性を見つけ出す フルサイクル開発者のあり方@技育祭 秋 / how-find-own-speciality-in-full-cycle
pei0804
6
870
Renovate ではじめる運用レスなライブラリ更新 / 令和最新版 他人に自慢したいヤバいCI/CD LT会 @ yabaibuki.dev #2
ponkio_o
PRO
1
110
クロージング / MIERUNE JCT - Tokyo 2024
mierune
PRO
0
160
M5 Unitたちの 変わった使い方
haruka_imgr
0
190
Vista FinderMx
jtes
0
160
ORM と向き合う
hoto17296
6
5.1k
【shownet.conf_】ShowNet伝送改めShowNet APN 2024
shownet
PRO
0
110
Amazon BedrockとPR-Agentでコードレビュー自動化に挑戦・実際に運用してみた
diggymo
0
480
LLMの効率化を支えるアルゴリズム
taturabe
16
4.3k
社内でのサーバーレスアプリケーション開発を、プラットフォームエンジニアリングを整備して 迅速化・安定化させる取り組み
wakatsuki
0
2.7k
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
158
15k
10 Git Anti Patterns You Should be Aware of
lemiorhan
653
59k
A better future with KSS
kneath
235
17k
How STYLIGHT went responsive
nonsquared
93
5.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
43
2k
For a Future-Friendly Web
brad_frost
174
9.3k
RailsConf 2023
tenderlove
28
830
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
30
2.6k
What's new in Ruby 2.0
geeforr
340
31k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
32k
Transcript
本資料は、トグルホールディングス株式会社に許可なく複製・転載をしないようお願いします。 トグルホールディングス株式会社 君田 祥一 フロントエンドも バックエンドも インフラも… 全てをTypeScriptで 統一したらこうなった!
君田 祥一 @kimi_koma1111 営業職からエンジニアに転職 現在はフルスタックに開発に携わる 減量中
会社紹介 • 不動産、建築、金融の3つの業界を統合し、産業イン フラを構築することを目指しています • TSをフル活用しプロダクト開発を行っています
プロダクト紹介
詳しく知りたいかたは
ホームページ https://toggle.co.jp/
note https://note.com/toggle/
toggle holdings Engineering Handbook https://engineer.toggle.co.jp/
ブースを出展していますので ぜひ遊びに来てください!
アジェンダ • TSを利用する前の自分の経験 • TSを使い始めてからどうなったか • 実際にどのような環境で開発を行っているか • 統一したらどうなったか •
終わりに
アジェンダ • TSを利用する前の自分の経験 • TSを使うとどうなるか • 実際にどのような環境で開発を行っているか • 統一したらどうなったか •
終わりに
• 主にJSでの開発 ◦ toB向けのWEBサービス ▪ エンジニアにキャリアチェンジして最初の会社 ◦ toC向けのWEBサービス ▪ 繁忙期を体験
自分はフロントエンドエンジニアでした
フロントエンドエンジニアの方で 次のような経験はありませんか?
None
どんなデータかわからない • productDataってどんなデータ型なの? ◦ どんなプロパティ持っているの ◦ それのデータ型は何?
もう一例
None
どんな値を渡せばいいかわからない • 関数の中身を見ないとどんな引数を渡せばいいかわからない • 間違った値を渡してもエディタ上ではエラーにならない ◦ あたかも実行できるように見える
綱渡りをしている気分だった • 取得できるデータの型はなんだろう • この関数はどんなデータ型の値が返されるんだろう? • この関数にはどんなデータ型の引数を渡せばいいんだろう? ◦ オブジェクトだったとしたらどんなプロパティが必要なんだろう?
綱渡りをしている気分だった • 取得できるデータの型はなんだろう • この関数はどんなデータ型の値が返されるんだろう? • この関数にはどんなデータ型の引数を渡せばいいんだろう? ◦ オブジェクトだったとしたらどんなプロパティが必要なんだろう? 動かしてみないとわからない
みなさんどうですか?
アジェンダ • TSを利用する前の自分の経験 • TSを使うとどうなるか • 実際にどのような環境で開発を行っているか • 統一したらどうなったか •
終わりに
None
None
どんなデータかがわかる! • fetchProduct関数にはstringを渡せばいいんだ! • productDataはProduct型なんだ!
どんなデータかがわかる! • Productがどんなプロパティを持っ ているかわかる! • 各プロパティがどんなデータ型な のかわかる!
もう一例の方は
None
None
どんな値を渡せばよいかがわかる! • updateUserInfo関数にはUserInfo型を渡せばいいんだ!
どんな値を渡せばよいかがわかる!
石橋を叩いて渡っている気分 • 取得できるデータの型がわかる! • 関数がどんなデータ型の値を返すのかがわかる! • 関数にはどんなデータ型の引数を渡せばいいかわかる! ◦ オブジェクトだったとしてもどんなプロパティが必要なのかわかる!
動かさなくてもわかる 実装している時にエディターがエラーを示してくれる
アジェンダ • TSを利用する前の自分の経験 • TSを使うとどうなるか • 実際にどのような環境で開発を行っているか • 統一したらどうなったか •
終わりに
TSで統一
技術スタック フロントエンド バックエンド インフラ
技術スタック
レイヤードアーキテクチャを採 用
構成 • 各層ごとに明確な責務を負うことでコードをできるだけシンプルに保つ
構成 • 依存関係が一方向である ◦ infraはserviceからしか呼ばれない ◦ transactionはhandlerからしか呼ばれない ◦ etc…
環境 • GitHub Codespacesを活用 ◦ 手間がかかる環境構築をボタンのクリックだけで実現 • モノレポ ◦
認知負荷が下がる ◦ 管理コストが下がる
型について
どのように型を定義しているか • Zodを採用している ◦ バリデーションライブラリ ◦ interfaceやtypeよりもさらに厳密なデータへの制約をつけることができる
型の定義 • Zodで作成したスキーマから型を生成
型の定義 • 型定義とスキーマ定義で二重管理にはならない ◦ Zodで作成したスキーマから型を抽出するから ◦ メンテナンス漏れを防ぐ
フロントエンドと バックエンドで 型を共有
型の共有 • 共通のディレクトリから型を参照 ◦ モノレポの強み ◦ それぞれが型定義を持たなくて済む • 型が変更された場合でも修正漏れがなくなる
より型安全に開発するために • CIを利用してテスト実行 ◦ もし仮に実装時に気づかなかったとしても ▪ GitHub Actions
APIリクエストにおける型 • Zodiosを採用 ◦ Zodのスキーマ定義を活用したAPI定義がで きるツール ◦ 型安全なAPIリクエスト ▪ フロントが送信するデータ
▪ レスポンスデータ
アジェンダ • TSを利用する前の自分の経験 • TSを使うとどうなるか • 実際にどのような環境で開発を行っているか • 統一したらどうなったか •
終わりに
TSさえ使えればフルスタック開発が可能 • TSで統一することでフルスタックな開発者体験を得ることができる強力な後押しに なる ◦ TSで統一しているので学習コストが低い ◦ 事実 ▪ TSでの開発経験がなく、フロントエンドの経験しかなかった自分ですが、
現在はフルスタックに開発を行えている
作業量の偏りが減った • フロントエンド、バックエンドという垣根がないから ◦ どんな開発内容でも誰でもアサインできる • もちろん開発する機能の難易度によっては作業量の違いが出る ◦ ただ、フロントエンド、バックエンドの分業によるタスク量の偏りは減った
知識の共有が捗る • メンバー間での得意領域の知識の共有が捗る! ◦ 共通言語としてのTS ◦ 知識の共有が開発言語の違いによって阻害されない ◦ バックエンド開発の時に得ることができたTSに対する知見をフロントエンド開発に活 かしたり
◦ その逆も然り
個人的な話
フロントエンド専任だった自分にとって • 今の環境に出会う前からフルスタックに開発したいなぁとうっすら思っていた ◦ 自分の今後のキャリアに良い影響を与えると思ったから ◦ エンジニアとしての選択肢を広げることができると考えていたから
どうなったのか • TSの実務経験がないTS素人だった • TSで統一された環境に入り半年が経過しフルスタックな開発ができるように
まとめ
TSで統一した環境は 開発者体験が良い
• Zodを利用した型の抽出 ◦ フロントエンド・バックエンド間での型の共通 • Zodiosを利用したAPI定義 • 学習コスト低くフルスタックな開発ができる • 分業による作業量の偏りが減る
• 知識の共有が捗る • エンジニアとしてのスキルアップが見込める
今後のTSライフに 少しでもお役に立てれば
エンジニア積極採用中です!! AIエンジニア Pythonを中心技術として 「データ収集・加工・分析・利用基盤 」を作る 「建築士がやる高度な計算ロジック 」を実装する ひたすらコードとデータに向き合いたい人 ソフトウェアエンジニア
TypeScriptを中心技術として 「ユーザーと直接対話して」提供価値を発見する 「業界の仕事を変革するサービス 」を開発する フルスタックエンジニアを目指す人
東大前 ”UT-Lab” 2024年6月オープン!! 先端技術を掛け合わせた、 まちづくりの社会実装の拠点
• TypeScriptの経験ないけど大丈夫かなぁ • バックエンド経験しかないけど大丈夫かなぁ • フロントエンド経験しかないけど大丈夫かなぁ
飛び込んでもらいたい
採用情報はこちら https://toggle.co.jp/position/engineer/
今日の振り返りイベントを自社でやります • 初めてだらけのTSKaigiを振り返り!! • 【オンライン開催】 5/22(木)19:00~20:00 https://x.gd/HAe6c
少しでも気になった方は ぜひ弊社ブースにお越しください 実際のコードも公開してます
ご清聴ありがとうございました