vendor/assetic/docs/ja/concepts.md
author cavaliet
Tue, 15 Nov 2011 12:27:02 +0100
changeset 31 f457dd0e7a1e
parent 0 7f95f8617b0b
permissions -rwxr-xr-x
First step to add context search to a page. Works fine but needs to be improved with several list of selectors.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
Assetic OOP APIを使用するためには、まず、[アセット」と「フィルタ」の2つの重要なコンセプトを理解する必要があります。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
### アセット
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
アセットとは、読み込み、及びダンプが可能な、コンテンツとメタデータを内包しているオブジェクトの事を指します。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
大体の場合において3つのカテゴリー、すなわち、Javascriptとスタイルシート、画像のどれかに属することになるでしょう。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
読み込みの方法としては、ファイルシステムからがほとんどですが、
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
HTTPやデータベース経由でも、文字列としてでも読み込みが可能で、事実上あらゆるものが読み込み可能です。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
Asseticのアセットインターフェースを満足させさえすれば良いのです。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
### フィルタ
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
フィルタは、アセットが読み込まれる、かつ/もしくは、ダンプされる際に、
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
アセットコンテンツに対して作用するオブジェクトです。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
アセットと同様に、Asseticのフィルタインターフェースを実装することで、
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
どのような作用も可能になります。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
フィルタを用いて、アセットに適用できるツール群の一覧です。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
 * CoffeeScript
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
 * CssEmbed
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
 * CssMin
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
 * Google Closure Compiler
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
 * jpegoptim
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
 * jpegtran
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
 * Less
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
 * LessPHP
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
 * optipng
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
 * Packager
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
 * pngout
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
 * SASS
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
 * Sprockets (version 1)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
 * Stylus
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
 * YUI Compressor
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
### アセットとフィルタの使用
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
まずはアセットオブジェクトを作成することから始まります。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
多くの場合は`FileAsset`をインスタンス化し、ファイルシステムのパスを第一引数に渡します。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
    $asset = new Assetic\Asset\FileAsset('/path/to/main.css');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
アセットオブジェクトを作成したら、`ensureFilter()`を呼び、フィルタを追加します。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
例えば、アセットコンテンツにYUI Compressorを適用してみましょう。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
    $yui = new Assetic\Filter\Yui\CssCompressorFilter('/path/to/yui.jar');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
    $asset->ensureFilter($yui);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
任意のフィルタを追加したら、完成したアセットをブラウザに出力してみましょう。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
    header('Content-Type: text/css');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
    echo $asset->dump();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
### アセットコレクション
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
1つのファイルに同じ種類のアセットをまとめて、不要なHTTPリクエストを抑えてみるのも良いでしょう。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
Asseticでは`AsseticColletion`クラスを使用することで可能となります。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
Assetic内部的には、このクラス自体は他のアセットと同様に、アセットインターフェースを実装したものですが、
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
複数のアセットを1つにまとめることが可能になります。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
    use Assetic\Asset\AssetCollection;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
    $asset = new AssetCollection(array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
        new FileAsset('/path/to/js/jquery.js'),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
        new FileAsset('/path/to/js/jquery.plugin.js'),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
        new FileAsset('/path/to/js/application.js'),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
    ));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
### ネストしたアセットコレクション
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
コレクションクラス自体がアセットインターフェースを実装し、コレクション内のアセットも同様に
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
アセットインターフェースを実装しているので、簡単にネストすることができます。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
    use Assetic\Asset\AssetCollection;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
    use Assetic\Asset\GlobAsset;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
    use Assetic\Asset\HttpAsset;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
    $asset = new AssetCollection(array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
        new HttpAsset('http://example.com/jquery.min.js'),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
        new GlobAsset('/path/to/js/*'),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
    ));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
`HttpAsset`は、HTTP経由でファイルを読み込むアセットクラス。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
`GlobAsset`は、ファイルシステムのglobを基にファイル群を読み込むアセットコレクションクラス。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
両者ともにアセットインターフェースを実装しています。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
このネストしたアセットコレクションという概念は、コレクションそれぞれに異なる
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
フィルタ群を適用しようとしたときに、効果を発揮します。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
例えば、スタイルシートがSAASで記述されたものと、vanilla CSSを用いて記述されたものからなる
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
アプリケーションを考えた場合、次のようにして、全てを1つのシームレスなCSSアセットにまとめることができます。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
    use Assetic\Asset\AssetCollection;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
    use Assetic\Asset\GlobAsset;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
    use Assetic\Filter\SassFilter;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
    use Assetic\Filter\Yui\CssCompressorFilter;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
    $css = new AssetCollection(array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
        new GlobAsset('/path/to/sass/*.sass', array(new SassFilter())),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
        new GlobAsset('/path/to/css/*.css'),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
    ), array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
        new YuiCompressorFilter('/path/to/yuicompressor.jar'),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
    ));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
上記の例では、1つにまとめられたCSSを、さらにYUI compressorフィルタを適用することで、全体を圧縮しています。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
### アセットコレクションのイテレーション
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
アセットコレクションは、旧来のPHP配列のように、イテレートできます。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
    echo "Source paths:\n";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
    foreach ($collection as $asset) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
        echo ' - '.$asset->getSourcePath()."\n";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
アセットコレクションのイテレーションは再帰的で、「葉」にあたるアセットの取得を行います。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
また、気の利いたフィルタを内蔵しているので、同じアセットがコレクション内に複数存在する場合でも、
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
一度だけのインクルードが保証されます。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
Next: [アセットを「オンザフライ」で定義する](define.md)