Deepkitってなんや…？

## ことの発端

swc増えてるなあ…
Nextも裏ではswc使ってるしrustで出来てるしこれからのフロントエンドを担っていくんやろなあ…
そういえばこれどこ製や？
githubﾎﾟﾁｰ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230043/349113c9-ca78-d3d6-e0ae-6477582c1b17.png)

DeepkitとDiscordでが一番のスポンサーなんか
ん？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230043/8c4cb558-9085-071a-3255-ce235add4ad1.png)

Deepkitってなんや…？
qiitaにもあらへん…

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230043/5762a3e6-b5cb-6c35-e173-527ff8c10905.png)

記事にすれば誰か使うやろ（他力本願）


## Deepkitの概要（公式の情報そのまま）

### はじめに

>Introduction
>
> TypeScript has emerged as a highly scalable superset of JavaScript, engineered for the development of more secure and robust applications. While JavaScript has amassed a considerable developer community and ecosystem, TypeScript brings the power of static typing to JavaScript, substantially reducing runtime errors and making codebases easier to maintain and understand. However, despite its advantages, TypeScript's potential has not been fully exploited, especially when it comes to implementing complex enterprise-level solutions. TypeScript inherently eliminates its type information at compile time, leaving a crucial gap in runtime functionality and making it necessary to implement all sorts of unergonomic workarounds to retain type information. Be it code generation, limiting decorators, or custom type builders with complex inferring step like Zod, all of these solutions are cumbersome, slow, and error-prone. This results in not only slower development speed but also less robust applications, especially in large teams and complex projects.


TypeScript は、より安全で堅牢なアプリケーションを開発するために設計された、拡張性の高い JavaScript のスーパーセットとして登場しました。JavaScript はかなりの数の開発者コミュニティとエコシステムを形成していますが、TypeScript は JavaScript に静的型付けの力をもたらし、実行時のエラーを大幅に減らし、コードベースの保守と理解を容易にします。しかし、その利点にもかかわらず、特に複雑なエンタープライズレベルのソリューションを実装する場合、TypeScript の潜在能力は十分に引き出されていません。TypeScriptは本質的にコンパイル時に型情報を排除するため、実行時の機能には決定的なギャップが残り、型情報を保持するために人間工学に基づかないあらゆる回避策を実装する必要があります。コード生成であれ、デコレーターの制限であれ、Zodのような複雑な推論ステップを持つカスタム型ビルダーであれ、これらの解決策はどれも面倒で、時間がかかり、エラーが発生しやすいです。その結果、開発速度が遅くなるだけでなく、特に大規模なチームや複雑なプロジェクトでは、アプリケーションの堅牢性が低下します。



> Enter Deepkit, a framework that revolutionizes how TypeScript can be employed to construct intricate and efficient software solutions. Designed in TypeScript and for TypeScript, Deepkit not only enables type safety during development but extends the benefits of TypeScript's type system to runtime. By retaining type information at runtime, Deepkit opens the door to a plethora of new functionalities, including dynamic type computation, data validation, and serialization, that were previously cumbersome to implement.

Deepkit は、TypeScript を使用して複雑で効率的なソフトウェアソリューションを構築する方法に革命をもたらすフレームワークです。TypeScript で、TypeScript のために設計された Deepkit は、開発中の型安全性を実現するだけでなく、TypeScript の型システムの利点を実行時にまで拡張します。実行時に型情報を保持することで、Deepkit は、動的な型計算、データ検証、シリアライズなど、これまでは実装が面倒であった多数の新機能への扉を開きます。

> While Deepkit is engineered to cater to high-complexity projects and enterprise-level applications, its agility and modular architecture make it equally suitable for smaller applications. Its extensive libraries cover common use-cases and can be used either individually or collectively, based on the project's needs. Deepkit aims to be as flexible as necessary and as structured as required, allowing developers to maintain high development speeds, both in the short term and the long term.


Deepkitは、複雑性の高いプロジェクトやエンタープライズレベルのアプリケーションに対応するように設計されていますが、その俊敏性とモジュール式アーキテクチャにより、小規模なアプリケーションにも同様に適しています。Deepkitの豊富なライブラリは、一般的なユースケースをカバーしており、プロジェクトのニーズに応じて個別に使用することも、まとめて使用することもできます。Deepkitは、必要な柔軟性と必要な構造を備えているため、開発者は短期的にも長期的にも高い開発速度を維持できます。


### なぜDeepkitなのか？

> Why Deepkit?
>
> The TypeScript ecosystem is abundant with libraries and tools, offering solutions for almost every conceivable problem. While this plethora of choices is empowering, it often results in complexity due to mismatched philosophies, APIs, and code qualities between different libraries. Integrating these disparate components requires additional abstractions and often results in lots of glue code which can become a maintenance nightmare and gets out of hand fairly quickly reducing development speed drastically. Deepkit aims to alleviate these challenges by providing a unified framework, bringing together core functionalities that virtually every project needs. Its harmonized set of libraries and components are designed to work seamlessly together, thus bridging the gaps that exist in the fragmented TypeScript ecosystem.

TypeScriptのエコシステムにはライブラリやツールが豊富にあり、考え得るほぼすべての問題に対するソリューションを提供しています。このような選択肢の多さは力を与えてくれる反面、異なるライブラリ間で理念やAPI、コードの品質が不一致になり、複雑さをもたらすことも多いです。このような異種のコンポーネントを統合するには、さらに抽象化する必要があり、多くのグルーコードが必要になります。Deepkitは、統一されたフレームワークを提供し、事実上すべてのプロジェクトが必要とするコア機能をまとめることで、このような課題を軽減することを目指しています。調和されたライブラリとコンポーネントのセットはシームレスに連携するように設計されているため、断片化されたTypeScriptエコシステムに存在するギャップを埋めることができます。

#### 実績のあるエンタープライズコンセプト

> Proven Enterprise Concepts
>
> Deepkit draws inspiration from well-established enterprise frameworks like Java's Spring and PHP's Laravel and Symfony. These frameworks have proven their efficiency and robustness over decades, being the backbone of countless successful projects. Deepkit brings similar enterprise design patterns and concepts to the TypeScript world in a new and unique way, allowing developers to benefit from years of collective wisdom.
> 
> These patterns offer not only a proven way to structure applications but also facilitate development, especially in large teams. By leveraging these tried-and-true methodologies, Deepkit aims to provide a level of reliability and scalability that has been elusive in the TypeScript landscape.

Deepkitは、JavaのSpringやPHPのLaravel、Symfonyなどの定評あるエンタープライズフレームワークからインスピレーションを得ています。これらのフレームワークは、数十年にわたってその効率性と堅牢性が実証され、無数のプロジェクトを成功に導いてきました。Deepkitは、同様のエンタープライズデザインパターンと概念を新しくユニークな方法でTypeScriptの世界に持ち込み、開発者が長年の知恵の集合から恩恵を受けることを可能にします。

これらのパターンは、アプリケーションを構造化する実証済みの方法を提供するだけでなく、特に大規模なチームでの開発を容易にします。Deepkit は、これらの実績のある方法論を活用することで、TypeScript の世界では実現されていなかったレベルの信頼性とスケーラビリティを提供することを目指しています。


#### 素早く長期的なパフォーマンス

> Agile / Long-term Performance
> 
> Deepkit is engineered with agility in mind, offering tools and features that accelerate initial development and provide long-term maintenance benefits. Unlike some frameworks that prioritize initial speed at the expense of future scalability, Deepkit balances both. Its design patterns are easy to grasp, making it simple to get started. However, they also scale effectively, ensuring that even as the project and team grow, development speed doesn't diminish.
> 
> This forward-thinking approach makes Deepkit not just an ideal choice for quick MVPs but also for complex, long-lived enterprise applications.

Deepkitは俊敏性を念頭に置いて設計されており、初期開発を加速し、長期的なメンテナンスの利点をもたらすツールと機能を提供します。将来の拡張性を犠牲にして初期速度を優先する一部のフレームワークとは異なり、Deepkit は両方のバランスを取っています。Deepkitのデザインパターンは把握しやすいため、簡単に使い始めることができます。しかし、効果的に拡張できるため、プロジェクトやチームが大きくなっても開発速度が低下することはありません。

この先進的なアプローチにより、Deepkitは迅速なMVPだけでなく、複雑で長寿命のエンタープライズアプリケーションにも理想的な選択肢となっています。

#### 開発者経験

> Developer Experience
> 
> Finally, Deepkit places a strong emphasis on developer experience. The framework offers intuitive APIs, detailed documentation, and a supportive community, all aimed at helping developers focus on solving business problems rather than wrestling with technical complexities. Whether you are building a small application or a large enterprise-grade system, Deepkit provides the tools and practices to make your development journey smooth and rewarding.

最後に、Deepkit は開発者のエクスペリエンスを重視しています。このフレームワークは、直感的なAPI、詳細なドキュメント、協力的なコミュニティを提供し、開発者が技術的な複雑さと格闘するのではなく、ビジネス上の問題を解決することに集中できるようにすることを目的としています。小規模なアプリケーションを構築する場合でも、大規模なエンタープライズグレードのシステムを構築する場合でも、Deepkit は、開発の旅をスムーズでやりがいのあるものにするためのツールとプラクティスを提供します。

### 主な機能

> Key Features

#### ランタイム型

> Runtime Types
> 
> One of Deepkit's standout features is its ability to retain type information at runtime. Traditional TypeScript frameworks often discard this crucial data during the compilation process, making runtime operations like data validation, serialization, or dependency injection much more cumbersome. Deepkit's type compiler uniquely enables dynamic type computation and reading of existing type information at runtime. This not only offers greater flexibility but also results in more robust and typesafe applications, streamlining the development of complex systems.

Deepkitの際立った特徴の1つは、実行時に型情報を保持する機能です。従来の TypeScript フレームワークでは、コンパイル時にこの重要なデータが破棄されることが多く、データ検証、シリアライズ、依存性注入などの実行時の操作が非常に面倒になります。Deepkit の型コンパイラは独自に、動的な型計算と実行時の既存の型情報の読み取りを可能にします。これにより、柔軟性が向上するだけでなく、より堅牢で型安全なアプリケーションが実現し、複雑なシステムの開発が効率化されます。

#### 包括的なライブラリ・スイート


> Comprehensive Library Suite
> 
> Deepkit provides a complete ecosystem of libraries designed to accelerate various facets of application development. From database abstraction and CLI parsers to HTTP routers and RPC frameworks, Deepkit's libraries offer a unified solution to meet diverse programming needs. All of these libraries come with the added advantage of leveraging TypeScript’s type system at runtime, which significantly reduces boilerplate and increases code clarity. The modularity of Deepkit allows developers to either use individual libraries for specific tasks or employ the entire framework to build full-fledged, production-ready applications.


Deepkitは、アプリケーション開発のさまざまな側面を加速するために設計されたライブラリの完全なエコシステムを提供します。データベースの抽象化やCLIパーサからHTTPルータやRPCフレームワークまで、Deepkitのライブラリは、多様なプログラミングのニーズに対応する統一されたソリューションを提供します。これらのライブラリにはすべて、実行時に TypeScript の型システムを活用できるという利点があり、定型文を大幅に削減してコードの明快さを向上させます。Deepkitのモジュール性により、開発者は特定のタスクのために個々のライブラリを使用することも、本格的な量産可能なアプリケーションを構築するためにフレームワーク全体を使用することもできます。

#### 高性能とスケーラビリティ

> High-Performance & Scalability
> 
> Maintaining development speed as projects grow in complexity is a formidable challenge. Deepkit addresses this issue head-on with its emphasis on applying proven enterprise design patterns that scale well with larger teams and more complex codebases. The framework incorporates established enterprise design patterns that have proven to scale well with larger teams and more complex codebases. Deepkit’s approach ensures that projects remain agile and efficient, not just in the initial stages but throughout their lifecycle. This is achieved by minimizing boilerplate and leveraging design patterns in the most ergonomic way possible, allowing teams to maintain high productivity levels over the long term.

プロジェクトが複雑化する中で開発速度を維持することは、非常に困難な課題です。Deepkit は、大規模なチームやより複雑なコードベースでも十分に拡張できる、実績のあるエンタープライズ設計パターンの適用に重点を置いて、この問題に正面から取り組んでいます。このフレームワークには、大規模なチームやより複雑なコードベースでも十分に拡張できることが実証されている、確立されたエンタープライズ設計パターンが組み込まれています。Deepkitのアプローチは、初期段階だけでなくライフサイクル全体を通じて、プロジェクトが俊敏性と効率性を維持できるようにします。これは、定型文を最小限に抑え、可能な限り人間工学的な方法でデザインパターンを活用することによって達成され、チームは長期にわたって高い生産性を維持することができます。

#### アイソモーフィックTypeScript

> Isomorphic TypeScript
> 
> Deepkit is designed to maximize the benefits of Isomorphic TypeScript, which allows the same codebase to be used across multiple platforms—be it frontend, backend, or even mobile applications. This results in significant time and cost savings as code can be shared among various departments, simplifying recruitment and facilitating easier knowledge transfer within teams. Deepkit fully harnesses the power of Isomorphic TypeScript, providing an integrated, cross-platform development experience that significantly outpaces traditional dual-stack approaches.


Deepkit は、フロントエンド、バックエンド、さらにはモバイルアプリケーションなど、複数のプラットフォームで同じコードベースを使用できるようにする Isomorphic TypeScript の利点を最大限に引き出すように設計されています。この結果、さまざまな部署でコードを共有できるため、時間とコストを大幅に節約でき、採用が簡素化され、チーム内での知識の伝達が容易になります。Deepkit は Isomorphic TypeScript のパワーをフルに活用し、従来のデュアルスタックアプローチを大幅に上回る、統合されたクロスプラットフォーム開発体験を提供します。


## 実際どういう構成なのか？

チュートリアル見た感じはこんな感じに使えそうです。一部だけDeepkitに使うこともできるのか…？

1. Deepkit App
 CLIアプリケーションを作れるらしい
2. Deepkit Framework
 APIやマイクロサービスを作れるらしい
3. Deepkit ORM
 見た感じは普通のORM。これだけ使いたい。
4. Deepkit Runtime Types
  これが実行中も型情報を保持するとか言ってたやつ。これが一番ユニーク。

## 感想
なんでswcのスポンサーやってるや…