Closure Compiler Service API との通信

Closure コンパイラ サービスのサポートが終了し、今後削除されます。 代わりにコンパイラをローカルで実行することを検討してください。

概要

Closure Compiler サービス API を使用すると、ウェブベースの API で Closure Compiler JavaScript コンパイルにアクセスできます。Closure Compiler UI はウェブページ上のシンプルなフォームからコンパイラ サービスを利用するための簡単な方法を提供しますが、このウェブページからの出力をコピーするのは最も効率的な方法ではありません。Closure Compiler サービス API を使用すると、多様なツールを独自に構築して独自のワークフローを作成できます。

このチュートリアルでは、JavaScript を Closure Compiler サービスに送信し、Closure Compiler の出力を取得するプロセスについて説明します。この例では、最も基本的なレベルの Closure Compiler コンパイルを使用しています。これにより、JavaScript からコメントと空白が取り除かれます。

このチュートリアルは、JavaScript と HTTP に関する基本的な知識があることを前提としています。Python スクリプトを使用して Closure Compiler サービスに JavaScript を送信しますが、この例に沿って Python を知る必要はありません。

API と通信する方法

  1. リクエスト パラメータを決定する

    Closure Compiler サーバーとやり取りするには、Closure Compiler サーバーに対して HTTP POST リクエストを送信します。リクエストでは、少なくとも次のパラメータを送信する必要があります。

    js_code または code_url

    このパラメータの値は、コンパイルする JavaScript を示します。これらのパラメータを少なくとも 1 つ含める必要があります。js_code パラメータは、JavaScript を含む文字列(alert('hello') など)にする必要があります。code_url パラメータには、HTTP 経由で使用できる JavaScript .js ファイルの URL を指定する必要があります。

    また、 js_code:path/to/filename.js の形式で名前付きソース パラメータを含めることもできます。各ファイルは仮想ファイル システムで作成され、ECMASCRIPT6 でサポートされている import ステートメントと export ステートメントを介して標準化されたモジュールが有効になります。

    compilation_level

    このパラメータの値は、JavaScript に適用する圧縮の程度と最適化の度合いを示します。コンパイル レベルには WHITESPACE_ONLYSIMPLE_OPTIMIZATIONSADVANCED_OPTIMIZATIONS の 3 つがあります。この例では、WHITESPACE_ONLY コンパイルを使用します。これにより、コメントと空白文字が削除されます。

    compilation_level パラメータのデフォルト値は SIMPLE_OPTIMIZATIONS です。

    output_info

    このパラメータの値は、コンパイラが取得する情報の種類を示します。出力には、compiled_codewarningserrorsstatistics の 4 種類があります。この例では、値 compiled_code を使用して、受け取った JavaScript の圧縮バージョンをリクエストで出力するよう Closure Compiler サービスに指示しています。

    output_format

    Closure Compiler サービスの出力の形式。出力形式は、textjsonxml の 3 つです。この例では、値 text を使用して生のテキストを出力します。

    output_format パラメータのデフォルト値は text です。

    これらの必須パラメータと追加のオプション パラメータの詳細については、API リファレンスをご覧ください。

    この導入例の例では、1 行の生の JavaScript を Closure Compiler サービスに送信するだけなので、code_url ではなく js_code を使用しています。WHITESPACE_ONLYcompilation_level を使用し、textoutput_format を含む未加工テキスト出力を要求し、output_info タイプの compiled_code を要求します。

  2. Closure Compiler Service にポストリクエストを行う

    Closure Compiler サービスから出力を取得するには、ステップ 1 で選択したパラメータを POST リクエストで Closure Compiler Service API の URL に送信します。これを行う 1 つの方法としては、Closure Compiler Service API の Hello World のような単純な HTML 形式を使用します。

    しかし、開発中にこのようなフォームを使用するには、ブラウザから出力をコピーして、.js ファイルに貼り付ける必要があります。代わりに、Closure Compiler サービスにリクエストを送信する小さなプログラムを作成する場合は、Closure Compiler の出力を直接ファイルに書き込むことができます。たとえば、次の Python スクリプトは Closure Compiler サービスにリクエストを送信し、レスポンスを書き出します。

    #!/usr/bin/python2.4
    
    import httplib, urllib, sys
    
    # Define the parameters for the POST request and encode them in
    # a URL-safe format.
    
    params = urllib.urlencode([
        ('js_code', sys.argv[1]),
        ('compilation_level', 'WHITESPACE_ONLY'),
        ('output_format', 'text'),
        ('output_info', 'compiled_code'),
      ])
    
    # Always use the following value for the Content-type header.
    headers = { "Content-type": "application/x-www-form-urlencoded" }
    conn = httplib.HTTPSConnection('closure-compiler.appspot.com')
    conn.request('POST', '/compile', params, headers)
    response = conn.getresponse()
    data = response.read()
    print data
    conn.close()
    

    注: このサンプルを再現するには、Windows ユーザーが Python のインストールが必要になる場合があります。Windows で Python をインストールして使用する手順については、Python Windows に関するよくある質問をご覧ください。

    このスクリプトは、コマンドライン引数として渡された JavaScript を最適化します。上記のコードを compile.py というファイルに貼り付け、ファイルの権限を変更して実行可能にし、次のコマンドを実行します。

    $ python compile.py 'alert("hello");// This comment should be stripped'
    

    このコマンドは、Closure Compiler のレスポンスから圧縮コードを出力します。

    alert("hello");
    

    この例では基本的なコンパイルを使用しているため、コンパイラはコメントを削除する以外の処理は行いません。

    このスクリプトについては、以下の点にご注意ください。

    • パラメータは HTTPS 接続のリクエスト メソッドに URL エンコードされた文字列として渡されます。urllib.urlencode の呼び出しの後、params 変数には
      js_code=alert%28%22hello%22%29%3B%2F%2F+This+comment+should+be+stripped&output_info=compiled_code&out=text&compilation_level=WHITESPACE_ONLY
          
      という文字列が含まれます。独自のスクリプトを記述する場合は、次のようにスクリプトを URL エンコードして投稿する必要があります。
    • リクエストには、常に application/x-www-form-urlencodedContent-type ヘッダーが必要です。
  3. 次のステップ

    より現実的な開発シナリオでサービスを使用してより適切な圧縮を実現する方法については、API によるファイルの圧縮をご覧ください。