クライアントサイドJavaScriptのライセンス管理


ago@kyo_ago

GREE Advent Calendar 2013 11

JavaScript


使JavaScriptJavaScript



JavaScript使


JavaScript





(一)退退

(二)使htmlJavaScriptURL

(三)URL

(四)SourceMap


1, 23, 4







Closure Compiler
/**@license


  • mishoo/UglifyJS2
    • commentsオプションを渡して、独立したブロックコメント内に@licenseを記述する(--commentsで残したいコメントの正規表現を指定することも可能)

この中でClosure Compilerは「一度圧縮するとライセンス表記が変わる」という問題があり、そのため2回圧縮するとライセンス表記が消えてしまう点に注意してください。

上記のライセンス表記をClosure Compilerで圧縮すると以下の形式で出力されます(このまま再度圧縮するとライセンス表記が消えてしまいます)

各ライブラリの記述方式

次は比較的メジャーなライブラリを元に、ライセンス文の記述方式を紹介します。

jQuery

まずは未圧縮版jQueryのライセンス表記です。

jQueryのライセンス表記は割と一般的なライセンス表記です。

ただ、この形式でもYUI Compressorでは正しくライセンス表記が残りますが、Closure Compiler、UglifyJS2で圧縮した場合にはライセンス表記が消えてしまいます(UglifyJS2は正規表現で対応可能)

ちなみに、圧縮版は以下の形式になっています。

AngularJS

次は未圧縮版AngularJSのライセンス表記です。

こちらはClosure Compiler、UglifyJS2では正しくライセンス表記が残りますが、YUI Compressorで圧縮した場合にはライセンス表記が消えてしまいます。

ちなみに、圧縮版のライセンス表記は以下のようになっているため、どの圧縮ライブラリで圧縮してもライセンス表記は消えてしまいます。

Underscore.js

Underscore.jsのライセンス表記はラインコメントの組み合わせで出来ています。

この形式はどの圧縮ライブラリでもサポートされておらず、基本的に手動で対応を行う必要があります。



Issue/*!

Use bang comment to preserve license · Issue #1280 · jashkenas/underscore

Underscore.js

Backbone.js


Backbone.jsUnderscore.js

しかも最初のコメントの後に改行が入っているため、さらに圧縮ライブラリでの処理が難しくなっています。

Backbone.jsの圧縮版にはライセンス表記はなくなっていますが、SourceMapへの参照が入っています(ファイル末尾)

Zepto.js

Zepto.jsの場合、ライセンス表記は以下のように「ライセンス表記へのURLを記述する」形式になっています。



Underscore.js

Esprima


EsprimaLicense



JavaScript

grunt task

grunt-license-saver


grunt tasktext, Markdown, JavaScript, JSON

kyo-ago/grunt-license-saver

使


install

Gruntfile.jsに以下の内容を記述します。

以下のコマンドを実行します。

これで以下の様なJSを元にして

以下の様な内容のlicense.textが生成されます。



MarkdowntextJS

JavaScriptJavaScript

JavaScript hackathonHaskell@beketa