ウェブ技術の現在(2)ALtJavascriptについて
前回のウェブアプリの構成に続いて、開発ツールとAltaJavascriptの概要について述べる。
前述の最近のWebアプリケーションは、開発時のコードと実際の製品に使われるコードが異なる。開発者はブラウザーにサポートされていない可能性がある最新バージョンのJavaScriptでコードを書いたり、node_modulesフォルダー内のサードパーティ製パッケージとその依存オブジェクトを多用したり、静的解析ツールや圧縮ツール(Minifier)などを使ったりして開発する。これらをすべて変換、効果的にデプロイして、大半のWebブラウザーが理解できる形にするものとしてビルドツールがある。
ビルドツールの中には、モジュールバンドラーと呼ばれるすべてのコードを少数のファイル(バンドル)にまとめる事ができるツールがあり、具体的なツール名としては、Webpack、Browserify、Rollup.js等がある。
ビルドツールのもう一つのツールとして、トランスパイラーとも呼ばれるものがある。最新のJavascriptが書かれたコードを部分的にしかサポートしていない、あるいはまったくサポートしていないレガシーブラウザー、レガシーデバイスの上で動作させるために、書いたコードを動作可能な前のバージョンのコードに変換する必要があり、この作業を行う標準的なツールがトランスパイラーで、代表的なものとしてBabelがある。Babelはコードをほとんどのブラウザーで使える互換コードに変換するコンパイラーとなる。
モジュールバンドラーとトランスパイラーは、プロジェクトで必要なビルドプロセスの一部に過ぎず、そのほかのプロセスにはコードの圧縮(ファイルサイズを減らす)、解析用ツールの使用、場合によっては画像最適化やCSS/HTMLプリプロセッサーの使用などJavaScriptが関係しないタスクがある。タスク管理を自動化し、どんな操作も単純なコマンドで実行できるツールとしてGrunt.jsとGulp.jsがある。
次にAltJS((代替JavaScript言語)について述べる。AltJSとは、コンパイルすることでJavaScriptが生成されるプログラミング言語のことで、JavaScriptの文法の複雑さを緩和したり、動的型付けをはじめとする問題点をカバーすることを目的に開発されたものである。
AltJSを利用するメリットは、コードの読みやすさと保守性の高さにある。JavaScirptよりも文法が整理されており、バグの早期発見が可能で素のJavaScirptに比べると、メンテナンスがしやすい事が特徴となる。
AltJsは様々な所から提案され10種類以上存在するが、State of JavaScriptから発表された2019年でのJavaScript関連の調査データによると、TypeScript、Reason、Elm、PureScript、Clojurescriptの順に人気があるとのこと。上記以外の言語としては他にDart、CoffeScript、Scala.js、Haxe、Nim等がある。
TypeScriptはJavaScriptの上位互換(スーパーセット)であり、ほかの言語とは異なりJavaScriptの思想を受け継ぎ、コードの健全性を改善する特徴だけ追加されているものとなる。型アノテーションをはじめ型に関する機能が付加され、静的コード解析やそのほかのリファクタリングに便利なツールが使えるため、「より快適に書けるJavaScript」に仕上がっているのが特徴の一つとなる。型があることで別々のコンポーネント間のデータの受け渡しが改善したり、型推論に対応しているので、毎回すべての型を書かなくてもあとで型を追加してコードを強化することが可能になる。また、Reactを使っている場合は、Reactの型を追加することでJSXも使える。
Reasonは、Facebookにより開発・維持されている言語で、OCaml(オーキャメル)コンパイラー用に新しい構文を追加したもので、JavaScriptもしくはネイティブコードの両方に変換可能なものとなる。関数型言語であるML言語の方言なので、強力かつ柔軟な型システムを持ち、型推論、代数的データ型、パターンマッチングなどを備えています。変更不可(immutable)なデータ型や多態ポリモーフィズム(言語によってはジェネリックとも呼ばれる)にも対応し、OCamlはさらにオブジェクト指向プログラミングも可能となる。bucklescriptのバインディングを使えば、既存のJavaScriptライブラリーも使え、Reactを使う場合にはJSXにも対応している。
Elmは、JavaScript、HTML、CSSにコンパイルできる純粋な関数型言語で、Elmだけで完全なサイトが構築できるため、ReactなどのJavaScriptフレームワークの代わりにも使う事ができる言語となる。Elmで作られたアプリは非常に高速で、portsを使えばJavaScriptやほかのライブラリーとやりとりできるため、既存のJavaScriptとの併用も可能となる。
PureScriptは純粋な関数型で強力な型付けを持つプログラミング言語で、思想的にはHaskellと同様に既存のJavaScriptライブラリーとの高い互換性を持つように設計されたものとなる。ほかの言語と同様、PureScriptにはGulpに似ている独自のビルドツール「Pulp」がある。特に型に関しては、Haskellの機能を使っていて、洗練された抽象化を可能にしている。
ClojureScriptは、プログラミング言語のClojureからJavaScriptに変換するコンパイラーで、Clojureの持つ動的型付けや汎用の関数型言語で、変更不可な(immutable)データ構造に対応する特徴を持つ。ClojureScriptはLisp系のプログラミング言語なので、コードはデータとして扱われ、マクロが使えるのでメタプログラミングが可能となる。ほかのLisp系言語とは違いClojureは変更不可の(immutable)データ構造に対応しており、副作用の管理がしやすくなっている。List特有の括弧の使い方をはじめ、他の言語に比べて取っ付きにくく見える構文だが、構文の簡潔さと抽象化能力により、高度な抽象化が必要な場面に強力なツールとなる。ClojureScriptはコードの最適化にGoogle Closureを使用しているため、既存のJavaScriptライブラリーと互換性がある。
JavaScriptを書きやすくしたTypeScriptを除くと、その他の人気のある言語はどれも関数型言語の機能を利用しているのが興味深い。またそれぞれの言語は、プログラミング言語を語る上で重要な「型」の扱いで特徴を出しており、後日それらに関しては整理したいと思う。
これらの言語では、JavaScriptの持つレガシーの負の遺産(使いにくさ)を解消している為、使いこなせれば大きな武器になると考えられるが、使いこなすにはJavaScriptの知識が必須であり、先述の「確実なものはたった一つJavascriptそのもの」「とにかく言語(javascript)を学び、知識を増やした後で、フレームワークの動きがわかり納得のいく選択ができる」という基本姿勢は必要となるものと考えられる。
次回はプログラミング言語について述べてみたい。
コメント
[…] web技術の現在(2) AltJavascript […]
[…] web技術の現在(2) AltJavascript […]