[gulp]ベンダープレフィックスとソースマップを同時に出力できない?

gulp始めました。が、初心者なため、まだわからないことも多いです。

今の悩みは「ソースマップの出力」と「CSS3のベンダープレフィックスの付与」を同時に実行するのが上手くいかない、というものです。

ひとまず基本的なglupfileの記述。ソースマップは出ます。

以下の様なタスクをglupfileに記述しています。(※WindowsのFirefoxで開発してます。)

var gulp = require('gulp'); // gulpを利用可能にする。
var sass = require('gulp-ruby-sass'); //gulp-ruby-sassを利用可能にする。


//指定したディリクトリ/ファイルのsassファイルを指定したディリクトリにコンパイルする。
gulp.task("sass", function() {

	gulp.src("sass/style.scss")
		.pipe(sass({
				style : 'expanded'
			}))
		.pipe(gulp.dest('./'))

});

これでstyle.css.mapが出力され、FireFoxの開発ツールで閲覧できます。

ベンダープレフィックスをつけるには

ベンダープレフィックスを付けたいときは、専用のプラグインをインストールし、タスクを記述する必要があります。
自分はgulp-pleeeaseというものを使っています。
glupfileは以下のようになります。

var gulp = require('gulp'); // gulpを利用可能にする。
var sass = require('gulp-ruby-sass'); //gulp-ruby-sassを利用可能にする。
var pleeease = require("gulp-pleeease"); //ベンダープレフィックスプラグイン。

//指定したディリクトリ/ファイルのsassファイルを指定したディリクトリにコンパイルする。
gulp.task("sass", function() {

	gulp.src("sass/style.scss")
		.pipe(sass({
			style : 'expanded'
		}))
		.pipe(pleeease({
			minifier: false // 圧縮しない
		}))
		.pipe(gulp.dest('./'))

});

エラーが出てしまう…

が、しかし!これだとコマンドプロンプトがエラーを吐いてコンパイルを停めてしまいます…

いろいろ試した結果、gulp-ruby-sassを使っているのが原因みたいです。
gulp-ruby-sassを使うのをやめて、gulp-sassに切り替るとするとエラーを吐きませんでした。(うーん何でだろう?)

とりあえずできたからいいか、と喜んだのも束の間、今度はソースマップが出力されなくなりました…
ソースマップを出力するプラグインがあったので使ってみたのですが、なぜかFireFoxの開発ツールで閲覧できず、解決に至りませんでした。

原因が解るまでの、ひとまずの対策

現状では

(1)ソースマップは出せるが、ベンダープレフィックスは出力できない。
(2)ソースマップは出せないが、ベンダープレフィックスは出力できる。

という二者択一の状態になってしまいました。

差し当たって、開発時は(1)でコードを書き、公開時に(2)でプレフィックスを付与する、というやり方で凌ぐことにします。

以下のようなgulpfileにして、開発と公開時によって切り替えるようにしてみました。

(1)開発フェーズ

var gulp = require('gulp'); // gulpを利用可能にする。
var sass = require('gulp-ruby-sass'); //gulp-ruby-sassを利用可能にする。
//var sass = require('gulp-sass'); //gulp-sassを利用可能にする。
var pleeease = require("gulp-pleeease"); //ベンダープレフィックスプラグイン。

//指定したディリクトリ/ファイルのsassファイルを指定したディリクトリにコンパイルする。
gulp.task("sass", function() {

	gulp.src("sass/style.scss")
		.pipe(sass({
			style : 'expanded'
		}))
//	.pipe(pleeease({
//		minifier: false // 圧縮しない
//	}))
	.pipe(gulp.dest('./'))

});

(2)公開フェーズ

var gulp = require('gulp'); // gulpを利用可能にする。
//var sass = require('gulp-ruby-sass'); //gulp-ruby-sassを利用可能にする。
var sass = require('gulp-sass'); //gulp-sassを利用可能にする。
var pleeease = require("gulp-pleeease"); //ベンダープレフィックスプラグイン。

//指定したディリクトリ/ファイルのsassファイルを指定したディリクトリにコンパイルする。
gulp.task("sass", function() {

	gulp.src("sass/style.scss")
		.pipe(sass({
			style : 'expanded'
		}))
		.pipe(pleeease({
			minifier: false // 圧縮しない
		}))
		.pipe(gulp.dest('./'))

});

どこが良くないのか、現状残念ながらわかりませんが、いずれは解決したいですね。

Welcartのウィジェット「Welcartベストセラー」にサムネイルを表示させる方法

WordPressにECサイトの機能を持たせるプラグイン「Welcart」のウィジェットで、「welcartベストセラー」というものがあります。

これを使うと注文が多い商品順にリンクを自動で並べて表示させることができるようになります。ウィジェットの管理画面で任意の商品を表示する設定もできる、なかなか使い勝手の良いウィジェットなんですが、デフォルトではテキストリンクのみで、商品画像を表示してくれません。

そこでサムネイルを表示させる方法を調べたのでメモ代わりに投稿します。

functions.phpにコードをコピペでOK

細かいオプションや引数は調べていませんが、とりあえず下記コードををfunctions.phpに加えるだけでサムネイルが表示されました。

<?php //welcartベストセラー サムネイル表示
	add_filter( 'usces_widget_bestseller_manual_text', 'my_bestseller', 10, 3);
		function my_bestseller(){
		$args = func_get_args();
		$post_id = $args[1];
		$post = get_post($post_id);
		$str = usces_the_itemImage(0, 280, 250, $post, 'return' ) . wp_specialchars($post->post_title);
		return $str;
	};
?>

usces_the_itemImage()のパラメーターは、0→商品のメイン画像、280→画像のwidth、250→画像のheight、のようです。必要に応じてサムネイルのサイズを変更できます。

参考:[解決済み] ベストセラーウィジェットに画像を表示させたい。 « Welcart Forum
参考:usces_the_itemImage @ Welcart オンライン・マニュアル|ECサイト構築プラグイン

初めてWelcartを使いましたが、なかなか使いやすい、考えて作られたプラグインだなーと思いました。オンラインマニュアルも充実していて助かりました。WordPressを構築する手法と同じ感覚で作れるのは本当にやりやすかったです。

EC-CUBEも構築したことがありますが、EC-CUBEはテンプレートエンジンであるsmartyの知識が必要だったり、バージョンによる縛りがきつかったり、本格的なカスタマイズはphpの知識が必要になってきたり、サーバーによってコケたりすることもあってなかなか敷居が高いです(^^;)。

あくまでECサイトがベースであるEC-CUBEに対して、WordPressにECサイト機能をビルトインするWelcart。運営面ではまだどちらが優れているかわかりませんが、構築のしやすさはWelcartに軍配が上がりそうです。

welcartとは?

Welcart はコルネ株式会社が開発している WordPress のプラグインです。このプラグインは WordPress にネットショップ及びその管理システムの機能を提供するものです。
このプラグインにはサンプルテーマが付属されている(有効化の際自動インストールされる)ため、商品登録と基本設定を行えばすぐにネットショップを体験できます。
Welcart は GPLライセンスとなっています。
ご利用に際してGPLに準拠していれば自由に複製、改変、頒布することができます。

引用元:Welcart について @ Welcart オンライン・マニュアル|ECサイト構築プラグイン

IE9.jsできることメモ。

IE6でposition:fixedを使ったレイアウトがやりたくて調べていたのですが、IE9.jsで可能になることを知りました。fixedを使うことがあまりなく、今まで気付きませんでした。

IETesterで確認した限りではできましたが、ブラウザのサイズを変えると一時的にfixedした要素が消えてしまいます。が、スクロールするともどります。案件や状況にもよりますが、導入の容易さとを考えると使える場面も多いかと思います。

他にもIE9.jsでできるようになることを発見したのでメモ的にまとめておきます。

  • IE6でposition:fixedが使える。
  • IE8以下でもHTML5要素に対応。
  • IE6でもファイル名をファイル名の末尾を-trans.pngにすると透過pngに対応する。
  • ボックスのサイズ計算方法が標準化される。
  • margin:0 auto;対応
  • max-height,width対応
  • min-height,width対応
  • first-child, last-child対応
  • 擬似クラス対応
  • 属性セレクタ対応

他にもいろいろあるようです。試しながら使っていきたいと思います。

参考になったサイト:
IE9.jsで実現するシンプルなclearfixとその他の恩恵 | Mach3.laBlog
ie9.jsを使うと出来ること、出来なくなること。 : Toro_Unit

プログレッシブエンハンスメントを意識してサイトを作る。

プログレッシブエンハンスメントを知って以降、サイトが作りやすくなったなーと感じます

ちょっとした意識の切り替えと言ってしまえばそれまでですが、自分が作るサイトにおいて、何が求められてどう表現すればいいのか、そのために何ができて何ができないのかが考えやすくなったと思います。

例えば病院や行政機関のサイトを作るなら、利用するユーザー層の幅の広さを想定してターゲットブラウザの範囲を広げるかわりにCSS3は控える。モダンブラウザからのアクセスが主な商品プロモーションサイトなら、IE6はそれなりに、モダンブラウザでリッチなインターフェースを提供するサイトを作る、というような切り分けがとてもやりやすいです。

ここを押えておくのとそうでないのとではコーディングやデザインの品質に大きな違いがでることを実感しています。例えばドロップシャドウをCSS3で表現するのか画像で表現するのかを最初に決めておかないと、コーディングも画像の切り出しも後からやり直す羽目になってしまいます。これは辛いです(笑)

ということで、プログレッシブエンハンスメント、ひいては設計やミーティングがWEB製作では大事だよーという自己確認でした。

※プログレッシブエンハンスメント…古いブラウザでも支障なく情報が伝達されることを前提に、モダンなブラウザではよりリッチに、レガシーなブラウザではそれなりにサイトを構築するという考え方です。下記エントリーが参考になりました。

プログレッシブエンハンスメント(Progressive Enhancement)という考えかた — Website Usability Info