ミニファイ(最小化とも呼ばれる)とは、インタプリタ型プログラミング言語やマークアップ言語のソースコードから、機能を変更せずに不要な文字をすべて削除するプロセスです。これらの不要な文字には、通常、空白文字、改行文字、コメント、そして場合によってはブロック区切り文字が含まれます。これらはコードの可読性を高めるために使用されますが、実行には必須ではありません。ミニファイによってソースコードのサイズが小さくなるため、ネットワーク(インターネットなど)を介した送信がより効率的になります。プログラマー文化では、極限までミニファイされたソースコードを目指すことが、レクリエーションとしてのコードゴルフ大会の目的であり、デモシーンの一部となっています。
ミニファイ化は、より一般的なデータ圧縮の概念とは異なり、ミニファイ化されたソースは解凍の手順を必要とせずにすぐに解釈できるという点で区別されます。つまり、同じインタプリタが元のソースとミニファイ化されたソースの両方を扱うことができます。
ミニファイの目的は難読化の目的とは異なります。ミニファイは多くの場合、プリティプリンタやアンミニファイアを使用して元に戻すことを前提としています。しかし、ミニファイはその目的を達成するために、難読化でも用いられる手法、例えば変数名の短縮やソースコードのリファクタリングなどを利用することがあります。ミニファイがこのような手法を用いる場合、プリティプリンタやアンミニファイアは、これらの手法によって行われた変換の詳細が提供された場合にのみ、ミニファイ処理を完全に元に戻すことができます。これらの詳細が提供されない場合、元に戻されたソースコードは、元のソースコードと同じ機能を持つものの、変数名や制御フローが異なってしまいます。
例えば、JavaScriptコード
// これはミニファイアによって削除されるコメントですvar array = []; for ( var i = 0 ; i < 20 ; i ++ ) { array [ i ] = i ; }と同等だが、より長い
for ( var a = [], i = 0 ; i < 20 ; a [ i ] = i ++ );2001 年にDouglas Crockford がJSMin [ 1 ]を発表し、 JavaScript コードからコメントと空白を削除しました。[ 2 ] 2007 年に YUI Compressor がそれに続きました。[ 2 ] 2009 年に Google は Closure ツールキットを公開し、ソース マッピング機能を含む Closure Compiler とClosure Inspector と呼ばれるFirefox拡張機能を提供しました。 [ 3 ] 2010 年に Mihai Bazon が UglifyJS を発表し、2012 年に UglifyJS2 に置き換えられました。書き直しの目的は、ソース マップのサポートを可能にすることでした。[ 4 ] 2017 年以降、Alex Lam が UglifyJS2 のメンテナンスと開発を引き継ぎ、CLI と API を統合した UglifyJS3 に置き換えました。[ 5 ] 2018 年に Terserが uglify-es [ 6 ] [ 7 ]からフォークされ、それ以来勢いを増しています。 2020年には、1日のダウンロード数でUglifyJSを上回りました。[ 8 ] 2018年後半以降、TerserはバンドラーRollupJSを推奨しています。[ 9 ]
ソースマップとは、JavaScriptのソフトウェアツールが、コンピュータが実際に実行するコードとは異なるコードをユーザーに表示できるようにするファイル形式です。例えば、ミニファイされたコードのデバッグを支援するために、このコードを元のミニファイされていないソースコードに「マッピング」するために使用されます。
元のフォーマットは、Closure Inspector のミニファイ化プロジェクトの一環として Joseph Schorr によって作成されました。[ 10 ]フォーマットのバージョン 2 と 3 では、マップ ファイルのサイズが大幅に縮小されました。[ 10 ] 2024 年に、ソース マップはEcma InternationalのTC39技術委員会によってECMA-426として標準化されました。[ 11 ]
JavaScript およびCascading Style Sheets (CSS) リソースは、動作を維持しながらファイル サイズを大幅に削減するミニファイ化が可能です。オンラインで入手可能なライブラリは、さまざまな程度でミニファイ化と最適化を実行できます。一部のライブラリは、クライアントがダウンロードできるように、複数のスクリプト ファイルを 1 つのファイルにマージすることもできます。JavaScript ソース マップを使用すると、コードが結合およびミニファイされた後でも、コードを読みやすくデバッグしやすくすることができます。[ 12 ]
{{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)