TypeScriptの学習をはじめようとしたところ、「WEB+DB vol.133のTypeScript特集も読むといいよ」と教わったので読んでみました。
その特集の中で気になったツールや単語をメモっていきます。
ちなみに、自分はKotlinを使ったAndroidアプリ開発者で、TypeScriptはほぼ書いたことがありません。
(node.jsはある程度書けるが...)
そのため、当記事はTypeScript初心者向けとなります。
ESLint
- JavaScriptのためのリンタ
- リンタのデファクトスタンダード
- カスタマイズしやすいのが特徴
- 設定は共有可能
- フォーマッタとしても使えるが、Prettierのほうが貫したコーディングスタイルを強制できる
- 欠点は、、、
- Prettierと組み合わせると複雑になり、初学者が設定でつまずく要因となる
- 大規模プロジェクトになるとパフォーマンスに問題がでてくる
Prettier
- フォーマッタのデファクトスタンダード
- JavaScriptだけでなくやTypeScriptだけでなく、HTMLやCSS,GraphQLやMarkDownもサポートしている
- 設定項目が少ないのが特徴
- 欠点は、、、
- Prettierのコーディングスタイルが気に入らない場合はそれを無効化できない
- (カスタマイズ性が低い?)
- 大規模プロジェクトになるとパフォーマンスに問題がでてくる
- Prettierのコーディングスタイルが気に入らない場合はそれを無効化できない
Rome
- Rust製
- フロントエンドの開発のオールインワンツール
- 現在のフロントエンドのツール郡を置き換えることを目標としている
- パフォーマンスが良い
- 2023年6月時点ではまだ開発中
- フォーマッタとリンタのみリリースされている
Deno
- JavaScript/TypeScriptランタイム
- 開発に必要なツールをビルトインで提供している
- フォーマッタ
deno fmt
とリンタdeno lint
が紹介されていた - Rust製
- リンタは主にDenoをターゲットとしており、ESLintを置き換えるわけではないらしい
トランスパイル
- TypeScriptコードをJavaScriptに変換する工程のこと
- なぜなら、TypeScriptコードをブラウザは実行できない
トランスパイラ
- トランスパイルしてくれるプログラムのこと
- Babelが有名
- 昔は新しいJavaScript構文を古い構文に変換してた
- IE対応や、ES6をES5に変換など
- 現在は新たな役割として以下に使われている
- TypeScriptのトランスパイル
- JSXのトランスパイル
Babel
- トランスパイラとして有名
- プラグインシステム(独自の定義)のを追加が便利らしい
- 便利すぎてプラグインブーム?になったようだ
- JavaScript製で、パフォーマンスに懸念がでてきている
バンドラ
- フロントエンド開発の欠かせないツール
- importやexportで分割されたコードを解決しつつ、1つのJavaScriptファイルに変換する
- ホットリロードの役割も持っている
- 変換速度の高速化が求められているため、GoやRust製のツールが出始めている
SWC
- Vercelという会社が開発したトランスパイラ
- Rust製で高速
- BabelのかわりにSWCを選ぶプロジェクトも出始めている
- BabelをSWCに置き換えるとビルド時間が35%削減されたらしい
- 次のデファクトスタンダードを期待される期待の星らしい
turbopack
- Vercelという会社が開発したバンドラ
- Rust製で高速
- 現時点ではアルファ版
- webpackを置き換えるのが目的らしい?
esbuild
- トランスパイラとバンドラが合体したツール
- Go製で高速
- Bubelやwebpackより高速化なのが売り
- TypeScriptとJSXのトランスパイルもサポート済み
- このツール1つでトランスパイラとバンドラが実行できるのが便利らしい
webpack
- バンドラのデファクトスタンダード
- loaderという拡張機能でCSSや画像ファイルをimportして使用できる
- ツールの設定の自由化がとても高い
- JavaScript製で、パフォーマンスに懸念がでてきている
ES Module
- 分割されたJavaScriptファイル(モジュール)をimport/exportでつなぐしくみのこと
- import/exportでつながったモジュールは非常に遅いため、バンドラで1つのJavascriptファイルにしておくのが定番
AST
- Abstract Syntax Tree(抽象構文木)
- ソースコードを扱いやすいように加工されたデータ構造のこと
- ESLintやPrettierの構文チェックで使わている
- Babelやwebpackも使っているが、両者でASTが異なるため、無駄な変換が発生してパフォーマンスが遅いらしい
- SWC + turbopack の組み合わせで同じASTフォーマットを扱えれば、高速化が期待できるらしい
- esbuildも同じASTフォーマットなので?高速らしい
最後に感想
- Rust製のツールがかなり高速なようで、期待値がかなり高いらしい
- 将来はRust製ツールが主流になる、と筆者は述べていた
- Goも早いが、Rustはもっと早い
- プラグインをRustで書く時代がくるかもしれないため、Rust覚えるといいかも
フロントエンドにRustの波が徐々にきてます!
まずはSWCから慣れて行きましょう!