<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>LESS &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/less/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Thu, 27 Apr 2017 03:17:57 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>LESSTESTERのアップデートと最近得た知見の話</title>
		<link>https://blog.mach3.jp/2017/04/27/lesstester-update.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Thu, 27 Apr 2017 03:17:57 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[LESS]]></category>
		<category><![CDATA[LESSTESTER]]></category>
		<category><![CDATA[Vue.js]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=4366</guid>

					<description><![CDATA[数年ぶりに LESSTESTER をアップデートしました。 何故数年放置しておきながら今になってアップデートをしたかというと、 案件等で得た経験を試す実験場としてとてもお手頃だったからです。 アップデートのきっかけ LE [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>数年ぶりに <a href="https://lesstester.com">LESSTESTER</a> をアップデートしました。 何故数年放置しておきながら今になってアップデートをしたかというと、 案件等で得た経験を試す実験場としてとてもお手頃だったからです。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-mC6ks_arBVTn88Y_pTh1StyTAXmDirNJbIZ21uxbj6k79vVxbwx3-oYrD1A4w41964fa9Ue1yo1_XHRgxfB8cc-1d9VLTRC23J2JNScPRsYB6F4uKYFsL0v_J_4srdvAXN7McTfHSme1cobaz4Li87CMrZXlSPt1P5pLh0tUpOpLNgeMbigdZGbrDHz5fq2K64CK5PWQ3FeyKBhJadLgX2youus6Vdjm6RqgXZUq6dSUJcrbBk5QFxM-No6zHW3p_8S4g8ftm80edb_yfh_Vad5Fq3e1qExDlqOkAJJ5_QzwHWFFAdGYrqZIWCgDetRf9pPVNjjaALC5xn3GR9UNyJfIByCeDA0Imtke_Lvcsur-qfraRuhs-CrJr1wDDA4cK3HcDZylqfQFblMbnFOOtArqo25e8aHoMvhVdJv9nPem5oEA3pVqOpxb0rA4DAjggbNHBUgVOPOlK44jLzd13p5Xjsz-ysdHB30oU3DBILK0LszFW_KKRG10ona3lIWtUxptsgEpLX9aQs4dQ9HLtzTb42Fi0gYphXgtPKBF4TWiX-X8PQhvfe1qVtJaCDTmbG4zo7bQlamKouwz35BuRjdHikkBmAMJQtZAe0y6p0hk7HkCR4L_c5n0Zeb-bediCQt55qffKgQFXSfbA_8gBqH65OJaJiil9f8e4tisA=w600-h315-no" alt="LESSTESTERのアップデートと最近得た知見の話"/></figure>



<p></p>



<span id="more-4366"></span>



<h2 class="wp-block-heading">アップデートのきっかけ</h2>



<p>LESSTESTERを見直すきっかけになったのは、StackOverflowで<strong>「バージョンが古い。5年前のバージョン。（意訳）」</strong>と言及されていたのを見かけた事。 実際は、Less v1.7.0が出たのが2014年2月でLESSTESTERアップデートが翌3月なので3年しか経ってない事をここに釈明しておきます。 しかし、Lessのバージョンがv2.7.2まで上がっている間ずっと放置してしまったのは反省しないといけませんね。</p>



<p>cf) <a href="https://github.com/less/less.js">https://github.com/less/less.js</a></p>



<p>本当はLessユーザーも希少な様子なので閉めようかとも考えましたが、 せっかく公式にも取り上げてもらっていた事ですし、 案件で得られた経験値を試すついでにまるっと作り直してみようと思いました。</p>



<h2 class="wp-block-heading">そして出来たもの</h2>



<figure class="wp-block-image"><a href="https://lesstester.com"><img decoding="async" src="https://lh3.googleusercontent.com/KyESuArSXskHgoeL1ZheCP7miAXafDRhBgFgroddU41q8YUGRLbwebg7febLoEB60rDpttzHSJNGkXDOfMBlWqn97eA1ulmNDMFdt0bkKMJM-l8grIdVXOXlAARz39dHetqWYxiZTXGeKZCIXF1ppd-63L5L6Ds4A89HuRCtbyg_RpGYyQ6JLbEjCIOLr_12t0N1JCpITHwW-lGD5k_5USoA7ydFsG90JdODQNwqBlMw6m4_3GPZZA9MZYKPtUelDh7549bIMfzEQuMZOgdC9BMjdZdsYaPOYd7UoeTVLGxn46_ZxmlTnTwK3HRpJKvv8RWV_kTX2-gAACvbREV-eJuj2ULjhqrSjVIgKwZZpiGjkNTHLJdiuZQfiRAFmtW4NRFwho_jizrKpGDPfyFzMXnptipXgFIEwH8ajBRqAnsGoEQAte18G_Yep5y27hRie8aNax3AlH6xgrHu73d3q8i--UJ3mIrly_fxPn7mQeBl7aVToHeANKTCZtYh6wJxc8UmyaEjP8OfS7fSiKCQ4VkC_3O8KclubKOWJ9gxZoDcAtzhFIzYKWHleMIV7g3VUFEGi13qt7ZkF5rFO4ocDt-ucglKKxQOq6g2bcb9T9U07POhEfGozWfUk9w5h8-5NrXopyeSzrtxBBfhpjMpZgx2yCejBV4rf3gwH22Cdg=w600-h450-no" alt="LESSTESTER"/></a></figure>



<p></p>



<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
https://lesstester.com
</div></figure>



<p>新しくついた機能 :</p>



<ul class="wp-block-list">
<li>ドラフトが端末に保存できるようになりました</li>



<li>Lessのバージョンを選択できるようになりました</li>



<li>キーマップに sublime が追加されました</li>



<li>リアルタイムコンパイル</li>
</ul>



<p>新しくつけようと思ったけどやめた機能 :</p>



<ul class="wp-block-list">
<li>URLでシェアする機能（理由 : コストのわりに使われ無さそう）</li>
</ul>



<p>活用した技術など :</p>



<ul class="wp-block-list">
<li>Vue.js &#8211; <a href="https://jp.vuejs.org/">https://jp.vuejs.org/</a></li>



<li>AWS S3の静的サイトホスティング</li>



<li>AWS Route53 + CloudFront でSSLに対応</li>



<li>（おまけ） さくらのメールボックス</li>
</ul>



<h2 class="wp-block-heading">感想</h2>



<p>ゼロから組み直したにしては、AWSとVue.jsが大変便利だったおかげで短時間で完成しました。</p>



<h3 class="wp-block-heading">Vue.js</h3>



<p>現在進行系で進んでいるプロジェクトで使っているのですが、 低い学習コストのわりに高機能かつ使い勝手が良く、規模問わず動的なWebアプリケーションを作るのに大変便利です。</p>



<h3 class="wp-block-heading">AWS S3</h3>



<p>言わずと知れたS3さんは便利すぎる。 もう全部これでいいんじゃないでしょうか。</p>



<h3 class="wp-block-heading">AWS Route53 + CloudFront</h3>



<p>SSL対応がこんなに簡単で安価になるとは、時代を感じます。 CloudFrontは高機能である反面、デプロイと変更の適用で結構待たされるので、いろいろな設定を試す段階ではちょっと辛い部分はありました。</p>



<p>また、今回は使っていませんが API Gateway / Lambda / RDS あたりは触る機会がどんどん増えていくのではないかなと思っています。</p>



<h3 class="wp-block-heading">さくらのメールボックス</h3>



<p>SSL対応の際にドメイン所有者の確認のためメールが送られるので、それを受け取る為に使いました。 年額1000円程度で複数ドメインを使用できるのでかなりリーズナブルです。 メールサーバの構築はなにかと面倒なので、ぜひ利用していきたい選択肢ですね。</p>



<p><a href="http://www.sakura.ne.jp/mail/">セキュリティ対策を強化したメールサーバー専用プラン【メールボックス】</a></p>



<h2 class="wp-block-heading">まとめ</h2>



<p>お買い物もホビーも開発もAmazonに依存する時代の到来です。 それぞれのリソースについては時間があれば追って使い方などを記事にまとめておきたいところです。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>LESSTESTER のリニューアルと日本におけるLESS</title>
		<link>https://blog.mach3.jp/2014/03/10/renewal-lesstester.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 10 Mar 2014 08:59:22 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[LESS]]></category>
		<category><![CDATA[LESSTESTER]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3830</guid>

					<description><![CDATA[先日、LESS の 1.7.0 がリリースされたそうなので、勢いだけで LESSTESTER をリニューアルしてしまいました。 LESSTESTER リニューアル LESSTESTER &#8211; Test Your [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>先日、<a href="http://lesscss.org">LESS</a> の 1.7.0 がリリースされたそうなので、勢いだけで LESSTESTER をリニューアルしてしまいました。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-WdI2STy2dYE/Ux19gFxAJrI/AAAAAAAACdo/oWVC9MvC4vY/s400/2014-0310-00.png" alt="LESSTESTER"/></figure>



<p></p>



<span id="more-3830"></span>



<h2 class="wp-block-heading">LESSTESTER リニューアル</h2>



<h3 class="wp-block-heading"><a href="http://lesstester.com">LESSTESTER &#8211; Test Your LESS Code.</a></h3>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-OaWu6T14JeQ/Ux19gMI0rhI/AAAAAAAACdo/eJiy4kUreho/s500/2014-0310-01.png" alt="LESSTESTER"/></figure>



<p><a href="http://lesstester.com">  </a></p>



<p>自前のライブラリの試験運用を兼ねてまっさらな状態から作りなおしました。 機能的にはそんなにかわりはないですが、いくつか変更点がございます。</p>



<ul class="wp-block-list">
<li>英語にしちゃいました</li>



<li>HELP はなくしました（オフィシャルのドキュメントを参考にしましょう）</li>



<li>Vim にくわえて Emacs キーバインドを追加する事で宗教戦争を緩和する狙い</li>



<li>localStorage で設定やら入力内容を保持するようにしています</li>
</ul>



<p>こんなものをレガシーな環境で使う人はほとんどいらっしゃらないと思うので、 そこらへんは切って制作しています。</p>



<p>英語にした理由は、アクセスのほとんどが英語圏からの物である為と、複数言語対応にする程の内容がないからです。 以前どこかの記事で紹介された際に「英語サイト」と書かれたりしていたぐらいなのでさして影響もないでしょう。</p>



<h2 class="wp-block-heading">日本と海外におけるLESS</h2>



<p>LESSTESTER への日本からの訪問者はあまり多くはありません。 そもそもただのテスターなので分母自体も少ない上に、英語圏の広さに対する日本の狭さもあるわけですが、 アクセスを言語・地域で調べてみるとこのような感じになりました。</p>



<h3 class="wp-block-heading">言語別（上位5）</h3>



<ol class="wp-block-list">
<li>英語 : 57.23%</li>



<li>ロシア語 : 4.98%</li>



<li>フランス語 : 4.27%</li>



<li>日本語 : 4.16%</li>



<li>ポルトガル語 : 3.18%</li>
</ol>



<h3 class="wp-block-heading">地域別（上位5）</h3>



<ol class="wp-block-list">
<li>アメリカ : 13.11%</li>



<li>インド : 11.09%</li>



<li>イギリス : 5.99%</li>



<li>日本 : 5.24%</li>



<li>カナダ : 5.17%</li>
</ol>



<p>また、先日 LESSTESTER を辿ってUKからメールでお問い合わせを頂きました。（LESSはあまり関係のない用件でしたが） そこで話をする限り、どうやら日本と英語圏で LESS の普及率や人気は結構違うという印象を受けました。</p>



<p>昨今の日本では Sass が人気ですね。書籍も出ていてブログ記事にも頻繁に取り上げられ、勉強会のテーマにもなっています。 対して LESS はどうかというと、言及する人自体自分以外に周りにほとんど見かけません。 しかし海外の投稿などを拝見すると、Sassに負けじとしっかり紹介されていて、Twitter Bootstrap ではベースとして採用されていたりします。</p>



<p>なんとなく一昔前の Movable Type と WordPress を思い出す現象ですね。 現在のWordPressほどに台頭してくるとまでは考えていませんが、 将来的に LESS の普及率が上がる余地はきっとまだあるでしょう。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>&#034;LESS&#034; &#8211; Alphabetical Advent Calendar 2013</title>
		<link>https://blog.mach3.jp/2013/12/11/jaac2013-l-less.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Wed, 11 Dec 2013 01:27:25 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Advent Calendar 2013]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[LESS]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3712</guid>

					<description><![CDATA[&#8220;L&#8221; は LESS の &#8220;L&#8221;。 LESS LESS は Sass や Stylus 等と並び称されるCSSのメタ言語です。 くだいて言うと、スタイルシートをもっと楽に効 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>&#8220;L&#8221; は LESS の &#8220;L&#8221;。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-5LlEB1W9KmU/UqR4i3owvvI/AAAAAAAACYg/1PGmnif8Gvg/s400/ac2013-l.png" alt="L"/></figure>



<p></p>



<span id="more-3712"></span>



<h2 class="wp-block-heading">LESS</h2>



<p><strong>LESS</strong> は <strong>Sass</strong> や <strong>Stylus</strong> 等と並び称されるCSSのメタ言語です。 くだいて言うと、スタイルシートをもっと楽に効率よく書くために開発されたツールです。 三者の中では Sass が筆頭で使われていて、LESS と Stylus がそれに続く印象です。</p>



<p>私の知る限りでは、元々 LESS は Sass と同じく Ruby ベースで開発されていましたが、 並行して開発された LESS.js の方が主流となって JavaScript ベースで開発されるようになり、 現在に至っています。</p>



<h3 class="wp-block-heading">LESS 記法の基本</h3>



<p>上に挙げたメタ言語ではおそらくどれでも共通している機能ですが、</p>



<ul class="wp-block-list">
<li>セレクタを入れ子に出来る</li>



<li>変数が使える</li>



<li>ミックスイン（関数のようなもの）が使える</li>
</ul>



<p>これらの機能を把握しておくだけで、スタイルシートのコーディングが効率化出来るでしょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">// 変数</span>
@color-black: <span class="hljs-comment">#000;</span>
@color-red: <span class="hljs-comment">#c00;</span>

<span class="hljs-comment">// ミックスイン</span>
.mx-box (@bg-color: <span class="hljs-comment">#eee, @radius: 10px){</span>
    background-color: @bg-color;
    border-radius: @radius;
    padding: @radius;
}

<span class="hljs-comment">// セレクタの入れ子</span>
.container {
    .box {
        &amp;.black {
            <span class="hljs-comment">// ミックスインと変数の呼び出し</span>
            .mx-box(@color-black, <span class="hljs-number">8</span>px);
        }
        &amp;.red {
            .mx-box(@color-red, <span class="hljs-number">8</span>px);
        }
    }
}
</code></span></pre>


<p>上のコードを LESS でコンパイルすると、次のようなコードが出力されます。 （拙作ですが、<a href="http://lesstester.com">LESStester.com</a> を使ってオンラインで出力のテストが出来ます）</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-class">.container</span> <span class="hljs-selector-class">.box</span><span class="hljs-selector-class">.black</span> {
    <span class="hljs-attribute">background-color</span>: <span class="hljs-number">#000</span>;
    <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">8px</span>;
    <span class="hljs-attribute">padding</span>: <span class="hljs-number">8px</span>;
}

<span class="hljs-selector-class">.container</span> <span class="hljs-selector-class">.box</span><span class="hljs-selector-class">.red</span> {
    <span class="hljs-attribute">background-color</span>: <span class="hljs-number">#c00</span>;
    <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">8px</span>;
    <span class="hljs-attribute">padding</span>: <span class="hljs-number">8px</span>;
}
</code></span></pre>


<p>残念ながら、この例のコードはあまりに短い為にメタ言語の魅力を十分に伝えきれません。 「単にCSSが長くなっただけじゃないか」と思われる方もいらっしゃるかもしれません。</p>



<p>しかし例えば、似たパーツのバリエーションを多数作らなければいけなかったり、 複雑な子孫関係を持ったセレクタを延々と書かなければならないスタイルシートでは、どうでしょうか。 また、スタイルシートを書いた人の思考は、どちらによりよく反映されるでしょうか。 共有して作業しやすいのは、どちらでしょうか。</p>



<p>コードの行数よりも、調整やメンテナンスの効率で大きな違いが出てくる未来が想像できます。</p>



<h2 class="wp-block-heading">LESS の魅力</h2>



<p>こうしたツールはやはりマジョリティに依りたくなるのが当然です。 機能面でも、歴史があって柔軟かつ多彩な Sass に叶わない部分は多くみられますが、 LESS にも優れている所は勿論あるのです。</p>



<h3 class="wp-block-heading">JavaScript ベースであること</h3>



<p>全て JavaScript で書かれている為、クライアントサイドで動かすことができます。 実際の開発ではコンパイル済みのCSSに差し替えた方が良いと思いますが、 少し何かを試したい場合などには便利ですね。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">"stylesheet/less"</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"style.less"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"less.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>また、JavaScript ベースだということは、 近年流行にのっている <a href="http://gruntjs.com/">Grunt</a> との相性も良いという事です。</p>



<p>Grunt では Sass / LESS / Stylus 共にコンパイルするプラグインが公式に提供されています。 JSベースである LESS / Stylus は npm でプラグインをインストールすればすぐ使えるようになりますが、 Sass は別途 ruby と sass をインストールしておく必要があります。</p>



<p>また当然、Sass は外部コマンドを node.js から呼ばなければならないので、 どうしてもコンパイルの効率が落ちてしまいます。</p>



<h3 class="wp-block-heading">CSS離れをしない記法であること</h3>



<p>これが LESS を推したい一番の理由なのですが、LESS の記法は他の二者に比べると生のCSSにかなり近い形になっています。 例えば、基本的なミックスイン（関数のようなもの）を LESS で書くとこうなります。</p>


<pre class="wp-block-code"><span><code class="hljs">.border-radius(@radius:10px) {
  -webkit-border-radius: @radius;
     -moz-border-radius: @radius;
          border-radius: @radius;
}
.box { .border-radius(20px); }
</code></span></pre>


<p>CSS でクラスを定義するのとあまり変わりませんね。</p>



<p>「CSS離れをしない」という事は反面、Sass が持つような 条件分岐やループなどの強力な機能を実装しないという事になりますが、 学習コストを抑えられるという点ではメリットになります。</p>



<p>CSSの素養のある方なら誰でもそのコードを理解する事ができ、使いこなすようになるのにさして時間を要しません。</p>



<h3 class="wp-block-heading">Bootstrap は LESS ベースです</h3>



<p>Twitter からリリースされている <a href="http://getbootstrap.com/">Bootstrap</a> は LESS で開発されており、 プロジェクトに Bootstrap を組み込む際には単純にCSSを読み込む他に LESS ファイルを利用する方法があります。</p>



<p>必要なモジュールだけを読み込んだり、変数を書き換えて見た目を調整したりする事ができるほか、 便利なミックスインも多数提供されています。 LESS で設計する際の教材としてみても良いかもしれませんね。</p>



<p>（なお、Bootstrap の Sass 版はサードパーティで公開されている方がいます）</p>



<h2 class="wp-block-heading">注目すべき LESS の機能</h2>



<p>最近になって実装された機能や、おすすめしたい要素等を少しご紹介します。</p>



<h3 class="wp-block-heading">ミックスイン</h3>



<p>ごく基本的な機能ですが、先に紹介した通り LESS のミックスインは非常にシンプルな作りになっています。</p>


<pre class="wp-block-code"><span><code class="hljs">.inline-block(){
    display: inline-block;
    *display: inline;
    *zoom: 1;
}
.test {
    .inline-block();
}
</code></span></pre>


<p>引数を受け取る為の &#8220;()&#8221; 以外は CSS のクラスと変わらない記法です。 さらに、通常の CSS クラスもミックスインとして使用する事ができます。</p>


<pre class="wp-block-code"><span><code class="hljs">.inline-block { ... }
.test {
    .inline-block();
}
</code></span></pre>


<p>上の2つのコードの違いは <strong>&#8220;()&#8221;</strong> の有無ですが、 これが記述されていない場合は通常の CSS クラスとして認識され、それ自身もコンパイル時に出力されます。 &#8220;()&#8221; が記述されていた場合はミックスインとして解釈される為、CSS のコードには出力されません。</p>



<h3 class="wp-block-heading">名前空間</h3>



<p>LESS のミックスインは <strong>名前空間</strong> をサポートしています。 多階層のミックスインを定義し、<strong>&#8220;&gt;&#8221;</strong> で辿る事で呼び出すことができます。</p>


<pre class="wp-block-code"><span><code class="hljs">.font-size (){
    .large (){ font-size: 1.5em; }
    .normal (){ font-size: 1em; }
    .small (){ font-size: 0.8em; }
}
.test {
    .font-size &gt; .large();
}
</code></span></pre>


<p>このコードは次のように出力されます。</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-class">.test</span>{<span class="hljs-attribute">font-size</span>:<span class="hljs-number">1.5em</span>}
</code></span></pre>


<p>ミックスインの名前による衝突をさけたり、LESS ベースのフレームワークを作るときなどに便利そうです。</p>



<h3 class="wp-block-heading">extend</h3>



<p>LESS 1.4 からサポートされたこの機能は、 元々 Sass で実装されていた <strong>extend</strong> を便利に感じた <a href="http://twitter.com/hokaccha">@hokaccha</a> 氏が <a href="http://d.hatena.ne.jp/hokaccha/20111214/1323821463">プルリクエストを送った</a>のが発端になったのだと思われます。 長いディスカッションの末、次のような形に落ち着いた模様です。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">.box {
    background-color: <span class="hljs-comment">#eee;</span>
    border-radius: <span class="hljs-number">.5</span>em;
    padding: <span class="hljs-number">1</span>em;
}
.foo {
    &amp;:extend(.box);
    color: <span class="hljs-comment">#333;</span>
}
.bar {
    &amp;:extend(.box);
    color: <span class="hljs-comment">#00c;</span>
}
</code></span></pre>


<p><strong>&amp;:extend( selector )</strong> とする事で対象のスタイルを受け継ぐ事ができます。 普通のミックスインと違うのは出力の仕方です。 ミックスインの場合は &#8220;.box&#8221; の中身がそのままそこに展開されますが、 extend は巻き上げてグループ化して定義します。</p>



<p>上のコードは次のように出力されます。 最終的なコード量がかなり節約されますね。</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-class">.box</span>,<span class="hljs-selector-class">.foo</span>,<span class="hljs-selector-class">.bar</span>{<span class="hljs-attribute">background-color</span>:<span class="hljs-number">#eee</span>;<span class="hljs-attribute">border-radius</span>:.<span class="hljs-number">5em</span>;<span class="hljs-attribute">padding</span>:<span class="hljs-number">1em</span>}
<span class="hljs-selector-class">.foo</span>{<span class="hljs-attribute">color</span>:<span class="hljs-number">#333</span>}
<span class="hljs-selector-class">.bar</span>{<span class="hljs-attribute">color</span>:<span class="hljs-number">#00c</span>}
</code></span></pre>


<h3 class="wp-block-heading">多彩なインポート</h3>



<p>外部 CSS をインポートする <strong>@import</strong> ですが、LESS では書き方によって特別な働きをします。</p>



<ul class="wp-block-list">
<li><strong>&#8220;*.css&#8221;</strong> をインポートすると @import 文のまま残す</li>



<li><strong>&#8220;*.less&#8221;</strong> をインポートすると、LESS で展開した結果をインポートする</li>



<li><strong>&#8220;*.less&#8221;</strong> の場合は拡張子を省略する事ができる</li>
</ul>



<p>これが基本的なルールですが、 1.4 から <strong>@import (less) &#8220;style.css&#8221;</strong> のように 明示的に展開させる事が出来るようになりました。 現在開発中の 1.5 からは <strong>(inline)</strong> も使えるようになるようです。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-comment">// @import 文がそのまま残ります</span>
@<span class="hljs-keyword">import</span> <span class="hljs-string">"style.css"</span>;

<span class="hljs-comment">// LESS でコンパイルされた結果がその場に展開されます。</span>
<span class="hljs-comment">// 拡張子を省略した場合は補完されます。</span>
@<span class="hljs-keyword">import</span> <span class="hljs-string">"style.less"</span>;
@<span class="hljs-keyword">import</span> <span class="hljs-string">"style"</span>;

<span class="hljs-comment">// (1.4~) 明示的にless|cssファイルとして処理する</span>
@<span class="hljs-keyword">import</span> (less) <span class="hljs-string">"style.css"</span>;
@<span class="hljs-keyword">import</span> (css) <span class="hljs-string">"style.css"</span>;

<span class="hljs-comment">// (1.5~) CSSファイルをその場に展開します</span>
@<span class="hljs-keyword">import</span> (inline) <span class="hljs-string">"style.css"</span>;
</code></span></pre>


<h2 class="wp-block-heading">参考資料</h2>



<ul class="wp-block-list">
<li><a href="http://lesscss.org/">LESS « The Dynamic Stylesheet language</a></li>



<li><a href="http://lesstester.com/">LESSTESTER &#8211; Online Compiler fo LESS CSS</a></li>



<li><a href="http://getbootstrap.com/">Bootstrap</a></li>
</ul>



<dl>
<dt>2014/1/10</dt>
<dd>Less の表記を LESS に統一しました。</dd>
</dl>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>コーダーさんの為のGrunt入門（後編）〜CSSプリコンパイラ編</title>
		<link>https://blog.mach3.jp/2013/03/26/gruntjs-css.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 26 Mar 2013 01:28:16 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Grunt.js]]></category>
		<category><![CDATA[LESS]]></category>
		<category><![CDATA[Sass]]></category>
		<category><![CDATA[Stylus]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3066</guid>

					<description><![CDATA[前編の導入編 に続いて、 コーダーさんにとって強力な武器である、Less/Sass/Stylus等のCSSプリコンパイラのコンパイルを Gruntにお任せしてみる方法を紹介していきます。 Less/Sass/Stylus [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="/2013/03/gruntjs.html">前編の導入編</a> に続いて、 コーダーさんにとって強力な武器である、Less/Sass/Stylus等のCSSプリコンパイラのコンパイルを Gruntにお任せしてみる方法を紹介していきます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-InKstkN_iLo/UUl5hpVLk2I/AAAAAAAACAg/zGNCjzkb8f0/s400/20120320-00.png" alt="コーダーさんの為のGrunt入門（後編）〜CSSプリコンパイラ編"/></figure>



<p></p>



<span id="more-3066"></span>



<h2 class="wp-block-heading">Less/Sass/Stylus をGruntでコンパイルする</h2>



<p>ではさっそく、GruntでCSSプリコンパイラを扱うタスクを紹介します。</p>



<ul class="wp-block-list">
<li><a href="https://github.com/gruntjs/grunt-contrib-less">grunt-contrib-less</a> &#8211; LessをCSSにコンパイルします</li>



<li><a href="https://github.com/gruntjs/grunt-contrib-sass">grunt-contrib-sass</a> &#8211; SassをCSSにコンパイルします</li>



<li><a href="https://github.com/gruntjs/grunt-contrib-stylus">grunt-contrib-stylus</a> &#8211; StylusをCSSにコンパイルします</li>
</ul>



<p>指定できるオプションは異なりますが、設定の仕方に差はありません。</p>



<p>違いを挙げるならば、Less/StylusはJavaScriptで書かれているのでnode.js上で動作させられますが、 RubyベースのSassは外部のsassコマンドを呼び出す仕組みになっており、別途インストールが必要です。 結果、Gruntとより相性が良いのはLess/Stylusであると言えますね。</p>



<p>ここでは、私の好きなLessを例にあげてみます。</p>



<h2 class="wp-block-heading">Lessをコンパイルする（grunt-contrib-less）</h2>



<h3 class="wp-block-heading">基本設定</h3>



<p>まず &#8220;grunt-contrib-less&#8221; をインストールしておきます。</p>


<pre class="wp-block-code"><span><code class="hljs">$ npm install grunt-contrib-less
</code></span></pre>


<p>Gruntfile.js の内容は、例えば次のようになります。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-built_in">module</span>.exports = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">grunt</span>)</span>{

    <span class="hljs-comment">// grunt-contrib-less タスクの読み込み</span>
    grunt.loadNpmTasks(<span class="hljs-string">"grunt-contrib-less"</span>);

    grunt.initConfig({
        <span class="hljs-attr">less</span> : {
            <span class="hljs-comment">// 作業のラベルは"dist"にしてみます</span>
            <span class="hljs-attr">dist</span> : {
                <span class="hljs-comment">// オプションの指定</span>
                <span class="hljs-attr">options</span> : {
                    <span class="hljs-attr">compress</span> : <span class="hljs-literal">true</span>
                },
                <span class="hljs-comment">// コンパイルするファイルの指定</span>
                <span class="hljs-attr">files</span> : {
                    <span class="hljs-string">"./assets/css/style.css"</span> : <span class="hljs-string">"./assets/less/style.less"</span>
                }
            }
        }
    });
};
</code></span></pre>


<p>※ 基本的なタスクの書き方については <a href="/2013/03/gruntjs.html">前編</a> にて</p>



<p><em>&#8220;options&#8221;</em>セクションでオプションの設定を行い、 <em>&#8220;files&#8221;</em>セクションで出力するファイルの指定を行います。</p>



<p><em>&#8220;files&#8221;</em>のキー（左辺）には出力先のCSSファイル、値（右辺）には元となるLessファイルへのパスを指定してください。 上の例では、 &#8220;./assets/less/style.less&#8221; がコンパイルされた結果が、&#8221;./assets/css/style.css&#8221; に保存されます。</p>



<h3 class="wp-block-heading">実行</h3>


<pre class="wp-block-code"><span><code class="hljs">$ grunt less:dist
</code></span></pre>


<h3 class="wp-block-heading">オプション</h3>



<p>多く使われるであろうオプションは次の物でしょう。</p>



<ul class="wp-block-list">
<li><em>compress</em> : Boolean (false) &#8211; 空白などを除去して圧縮します</li>



<li><em>yuicompress</em> : Boolean (false) &#8211; cssmin.js（YUICompressorのJS版）で圧縮します</li>
</ul>



<p>その他のオプションについては <a href="https://github.com/gruntjs/grunt-contrib-less">grunt-contrib-lessのREADME</a> を参照してください。</p>



<h2 class="wp-block-heading">ファイルの更新を検知してコンパイルする（grunt-contrib-watch）</h2>



<h3 class="wp-block-heading">基本設定</h3>



<p>多くのコンパイラにも実装されているファイル監視機能ですが、 Gruntでも <a href="http://github.com/gruntjs/grunt-contrib-watch">grunt-contrib-watch</a> というプラグインとして提供されています。</p>


<pre class="wp-block-code"><span><code class="hljs">npm install grunt-contrib-watch
</code></span></pre>


<p>先ほどのLessのタスクを、ファイルを監視して実行してみます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-built_in">module</span>.exports = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">grunt</span>)</span>{
    grunt.loadNpmTasks(<span class="hljs-string">"grunt-contrib-less"</span>);
    grunt.loadNpmTasks(<span class="hljs-string">"grunt-contrib-watch"</span>);

    grunt.initConfig({
        <span class="hljs-attr">less</span> : {
            <span class="hljs-attr">dist</span> : { ... }
        },
        <span class="hljs-attr">watch</span> : {
            <span class="hljs-comment">// ラベルは"less"にしてみます</span>
            <span class="hljs-attr">less</span> : {
                <span class="hljs-comment">// "files"セクションで監視するファイルの条件を指定</span>
                <span class="hljs-attr">files</span> : &#91;
                    <span class="hljs-string">"./assets/less/*.less"</span>
                ],
                <span class="hljs-comment">// "tasks"セクションで実行するタスクを指定</span>
                <span class="hljs-attr">tasks</span> : &#91;
                    <span class="hljs-string">"less:dist"</span>
                ]
            }
        }
    });
};
</code></span></pre>


<p><em>&#8220;files&#8221;</em>セクションで監視するファイルの条件を設定します。 そして<em>&#8220;tasks&#8221;</em>セクションで、<em>&#8220;files&#8221;</em>のファイルが更新された場合に実行するタスクを設定します。</p>



<p><em>&#8220;files&#8221;</em>の値には、直接ファイル名を指定する他にパターンマッチングを使用する事ができ、特定ファイルの除外などの細かい設定が可能です。 詳細は公式ドキュメントにあるのでご参照ください。</p>



<p>cf) <a href="http://gruntjs.com/configuring-tasks#globbing-patterns">Globbing patterns | Configuring tasks &#8211; Grunt: The JavaScript Task Runner</a></p>



<h3 class="wp-block-heading">実行</h3>



<p>監視を開始するとターミナルは待機状態になります。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$ grunt watch:less
Running <span class="hljs-string">"watch:less"</span> task
Waiting...
</code></span></pre>


<p>&#8220;./assets/less/&#8221; にあるLessファイルを更新すると、自動的に &#8220;less:dist&#8221; タスクを実行する様になります。</p>



<h3 class="wp-block-heading">livereload もある？</h3>



<p>私は使ったことがありませんが、livereload（ファイル更新を検知してブラウザをリロードする）を実現するプラグインもあるようです。</p>



<ul class="wp-block-list">
<li><a href="https://github.com/gruntjs/grunt-contrib-livereload">gruntjs/grunt-contrib-livereload · GitHub</a></li>
</ul>



<p>ここでは説明を省きますが、このプラグインは上で挙げた <em>&#8220;grunt-contrib-watch&#8221;</em> ではなく <a href="https://github.com/yeoman/grunt-regarde">&#8220;grunt-regarde&#8221;</a> の使用が推奨されるようです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Note that grunt-contrib-livereload is designed to use grunt-regarde instead grunt-contrib-watch (mainly due to shortcomings in the watch task which doesn&#8217;t give access to changed files because it spawns tasks in subprocesses.)</p>
</blockquote>



<h2 class="wp-block-heading">GUIコンパイラでいいんじゃないの？</h2>



<p>非常にもっともなご意見です。</p>



<p>本記事で挙げたCSSプリコンパイラの事例に限って言えば、 <a href="http://compass.handlino.com/">Compass</a>、<a href="http://incident57.com/codekit/">CodeKit</a>や<a href="http://incident57.com/less/">Less.app</a>等、優秀なGUIコンパイラが数多くリリースされているので、 「黒い画面」が苦手な方は無理して導入する事もないと思います。</p>



<p>ただ、GUIコンパイラに対するGruntの優位点を挙げるとすれば、 環境を跨いでの設定の共有が極めて容易な点かな、と思っています。 nodeが動く環境ならばOS問わずどこでも同じ設定ファイルで、コマンド一発で同じ事が出来るわけです。</p>



<p><a href="/2013/03/gruntjs.html">前編</a>で触れたGruntの魅力に興味を持たれたならば、 これを機に「黒い画面」とのお付き合いを始めてみても良いのではないでしょうか。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>そんなわけで、最近ではGitとGruntとBowerのセットで制作を進めています。</p>



<p>これらの優秀なソフトウェアの開発者には足をむけて寝られませんが、 オープンソース故に多方面にいらっしゃるわけで、逆立ちして寝るしかなさそうです。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ドラッグドロップに対応したLessのGUIコンパイラ「WinLess」</title>
		<link>https://blog.mach3.jp/2012/04/05/winless.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Wed, 04 Apr 2012 16:20:51 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Compiler]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[LESS]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2352</guid>

					<description><![CDATA[WindowsのLessコンパイラといえばLessParserの記事を書きましたが、 個人的にはさらに使い勝手の良いGUIコンパイラが見つかったのでご紹介します。 WinLess 公式サイト : WinLess &#82 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>WindowsのLessコンパイラといえば<a href="/2011/11/lessparser.html">LessParserの記事</a>を書きましたが、<br />
個人的にはさらに使い勝手の良いGUIコンパイラが見つかったのでご紹介します。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-wiRFLLeF8dY/T3xvbqUMmMI/AAAAAAAABe8/My0zYsJUV4U/s400/20120405-01.png" alt="WinLess"/></figure>



<p></p>



<span id="more-2352"></span>



<h2 class="wp-block-heading">WinLess</h2>



<p>公式サイト : <a href="http://winless.org/">WinLess &#8211; Windows GUI for less.js</a></p>



<p>MacではLess.appをはじめとして、UIが優秀なコンパイラが複数あるようですが、<br />
Windowsはまだコレ！という物に出会えていませんでした。が、これはかなり良いです。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-2edseKKNefI/T3xvbrMsrfI/AAAAAAAABe8/zAXVKlVVmJ8/s500/20120405-02.png" alt="WinLess Webサイト"/></figure>



<p></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>WinLess is a Windows GUI for LESS.js. WinLess is a must-have for the webdeveloper who uses Windows.</p>
</blockquote>



<p>先日記事にしたLessParserはLess.appの模倣をうたっているだけあって確かに似ていましたが、<br />
個人的に欲しい機能である、「フォルダのドラッグドロップ登録」が出来ませんでした。</p>



<p>WinLessはそのドラッグドロップ登録に対応している他、</p>



<ul class="wp-block-list">
<li>通知メッセージの表示</li>



<li>デフォルトで「Minify」をチェック</li>
</ul>



<p>などの設定項目があり、親切です。</p>



<h2 class="wp-block-heading">アプリケーション画面</h2>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/-Xr3EGJxbZnI/T3xvbtlqSuI/AAAAAAAABe8/DRAc4GBqlDA/s499/20120405-03.png" alt="WinLess アプリ画面"/></figure>



<p></p>



<p>こんな感じになっていて、基本的にはLess.app（LessParser）と操作法はかわりません。<br />
File &gt; Settings で設定を変更できます。</p>



<p>現行バージョンの設定項目は以下の通り。<br />
（本稿執筆時のバージョンは1.5.2）</p>



<h3 class="wp-block-heading">General</h3>



<ul class="wp-block-list">
<li>Start with Windows</li>



<li>Start minimized</li>
</ul>



<h3 class="wp-block-heading">Compiling</h3>



<ul class="wp-block-list">
<li>Minify by default</li>



<li>Automatically compile files when saved</li>



<li>Show message on successful compile</li>
</ul>



<p>通知メッセージをONにすると、<br />
タスクバーのアイコン付近にポップアップでメッセージが表示されます。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>概ねLessParserで満足していたのですが、<br />
唯一物足りなかったドラッグドロップに対応するコンパイラが出てきてくれて、<br />
きっとLessniumも思い残す事はないでしょう…。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>LessにおけるMixin活用法</title>
		<link>https://blog.mach3.jp/2011/12/15/how-to-use-mixin-of-less.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Thu, 15 Dec 2011 01:08:54 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Advent Calendar 2011]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[LESS]]></category>
		<category><![CDATA[Sass]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2174</guid>

					<description><![CDATA[Less &#38; Sass Advent calendar 2011 の15日目です！ 今日はLessにおけるMixInの活用法について書いてみようと思います。 LessのMixinについて LessにおけるMixi [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="http://atnd.org/events/21919">Less &amp; Sass Advent calendar 2011</a> の15日目です！<br />
今日はLessにおけるMixInの活用法について書いてみようと思います。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-sCFbH4aDvWI/TubnZSOUsZI/AAAAAAAABa4/4EOC8L9YsbY/s400/20111215.png" alt="LessにおけるMixin活用法"/></figure>



<p></p>



<span id="more-2174"></span>



<h2 class="wp-block-heading">LessのMixinについて</h2>



<p>LessにおけるMixinというのは、簡単に言うと関数のようなもので、<br />
どこかで宣言しておけば、セレクタの中で呼び出すことが出来、<br />
結果としてその中身がセレクタ内に展開されます。</p>



<p>ごちゃごちゃとわかりづらいので、公式の例を拝借します。</p>


<pre class="wp-block-code"><span><code class="hljs">.rounded-corners (@radius: 5px) {
    border-radius: @radius;
    -webkit-border-radius: @radius;
    -moz-border-radius: @radius;
}
</code></span></pre>


<p>こんな感じに宣言しておきます。()の中身は引数と初期値です。<br />
セレクタ内で呼び出すときは…</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">#header {</span>
    .rounded-corners;
}
<span class="hljs-comment">#footer {</span>
    .rounded-corners( <span class="hljs-number">10</span>px );
}
</code></span></pre>


<p>こんな感じで呼び出すと、それぞれ展開されて下のコードのようになります。</p>



<p>&#8220;#header&#8221;の方は引数を渡していないので、初期値の5pxが適用されています。</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-comment">/* 出力結果 */</span>
<span class="hljs-selector-id">#header</span> {
    <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">5px</span>;
    <span class="hljs-attribute">-webkit-border-radius</span>: <span class="hljs-number">5px</span>;
    <span class="hljs-attribute">-moz-border-radius</span>: <span class="hljs-number">5px</span>;
}
<span class="hljs-selector-id">#footer</span> {
    <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">10px</span>;
    <span class="hljs-attribute">-webkit-border-radius</span>: <span class="hljs-number">10px</span>;
    <span class="hljs-attribute">-moz-border-radius</span>: <span class="hljs-number">10px</span>;
}
</code></span></pre>


<h2 class="wp-block-heading">SassのMixinとの違い</h2>



<p>SassとLessの記法は非常に良く似ていますが、<br />
大きく異なる点として、変数の記号（@ではなく$）と、<br />
Mixinの書き方があげられます。</p>



<p>前述の例をSCSSで書くと、こんな感じになると思います。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">@mixin rounded-corners( $radius:<span class="hljs-number">5</span>px ){
    border-radius: $radius;
    -webkit-border-radius: $radius;
    -moz-border-radius: $radius;
    border-radius:$radius;
}

<span class="hljs-comment">#header {</span>
    @<span class="hljs-keyword">include</span> rounded-corners;
}
<span class="hljs-comment">#footer {</span>
    @<span class="hljs-keyword">include</span> rounded-corners( <span class="hljs-number">10</span>px );
}
</code></span></pre>


<p>Lessが通常のCSSクラスの記法と酷似しているのに対し、<br />
Sassの記法は、一発でMixinとわかるような書き方になっていますね。<br />
可読性の点ではSassの方に軍配があがりそうですが、<br />
この記法はLessの長所の一つでもあります。</p>



<h2 class="wp-block-heading">CSSクラスもMixinとして使える</h2>



<p>LessのMixinはCSSクラスと似ているだけではなく、<br />
普通のCSSクラスもMixinとして使用する事ができます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">// 普通のCSSクラス</span>
.hoge {
    background-color:<span class="hljs-comment">#333;</span>
    color:<span class="hljs-comment">#fff;</span>
}
.fuga {
    .hoge;
    font-weight:bold;
}
</code></span></pre>


<h3 class="wp-block-heading">出力結果</h3>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-class">.hoge</span> {
    <span class="hljs-attribute">background-color</span>:<span class="hljs-number">#333</span>;
    <span class="hljs-attribute">color</span>:<span class="hljs-number">#fff</span>;
}

<span class="hljs-selector-class">.fuga</span> {
    <span class="hljs-attribute">background-color</span>:<span class="hljs-number">#333</span>;
    <span class="hljs-attribute">color</span>:<span class="hljs-number">#fff</span>;
    <span class="hljs-attribute">font-weight</span>:bold;
}
</code></span></pre>


<p>特別な記述をしなくても、簡単にプロパティを継承出来てしまうわけですね。<br />
これは楽です。</p>



<h2 class="wp-block-heading">Mixinで多重継承する</h2>



<p>この仕組みは、OOCSSの様な作り方をCSSだけで行いたい場合に役立ちます。</p>



<h3 class="wp-block-heading">従来の書き方</h3>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-class">.box</span> {
    <span class="hljs-attribute">padding</span>:<span class="hljs-number">10px</span>;
    <span class="hljs-attribute">margin</span>:<span class="hljs-number">10px</span>;
}
<span class="hljs-selector-class">.dark</span> {
    <span class="hljs-attribute">background-color</span>:<span class="hljs-number">#111</span>;
    <span class="hljs-attribute">color</span>:<span class="hljs-number">#fff</span>;
}
<span class="hljs-selector-class">.rounded-corners</span> {
    <span class="hljs-attribute">-moz-border-radius</span>:<span class="hljs-number">5px</span>;
    <span class="hljs-attribute">-webkit-border-radius</span>:<span class="hljs-number">5px</span>;
    <span class="hljs-attribute">border-radius</span>:<span class="hljs-number">5px</span>;
}
</code></span></pre>


<p>例えばこのコードで黒くて角丸なボックスを要素に適用したい場合、<br />
次のようなHTMLになると思います。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"box dark rounded-corners"</span>&gt;</span>
    ...
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></span></pre>


<h3 class="wp-block-heading">Mixinによる継承</h3>



<p>ここでLessのMixinを使用して、一つ記述を書き足してみます。</p>


<pre class="wp-block-code"><span><code class="hljs">.mybox {
    .box;
    .dark;
    .roudned-corners;
}
</code></span></pre>


<p>こうすることにより、divにあてがうクラスはよりシンプルになります。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"mybox"</span>&gt;</span>
    ...
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></span></pre>


<p>オブジェクト指向的なCSSを書きたいけど、HTMLはスッキリさせたい。<br />
そんなケースによさそうです。</p>



<h3 class="wp-block-heading">デメリット</h3>



<p>HTMLはスッキリしますが、出力されるCSSはそうはいきません。<br />
（誰が見るわけでもないかもしれませんが）</p>



<p>呼び出される都度、何度でも展開されるわけなので、<br />
同じ事を繰り返して記述する、いささかしつこいCSSになるでしょう。<br />
些細な差かもしれませんが、ファイルサイズもかさみますね。</p>



<h2 class="wp-block-heading">extendをLESSに実装した例</h2>



<p>昨日、AdventCalender14日目の@hokacchaさんが、<br />
よりスマートなソリューションについて記事にされていたので、是非。</p>



<p><a href="http://d.hatena.ne.jp/hokaccha/20111214/1323821463">LESSにextendを実装してみた &#8211; hokaccha.hamalog v2</a></p>



<p>出力されるCSSが、大変いい感じになりますね。<br />
extend、よさげです。</p>



<p class="caution">
    LESS の1.4系より、extendが公式に導入されています。<br />
    <a href="https://github.com/less/less.js/blob/master/CHANGELOG.md#140-beta-1--2">less.js/CHANGELOG.md at master · less/less.js</a>
</p>



<h2 class="wp-block-heading">オマケ：無限ループの罠</h2>



<p>ちなみに、互いにそれぞれを呼び出すMixinを作ると、<br />
当たり前ですが無限ループに陥ってコンパイラが落ちる事もあると思いますので、<br />
ご注意ください。</p>



<p><em>良い子は真似しちゃだめ！</em></p>


<pre class="wp-block-code"><span><code class="hljs language-php">.hoge {
    color:<span class="hljs-comment">#fff;</span>
    .fuga;
}
.fuga {
    color:<span class="hljs-comment">#ccc;</span>
    .hoge;
}
</code></span></pre>


<h2 class="wp-block-heading">おわり</h2>



<p>それでは引き続き<a href="http://atnd.org/events/21919">Less &amp; Sass Advent calendar 2011</a>をお楽しみくださいませ。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>クロスプラットフォームなLessコンパイラ 「LessParser」</title>
		<link>https://blog.mach3.jp/2011/11/10/lessparser.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Thu, 10 Nov 2011 04:37:19 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Compiler]]></category>
		<category><![CDATA[LESS]]></category>
		<category><![CDATA[Lessnium]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2105</guid>

					<description><![CDATA[以前はWindows向けのコンパイラが見つからなかったので「Lessnium」なんてのを作りましたが、 もっと優秀なクライアントが見つかったのでご紹介します。 LessParserについて AIRで開発されている、クロス [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>以前はWindows向けのコンパイラが見つからなかったので「<a href="/2011/05/lessnium.html">Lessnium</a>」なんてのを作りましたが、<br />
もっと優秀なクライアントが見つかったのでご紹介します。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-o3OwHLvMZW4/TrtQaISm3RI/AAAAAAAABZY/cJwILQeAJl0/s400/201111101232.png" alt="クロスプラットフォームなLessコンパイラ 「LessParser」"/></figure>



<p></p>



<span id="more-2105"></span>



<h2 class="wp-block-heading">LessParserについて</h2>



<ul class="wp-block-list">
<li><a href="http://www.proving-ground.be/less/">Less Parser</a></li>
</ul>



<p>AIRで開発されている、クロスプラットフォームのLessコンパイラ。<br />
AdobeAIRが入っているOSならどこでも動作するでしょう。</p>



<p>Mac版の<a href="http://incident57.com/less/">Less.app</a>の影響を強く受けているようで、<br />
レイアウトも使い方もとても良く似ています。<br />
作者同意のもと、Less.appのレイアウトをベースに開発したとの事。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>It is possible that you&#8217;ve come across &#8220;Less.app for Mac OSX&#8221; developed by Bryan D K Jones. With his consent, I have based my application layout on the layout of his application..</p>
</blockquote>



<h2 class="wp-block-heading">使い方</h2>



<h3 class="wp-block-heading">プロジェクトの登録</h3>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-K0KR-QTclXI/TrtQaBUIEeI/AAAAAAAABZY/69TWZrOnt5g/s500/201111101233.png" alt="LessParser:プロジェクト画面"/></figure>



<p></p>



<ol class="wp-block-list">
<li>Addをクリックして、プロジェクトの名前と監視するディレクトリを入力します。</li>



<li>右カラムに、.lessファイルのリストが表示されます。<br /><br />左のチェックボックスはコンパイルするかどうか、右はMinify（圧縮）するかどうかをチェックします。  </li>



<li>左下の「Automaticaly parse files on save」にチェックが入ってれば、<br /><br />ファイルの更新を検知して自動的にコンパイルしてくれます。</li>
</ol>



<h3 class="wp-block-heading">ログ画面</h3>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-WiXzQ55YJcM/TrtQaslI0FI/AAAAAAAABZY/nF5ip0bSrAQ/s500/201111101234.png" alt="LessParser:ログ画面"/></figure>



<p></p>



<p>上の「Log」ボタンをクリックするとコンパイルのログが表示されます。</p>



<h2 class="wp-block-heading">Less.appとの比較</h2>



<p>AIR版ということもあり、<br />
本家Less.appと比べて出来ない事もいくつかあるようです。</p>



<ul class="wp-block-list">
<li>ドラッグドロップによる登録</li>



<li>アウトプットパスの設定</li>
</ul>



<p>個人的に残念なのは、AIRのディレクトリ選択ダイアログが使いづらい所でしょうか。<br />
ドラッグドロップ使えればもっと素敵なのですが（AIRなら実装出来たようなおぼろげな記憶も…）</p>



<h2 class="wp-block-heading">Lessniumと比較して</h2>



<ul class="wp-block-list">
<li>フォルダ単位で登録ができ、ファイル毎でもコンパイルのon/offが選択できる。</li>



<li>圧縮のon/offが選択出来る</li>
</ul>



<p>Less.app同様に、非常に使いやすいUIで細かい設定が出来、<br />
言うまでもなくLessniumの完全上位互換ですね。<br />
このプロジェクトが存続する限りは、Lessniumは開発されない事と思います。<br />
作者もLessParser使いますし（！</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>Lessniumが要らない子になるのはちょっとだけ寂しいですが、<br />
元々Windowsで動くものが無かったから作っただけで、<br />
開発する人が出てきたと言う事は、それだけLessが市民権を得てきたという事ですし、<br />
非常に使いやすいアプリなので、素直に嬉しいです。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>LessでCSSはもっと楽になる！（第1.5回Yokohama.js）</title>
		<link>https://blog.mach3.jp/2011/08/29/enjoy-css-with-less.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 29 Aug 2011 01:56:49 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[LESS]]></category>
		<category><![CDATA[Lessnium]]></category>
		<category><![CDATA[LESSTESTER]]></category>
		<category><![CDATA[Yokohama.js]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2000</guid>

					<description><![CDATA[昨日行なわれた第1.5回Yokohama.jsで喋らせて頂いたお題です。 使ったプレゼンテーションスライドの紹介など。 スライド ざっくりとした内容 なぜSassじゃないのか？ というもっともなツッコミを参加者様より頂き [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>昨日行なわれた<a href="http://js.yokohamas.org/2011/08/yokohama-js-1-5/">第1.5回Yokohama.js</a>で喋らせて頂いたお題です。<br />
使ったプレゼンテーションスライドの紹介など。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-tzdJfAeS1D8/TlrwF_DNabI/AAAAAAAABW0/m76fA5BdkSw/201108291044.png" alt="LessでCSSはもっと楽になる！"/></figure>



<p></p>



<span id="more-2000"></span>



<h2 class="wp-block-heading">スライド</h2>



<p><iframe src="https://docs.google.com/present/embed?id=dj4svm6_69hhggwrfb&amp;size=m" frameborder="0" width="555" height="451"></iframe></p>



<h2 class="wp-block-heading">ざっくりとした内容</h2>



<ul class="wp-block-list">
<li>Lessってなに？
<ul class="wp-block-list">
<li>公式 : <a href="http://lesscss.org/">LESS « The Dynamic Stylesheet language</a></li>
</ul>
</li>



<li>Lessだと何が幸せなのか？</li>



<li>Lessの記法いろいろ
<ul class="wp-block-list">
<li>変数</li>



<li>ミックスイン（関数のようなもの）</li>



<li>演算子</li>



<li>セレクタの入れ子</li>
</ul>
</li>



<li>Lessの使い方
<ul class="wp-block-list">
<li>クライアントサイドでコンパイルする</li>



<li>node.jsで実行する</li>



<li>GUIクライアント for Mac : <a href="http://incident57.com/less/">LESS.app For Mac OS X</a></li>



<li>GUIクライアント for Win : <a href="/2011/05/lessnium.html">TitaniumデスクトップでLESS.jsのフロントエンドをこさえてみた</a></li>
</ul>
</li>



<li>LESSTESTERの紹介
<ul class="wp-block-list">
<li><a href="http://lesstester.com/">LESSTESTER &#8211; Online Compiler fo Less CSS</a></li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">なぜSassじゃないのか？</h2>



<p>というもっともなツッコミを参加者様より頂きました。<br />
確かにSassの方が多機能でメジャー（つまりこの先もメンテされる可能性が高い）ですが…</p>



<ul class="wp-block-list">
<li>先にLessの方を知ってしまった</li>



<li>JavaScriptベースに変わったので色々出来て、軽快</li>



<li>クライアントサイドのコンパイルが嬉しい</li>



<li>マイノリティを応援したい</li>
</ul>



<p>などといった理由から、Lessを愛し続けています。</p>



<p>ただ、チームで制作したりする場合は、<br />
メジャーな方使ったほうが無難な気はしますね。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Lessのオンラインコンパイラ「LESSTESTER」を公開しました</title>
		<link>https://blog.mach3.jp/2011/08/17/lesstester.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Wed, 17 Aug 2011 07:56:40 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[LESS]]></category>
		<category><![CDATA[Lessnium]]></category>
		<category><![CDATA[LESSTESTER]]></category>
		<category><![CDATA[Titanium]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1976</guid>

					<description><![CDATA[どうか「またLessか」と言わずに。 今日は、常日頃からご贔屓にしているLessの オンラインコンパイラを作ってみたのでご紹介したく。 LESSTESTERとは LESSTESTER &#8211; Online Com [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>どうか「またLessか」と言わずに。<br />
今日は、常日頃からご贔屓にしているLessの<br />
オンラインコンパイラを作ってみたのでご紹介したく。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-STNhsTG2onU/TktzCiyC_tI/AAAAAAAABV4/HsutQqgmL4A/201108171651.png" alt="Lessのオンラインコンパイラ「LESSTESTER」を公開しました"/></figure>



<p></p>



<span id="more-1976"></span>



<h2 class="wp-block-heading">LESSTESTERとは</h2>



<p><a href="http://lesstester.com/">LESSTESTER &#8211; Online Compiler fo Less CSS</a></p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-UZqnn8LUp6I/TktzCqJZLOI/AAAAAAAABV4/9LPTXEY9u30/201108171648.png" alt="LESSTESTER"/></figure>



<p></p>



<p>Lessのオンラインコンパイラです。<br />
左のテキストエリアにLess記法で入力してShift+Enterすると、<br />
右のテキストエリアにコンパイラを通した結果が出力されます。</p>



<p>記法がわからない場合は、右上のHELPボタンをクリックすると<br />
簡単な記述例がみられるので、ご参考に。</p>



<p>Lessをこれから始めようという方のお砂場にしてもらえると嬉しいです。</p>



<h2 class="wp-block-heading">Lessが気に入ったら、GUIクライアントも是非</h2>



<h3 class="wp-block-heading">Lessnium for Windows</h3>



<p>LESSTESTERの右下に、拙作のLessniumのバナーもさりげなく置いておきました。<br />
これはWindows向けTitaniumDesktop製のGUIクライアントです。<br />
Windowsユーザーの方は、もしよければ使ってみてください。</p>



<p><a href="/2011/05/lessnium.html">TitaniumデスクトップでLESS.jsのフロントエンドをこさえてみた | Mach3.laBlog</a></p>



<h3 class="wp-block-heading">Less.app for Mac OS X</h3>



<p>Macユーザーの方は、優秀なLess.appがあるのでこちらを是非。</p>



<p><a href="http://incident57.com/less/">LESS.app For Mac OS X</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>VimでLessファイルを編集する（シンタックスの追加）</title>
		<link>https://blog.mach3.jp/2011/08/03/edit-less-with-macvim.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Wed, 03 Aug 2011 05:31:38 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[LESS]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[MacVim]]></category>
		<category><![CDATA[Vim]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1882</guid>

					<description><![CDATA[個人的な話ではありますが、先日ようやくはじめてのMacを手に入れました。 せっかく Less.app という素敵な物があるので、MacでもLessを使っていこうと思ったのですが、 Lessファイルを編集するのに丁度良いエ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>個人的な話ではありますが、先日ようやくはじめてのMacを手に入れました。<br />
せっかく <a href="http://incident57.com/less/">Less.app</a> という素敵な物があるので、MacでもLessを使っていこうと思ったのですが、<br />
Lessファイルを編集するのに丁度良いエディタに未だ出会えていないので、<br />
とりあえずMacVimで編集してみようという試み。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-AKzjvfr6_RM/Tjjb-SHSQCI/AAAAAAAABVE/JBrE1WipE8I/201108031423.png" alt="VimでLessファイルを編集する"/></figure>



<p></p>



<p>ちなみに、Windowsでは <a href="http://notepad-plus-plus.org/">Notepad++</a> が使いやすくて重宝してます。</p>



<span id="more-1882"></span>



<h2 class="wp-block-heading">シンタックスファイルを追加する</h2>



<p>Vimでは、Sassははじめから使えるのに<br />
Lessのシンタックスファイルはありません。<br />
なので、自分で追加してやらないといけません。</p>



<p>PHPでLessする「lessphp」の作者さんが、<br />
オマケ？として公開してくれているので、こちらを使わせて頂くことに。</p>



<p><a href="http://leafo.net/lessphp/">lessphp &#8211; leaner css in php</a></p>



<p>「Resources」の「Vim syntax file」から取得出来ます。<br />
取得したless.vimは ~/.vim/syntax に保存。<br />
これで、VimでLessファイルのシンタックスを色分けしてくれるようになったはず。</p>



<p>適当なLessファイルをひらいて</p>


<pre class="wp-block-code"><span><code class="hljs">setf less
</code></span></pre>


<p>とかしてテストしてみましょう。</p>



<h2 class="wp-block-heading">.lessファイルを関連付けする</h2>



<p>.vimrc等で、lessファイルの関連付けをしてあげます。</p>


<pre class="wp-block-code"><span><code class="hljs language-css">" <span class="hljs-selector-tag">Less</span>
<span class="hljs-selector-tag">au</span> <span class="hljs-selector-tag">BufNewFile</span>,<span class="hljs-selector-tag">BufRead</span> *<span class="hljs-selector-class">.less</span>            <span class="hljs-selector-tag">setf</span> <span class="hljs-selector-tag">less</span>
</code></span></pre>


<p>これで拡張子が.lessのファイルを開くと、<br />
lessのシンタックスハイライトが適用されてます。やったね！</p>



<h2 class="wp-block-heading">less.vimが見つからなかった時は</h2>



<p>Sassに比べていささかマイナーなツールではあるので、<br />
そのような事もひょっとしたらあるかもしれません。<br />
そんな時は、Sassの記法がかなり近いのでそちらを編集して使ってみてもよいかも。</p>



<p>基本的には複製させていただき、<br />
変数の書き方だけLessに合わせておきます。</p>


<pre class="wp-block-code"><span><code class="hljs">$ cd /Applications/MacVim.app/Contents/Resources/vim/runtime/syntax/
$ cat sass.vim &gt; less.vim
$ vim less.vim
</code></span></pre>


<p>sass.vim を複製した less.vim を開き、</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">syn match sassVariable <span class="hljs-string">"$&#91;&#91;:alnum:]_-]+"</span>
syn match sassVariableAssignment <span class="hljs-string">"%(&#91;!$]&#91;&#91;:alnum:]_-]+s*)@&amp;lt;=%(||)=="</span> nextgroup=sassCssAttribute skipwhite
syn match sassVariableAssignment <span class="hljs-string">"%(&#91;!$]&#91;&#91;:alnum:]_-]+s*)@&amp;lt;=:"</span> nextgroup=sassCssAttribute skipwhite
</code></span></pre>


<p>この部分の$を@に書き換える。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">syn match sassVariable <span class="hljs-string">"@&#91;&#91;:alnum:]_-]+"</span>
syn match sassVariableAssignment <span class="hljs-string">"%(&#91;!@]&#91;&#91;:alnum:]_-]+s*)@&amp;lt;=%(||)=="</span> nextgroup=sassCssAttribute skipwhite
syn match sassVariableAssignment <span class="hljs-string">"%(&#91;!@]&#91;&#91;:alnum:]_-]+s*)@&amp;lt;=:"</span> nextgroup=sassCssAttribute skipwhite
</code></span></pre>


<p>また、ファイル先頭のコメントの部分は、<br />
適当にSassをLessに変更するなどしておきましょう。<br />
これで、setf lessすればLessファイルとしてカラーリングされるようになるはずです。</p>



<p>一部の記法（Mixinとか）はSassとLessで異なるので反映されませんが、<br />
個人的には変数とネストだけ反映されれば十分です。</p>



<p>「公開されているless.vimを紹介しておきながらなんでわざわざ？」と思われましたか？<br />
…苦し紛れのコレを書いてる時にやっとless.vimを見つけたんだからしょうがない。</p>



<h2 class="wp-block-heading">Less.appは素敵ですよ</h2>



<p>いずれ改めて紹介しようとは思ってますが、<br />
MacOSで使える <a href="http://incident57.com/less/">LESS.app For Mac OS X</a> は素晴らしいです。<br />
フォルダごとに管理も出来るし、出力先のパスも指定できる。<br />
Lessniumもこれくらい気の利いたツールにしてみたい…</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
