<?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>Ginpen.com</title>
	<atom:link href="http://ginpen.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ginpen.com</link>
	<description>横浜ペンギンWebを行く</description>
	<lastBuildDate>Mon, 20 May 2013 16:30:26 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>iPhone向けサイト開発に便利なiOSシミューレーターのインストール方法。あと使い方やTipsとか。</title>
		<link>http://ginpen.com/2013/05/20/iphone-simulator/</link>
		<comments>http://ginpen.com/2013/05/20/iphone-simulator/#comments</comments>
		<pubDate>Mon, 20 May 2013 01:29:15 +0000</pubDate>
		<dc:creator>ginpei</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[開発環境]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[シミューレーター]]></category>
		<category><![CDATA[開発]]></category>

		<guid isPermaLink="false">http://ginpen.com/?p=3682</guid>
		<description><![CDATA[iPhone版のサイトを製作する手順ってどうしてますか。いちいちサーバーにアップロードして実機で確認して、問題があれば修正してアップロードして確認して……って面倒ですよね。 そんなときはシミューレーターです。Macでシミ [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://ginpen.com/wp-content/uploads/2013/05/iOS_Simulator-150x150.png" alt="" title="iOS_Simulator" width="150" height="150" class="alignright size-thumbnail wp-image-3718 bordered" /></p>

<p>iPhone版のサイトを製作する手順ってどうしてますか。いちいちサーバーにアップロードして実機で確認して、問題があれば修正してアップロードして確認して……って面倒ですよね。</p>

<p>そんなときはシミューレーターです。Macでシミューレーターを起動すると、ローカルファイルにアクセス出来ます。またインスペクター（開発者ツール）を使ってPC版の開発のようにデバッグも行えます。</p>

<p>さくっとインストールしてみましょう！</p>

<p>なお公式に配付されているのはMac版のみです。あとMac OSのバージョンが古いと利用できません。</p>

<h2>インストール手順</h2>

<p>こういう順序です。</p>

<ol>
<li>Apple Xcodeをインストールする（無料）</li>
<li>iOSシミューレーターを探す</li>
<li>起動する</li>
</ol>

<h3>Xcodeをインストールする</h3>

<p><span id="more-3682"></span></p>

<p>Apple謹製のiOSシミューレーターは単体では配付されていません。XcodeというApple社製の統合開発環境に含まれています。というわけで、まずはXcodeをインストールしましょう。無料ですが、最近のMac OSでないとインストール出来ません。</p>

<p>App Storeの右上の検索欄に&#8221;xcode&#8221;と入力してEnterで検索し、出てきたものから選択してインストールします。割とファイルサイズがあるのでネット環境に気をつけてください。</p>

<p><figure><a href="http://ginpen.com/wp-content/uploads/2013/05/appstore.png"><img src="http://ginpen.com/wp-content/uploads/2013/05/appstore-300x142.png" alt="" title="appstore" width="300" height="142" class="alignnone size-medium wp-image-3687 bordered" /><figcaption>App Store</figcaption></a></figure></p>

<p>App StoreはLaunchpadや「アプリケーション」から探してみてください。</p>

<h3>iOSシミューレーターを探す</h3>

<p>見つけにくいですが、Xcodeの中に保存されています。まずはFinderで、アプリケーションの中からXcodeを探してください。</p>

<p>Xcodeを見つけたらメニューから「パッケージの内容を表示」を選択します。FinderでXcode.appの中身が表示されます。</p>

<p><figure><a href="http://ginpen.com/wp-content/uploads/2013/05/package.png"><img src="http://ginpen.com/wp-content/uploads/2013/05/package-300x170.png" alt="" title="package" width="300" height="170" class="alignnone size-medium wp-image-3691 bordered" /><figcaption>パッケージの内容を表示</figcaption></a></figure></p>

<p>メニューは右クリックか、アクションボタン<img src="http://ginpen.com/wp-content/uploads/2013/05/action.png" alt="" width="40" height="22" class="alignnone size-full wp-image-3692" />で表示されます。</p>

<p>そこから以下の順にディレクトリを開いてください。</p>

<ol>
<li>Contents</li>
<li>Developer</li>
<li>Platforms</li>
<li>iPhoneSimulator.platform</li>
<li>Developer</li>
<li>Applications</li>
</ol>

<p>はぁー、やっと見つかりました。</p>

<p><figure><a href="http://ginpen.com/wp-content/uploads/2013/05/simulator.png"><img src="http://ginpen.com/wp-content/uploads/2013/05/simulator-300x170.png" alt="" title="simulator" width="300" height="170" class="alignnone size-medium wp-image-3689 bordered" /><figcaption>iOSシミュレータ</figcaption></a></figure></p>

<h3>起動する</h3>

<p>そのまま「iOSシミューレータ」をダブルクリックなどで起動できます。</p>

<p><figure><a href="http://ginpen.com/wp-content/uploads/2013/05/start_simulator.png"><img src="http://ginpen.com/wp-content/uploads/2013/05/start_simulator-300x168.png" alt="" title="start_simulator" width="300" height="168" class="alignnone size-medium wp-image-3699 bordered" /><figcaption>シミューレーターを起動したところ</figcaption></a></figure></p>

<p>とはいえ、やはり毎回この手順で探してくるのは面倒です。エイリアスを作っておきましょう。</p>

<h2>エイリアス（ショートカット）の作り方</h2>

<h3>GUIで</h3>

<p>アイコンをFinderの任意の場所にドラッグ＆ドロップすると、エイリアスが作成されます。（カーソルがエイリアス作成のものになっている事を確認してください。）</p>

<p><figure><a href="http://ginpen.com/wp-content/uploads/2013/05/alias.png"><img src="http://ginpen.com/wp-content/uploads/2013/05/alias-300x148.png" alt="" title="alias" width="300" height="148" class="alignnone size-medium wp-image-3694 bordered" /><figcaption>エイリアス作成</figcaption></a></figure></p>

<p>通常はこの操作ではファイルの移動になるのですが、場所が特殊なせいか、エイリアス作成になります。</p>

<p>ちなみにエイリアスをアプリケーション（<code>/Application</code>）に設置しておくと、SpotlightやLaunthpad等からも利用出来るようになるので便利です。</p>

<h3>CLIで</h3>

<p>Finderでぽちぽち探していくのが面倒な場合、こちらの方法でも可能です。</p>

<p>以下のコマンドでをターミナルで実行します。</p>

<div><pre class="brush: bash; title: ; notranslate">
cd ~/Desktop
ln -s /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone\ Simulator.app
</pre></div>

<p>入力補完を使っていると末尾に<code>"/"</code>が付いてしまうが、その状態だとリンクが貼れないので注意。</p>

<h3>Dockに追加</h3>

<p>頻繁に利用する事が確実なら、Dockに登録するだけでも良さそうです。</p>

<p>一度起動してからDockのアイコンを右クリックし、「オプション」→「Dockに追加」にチェックを入れます。</p>

<p><figure><a href="http://ginpen.com/wp-content/uploads/2013/05/dock.png"><img src="http://ginpen.com/wp-content/uploads/2013/05/dock-300x131.png" alt="" title="dock" width="300" height="131" class="alignnone size-medium wp-image-3700 bordered" /><figcaption>Dockに追加</figcaption></a></figure></p>

<p>これでアプリを終了しても、Dockには表示されたままになります。</p>

<h2>使い方</h2>

<p>起動後はぽちぽちする。</p>

<p>トラックパッドだとタップまわりの操作が面倒だったりするんだけれど、まあ仕方ないか。</p>

<h3>ウェブを見る</h3>

<p>Safariから普通に見えます。</p>

<p>Macのブラウザーからリンクをドラッグ＆ドロップして、iOS Safariで簡単に開く事が出来ます。</p>

<p><figure><a href="http://ginpen.com/wp-content/uploads/2013/05/web.png"><img src="http://ginpen.com/wp-content/uploads/2013/05/web-300x266.png" alt="" title="web" width="300" height="266" class="alignnone size-medium wp-image-3702 bordered" /><figcaption>リンクを開く</figcaption></a></figure></p>

<h3>長い文章をコピペする</h3>

<p>通常のペースト（⌘V）だとiOS内のクリップボードから貼り付けられます。</p>

<p>Mac OSのクリップボードの内容をシミューレーターで貼り付けるには、controlを押しながら⌘Vです。</p>

<p>メニューの「編集→テキストをペースト」がこの機能です。</p>

<p><figure><a href="http://ginpen.com/wp-content/uploads/2013/05/paste.png"><img src="http://ginpen.com/wp-content/uploads/2013/05/paste-300x190.png" alt="" title="paste" width="300" height="190" class="alignnone size-medium wp-image-3703 bordered" /><figcaption>テキストをペースト</figcaption></a></figure></p>

<p>ちなみにコピーは出来ないみたい……。</p>

<h3>ピンチイン、ピンチアウト、回転</h3>

<p>二本指を広げたり狭めたり回したりする操作は、optionキーを押しながらドラッグする事で実現できます。</p>

<p>これあんまり使い勝手が良くない。</p>

<h3>デバイス（iPhone、iPad）の切り替え</h3>

<p>メニューの「ハードウェア→デバイス」から。</p>

<p>Retinaのデバイスなんかだと画面が大きすぎて、Macの画面に収まりきらなかったりします。その際画面はMacと同じ方法でスクロール出来ます。</p>

<p><figure><a href="http://ginpen.com/wp-content/uploads/2013/05/ipad.png"><img src="http://ginpen.com/wp-content/uploads/2013/05/ipad-300x168.png" alt="" title="ipad" width="300" height="168" class="alignnone size-medium wp-image-3730 bordered" /><figcaption>iPad（でかい……）</figcaption></a></figure></p>

<p>iPad miniは項目にありませんが、解像度は非Retinaの方と同じなので動作確認には問題なさそう。</p>

<p>それにしても、縮小表示が欲しいなあ。</p>

<h3>ホームボタン</h3>

<p>大きな画面のやつだと、端末の画面外の枠が表示されない場合があるようで……。そんな時はShiftを押しながら⌘Hでホームボタンになります。</p>

<p>メニューの「ハードウェア→ホーム」がこの機能です。</p>

<h3>iOSバージョンの切り替え</h3>

<p>メニューの「ハードウェア→バージョン」から。</p>

<p>最初は（執筆時点では）「6.1」しかありませんが、後述の方法で追加インストール出来ます。</p>

<h3>OSバージョンの追加</h3>

<p>Xcodeを起動してください。なお初回は利用規約が表示されるので、内容を読んでAgreeしてください。</p>

<p>で、Xcodeを起動したらメニューの「Xcode→Preferences」のDownloadからインストール出来ます。</p>

<p><figure><a href="http://ginpen.com/wp-content/uploads/2013/05/download.png"><img src="http://ginpen.com/wp-content/uploads/2013/05/download-300x211.png" alt="" title="download" width="300" height="211" class="alignnone size-medium wp-image-3707 bordered" /><figcaption>Xcode &#8211; Preference &#8211; Download</figcaption></a></figure></p>

<p>ファイルサイズは大きいから頑張って。</p>

<h3>端末を回転</h3>

<p>⌘←、⌘→で回転します。</p>

<p>メニューの「ハードウェア→反時計回りに回転」等がこの機能です。</p>

<h3>iOSを日本語化する</h3>

<p>iOSを起動してSettingsから「General→International→Language」で「日本語」を選択してDone。</p>

<p>キーボードも一緒に設定されます。</p>

<h3>日本語を簡単に入力する</h3>

<p>キーボードが「日本語（ローマ字）」（QWERTY配列のやつ）の時は、Macのキーボードから日本語が入力出来ます。「日本語（ローマ字）」（フリックのやつ）だと駄目。</p>

<p>ただし「ー」の入力がうまく検知されないので、そこだけシミューレーター内のソフトウェアキーボードを利用しないといけない。（日本語の長音符ではなくマイナス記号として認識されている感じ。）</p>

<p><figure><a href="http://ginpen.com/wp-content/uploads/2013/05/japanese.png"><img src="http://ginpen.com/wp-content/uploads/2013/05/japanese-154x300.png" alt="" title="japanese" width="154" height="300" class="alignnone size-medium wp-image-3713" /><figcaption>日本語（ローマ字）のキーボード</figcaption></a></figure></p>

<p>ちなみにMacの方の入力モードは考慮されず、常に日本語になります。英数字のときは英語キーボードに。</p>

<h3>Safaniのキャッシュを削除</h3>

<p>シミューレーターだけじゃなくて実機も一緒ですが。</p>

<p>iOSを起動してSettingsから「Safari」の「Clear Cookies and Data」で。</p>

<h3>Safariのインスペクター（開発者ツール）を使う（iOS 6以上）</h3>

<p>これもシミューレーターだけでなく、実機をUSBで接続している場合と同じです。</p>

<p>まずはiOSのSettingで「Safari→Advanced(詳細)→Web Inspector(Webインスペクタ)」をオンにします。</p>

<p>続いてMacの方のSafariを起動して、メニューから「開発→iPhone Simulator→Safari（なんちゃら.comとか）」でインスペクターを起動できます。</p>

<p><figure><a href="http://ginpen.com/wp-content/uploads/2013/05/inspector.png"><img src="http://ginpen.com/wp-content/uploads/2013/05/inspector-300x168.png" alt="" title="inspector" width="300" height="168" class="alignnone size-medium wp-image-3710" /><figcaption>Web インスペクター</figcaption></a></figure></p>

<p>インスペクターからは要素を操作したり、スクリプトのコンソールを利用したり出来ます。</p>

<p>ちなみにメニューに「開発」を表示するには事前にSafariの設定が必要です。</p>

<h3>アプリのインストール</h3>

<p>シミューレーターにはApp Storeがないので、通常のアプリを入れる事ができないみたいです。（裏技とかあるのかも。）</p>

<p>自分で開発しているものなら、Xcodeからインストール出来ます。本稿では扱いません。</p>

<h2>よいウェブ開発を！</h2>

<p>これでいちいちサーバーにファイルをアップロードしなくても確認できるようになりましたね。</p>

<p>とっぴんぱらりのぷぅ。</p>
]]></content:encoded>
			<wfw:commentRss>http://ginpen.com/2013/05/20/iphone-simulator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQueryでフォームをAjax送信する際の基本パターンのチュートリアル。二重送信の防御とか。</title>
		<link>http://ginpen.com/2013/05/07/jquery-ajax-form/</link>
		<comments>http://ginpen.com/2013/05/07/jquery-ajax-form/#comments</comments>
		<pubDate>Mon, 06 May 2013 17:16:49 +0000</pubDate>
		<dc:creator>ginpei</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[チュートリアル]]></category>
		<category><![CDATA[フォーム]]></category>

		<guid isPermaLink="false">http://ginpen.com/?p=3659</guid>
		<description><![CDATA[仕事の進みがちょいとアレなので、現実逃避もとい気分転換に。 フォームの入力内容を、jQuery.ajax()を使ってサーバーへ送信したいって時のパターンです。 基本的な流れ フォームのsubmitを拾う 通常の送信はキャ [...]]]></description>
			<content:encoded><![CDATA[<p>仕事の進みがちょいとアレなので、現実逃避もとい気分転換に。</p>

<p>フォームの入力内容を、<code>jQuery.ajax()</code>を使ってサーバーへ送信したいって時のパターンです。</p>

<h2>基本的な流れ</h2>

<ol>
<li>フォームの<code>submit</code>を拾う</li>
<li>通常の送信はキャンセル</li>
<li><strong>送信ボタンを無効化</strong></li>
<li>送信先URLやフォームの入力値を取得</li>
<li>送信</li>
<li>受信後、<strong>送信ボタンを戻す</strong></li>
</ol>

<p>入力値をどう得るか、というのがポイントかと思います。</p>

<p>送信ボタンを無効化するってのはやらなくても良いんだけど、誤操作防止のためにも是非やって頂きたいと思います。あと送信ボタンの制御以外にも応用がききます。</p>

<h2>デモ</h2>

<p>なんかお問い合わせフォーム的なものを用意しました。</p>

<p>まー実際にお問い合わせフォームをAjaxで送信する場面なんてないような気もするんですが、基本パターンという事で。</p>

<p><span id="more-3659"></span></p>

<div class="jsfiddle"><iframe width="100%" height="300" src="http://jsfiddle.net/ginpei/mAZha/embedded/" allowfullscreen="allowfullscreen" frameborder="0"></iframe></div>

<h2>チュートリアル</h2>

<h3>フォームの<code>submit</code>を拾う</h3>

<p>一番外側の部分です。あ、対象<code>form</code>要素を<code>id="the-form"</code>としました。</p>

<div><pre class="brush: jscript; title: ; notranslate">
    $('#the-form').submit(function(event) {
        // …
    });
</pre></div>

<h3>通常の送信はキャンセル</h3>

<p>Ajaxで送信するので、通常のフォーム送信はキャンセルします。</p>

<div><pre class="brush: jscript; highlight: [2,3]; title: ; notranslate">
    $('#the-form').submit(function(event) {
        // HTMLでの送信をキャンセル
        event.preventDefault();

        // …
    });
</pre></div>

<h3>送信</h3>

<p>先に提示したものと順序が異なりますが、まあそういう形式のAPIなんで仕方がない。このあたりのコールバックの仕組みってのが、JavaScriptのわかりづらいところですよねえ。</p>

<div><pre class="brush: jscript; highlight: [5,6,7,8]; title: ; notranslate">
    $('#the-form').submit(function(event) {
        // HTMLでの送信をキャンセル
        event.preventDefault();

        // 送信
        $.ajax({
            // …
        });
    });
</pre></div>

<p>まだ送信先も内容も、はたまた前後の処理も指定していません。これから記述します。</p>

<h3>送信先、形式、内容を取得</h3>

<div><pre class="brush: jscript; highlight: [10,11,12]; title: ; notranslate">
    $('#the-form').submit(function(event) {
        // HTMLでの送信をキャンセル
        event.preventDefault();

        // 操作対象のフォーム要素を取得
        var $form = $(this);

        // 送信
        $.ajax({
            url: $form.attr('action'),
            type: $form.attr('method'),
            data: $form.serialize(),

            // …
        });
    });
</pre></div>

<p><code>url</code>は<code>action</code>、<code>type</code>は<code>method</code>が対応します。</p>

<p><code>data</code>には<code>$form.serialize()</code>で得られる値をそのまま利用できます。内容は<code>name=太郎&amp;mail=…</code>のような形式の文字列ですが、問題ありません。自分で値を取得してきて、JSON的なオブジェクトで渡しても良いのですが、チェックボックスやラジオボタンなんかの値を確実に処理するのは手間です。 <code>.serialize()</code>を使っちゃいましょう。</p>

<p>事前に内容を検証 (validate) したい場合は、送信前に各値を取得して確認してください。今回は触れません。各値の取得方法は過去記事などどうぞ。</p>

<ul>
<li><a href="ginpen.com/2012/05/21/how-to-get-values-from-form-with-jquery/">jQueryでフォームの値を取得する方法をまとめておくので、コピペでご利用ください。</a></li>
</ul>

<h3>二重送信を防止</h3>

<p>送信ボタンを、送信前に無効化、完了後に戻す事で、思わずダブルクリックしちゃったみたいなのに対応します。</p>

<p>あと時間切れを設定しておきましょう。サーバーに異常があった際にボタンを戻す等出来ます。（戻しても送信できないかもしれませんが。）</p>

<div><pre class="brush: jscript; highlight: [8,9,16,18,19,20,21,22,23,24,25,26,27]; title: ; notranslate">
    $('#the-form').submit(function(event) {
        // HTMLでの送信をキャンセル
        event.preventDefault();

        // 操作対象のフォーム要素を取得
        var $form = $(this);

        // 送信ボタンを取得
        var $button = $form.find('button');

        // 送信
        $.ajax({
            url: $form.attr('action'),
            type: $form.attr('method'),
            data: $form.serialize(),
            timeout: 10000,  // 単位はミリ秒

            // 送信前
            beforeSend: function(xhr, settings) {
                // ボタンを無効化し、二重送信を防止
                $button.attr('disabled', true);
            },
            // 応答後
            complete: function(xhr, textStatus) {
                // ボタンを有効化し、再送信を許可
                $button.attr('disabled', false);
            },

            // …
        });
    });
</pre></div>

<h3>成功、失敗時の処理</h3>

<div><pre class="brush: jscript; highlight: [29,30,31,32,33,34,35,36,37,38,39,40]; title: ; notranslate">
    $('#the-form').submit(function(event) {
        // HTMLでの送信をキャンセル
        event.preventDefault();

        // 操作対象のフォーム要素を取得
        var $form = $(this);

        // 送信ボタンを取得
        var $button = $form.find('button');

        // 送信
        $.ajax({
            url: $form.attr('action'),
            type: $form.attr('method'),
            data: $form.serialize(),
            timeout: 10000,  // 単位はミリ秒

            // 送信前
            beforeSend: function(xhr, settings) {
                // ボタンを無効化し、二重送信を防止
                $button.attr('disabled', true);
            },
            // 応答後
            complete: function(xhr, textStatus) {
                // ボタンを有効化し、再送信を許可
                $button.attr('disabled', false);
            },

            // 通信成功時の処理
            success: function(result, textStatus, xhr) {
                // 入力値を初期化
                $form[0].reset();
                
                alert('OK');
            },

            // 通信失敗時の処理
            error: function(xhr, textStatus, error) {
                alert('NG...');
            }
        });
    });
</pre></div>

<p>これでおしまい。</p>

<h2>実際には</h2>

<p>ボタンを無効化するよりも非表示にして、ぐるぐる回る画像なんか置いておくと良さそうですね。 <code>.attr('disabled', true)</code>とかの箇所を <code>.addClass('loading')</code>みたいにして、ってのはどうでしょう。</p>

<p>はい、では仕事に戻ります。　λ&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://ginpen.com/2013/05/07/jquery-ajax-form/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CSS3のtransformを素敵に扱えるjQueryプラグインを作った。</title>
		<link>http://ginpen.com/2013/04/22/jquery-transform-js/</link>
		<comments>http://ginpen.com/2013/04/22/jquery-transform-js/#comments</comments>
		<pubDate>Mon, 22 Apr 2013 05:04:01 +0000</pubDate>
		<dc:creator>ginpei</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery.transform]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[拙作]]></category>

		<guid isPermaLink="false">http://ginpen.com/?p=3648</guid>
		<description><![CDATA[ダウンロード リポジトリ … https://github.com/ginpei/jQuery.transform JSファイル … jquery.transform.js なにこれ？ CSSのtransformプロパテ [...]]]></description>
			<content:encoded><![CDATA[<h2>ダウンロード</h2>

<ul>
<li>リポジトリ … <a href="https://github.com/ginpei/jQuery.transform">https://github.com/ginpei/jQuery.transform</a>

<ul>
<li>JSファイル … <a href="https://raw.github.com/ginpei/jQuery.transform/master/jquery.transform.js">jquery.transform.js</a></li>
</ul></li>
</ul>

<h2>なにこれ？</h2>

<p>CSSの<code>transform</code>プロパティの値を素敵に扱うやつです。 <code>.css()</code>から<code>transform</code>を扱う際に既存の値を完全に上書きしてしまう問題を解消します。</p>

<h3><code>transform</code> ？</h3>

<p><code>transform</code>はご存知CSS3で追加されたプロパティで、要素を変形(transform)させる事ができます。このプロパティ複数の値を取り得、例えば「小さめで傾ける」という指定の場合は</p>

<div><pre class="brush: css; title: ; notranslate">
transform: scale(.8) rotate(-30deg);
</pre></div>

<p>のような指定になります。</p>

<p>詳しくはこのあたりとか。</p>

<ul>
<li><a href="http://www.htmq.com/css3/transform.shtml">transform－CSS3リファレンス</a></li>
</ul>

<h3>jQuery + <code>transform</code>の問題点</h3>

<p><span id="more-3648"></span></p>

<p>jQueryでスタイルを操作する場合は <code>.css()</code>を利用します。</p>

<p>しかし、これはプロパティの名前と値が対にして利用します。つまり<code>transform</code>に値を指定する場合は<code>scale(.8) rotate(-30deg)</code>と書く必要があるわけです。……当たり前ですね。</p>

<p>問題は、プロパティを設定するときではなく変更するときです。拡縮と回転を順に行うとき、どういうコードを書くべきでしょうか？</p>

<div><pre class="brush: jscript; title: ; notranslate">
$elem.css('transform', 'scale(.8)');

// …

$elem.css('transform', 'rotate(-30deg)');
// -&gt; transform: rotate(-30deg)
</pre></div>

<p>一度縮小して、しばらく後に傾けました。このコードの問題点は、二度目の <code>.css()</code>の時点で<code>transform</code>の値が上書きされてしまう点です。つまり、上記を実行した後の<code>transform</code>の値は<code>scale(.8) rotate(-30deg)</code>ではなく、<code>rotate(-30deg)</code>のみとなってしまいます。うーん、これはよろしくない。</p>

<h2>ばらばらに扱えるように</h2>

<p>というわけで、個別に扱えるようにしたのがjQuery.transform.jsです。jquery.transform.jsを読み込んでおくと、<code>$elem.transform()</code>というメソッドを利用出来るようになります。</p>

<div><pre class="brush: jscript; title: ; notranslate">
// include: jquery.transform.js

$elem.transform('scale', '.8');

// …

$elem.transform('rotate', '-30deg');
// -&gt; transform: scale(0.8) rotate(-30deg)
</pre></div>

<p>これなら過去に設定した、他の<code>transform</code>のプロパティが消える事はありません。</p>

<p>ちなみに値を取得したり、上書きする事も出来ます。</p>

<div><pre class="brush: jscript; title: ; notranslate">
// include: jquery.transform.js

$elem
  .transform('scale', '.8')
  .transform('rotate', '-30deg');

// …

$elem.transform('rotate', '-45deg');
// -&gt; transform: scale(0.8) rotate(-45deg)

console.log($elem.transform('rotate'));  // =&gt; &quot;-45deg&quot;
</pre></div>

<h2>今後</h2>

<h3>出来るようにする</h3>

<ul>
<li><code>transform</code>の初期値を生かす</li>
<li>単位を自動補完（<code>px</code>とか<code>deg</code>とか）</li>
</ul>

<h3>出来るようにするつもりはない</h3>

<ul>
<li><code>matrix()</code> 対応</li>
</ul>

<h3>道は険しいがやりたい</h3>

<ul>
<li><code>.css()</code>から扱えるようにする

<ul>
<li><code>$elem.css('transform:rotate', '10deg')</code>みたいな</li>
</ul></li>
<li><code>.animate()</code>対応</li>
<li>内部で <code>.data()</code>を利用しているが、<code>jQuery.cache</code>の方に情報を移行したい</li>
<li>汎化; 複数値を取り得るプロパティ全般に対応する

<ul>
<li><code>background-image</code>とか<code>box-shadow</code>とか</li>
<li>インターフェイスをどうするのか悩む……</li>
</ul></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ginpen.com/2013/04/22/jquery-transform-js/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>君は世界最速、最軽量のVanilla JSを知っているか。</title>
		<link>http://ginpen.com/2013/03/25/vanillajs/</link>
		<comments>http://ginpen.com/2013/03/25/vanillajs/#comments</comments>
		<pubDate>Mon, 25 Mar 2013 03:30:24 +0000</pubDate>
		<dc:creator>ginpei</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Vanilla JS]]></category>

		<guid isPermaLink="false">http://ginpen.com/?p=3578</guid>
		<description><![CDATA[jQueryより軽量なZepto.jsよりもよっぽど軽量なVanilla JSの紹介です。 （この記事は誤解を招きやすい箇所が含まれているので、よく注意して読んでくださいね。） 公式サイト Vanilla JS http [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://ginpen.com/wp-content/uploads/2013/03/vanilla-js-logo-150x150.png" alt="" title="vanilla-js-logo" width="150" height="150" class="alignright size-thumbnail wp-image-3579" /></p>

<p>jQueryより軽量なZepto.jsよりもよっぽど軽量なVanilla JSの紹介です。</p>

<p>（この記事は誤解を招きやすい箇所が含まれているので、よく注意して読んでくださいね。）</p>

<h2>公式サイト</h2>

<ul>
<li><a href="http://vanilla-js.com/">Vanilla JS</a></li>
</ul>

<p><figure><a href="http://vanilla-js.com/"><img src="http://ginpen.com/wp-content/uploads/2013/03/vanilla-js-300x128.png" alt="Vanilla JS" width="300" height="128" class="alignnone size-medium wp-image-3580 bordered" /><figcaption>http://vanilla-js.com/</figcaption></a></figure></p>

<blockquote>Vanilla JS is a fast, lightweight, cross-platform framework for building incredible, powerful JavaScript applications.</blockquote>

<p><span id="more-3578"></span></p>

<p>『Vanilla JSは驚異的で強力なJavaScript製アプリケーションのための、高速で軽量、クロスプラットフォームなフレームワークです。』</p>

<p>（いやクロスプラットフォームは嘘だろう、と思うのですが……。）</p>

<h2>概要</h2>

<h3>膨大なシェア、実績</h3>

<p>あまり知られていませんが、jQueryをも凌ぐシェアを誇ります。（正確に言うと、jQueryやPrototype.jsが内部的にVanilla JSを利用しています。）　公式サイトでは全世界の著名なウェブサービスが利用実績としてGoogleやFacebook、Twitter、Amazonなどが挙げられています。</p>

<p>もちろん当サイト、Ginpen.comでも利用しています。</p>

<h3>軽量</h3>

<p>とにかく軽量である点が特徴です。具体的なファイルサイズは、公式サイトの &#8220;Download&#8221; の項でご確認ください。</p>

<p>そのあまりに小さなファイルサイズに目を疑う事でしょう。</p>

<h3>高速</h3>

<p>私の知る限り、Vanilla JSを凌ぐ速度を実現するJSフレームワークはありません。</p>

<p>実際に計測したものは、検証に用いたコード付きで公式サイトに掲載されています。</p>

<p><figure><a href="http://ginpen.com/wp-content/uploads/2013/03/Retrive-DOM-element-by-ID.png"><img src="http://ginpen.com/wp-content/uploads/2013/03/Retrive-DOM-element-by-ID-300x107.png" alt="" title="Retrive DOM element by ID" width="300" height="107" class="alignnone size-medium wp-image-3585 bordered" /><figcaption>IDから要素を検索した際の速度</figcaption></a></figure></p>

<p>そういえばフレームワークではありませんが、<a href="http://ginpen.com/2012/05/31/jsx/" title="JavaScriptみたいな最近噂の新言語、JSXのお話を聞いてきたよ！">JSX</a>だと、書き方によってはVanilla JSより高速になる場合があるそうです。これは書き方の問題だろうとは思います。</p>

<h3>手軽</h3>

<p>jQueryでもGoogleのCDN等を利用して、ファイルのダウンロードなしで利用できますが、Vanilla JSもファイルのダウンロードなしでの利用が可能です。</p>

<p>HTML中に以下を記述してください。</p>

<div><pre class="brush: xml; title: ; notranslate">
</pre></div>

<p>これでVanilla JSを利用できるようになります。</p>

<h2>ね、すごいでしょう？</h2>

<p>あなたもVanilla JSに挑戦してみませんか？</p>

<p>実は来月あたりから「jQueryからVanilla JSへ乗り換える」という連載を始めようかなと思っていたりします。</p>

<h3>……あ、ええと、&#8221;vanilla&#8221; って？</h3>

<p>バニラエッセンスのバニラですが、俗語（？）では &#8220;plain and without any extras or adornments&#8221; という意味もあるようですね。</p>

<p>こちらをどうぞ。</p>

<ul>
<li><a href="http://nlpwww.nict.go.jp/wn-ja/cgi/wn-synset.cgi?synset=01794125-a">WN-JA 1.1</a> via <a href="http://ejje.weblio.jp/content/vanilla">Weblio辞書</a></li>
</ul>

<h3>最後に</h3>

<p>情報は出処（ソース）をよく確認し、自分の中でよく咀嚼するようにしてください。鵜呑みにしてはいけません。</p>

<p>Don&#8217;t believe it, try it!</p>
]]></content:encoded>
			<wfw:commentRss>http://ginpen.com/2013/03/25/vanillajs/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>サーバーサイドエンジニアのためのJavaScript入門、やります。</title>
		<link>http://ginpen.com/2013/03/11/js-for-server-side-engineer/</link>
		<comments>http://ginpen.com/2013/03/11/js-for-server-side-engineer/#comments</comments>
		<pubDate>Mon, 11 Mar 2013 06:03:20 +0000</pubDate>
		<dc:creator>ginpei</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[告知]]></category>

		<guid isPermaLink="false">http://ginpen.com/?p=3534</guid>
		<description><![CDATA[(追記: 2013-04-20) 延期後の日程が決まりました。05/18(土)に開催致します。時刻や内容は同じです。 前回参加者を優先するため、参加登録の方法は23日（火）の12:00頃に公開します。何卒ご容赦くださいま [...]]]></description>
			<content:encoded><![CDATA[<ins>
<p>(追記: 2013-04-20)</p></ins>

<p>延期後の日程が決まりました。05/18(土)に開催致します。時刻や内容は同じです。</p>

<p>前回参加者を優先するため、参加登録の方法は23日（火）の12:00頃に公開します。何卒ご容赦くださいませ。</p>

<ins>
<p>(追記: 2013-04-05)</p></ins>

<p><strong data-oldstyle="color:red; font-size:2em;">延期します。</strong></p>

<p>『<em>樹木が根こそぎ飛ばされ、走行中のトラックが横転するくらいの風が吹くおそれも</em>』との事なので、前日の連絡で申し訳ないのですが、今回はいったん中止とさせて頂きます。</p>

<ul>
<li><a href="http://tenki.jp/forecaster/diary/detail-5819.html">嵐の備えはきょうのうちに(2013年4月5日) &#8211; 日直予報士 &#8211; 日本気象協会 tenki.jp</a></li>
</ul>

<p>また日程を改め実施したいと考えております。日程が決まりましたら別にATNDを立て、また今回ご登録頂いた方にはATNDのメッセージで連絡させて頂きます。</p>

<p>よろしくお願い致します。</p>

<hr />

<p>いろいろあって告知が遅れてしまったのですが、いよいよ告知します。</p>

<p><a href="http://tane-maki.net/">タネマキ</a>にて。</p>

<p><em>なお日程が当初の予定(3/16)から変更になっております。</em> 16日で予定調整してくださった方、おられましたら本当にすみません……。</p>

<h2>概要</h2>

<p>普段サーバー側のプログラム、PHPやらRubyやらPerlやらを書いている方々向けに、JavaScriptの基本的なところ、サーバー側とは異なる思想の紹介、家に帰ってすぐ使える実例なんかをお話したいと思います。</p>

<p>内容が非フロントの方向けに、という事です。なので別にサーバー側の方でなくても、例えばネイティブアプリを作っておられるような方でも構いません。 <code>if</code> 文みたいなプログラミングの基礎はお話ししませんよーって話です。</p>

<p>あ、勉強会じゃなくて有料の講習会です。あと、手を動かすより話を聞いて頂く時間が長めになりそうな予感です。（本当は手を動かして頂きたいんだけど……。）</p>

<h2>内容</h2>

<ul>
<li>サーバー側の言語とJavaScriptの違い</li>
<li>jQueryとは</li>
<li>JavaScriptを取り巻く技術</li>
<li>ダイアログ、ドラッグ＆ドロップ、リアルタイム更新……よくあるUI</li>
<li>移動、拡大縮小、フェードアウト……よくあるエフェクト</li>
<li>JavaScriptのデバッグ方法</li>
<li>Ajaxで実装する、画面遷移のないCRUD</li>
<li>あと何か習作</li>
</ul>

<p>テキスト等はありません。講義後にスライド(PDF)のダウンロードURLをお知らせします。</p>

<p>※予定です。当日までに変わる可能性があります。</p>

<h2>詳細</h2>

<p><span id="more-3534"></span></p>

<h3>場所</h3>

<p>横浜<a href="http://tane-maki.net/">タネマキ</a>でやります。</p>

<ul>
<li><a href="https://maps.google.co.jp/maps?q=%E7%A5%9E%E5%A5%88%E5%B7%9D%E7%9C%8C%E6%A8%AA%E6%B5%9C%E5%B8%82%E8%A5%BF%E5%8C%BA%E5%B2%A1%E9%87%8E1-3-10+%E3%82%B5%E3%83%8B%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%88%E6%A8%AA%E6%B5%9C&amp;hl=ja&amp;ie=UTF8&amp;ll=35.461124,139.615545&amp;spn=0.018456,0.027981&amp;sll=36.5626,136.362305&amp;sspn=36.979055,57.304688&amp;brcurrent=3,0x60185c6e6db102ff:0x5db4e82b559fa853,0&amp;hq=%E7%A5%9E%E5%A5%88%E5%B7%9D%E7%9C%8C%E6%A8%AA%E6%B5%9C%E5%B8%82%E8%A5%BF%E5%8C%BA%E5%B2%A1%E9%87%8E1-3-10+%E3%82%B5%E3%83%8B%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%88%E6%A8%AA%E6%B5%9C&amp;radius=15000&amp;t=m&amp;z=15">神奈川県横浜市西区岡野1-3-10 サニーコート横浜</a> 1F</li>
<li>「横浜駅」みなみ西口から徒歩8分。相鉄線「平沼橋駅」徒歩3分。</li>
<li><a href="http://tane-maki.net/access/">アクセス &#8211; タネマキ</a> ←外観の写真あり</li>
</ul>

<p>横浜駅みなみ西口（＝相鉄西口）から出て曲がるのは、道なりのものを除き、一度だけです。</p>

<p>ただ道程はごく単純なのですが、繁華街を抜けて住宅街に存在しているので到着までに不安が募るかと思います。どうぞ強い心を持ってお越しください。</p>

<p>なお地図で探すなら平沼高校で検索するのが目立って良いかと思います。</p>

<h3>日程</h3>

<ul>
<li>2013年4月6日</li>
<li>12:30開場</li>
<li>13:00 &#8211; 17:00 (4h)</li>
</ul>

<p>途中で何度か休憩をはさみます。</p>

<h3>お持ち物</h3>

<p>ノートPCの類に <strong>Google Chromeをインストールして</strong> お持ちください。途中でChromeの機能（デベロッパーツール）を利用します。</p>

<p>なお電源、Wi-Fiはタネマキから提供されます。</p>

<h3>費用</h3>

<ul>
<li>一般 3,000円</li>
<li>タネマキメンバー 1,000円</li>
</ul>

<p>当日、現地で頂戴します。（お釣りのないよう、ご協力をお願い致します。）</p>

<p>また領収証が必要であればその際にお申し付けください。</p>

<h3>人数</h3>

<p>先着で20名まで。</p>

<h2>お申し込み</h2>

<p>こちらからどうぞ。</p>

<ul>
<li><a href="http://atnd.org/events/38994">サーバーサイドエンジニアのためのJavaScript入門 : ATND</a></li>
</ul>

<h2>その他</h2>

<p>質問等あればこの記事のコメントや<a href="https://twitter.com/ginpei_jp">twitter</a>、<a href="http://ginpen.com/about/">メール</a>などでご連絡くださいませ。</p>
]]></content:encoded>
			<wfw:commentRss>http://ginpen.com/2013/03/11/js-for-server-side-engineer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>次世代JavaScript、ECMAScript6の話を聞いてきたからサンプルコードとかメモしときます。</title>
		<link>http://ginpen.com/2013/01/17/ecmascript6/</link>
		<comments>http://ginpen.com/2013/01/17/ecmascript6/#comments</comments>
		<pubDate>Thu, 17 Jan 2013 13:15:08 +0000</pubDate>
		<dc:creator>ginpei</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ginpen.com/?p=3515</guid>
		<description><![CDATA[これ行って来ました。 Web先端技術味見部#15 （今回は「ECMAScript6をそろそろ触る」！） : ATND 楽しかった！ JavaScript (JS)とECMAScript (ES)の違いとか、そういうのはグ [...]]]></description>
			<content:encoded><![CDATA[<p>これ行って来ました。</p>

<ul>
<li><a href="http://atnd.org/events/35850">Web先端技術味見部#15 （今回は「ECMAScript6をそろそろ触る」！） : ATND</a></li>
</ul>

<p>楽しかった！</p>

<p>JavaScript (JS)とECMAScript (ES)の違いとか、そういうのはググってください。</p>

<p><span id="more-3515"></span></p>

<h2>メモ</h2>

<ul>
<li><a href="http://www.mozilla.jp/firefox/preview/">Firefox Aurora</a>が現状ES6最先端ぽい。次点Chromeは<br />
<code>chrome://flags</code><br />
から「JavaScript の試験運用機能を有効にする」を有効にして再起動でES6の機能が使えたりするらしい。</li>
<li>Firefoxで<br />
メニューのツール＞Web開発＞スクラッチパッド<br />
でスクラッチパッド。なんかコンソールより便利なやつ。</li>
<li>配列内包表記も使えるように。でも見づらいので三項演算子（<code>?:</code>演算子）みたいな扱いになりそうに思った。</li>
</ul>

<h2>サンプルコードいろいろ</h2>

<h3><code>let</code></h3>

<p>ブロックスコープになる。<code>var</code>と有効範囲が異なる。</p>

<div><pre class="brush: jscript; title: ; notranslate">
let x = 0;
if (1) {
  let x = 1;
  console.log(x);  // =&gt; 1
}
console.log(x);  // =&gt; 0
</pre></div>

<div><pre class="brush: jscript; title: ; notranslate">
var x = 0;
if (1) {
  var x = 1;
  console.log(x);  // =&gt; 1
}
console.log(x);  // =&gt; 1
</pre></div>

<h3><code>const</code></h3>

<p>定数を宣言する。定数は再代入が無視される。</p>

<div><pre class="brush: jscript; title: ; notranslate">
const x = 123;
console.log(x);  // =&gt; 123
x = 234;
console.log(x);  // =&gt; 123 (!=234)
</pre></div>

<p>ただし&#8217;use strict&#8217;を書いてstrictモードにしておくと、 &#8220;Exception: x is read-only&#8221; といわれる。ふむふむ。</p>

<div><pre class="brush: jscript; title: ; notranslate">
'use strict';
const x = 123;
x = 234;  // =&gt; Exception: x is read-only
</pre></div>

<p>ヒント: <code>const</code>を試して &#8220;Exception: redeclaration of const&#8221; と言われたら、<br />
メニューの実行メニュー＞変数をリセット<br />
で変数を初期化する。件のエラーは、constで二度宣言しようとしているため。（一度目の実行状態が残っている。）</p>

<h3>分割代入</h3>

<p>配列の一部を、複数の変数へ代入するってのを一発でやる記法。</p>

<div><pre class="brush: jscript; title: ; notranslate">
// 変数から
var [a,,c] = [1,2,3];
console.log('a', a);  // =&gt; 1
console.log('c', c);  // =&gt; 3
</pre></div>

<div><pre class="brush: jscript; title: ; notranslate">
// オブジェクトから
var {x,z} = { x:123, z:345, y:234 };
console.log('x', x);  // =&gt; 123
console.log('z', z);  // =&gt; 345
</pre></div>

<p><code>var [x,y] = position;</code>とか良さそう。</p>

<p>もっと複雑なのも。</p>

<div><pre class="brush: jscript; title: ; notranslate">
var [x,{y}] = [{x:123}, {y:234}];
console.log(x,y);  // =&gt; {x:123}, 234
</pre></div>

<div><pre class="brush: jscript; title: ; notranslate">
var arr = [{x:123}, {y:234}]
var [x,{y}] = arr;
console.log(x === arr[0]);  // =&gt; true
</pre></div>

<h3>関数の引数に初期値を与える</h3>

<div><pre class="brush: jscript; title: ; notranslate">
// 引数の初期値
function f(a=123, b=234) {
  console.log(a, b);
}
f();  // =&gt; 123 234
f(987);  // =&gt; 987 234
f(987,876);  // =&gt; 987 876
</pre></div>

<div><pre class="brush: jscript; title: ; notranslate">
// 引数がundefinedだと初期値、nullならnull
function f(a=123, b=234) {
  console.log(a, b);
}
f(null, undefined);  // =&gt; null 234
</pre></div>

<h3>可変長引数</h3>

<p><code>arguments</code>は遅いので、こちらを使おう！という話らしい。</p>

<div><pre class="brush: jscript; title: ; notranslate">
// 可変長引数
function f(x, ...args) {
  console.log(x, args);
}
f(1,2,3);  // =&gt; 1 [2,3]
</pre></div>

<h3>MapとかSetとか</h3>

<div><pre class="brush: jscript; title: ; notranslate">
// Map
var map = new Map;
map.set('x', 123);
console.log(map.get('x'), map.get('y'));  // =&gt; 123 undefined
</pre></div>

<p>MapとObjectの違い:</p>

<blockquote class="twitter-tweet tw-align-center" lang="ja"><p>Objectのプロパティはキーが文字列限定。Mapはオブジェクトをキーにとれるため、例えばこのDOM要素のメタ情報を…みたいなものをDOM要素自身に付加せず行える RT @<a href="https://twitter.com/vvakame">vvakame</a>: MapとObjectの差がよーわからんしどう使い分けるべきなのかわからん <a href="https://twitter.com/search/%23ajimibu">#ajimibu</a></p>&mdash; dynamis (でゅなみす)さん (@dynamitter) <a href="https://twitter.com/dynamitter/status/291873686053613568" data-datetime="2013-01-17T11:44:44+00:00">1月 17, 2013</a></blockquote>

<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<div><pre class="brush: jscript; title: ; notranslate">
// Set
var set = new Set();
set.add(10);
console.log(set.has(10), set.has('10'));  // =&gt; true false
</pre></div>

<div><pre class="brush: jscript; title: ; notranslate">
// Setは+0と-0も区別する
var set = new Set();
set.add(0);
console.log(set.has(+0), set.has(-0));  // =&gt; true, false
</pre></div>

<p>WeakMap使用場面例:</p>

<ol>
<li>コンストラクター<code>C</code>でインスタンス<code>o</code>生成時に、WeakMap <code>m</code>へ格納しておく。</li>
<li><code>m</code>が<code>o</code>を持っていれば、<code>o</code>は<code>C</code>のインスタンスである。（手でプロパティを操作しても判断できる。）</li>
<li>通常のMapと異なり、<code>o</code>はGCに回収され得る。</li>
</ol>

<h3>イテレーター系</h3>

<div><pre class="brush: jscript; title: ; notranslate">
// イテレーター (for-of)
var map = new Map();
map.set('a', 123);
map.set('b', 234);
for (var [k,v] of map) {
  console.log(k,v);
}
</pre></div>

<p>通常のオブジェクトはイテレーターに対応していない。</p>

<div><pre class="brush: jscript; title: ; notranslate">
var map = {
  a: 123,
  b: 234
};
for (var [k,v] of map) {  // Exception: map is not iterable
  console.log(k,v);
}
</pre></div>

<p>ただし、自前で<code>iterator()</code>を実装すれば利用可能とのこと。</p>

<ul>
<li><a href="https://developer.mozilla.org/ja/docs/JavaScript/Guide/Iterators_and_Generators">イテレータとジェネレータ &#8211; JavaScript | MDN</a></li>
</ul>

<h3>クラス</h3>

<p>話題の。</p>

<p>それでもESはprototypeベースであり、<code>class</code>は糖衣構文にすぎない、つまり既存の記法で置き換え可能であるらしい。</p>

<h2>楽しかった！</h2>

<p>なんかヘンテコな記法が増えたりしてないみたいで良かった。（<code>|&gt;</code>とか……。）</p>

<p>今後が楽しみです。</p>
]]></content:encoded>
			<wfw:commentRss>http://ginpen.com/2013/01/17/ecmascript6/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>新年明けましておめでとうございました。昨年の振り返りとか人気記事とか。</title>
		<link>http://ginpen.com/2013/01/08/old-and-new-year/</link>
		<comments>http://ginpen.com/2013/01/08/old-and-new-year/#comments</comments>
		<pubDate>Tue, 08 Jan 2013 05:24:41 +0000</pubDate>
		<dc:creator>ginpei</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[告知]]></category>

		<guid isPermaLink="false">http://ginpen.com/?p=3502</guid>
		<description><![CDATA[高梨ギンペイです。本年もよろしくお願い致します。 独立したのが一昨年で、ろくに仕事もせずにいたのですが（笑）、昨年はお陰様で色々お仕事を頂くなどしまして、対外的にはだいぶ成長できたように思います。ただ自身の方はそうでもな [...]]]></description>
			<content:encoded><![CDATA[<p>高梨ギンペイです。本年もよろしくお願い致します。</p>

<p>独立したのが一昨年で、ろくに仕事もせずにいたのですが（笑）、昨年はお陰様で色々お仕事を頂くなどしまして、対外的にはだいぶ成長できたように思います。ただ自身の方はそうでもない感じなので、今年は期待を裏切らない中身を育てたいと思っております。</p>

<p>あと自己啓発とか英会話とか、そういう胡散臭い系のにもちょいと手を出してみようかなと思っています。もう五年くらい早くからやりたかったなー。海外に旅行も行ってみたいですね。</p>

<p>というわけで私個人の話はおしまい。</p>

<h2>2012年PV数の多かった記事10件</h2>

<p>単純にPV数でだけ見ています。やっぱりJavaScript中心に、フロントエンドの話ばかりですねえ。</p>

<p><span id="more-3502"></span></p>

<h3>1位: IE9をWindows XPにインストール……はできないので、こんな方法はいかがでしょうか。</h3>

<ul>
<li><a href="http://ginpen.com/2011/04/26/ie9-on-winxp/">http://ginpen.com/2011/04/26/ie9-on-winxp/</a></li>
</ul>

<p>やっぱりIE 9の確認は苦労しておられる方が多いようですね。書いたの2011年ですが……。</p>

<p>記事内にも追記していますが、だいぶ情報が古くなっています。といっても設定などは変わらないと思うのですが。そろそろ書き直したいですね。当時はWindows 7は出ていませんでしたね。</p>

<h3>2位: jQueryでフォームの値を取得する方法をまとめておくので、コピペでご利用ください。</h3>

<ul>
<li><a href="http://ginpen.com/2012/05/21/how-to-get-values-from-form-with-jquery/">http://ginpen.com/2012/05/21/how-to-get-values-from-form-with-jquery/</a></li>
</ul>

<p>フォームの種類別の値の取り方。HTML5で新設された種類のものは触れていません。</p>

<p>これは需要があるだろうなあと思っていました。</p>

<h3>3位: CSS3のWeb Fontを使ってみたよ。</h3>

<ul>
<li><a href="http://ginpen.com/2011/02/28/css3-web-font/">http://ginpen.com/2011/02/28/css3-web-font/</a></li>
</ul>

<p>これも2011年の記事。ウェブフォント、簡単に使えるので是非試してみてください。でもこの記事も内容が古いかな。</p>

<h3>4位: jQuery 1.8の更新内容をまとめたよ。</h3>

<ul>
<li><a href="http://ginpen.com/2012/08/14/jquery-1-8/">http://ginpen.com/2012/08/14/jquery-1-8/</a></li>
</ul>

<p>事前にjQueryの動向を追っておらず、週末に急いで書いた記事。いや、内容はちゃんと書いてます。</p>

<p>そういえばモジュール化はだいぶ大きいかと思ったのですが、今のところ有効活用しているような話は聞きませんね。</p>

<p>今年は1.9が出そうです。並行してZeptoの記事も書きたいなあ。</p>

<h3>5位: IE7, IE8, IE9とかのダウンロードページまとめ。</h3>

<ul>
<li><a href="http://ginpen.com/2011/08/22/download-ie-series/">http://ginpen.com/2011/08/22/download-ie-series/</a></li>
</ul>

<p>2011年の記事。ブックマークに入れておくと、幸せになれるかも。</p>

<h3>6位: 典型的なJavaScripter3+1種類と、それぞれの勉強範囲。</h3>

<ul>
<li><a href="http://ginpen.com/2012/11/13/3-types-of-typical-jser/">http://ginpen.com/2012/11/13/3-types-of-typical-jser/</a></li>
</ul>

<p>自分がJavaScriptの講習なんかをやる関係で考えていた事。一口にJavaScripterなんていっても目的地は諸々なので、情報の取捨選択も人それぞれです。</p>

<p>正直この記事は「こんな分け方はひどい」なんて叩かれるかなあと思っていたのですが、存外受け入れられたようでほっとしました。叩かれるほど知られていない、というのもありそうですが。</p>

<h3>7位: jQuery 1.7の更新内容をまとめたよ。</h3>

<ul>
<li><a href="http://ginpen.com/2011/11/04/jquery-1-7/">http://ginpen.com/2011/11/04/jquery-1-7/</a></li>
</ul>

<p>2011年の記事。 <code>.on()</code>とかその辺りの情報を求めて来られる方が多いようです。このメソッド、他のライブラリーにも影響を与えましたね。</p>

<h3>8位: width:100%なのにはみ出す理由と回避策。CSSを触るなら必ず理解しなくてはいけないボックスモデルの話。（CSS おれおれ Advent Calendar 2012 – 05日目）</h3>

<ul>
<li><a href="http://ginpen.com/2012/12/05/css-box-model/">http://ginpen.com/2012/12/05/css-box-model/</a></li>
</ul>

<p>昨年の<a href="http://ginpen.com/2012/12/01/css-ginpei-advent-calendar-2012/">CSS おれおれ Advent Calendar 2012</a>の記事。</p>

<p>これはご存知ない方は是非ご一読を。マークアップの際、変なところでつまづく事が減ると思います。</p>

<h3>9位: jQuery1.6のattr()で困ったら、1.6.1にすればいいみたい。</h3>

<ul>
<li><a href="http://ginpen.com/2011/05/20/jquery-1-6-1/">http://ginpen.com/2011/05/20/jquery-1-6-1/</a></li>
</ul>

<p>2011年の記事。いやあ、jQuery 1.6もずいぶん昔のような気がしますね。</p>

<h3>10位: CSSは分かるけどjQueryは苦手……という人が .attr()と .prop()に親しんでくれるといいなーと思って書きました。</h3>

<ul>
<li><a href="http://ginpen.com/2011/10/12/jquery-attr-prop/">http://ginpen.com/2011/10/12/jquery-attr-prop/</a></li>
</ul>

<p>2011年の記事。jQuery 1.6で <code>.attr()</code>の仕様が変わってしまった件について。</p>

<h2>気合いを入れて書いた記事</h2>

<p>個人的にはおすすめ！と思ってる記事です。</p>

<h3>やたー何語だか調べるやつできたよー！</h3>

<ul>
<li><a href="http://ginpen.com/2012/01/16/whatlan/">http://ginpen.com/2012/01/16/whatlan/</a></li>
</ul>

<p>ある文字が何語だか調べるやつを作りました、という記事。これは記事じゃなくてアプリがおすすめです。</p>

<h3>RSpecでRailsのテストをしてみるテスト。</h3>

<ul>
<li><a href="http://ginpen.com/2012/02/14/rspec-rails/">http://ginpen.com/2012/02/14/rspec-rails/</a></li>
</ul>

<p>Ruby on Railsのイケてる（当時）試験フレームワークの、自動生成されるコードを全部読んでみた記事。その後、使ってないなあ。最近はMiniTestてのが熱いんですか？</p>

<h3>JavaScriptには在るundefinedと無いundefinedってのがありまして。</h3>

<ul>
<li><a href="http://ginpen.com/2012/03/19/js-undefined/">http://ginpen.com/2012/03/19/js-undefined/</a></li>
</ul>

<p>JavaScriptで混乱しそう（で、あんまりしない）部分について。「無が有る」というのが、なんだか面白くて好きです。</p>

<h3>プログラマーだけどWordPressのテーマを1から作ってみる。（目次）</h3>

<ul>
<li><a href="http://ginpen.com/2012/04/09/wp-theme/">http://ginpen.com/2012/04/09/wp-theme/</a></li>
</ul>

<p>このブログのデザインを刷新しようと、色々調べて試してみたまとめ。この月はWordPressについてばっかりだったなあ。</p>

<p>その後、意外とさっくりテーマを作れてしまったので、意外とさっくり更新停止されました。</p>

<p>WordPressのテーマの作り方、というのも記事にしたいと思って、下書き状態でだいぶ長い期間放置されています（笑）。</p>

<h3>Google ChromeでiPhoneとかのtouch系イベントをエミュレートできるようになってた。これは便利。</h3>

<ul>
<li><a href="http://ginpen.com/2012/05/28/emulating-touch-events-on-chrome/">http://ginpen.com/2012/05/28/emulating-touch-events-on-chrome/</a></li>
</ul>

<p>これは本当に助かってます。</p>

<h3>jQueryが要素検索に使うSizzleについて。</h3>

<ul>
<li><a href="http://ginpen.com/2012/09/14/sizzle/">http://ginpen.com/2012/09/14/sizzle/</a></li>
</ul>

<p>jQueryの内部実装について。書いてはみたけれど、思った程面白くなりませんでした。</p>

<h3>Backbone.jsのサンプルアプリのコードを読んでみた。</h3>

<ul>
<li><a href="http://ginpen.com/2012/11/05/backbone-sample/">http://ginpen.com/2012/11/05/backbone-sample/</a></li>
</ul>

<p>TODOアプリのサンプルが公開されていたので、全部読んでみた体験談です。</p>

<p>書いていて勉強になりました。その後、仕事でBackbone.jsを使うときもこの記事を見返したりしてます。（ここどうやって書くんだっけ？とか）</p>

<p>今見ると、このサンプル自体が、古いしあまり正確な実装ではないのかなあ、と思います。</p>

<h3>Linuxでcdの代わりにpushdを使うと作業効率がまじマッハ。</h3>

<ul>
<li><a href="http://ginpen.com/2012/11/27/pushd/">http://ginpen.com/2012/11/27/pushd/</a></li>
</ul>

<p>これ良いです。使う人は使うと良いですよ。</p>

<h3>CSS おれおれ Advent Calendar 2012やります。ひとりで。</h3>

<ul>
<li><a href="http://ginpen.com/2012/12/01/css-ginpei-advent-calendar-2012/">http://ginpen.com/2012/12/01/css-ginpei-advent-calendar-2012/</a></li>
</ul>

<p>ひとりAdvent Calendar。一昨年に続いて昨年もやりました。</p>

<p>一昨年と違い昨年は常駐で週五の勤務だったので大変でした。日付が変わる前に投稿できたのはごく僅かでしたね。うーん。</p>

<h3>JavaScriptをもっと上達したい人へ、最後のヒント</h3>

<ul>
<li><a href="http://ginpen.com/2012/01/25/last-hints-for-jser/">http://ginpen.com/2012/01/25/last-hints-for-jser/</a></li>
</ul>

<p>オチ担当。でも真理だと思いますよ！</p>

<h2>ちなみにアクセス数は</h2>

<p>こんな感じでした。</p>

<p><figure><a href="http://ginpen.com/wp-content/uploads/2013/01/Accesses.png"><img src="http://ginpen.com/wp-content/uploads/2013/01/Accesses-300x75.png" alt="" title="Accesses" width="300" height="75" class="alignnone size-medium wp-image-3503 bordered" /><figcaption>2012年、2011年のPV数と新規訪問率</a></figure></p>

<h2>2013年です</h2>

<p>ブロガーではないので記事を書く事自体を目的とはしていないのですが、それでも出来れば人のためになるようなものを書いてゆければな、と思っております。</p>

<p>とうに正月も明けましたが、どうぞ今年もよろしくお願い致します。</p>
]]></content:encoded>
			<wfw:commentRss>http://ginpen.com/2013/01/08/old-and-new-year/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScriptから見たCSS。CSSを学ぶという事。（CSS おれおれ Advent Calendar 2012 – 24日目）</title>
		<link>http://ginpen.com/2012/12/25/css-with-javascript/</link>
		<comments>http://ginpen.com/2012/12/25/css-with-javascript/#comments</comments>
		<pubDate>Mon, 24 Dec 2012 19:48:39 +0000</pubDate>
		<dc:creator>ginpei</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[CSS おれおれ Advent Calendar 2012]]></category>

		<guid isPermaLink="false">http://ginpen.com/?p=3466</guid>
		<description><![CDATA[CSS おれおれ Advent Calendar 2012 – 24日目 CSS おれおれ Advent Calendarの今年最後の記事です。JavaScript視点でCSSを考えてみます。 先に結論を申し上げると C [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ginpen.com/2012/12/01/css-ginpei-advent-calendar-2012/">CSS おれおれ Advent Calendar 2012</a> – 24日目</p>

<p>CSS おれおれ Advent Calendarの今年最後の記事です。JavaScript視点でCSSを考えてみます。</p>

<h3>先に結論を申し上げると</h3>

<p>CSSがあるお陰でJavaScriptが便利に！　JavaScriptをやるならCSSを学ぶ必要があるし、CSSを習得した人ならJavaScriptを始めるのに有利！　というお話です。</p>

<p>なおCSSなる単語が出現してきた時点でお分かり頂けると思うが、クライアント側JavaScript、つまりウェブブラウザーで動くJavaScriptが文脈です。Node.jsとかは今回の範囲外。（もちろん、あれも楽しいよね！）　あ、あとSVGやらも範囲外です。</p>

<p>断定的に申していても、常々例外はあるものです。</p>

<h2>JavaScriptで出来る事、出来ない事</h2>

<p><span id="more-3466"></span></p>

<p><a href="http://www.pakutaso.com/201155photo294post-793.html"><img src="http://ginpen.com/wp-content/uploads/2012/12/PPU_nekononikukyu-.jpg" alt="" title="" width="300" height="200" class="alignright size-full wp-image-3480 bordered" /></a></p>

<p>JavaScriptそれ自体が出来る事は、あまりありません。数値を計算したり文章を編集したりってのが関の山です。</p>

<p>しかし現実にはJavaScriptを用いた、多くの「派手な」実装があります。クリックすると画面が切り替わったり、メッセージが表示されたり、あるいはゲームが進行することもあります。</p>

<p>これはどういう事かと言うと、その「周辺仕様のAPI」をJavaScript経由で利用しているのです。（これは他の言語でも一緒ですが。）</p>

<h3>JavaScriptだけじゃ何も出来ない</h3>

<p>処理した数値や文章を出力するには、それ相応の出力を行わねばなりません。が、JavaScriptの言語中核仕様にはあらゆる出力は規定されていません。往年の<code>alert()</code>も近年の<code>console.log()</code>も、あるいは<code>document.write()</code>や<code>element.innerHTML</code>も全てJavaScriptそれ自体ではなく周辺仕様の類です。</p>

<p>例えば通信処理を行う場合はXMLHttpRequestという仕様をJavaScriptから利用して行います。例えば音楽を鳴らす場合はFlashをJavaScriptから操作します。（最近はHTML5がありますが、JavaScriptではありません。）</p>

<p>そして、その最たるものが、HTMLとCSSです。</p>

<h2>CSSで出来る事、JavaScriptとの繋がり</h2>

<p>というわけで閑話休題。</p>

<p>JavaScriptであれやこれやと計算をして、例えば画像を動かすような場合、その場所を指定するのにCSSを利用します。もちろん、JavaScriptなしでCSSだけで場所を指定する場面も多々ある事でしょう。そうやって配置したものを動かすときに使うのが、JavaScriptです。あるいは逆に見ると、JavaScriptから画像の位置を動かすには、CSSを使う他ありません。</p>

<p>配置を例に上げましたが、CSSの多彩な表現はそれに留まりません。文字の大きさや背景の色、矩形の大きさを定めたり影を付けたり、余白、不透明度の指定まで出来ます。これらを駆使して画面を彩ります。</p>

<p><figure><a href="http://www.eleqtriq.com/wp-content/static/demos/2010/css3d/butterfly.html"><img src="http://ginpen.com/wp-content/uploads/2012/12/CSS-3D-Butterfly.png" alt="CSS 3D Butterfly" title="" width="300" height="201" class="alignnone size-full wp-image-3476 bordered" /><figcaption>CSS 3D Butterfly &#8211; CSSの3D表現とAnimationsモジュールで実装した、飛び回る蝶のデモ。</figcaption></a></figure></p>

<p>JavaScriptにはそれが出来ません。出来るのは、そういう「CSSを使う」ところまでです。JavaScriptでそういった動きを実現するために、我々はCSS（とHTML）についても合わせて学ぶ必要があります。</p>

<h2>JavaScriptから見たCSS</h2>

<p><a href="http://www.pakutaso.com/201154photo141post-132.html"><img src="http://ginpen.com/wp-content/uploads/2012/12/PP_kikainosuichi.jpg" alt="" title="" width="300" height="200" class="alignright size-full wp-image-3472 bordered" /></a></p>

<p>前述の通り、JavaScriptから画面を操作しようとした場合、HTMLとCSSが必須となります。</p>

<p>ですが、これは良い事です。視覚的な細かい処理を自分でやる必要がなくなりますから。</p>

<p>例えば枠線を描く、といった処理を自前で作成するのは楽ではありません。特定の文字列領域を探して来て、矩形領域を計算し、適切なブラシを以てパスを描画する、なんて面倒でやっていられません。</p>

<p>セレクター（あ、これも実に強力ですね！）で検索して、指定の形式<code>border:dotted 3px red</code>を「設定」するだけで、完了です。楽ちんです。</p>

<p>特に最近ではCSS 3の登場により、視覚表現が飛躍的に強化されています。</p>

<p>影を自前で描画する事を考えてください。背景用に複数の画像の配置を自前で計測する事を考えてください。立体的な矩形の変形を自前で演算する事を考えてください。</p>

<p>気が遠くなりそうです。でも、CSSがこのあたりを全部引き受けてくれるので（ブラウザーが既に実装してくれているので）、我々は簡単に視覚表現を実装する事が出来ます。</p>

<p>ありがとう、CSS！　ありがとう、ブラウザーベンダー！　<span style="opacity:.3">でもIE 6は爆発しろ！</span></p>

<h2>学ぶ</h2>

<h3>CSSから始めてJavaScriptを学ぶ場合</h3>

<p>あ、もちろんHTMLもCSSと一緒にやっといてくださいね。</p>

<p>先にCSSを知っている人は、プログラミングなるものを学ぶ事になります。これはなかなか難易度が高いです。</p>

<p>が、取っ掛かりはしやすいはずです。何と言ってもすぐに結果が出ますから。</p>

<p>具体的にやりたい事というのは、既にご存知のはずです。例えば最近流行りの視差表現（パララックス）を実現したいなら、「よくわかんないけどスクロールしたら<code>position</code>を操作すりゃ良いんでしょ」とまではわかるはずです。あとは順番に（「スクロールしたら」ってどうやってわかるの？　<code>position</code>を設定する要素はどこから探すの？　というかCSSを設定するってどうやるの？）解決してゆけば、全て実装できます。</p>

<p>大丈夫。</p>

<h3>JavaScriptのためにCSSを学ぶ場合</h3>

<p>CSSで表現の幅が増えたという事は、CSSを使ったJavaScriptの表現も幅も<strong>それ以上に増えた</strong>という事です。</p>

<p>例えば先程掲載した<a href="http://www.eleqtriq.com/wp-content/static/demos/2010/css3d/butterfly.html">CSS 3D Butterfly</a>をキーボードから動かせたら、もうちょっとしたゲームが作れますね。</p>

<p>そこまで高度でなくても、フォームの入力内容を確認してエラーを表示するとか、一覧を動的に検索して強調表示するとか、そういうのはCSSも知っていないと実装しづらいと思います。サイズを変えるならボックスモデルや、配置するなら包含ブロックについての知識も必要でしょう。（いずれもCSSの仕様です。）</p>

<h2>おしまい</h2>

<p>つらつらと書いてみましたが、まあ誰が得するんだよって感じに仕上がりました。</p>

<p>うーん。まあ良いか。一応、これで本年のひとりAdvent Calendarは完走という事にしたいと思います。（うちは<a href="http://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%89%E3%83%99%E3%83%B3%E3%83%88%E3%82%AB%E3%83%AC%E3%83%B3%E3%83%80%E3%83%BC" title="アドベントカレンダー - Wikipedia">本家</a>に合わせて24日で終わり。）　いやあ、明日からは早寝早起きをしたいと思います。</p>

<p>とっぴんぱらりのぷう。</p>
]]></content:encoded>
			<wfw:commentRss>http://ginpen.com/2012/12/25/css-with-javascript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CSSだけでウィンドウぴったりに表示する編集画面を作る。（CSS おれおれ Advent Calendar 2012 – 23日目）</title>
		<link>http://ginpen.com/2012/12/24/fix-window-height/</link>
		<comments>http://ginpen.com/2012/12/24/fix-window-height/#comments</comments>
		<pubDate>Sun, 23 Dec 2012 17:39:42 +0000</pubDate>
		<dc:creator>ginpei</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[box-sizing]]></category>
		<category><![CDATA[CSS おれおれ Advent Calendar 2012]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://ginpen.com/?p=3447</guid>
		<description><![CDATA[CSS おれおれ Advent Calendar 2012 – 23日目 メールとかブログ記事とかの編集画面みたいなのがあって、それをウィンドウいっぱいに表示するとき、ウィンドウに合わせて縦方向に伸ばすのってどうしてます [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://ginpen.com/wp-content/uploads/2012/12/editor-300x204.png" alt="" title="" width="300" height="204" class="alignright size-medium wp-image-3460 bordered" /></p>

<p><a href="http://ginpen.com/2012/12/01/css-ginpei-advent-calendar-2012/">CSS おれおれ Advent Calendar 2012</a> – 23日目</p>

<p>メールとかブログ記事とかの編集画面みたいなのがあって、それをウィンドウいっぱいに表示するとき、ウィンドウに合わせて縦方向に伸ばすのってどうしてますか？　JavaScript使っちゃいます？　<a href="http://www.adventar.org/calendars/2">それCSSで出来るよ</a>！</p>

<p>ウェブサービスではあんまりないUIだと思うけど、ウェブアプリ的なものだったらよくあるのでは。</p>

<h2>概要</h2>

<p>ネタバレ。</p>

<p><code>height:100%</code>で常に画面の高さに合わせつつ、固定の部分については<code>padding</code>で隙間を用意します。その際に<code>box-sizing:border-box</code>を指定する事で、隙間の部分まで含めた高さを指定出来るようにします。</p>

<h2>高さを<code>100%</code>に出来る場合、出来ない場合について知る</h2>

<p>昔書いたのでちらと読んでみてください。</p>

<ul>
<li><a href="http://ginpen.com/2011/07/01/height-100-parcent/">CSSでheight:100%を使う方法について。</a></li>
</ul>

<p>一言で言うと、<strong>上位要素に高さの指定がある場合にのみ出来る</strong>という感じです。</p>

<h2>最上位要素の高さを指定する</h2>

<p>HTMLのドキュメントツリーにおける最上位要素といえば、もちろん<code>html</code>要素です。</p>

<p>あと<code>body</code>要素もついでに設定しちゃいましょう。こちらは一般的なブラウザーでは、初期状態で余白が指定されているので、それもリセットします。</p>

<div><pre class="brush: css; title: ; notranslate">
html, body { height:100%; margin:0; }
</pre></div>

<h2>縦にいっぱいだけど余白がある要素をつくる</h2>

<p>縦いっぱいに広げるのは<code>height:100%</code>だけで可能です。今回やりたいのは、それに加えて固定の高さの領域を用意する、というものです。</p>

<p><code>padding</code>と<code>box-sizing:border-box</code>を利用します。つまり<code>height:100%</code>が示す値を、<code>padding</code>まで含めたものとします。</p>

<div><pre class="brush: xml; title: ; notranslate">
&lt;body&gt;
  &lt;div class=&quot;editor&quot;&gt;Content box&lt;/div&gt;
&lt;/body&gt;
</pre></div>

<div><pre class="brush: css; title: ; notranslate">
.editor {
  box-sizing: border-box;
  height: 100%;
  padding-top: 30px;
}
</pre></div>

<p><figure><a href="http://ginpen.com/wp-content/uploads/2012/12/content-box1.png"><img src="http://ginpen.com/wp-content/uploads/2012/12/content-box1-300x189.png" alt="" title="" width="300" height="189" class="alignnone size-medium wp-image-3452 bordered" /><figcaption><code>box-sizing:content-box</code>（初期値）の場合の領域</figcaption></a></figure></p>

<p><figure><a href="http://ginpen.com/wp-content/uploads/2012/12/border-box1.png"><img src="http://ginpen.com/wp-content/uploads/2012/12/border-box1-300x178.png" alt="" title="" width="300" height="178" class="alignnone size-medium wp-image-3453 bordered" /><figcaption><code>box-sizing:border-box</code>の場合の領域</figcaption></a></figure></p>

<h3>下部領域も</h3>

<p>同様に下方向にも<code>padding</code>を追加します。</p>

<h2>デモ</h2>

<p>こんな感じになりました。</p>

<div class="jsfiddle"><iframe style="width: 100%; height: 300px" src="http://jsfiddle.net/ginpei/kutUL/embedded/html,css,result" allowfullscreen="allowfullscreen" frameborder="0"></iframe></div>

<p>実行画面を別ウィンドウで開いて、ウィンドウサイズを変えてみてください。</p>

<ul>
<li><a href="http://jsfiddle.net/ginpei/kutUL/show">実行画面デモ（個別ページ）</a> ←たぶんShift+クリックで別ウィンドウで開けます。</li>
</ul>

<p><figure><img src="http://ginpen.com/wp-content/uploads/2012/12/editor.png" alt="" title="" width="400" height="272" class="alignnone size-full wp-image-3460 bordered" /><figcaption>編集画面的なもの。</figcaption></figure></p>

<p><figure><a href="http://ginpen.com/wp-content/uploads/2012/12/editor-tall.png"><img src="http://ginpen.com/wp-content/uploads/2012/12/editor-tall-219x300.png" alt="" title="" width="219" height="300" class="alignnone size-medium wp-image-3462 bordered" /><figcaption>縦に伸ばすと、中央部分だけが伸びる。</figcaption></a></figure></p>

<h2>関連</h2>

<ul>
<li><a href="http://ginpen.com/2012/12/05/css-box-model/">width:100%なのにはみ出す理由と回避策。CSSを触るなら必ず理解しなくてはいけないボックスモデルの話。</a></li>
<li><a href="http://ginpen.com/2011/07/01/height-100-parcent/">CSSでheight:100%を使う方法について。</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ginpen.com/2012/12/24/fix-window-height/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSSの変化をアニメーションさせるtransitionについてまとめたよ。（CSS おれおれ Advent Calendar 2012 – 22日目）</title>
		<link>http://ginpen.com/2012/12/23/transition/</link>
		<comments>http://ginpen.com/2012/12/23/transition/#comments</comments>
		<pubDate>Sat, 22 Dec 2012 22:22:00 +0000</pubDate>
		<dc:creator>ginpei</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS おれおれ Advent Calendar 2012]]></category>
		<category><![CDATA[transition]]></category>
		<category><![CDATA[アニメーション]]></category>

		<guid isPermaLink="false">http://ginpen.com/?p=3428</guid>
		<description><![CDATA[CSS おれおれ Advent Calendar 2012 – 22日目 (ヽ´ω`) oO( また日が昇ってからの更新になってしまった……。 ) 前提：CSSにおけるアニメーションは以下の二種類あります。 Transi [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ginpen.com/2012/12/01/css-ginpei-advent-calendar-2012/">CSS おれおれ Advent Calendar 2012</a> – 22日目</p>

<p>(ヽ´ω`) oO( また日が昇ってからの更新になってしまった……。 )</p>

<p>前提：CSSにおけるアニメーションは以下の二種類あります。</p>

<ul>
<li>Transitions … 変化するもの</li>
<li>Animations … 動き続けるもの</li>
</ul>

<p>今回は前者について取り上げます。後者もいずれ。</p>

<h2>概要</h2>

<p><code>transition</code>は値の変化をアニメーションさせる、という事を指定するものです。</p>

<p>例えば青色をしたリンクにマウスカーソルを乗せると赤色になる、というような場面で、その変化を時間を付けて行わせる事ができます。</p>

<p>常に動き続けているようなアニメーションは、<code>animate</code>の方の領分です。</p>

<h3>使える場面</h3>

<p><span id="more-3428"></span></p>

<p>あくまで「変化」を対象にしているため、何らかの（主に利用者の）操作が必要です。</p>

<p>なので、変化する状態を示す擬似クラス（<code>:hover</code>とか）や、JavaScriptでの操作が必要になります。</p>

<p>あーちなみにJavaScriptから操作する場合は、要素のプロパティではなくクラスの方を操作すると、実装が綺麗になるかと思います。はい。</p>

<h2><code>transition</code>プロパティ</h2>

<p>基本的にはこんな感じです。</p>

<div><pre class="brush: css; title: ; notranslate">
  transition: &lt;property&gt; &lt;duration&gt;;
</pre></div>

<p><code>&lt;property&gt;</code>はCSSのプロパティの名前、<code>&lt;duration&gt;</code>は変化の所要時間です。</p>

<p>他にも遷移の仕方や開始の遅延を指定する事が出来ます。（後述）</p>

<h3>手っ取り早く全てアニメーションさせる例</h3>

<p>今のところベンダープレフィックスが必要な感じです。</p>

<div><pre class="brush: css; title: ; notranslate">
* {
  -moz-transition: all 1s;
  -o-transition: all 1s;
  -webkit-transition: all 1s;
  transition: all 1s;
}
</pre></div>

<p>IEは10から（ベンダープレフィックスなしで）サポートしています。</p>

<div class="jsfiddle"><iframe style="width: 100%; height: 300px" src="http://jsfiddle.net/ginpei/YR7Vz/1/embedded/html,css,result" allowfullscreen="allowfullscreen" frameborder="0"></iframe></div>

<h3>プロパティ名</h3>

<p><code>color</code>や<code>left</code>などといった、プロパティ名を記述します。引用符等は不要です。</p>

<p>ベンダープレフィックス付きのプロパティは、その通りに記述する事が求められます。例えば<code>transform</code>ではなく<code>-webkit-transform</code>のようにしてやる必要があります。</p>

<p>またプロパティには<code>all</code>という値を設定する事もできます。全てのプロパティが対象になります。なお、全て、といってもそもそもアニメーションするもの、しないものがあります。</p>

<h3>所要時間</h3>

<p>所要時間は<code>2.5s</code>のように記述します。（これは2.5秒 (seconds)の例。）</p>

<p>ちなみにCSSの仕様上、<code>0</code>台の小数点を持つ数値、例えば<code>0.1</code>はゼロを省略して<code>.1</code>のように記述する事ができます。</p>

<h3>複数の指定</h3>

<p><code>&lt;property&gt; &lt;duration&gt;</code>はカンマ<code>,</code>で区切って複数指定する事ができます。<code>all</code>より個別に指定した方が、想定外の動きをする場面が少なくなるかと思います。</p>

<h2>アニメーションするもの、しないもの</h2>

<p>プロパティの値によって、アニメーションするかどうかが定まります。例えば書体<code>font-family</code>なんかは対象外で、瞬時に変わります。（モーフィングみたいにはなりません。）</p>

<p>基本的には値が数値であればアニメーションすると考えて良いでしょう。</p>

<h3>アニメーションするプロパティ一覧</h3>

<table>
<thead>
<tr>
  <th>プロパティ名</th>
  <th>値の種類</th>
</tr>
</thead>
<tbody>
<tr>
  <td><code>background-color</code></td>
  <td>色</td>
</tr>
<tr>
  <td><code>background-position</code></td>
  <td>パーセント, 長さ</td>
</tr>
<tr>
  <td><code>border-bottom-color</code></td>
  <td>色</td>
</tr>
<tr>
  <td><code>border-bottom-width</code></td>
  <td>長さ</td>
</tr>
<tr>
  <td><code>border-left-color</code></td>
  <td>色</td>
</tr>
<tr>
  <td><code>border-left-width</code></td>
  <td>長さ</td>
</tr>
<tr>
  <td><code>border-right-color</code></td>
  <td>色</td>
</tr>
<tr>
  <td><code>border-right-width</code></td>
  <td>長さ</td>
</tr>
<tr>
  <td><code>border-spacing</code></td>
  <td>長さ</td>
</tr>
<tr>
  <td><code>border-top-color</code></td>
  <td>色</td>
</tr>
<tr>
  <td><code>border-top-width</code></td>
  <td>長さ</td>
</tr>
<tr>
  <td><code>bottom</code></td>
  <td>長さ, パーセント</td>
</tr>
<tr>
  <td><code>clip</code></td>
  <td>矩形</td>
</tr>
<tr>
  <td><code>color</code></td>
  <td>色</td>
</tr>
<tr>
  <td><code>crop</code></td>
  <td>矩形</td>
</tr>
<tr>
  <td><code>font-size</code></td>
  <td>長さ, パーセント</td>
</tr>
<tr>
  <td><code>font-weight</code></td>
  <td>font weight</td>
</tr>
<tr>
  <td><code>height</code></td>
  <td>長さ, パーセント</td>
</tr>
<tr>
  <td><code>left</code></td>
  <td>長さ, パーセント</td>
</tr>
<tr>
  <td><code>letter-spacing</code></td>
  <td>長さ</td>
</tr>
<tr>
  <td><code>line-height</code></td>
  <td>実数, 長さ, パーセント</td>
</tr>
<tr>
  <td><code>margin-bottom</code></td>
  <td>長さ</td>
</tr>
<tr>
  <td><code>margin-left</code></td>
  <td>長さ</td>
</tr>
<tr>
  <td><code>margin-right</code></td>
  <td>長さ</td>
</tr>
<tr>
  <td><code>margin-top</code></td>
  <td>長さ</td>
</tr>
<tr>
  <td><code>max-height</code></td>
  <td>長さ, パーセント</td>
</tr>
<tr>
  <td><code>max-width</code></td>
  <td>長さ, パーセント</td>
</tr>
<tr>
  <td><code>min-height</code></td>
  <td>長さ, パーセント</td>
</tr>
<tr>
  <td><code>min-width</code></td>
  <td>長さ, パーセント</td>
</tr>
<tr>
  <td><code>opacity</code></td>
  <td>実数</td>
</tr>
<tr>
  <td><code>outline-color</code></td>
  <td>色</td>
</tr>
<tr>
  <td><code>outline-offset</code></td>
  <td>整数</td>
</tr>
<tr>
  <td><code>outline-width</code></td>
  <td>長さ</td>
</tr>
<tr>
  <td><code>padding-bottom</code></td>
  <td>長さ</td>
</tr>
<tr>
  <td><code>padding-left</code></td>
  <td>長さ</td>
</tr>
<tr>
  <td><code>padding-right</code></td>
  <td>長さ</td>
</tr>
<tr>
  <td><code>padding-top</code></td>
  <td>長さ</td>
</tr>
<tr>
  <td><code>right</code></td>
  <td>長さ, パーセント</td>
</tr>
<tr>
  <td><code>text-indent</code></td>
  <td>長さ, パーセント</td>
</tr>
<tr>
  <td><code>text-shadow</code></td>
  <td>shadow</td>
</tr>
<tr>
  <td><code>top</code></td>
  <td>長さ, パーセント</td>
</tr>
<tr>
  <td><code>vertical-align</code></td>
  <td>長さ, パーセント</td>
</tr>
<tr>
  <td><code>visibility</code></td>
  <td>visibility</td>
</tr>
<tr>
  <td><code>width</code></td>
  <td>長さ, パーセント</td>
</tr>
<tr>
  <td><code>word-spacing</code></td>
  <td>長さ, パーセント</td>
</tr>
<tr>
  <td><code>z-index</code></td>
  <td>整数</td>
</tr>
</tbody>
</table>

<h3><code>visibility</code>は特殊</h3>

<p>数値ではないのですが、「0か1か」という数だと考えられるみたいです。ただしあくまで「0か1か」で考えるので、絵的にはアニメーションしていないように見えます。</p>

<h3>その他のプロパティ</h3>

<p>また仕様には含まれていないものの、ブラウザーがアニメーションするよう実装しているものもあるようです。</p>

<p>以下はGeckoでサポートしている、らしいです。</p>

<ul>
<li><code>background-size</code></li>
<li><code>border-*-radius</code></li>
<li><code>box-shadow</code></li>
<li><code>column-count</code></li>
<li><code>column-gap</code></li>
<li><code>column-rule-color</code></li>
<li><code>column-rule-width</code></li>
<li><code>column-width</code></li>
<li><code>font-size-adjust</code></li>
<li><code>font-stretch</code></li>
<li><code>marker-offset</code></li>
<li><code>text-decoration-color</code></li>
<li><code>transform</code></li>
<li><code>transform-origin</code></li>
</ul>

<p>手元のFirefoxではたしかに<code>box-shadow</code>がアニメーションしましたが、Google Chromeでは対応していないようです。</p>

<div class="jsfiddle"><iframe style="width: 100%; height: 300px" src="http://jsfiddle.net/ginpei/WH8H6/3/embedded/html,css,result" allowfullscreen="allowfullscreen" frameborder="0"></iframe></div>

<p>まあ確かに色や数値を取るプロパティなので、対応してくれても良さそうなものではあります。</p>

<h2>もうちょいと詳しくしたものと、他の指定</h2>

<p>前述した通り、<code>duration</code>には他にも指定があります。</p>

<p>以下の四種の指定を任意の順序で、空白文字区切りで記述する事ができます。</p>

<ul>
<li>対象プロパティ名</li>
<li>所要時間</li>
<li>遷移方法</li>
<li>開始遅延</li>
</ul>

<p>また上記の塊を、カンマ<code>,</code>で区切って複数記述する事もできます。</p>

<h3>遷移方法</h3>

<p>数値の変わり方</p>

<p>以下のいずれかを指定できます。</p>

<ul>
<li><code>ease</code> （初期値）</li>
<li><code>linear</code></li>
<li><code>ease-in</code></li>
<li><code>ease-out</code></li>
<li><code>ease-in-out</code></li>
<li><code>step-start</code></li>
<li><code>step-end</code></li>
</ul>

<div class="jsfiddle"><iframe style="width: 100%; height: 400px" src="http://jsfiddle.net/ginpei/3ppmb/1/embedded/result" allowfullscreen="allowfullscreen" frameborder="0"></iframe></div>

<p>他に、細かく数値を指定する関数もあります。</p>

<h3>開始遅延</h3>

<p>変化の開始を遅らせる事ができます。所要時間と同じく時間を指定します。</p>

<h3>ばらばらに指定</h3>

<p><code>duration</code>プロパティは短縮表記用のものなので、個別に指定するプロパティもあります。</p>

<ul>
<li><code>transition-property</code></li>
<li><code>transition-duration</code></li>
<li><code>transition-timing-function</code></li>
<li><code>transition-delay</code></li>
</ul>

<p>こちらもそれぞれカンマ<code>,</code>で区切って複数を指定する事が出来ます。ある<var>n</var>番目の指定は、他の<var>n</var>番目の指定に対応します。</p>

<h2>おしまい</h2>

<p>見た目を変えない価値がある。変えるものは、<code>transition</code>で。</p>

<p>なんのこっちゃ。</p>

<h2>参考</h2>

<ul>
<li><a href="http://www.w3.org/TR/css3-transitions/">CSS Transitions</a> … 仕様。そんなに長くない</li>
<li><a href="https://developer.mozilla.org/ja/docs/CSS/Using_CSS_transitions">CSS transitions &#8211; CSS | MDN</a> … Mozillaの。日本語</li>
</ul>

<h2>追記</h2>

<dl>
<dt>2012-12-23</dt>
<dd>遷移方法とかについて追加。</dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://ginpen.com/2012/12/23/transition/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
