EY-Office ブログ

最近のエンジニアとTypeScriptの困った関係

現在EY-OfficeのReact教育では、JavaScriptの改良版であるTypeScriptを使っています。TypeScriptを使う事でタイプミス等から起きる間違いをVSCodeでコードを書く時点で検出でき、教育でのつまずきを減らせています。

教育だけではなく実際の開発プロジェクトでもTypeScriptはJavaScriptに比べ生産性が上がり、型があることでコードの可読性も上がりメンテナンスの向上も期待できます。

型

型を知らない若者

ある開発経験が数年のエンジニアにReactの教育を行った際に、がピント来ないと言われました。彼はオンライン教育でRuby on Railsを学び、スタートアップ企業で数年間Ruby on Railsを使って開発を経験してから、フロントエンドも学ぼうとReact(JavaScript)の勉強を始めたそうです。
今までに学んだ(使った)プログラム言語はRubyとJavaScriptです。どちらも動的型付け言語で、コードに型宣言を書きません。

10年くらい前のエンジニアは、SIer等に就職しJavaやC#などの型宣言を書く静的型付き言語学を学んで(使って)から。スタートアップ企業に転職しRubyやJavaScript、PHP等の動的型付け言語を学んで(使って)来ました。以前は型宣言を体験しているエンジニアが多かったのです。

しかし最近のエンジニアを型(型宣言)を経験していないのです!

型とは何なのか

ところで型とは何なんでしょうか?
JavaScriptやRubyもデータには型がありコードを書く際には意識しています、しかしコードの中に型を書く型宣言がないので忘れがちです。

効率を考えCPUに合わせる

CPUの演算命令は整数と実数(浮動小数点)では異なり性能も違います。C言語やC++、Rustで作るような性能を考えなければいけないプログラムの世界では、CPUを効率的に使える型を選ぶ必要があります。
しかしJavaScript(TypeScript)やRubyのような性能より生産性を重視する言語ではCPUに合わせる型はほぼ関係ないかもしれません。

型とは設計

JavaScriptで関数function judgment(x, y)を作るときに考える事は

  1. 機能
  2. 関数名
  3. どのような引数が必要か、戻り値をどうするか
  4. 引数名

ですが、型のある言語TypeScriptではfunction judgment(x: number, y: number): stringのように

「5. 引数の型、戻り値の型」が追加されます。しかし、これは「3. どのような引数が必要か、戻り値をどうするか」で考えた結果です。

さらにここで、x, yが2次元の座標なら type Point2D = {x: number, y: number}という型を定義し、 function judgment(p: Point2D): string のような定義の方が良いかと思います。

戻り値の文字列が実は、'IN', 'OUT', 'BORDER'という判定結果ならtype Postion = 'IN' | 'OUT' | 'BORDER'型を定義し、 function judgment(p: Point2D): Postion のような定義の方がさらに良いかと思います。

このように型は設計の結果なのです。

適切な型を定義する事でif (judgment(p1) === '0UT')のようなタイプミス(O と 0)をTypeScriptが検出できるようになり、プログラムの品質が上がります。

型を教える

型は良いものですが、上の例に書いたように明確な型を書くには、それなりの学習と経験が必要になりReact教育の中で深く教えるのは無理です。標準のReact教育コースでは必要な最低限にしぼっています。

  • プリミティブ型(number, string, boolean, null…)
  • 配列型、関数型
  • any型 : 何でもありのanyはJavaScriptからの移行時に便利ですが、いつかちゃんとした型に置き換えないと禍根を残します
  • オブジェクトの型 : JavaScriptではオブジェクトが多用されるので、オブジェクトを正しく型宣言する事で、安全で可読性の高いコードを書くことができるるようになります
  • null安全 : TypeScriptではstring|nullのようにユニオン型を使うとnull安全なコードが書きやすくなるので説明しています
  • ジェネリクス : 初心者がジェネリクスを完璧に書ける必要はないと思います。ただし、ジェネリクスが何なのか、簡単なジェネリクスが読めるように説明しています

まだ、型に付いての教育は試行錯誤の部分もあり、受講者の反応をみながら改良しています。

- about -

EY-Office代表取締役
・プログラマー
吉田裕美の
開発者向けブログ