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"

エイリアス登録して呼び出すようにすればより良さそう。