Google Closure Compilerは、JavaScriptのダウンロードと実行の高速化のために、コードの圧縮および最適化を行うことのできるGoogle謹製のコンパイラツールである。
Closure Compilerは様々なプラットフォーム向けに提供されているが、Webアプリケーションとして提供されているものが環境構築も不要で手軽だったためこちらを利用していた。
https://closure-compiler.appspot.com/home
ただし、Closure CompilerのAPIおよびUI上でのサービスは、非推奨となっており、将来的には削除される予定とのこと。
Closure compiler service is deprecated, and will be removed. Please consider running the compiler locally instead.
https://developers.google.com/closure/compiler/docs/gettingstarted_api
https://developers.google.com/closure/compiler/docs/gettingstarted_ui
Googleとしてもローカルでの実行を推奨しているため、本コンパイラをローカルに環境構築および実行してみた。
環境
- Closure Compiler v20220601
- java 17
環境構築
Maven Repositoryからjarファイルをダウンロードする。
https://mvnrepository.com/artifact/com.google.javascript/closure-compiler
実行
ページタイトルをクリップボードに書き込むだけのシンプルなスクリプトをブックマークレットとして生成する。
copy_title.js/**
* Webページのタイトルをクリップボードに書き込みます。
*/
function copyTitle() {
const title = document.title;
navigator.clipboard.writeText(title);
}
copyTitle();
ダウンロードしたclosure-compiler-v20220601.jar
をjavaで実行する。
入力ファイルは--js
オプション、出力ファイルは--js_output_file
オプションを用いてそれぞれ指定する。
$ java -jar closure-compiler-v20220601.jar --js copy_title.js --js_output_file copy_title_out.js
コンパイルに成功すると次のようなファイルが生成される。
javadocコメントや冗長な変数定義などが省略された状態になっていることが確認できる。
copy_title_out.jsfunction copyTitle(){navigator.clipboard.writeText(document.title)}copyTitle();
ブックマークレットの生成
ブックマークレットとして実行させるには、コードの先頭がjavascript:
から始まる必要がある。
そのため、次のようにコンパイル時の事後処理で追加するようにした。
また、コンパイル毎に入力ファイルを生成するのに手間がかかるためクリップボード経由で入力できるようにした。
$ pbpaste | java -jar closure-compiler-v20220601.jar | sed "s/^/javascript:(function(){/g" | sed "s/$/})();/g"
エイリアス登録して呼び出すようにすればより良さそう。