TypeScriptなのかBabelなのか、なんかそんなはなし
Oct 1, 2018 22:58 · 79 words · 1 minute read
二、三年振りにWebのフロントのお仕事をするようになって、新規のアプリケーション開発に限ればですが、ReactやVueと行ったライブラリを使うのが標準と個人的には思っています。
そしてお仕事で請け負う場合に条件として挙げられる事が多いのは
React(又はVue) + TypeScript
ライブラリー(React or Vue)と一緒にTypeScriptの利用です。
TypeScriptが選ばれる理由
理由としては大きくはこの二点
- 古いJavaScriptへの対応(古いブラウザへの対応)
- 静的型付けで開発出来る
古いJavaScriptへの対応(古いブラウザへの対応)
まずは単純にES6に対応していないブラウザを対象にする場合 なんらかの方法でES5に書き換える必要があるためです。
この解決方法には現在はTypeScriptかBabelを選択するケースが多いかと考えます。
昔は色々ありましたが割愛します。
気になる人はAltJSとかでググってください。
BabelとTypeScriptの違い
- Babelはトランスパイラ
- TypeScriptはAltJS
Babelはトランスパイラです。
簡単に言うと新しい文法を使ったソースコードを古い文法のコードに書き換えてくれるも変換ツールです。
TypeScriptとはAltJSです。
AltJSはその名の通りJavaScriptの代替言語でコンパイルするとJavaScriptに書き出されます。設定で古いJavaScriptにする事が出来ます。もちろんES6にも
静的型付けで開発出来る
TypeScriptは静的型付けの言語です。
静的型付け、つまりは変数や関数の引数や戻り値に型を指定する事が出来る。
他の静的型付け言語の使用感に近い状態で開発が出来ると言われています。
JavaScriptで静的型付けは個人的には違和感があった
ただ私は静的型付けへの拘りには違和感がありました。
私は元々がWebのフロントで、直近で三年くらいUnityを触っていたのでC#を書いていました。
ですので、動的型付けであるJavaScriptも静的型付け(C#で)も経験しています。
元々動的型付けに慣れている身としては、TypeScriptで静的型付けをする意味が理解出来ませんでした。
「型の無い言語なんて触りたくない」
への(型が無いのではなく動的だ!)反発もあり
- 動的型付けである事を想定して開発すれば良いのでは?
- Babelを使ってES6の記述で開発する方が良いのでは?
そんな思いが強くありました。
もちろんTypeScriptは優れた言語だと思います。
だたJavaScriptに慣れていないエンジニアのために、静的型付けでの開発が慣れていると言う理由だけで利用するのにはどうも違和感があったのです。
静的型付けで開発する必要性や事情が見えてきた
しかし、いろいろな人と話して少し考え方が変わりました。
大きなWebシステムでの開発事例を聞いたり、私自身も関わって行く中でJavaScriptにはかなり重大な危険性がある事を再認識したからです。
JavaScriptの重大な危険性
JavaScriptをはじめとしたWebのフロントエンド技術の最大の利点は
__簡単に開発が出来る事__です。
これは__言語の難易度とかそう言う事では無くて、実行環境__だったりそんな話です。
昨今はWebpackなどのモジュールバンドラの利用が必須ですが、それでも他の言語に比べて__開発環境を用意しやすく、開発が簡単に始められる__かと思います。
ただ、その簡単さが重大な危険性 である事を再認識しました。
- 簡単が故に乱れやすく、崩れやすい
- 崩れやすいが故にトラブルを起こしやすい
ルールの厳守は難しい
これらを防止するために、__厳格なルールを設けて厳守する__と言う手立てもあります。 ただ開発メンバー全員がよほど 強い意志 で臨まない限り、__ルールを守るのは困難__です。
何故なら__ルールを破っても開発は可能__※だからです。
そんな状態で例えば納期が迫っていたら、
- エラーにならなければ、今は大丈夫
- とにかく動いていれば、今は大丈夫
ect、
と__問題の先送り__を産みやすくなります。
そして、大抵の場合__これらの問題は後々に影響__を及ぼします。
※もちろん、ESLintなどを使って厳しく開発をする事も可能です。
TypeScriptを利用する利点
TypeScriptを利用すると、少なからず__型の定義をすると言うルールを設ける事__が出来ます。
そして、この__ルールは破る事が出来ません。__
何故なら型がおかしい場合はエラーになり、開発が止まるためです。
たったこれだけでも、__ある程度のソースの乱れは抑制され、壊れにくいコードを書く事ができる__と思います。
__結果として後々にトラブルを残す危険性が減少__します。
当然ですが、__0には出来ませんが減少するのでやる価値はある__と思います。
まとめ
結論から言えば、__大きな開発でなければ無理にTypeScriptを無理に使用する必要性は無い__のかもしれません。
__それほど規模が大きくなく、且つ短いスパンで再開発をするようなプロジェクト__であれば、__Babelを使ってES6でも良い__のではと個人的には思います。
しかし、__大規模なシステムであったり小規模でもしばらくは再開発をせずに機能の追加や改修を行って行く__のであれば、__TypeScriptの利用__やそれに変わる__厳格なルール__が必要と言い切れます。
何にしても作って終わり、と言う事は滅多に無いので、開発後の事も視野に入れておく事は必要はありそうです。
それでは