WordCrab Fukui 2012に参加してきました

2012/01/21に開催されたWordCrab Fukui 2012に行ってきました。
きっかけはWordCamp Kobe 2011での@teckingさんの告知TLがぐっと来たので。

01/20

福井県は初めてだったので念のため前日入り。行程は以下の通りで8時間くらい。
07:10 高松 – 09:50 三ノ宮(フットバス)
10:08 三ノ宮 – 10:28 大阪(以下JR)
11:15 大阪 – 13:15 敦賀
13:39 敦賀 – 14:30 福井

車内から雪景色を見るピカチュウの図

車内から雪景色を見るピカチュウの図

道中は結構雪景色が見れたんだけど福井駅に着いてみると特に雪もなく寒くもなくちょっとしょんぼり(´・ω・`)

前日あまり眠れなかったのでホテル到着後は駅周辺ぶらついたり仮眠取ったり仕事したりで終了。夜中に東京組の@jim0912さんから翌日の一乗谷へのお誘いを頂いたので同行させてもらうことに。

01/21

一乗谷朝倉氏遺跡・一乗滝

朝9時にホテルまで迎えに来て頂くことに・・・諸事情によりホテル前で目印のピカチュウ片手に30分程待ちぼうけ。
東京組の方々と合流し一路一乗谷朝倉氏遺跡一乗滝へ。

歴史詳しくないので以下画像をつらつらーっと。
皆さん城攻めについて真面目に話してるかと思いきや雪に飛び込んだり佐々木小次郎像と戯れたりと仲良いなぁと。

井戸について考察する東京組の方々の図

井戸について考察する東京組の方々の図

一乗滝ピカー

一乗滝ピカー

小次郎と一緒♥

小次郎と一緒♥

WordCrab Fukui 2012

午後から本題のWordCrab Fukui 2012開始。

プログラムは以下の通り(敬称略)。私はCreator’s Roomのセッションを拝聴。
当日のアーカイブは@khoshinoさんがYoutubeにアップされているので、“WordCrab Fukui 2011″へ。

  • 恋する♥WordPress(森川徹志)
  • Creator’s Room
    • お手軽チューニングで快適生活(古田一生)
    • 現場のワークフローに即したテンプレート構築方法(南部正光)
  • User’s Room
    • 諸国漫遊 WordPress事例集(吉村佳志子)
    • モバイルツールでラクラクサイト管理(林美和)
  • 悩めるクリエイター・ユーザーのための大質問大会
  • ライトニングトーク

本編・懇親会に関しては他の方がレポート書かれていると思うので割愛。

大質問大会でのWordPressコーディング基準云々の質問は実は私がしたもので、解答としては以下を頂戴しました。ご回答ありがとうございました。(WordPressコーディング基準

  • デフォルトテーマでも違反したものがあるのであくまで参考程度でいい(@odysseyさん)
  • WordPressのバージョンによって基準が変わっていることがあるので仕方ない(以下@lilyfanjpさん)
  • テーマ・プラグインの場合はある程度外れてもいいのかな?
  • Twenty Elevenの子テーマを作る場合にはTwenty Elevenを基準に
  • インデントの取り方・括弧の書き方は統一されている

結論としてはそんなに気にしなくても、といった感じでしょうか。

ただ、以下 wp-admin/admin.php(WordPress3.3.1現在) を見ただけでも波かっこの後ろに半角スペースがある場合とない場合(あるのが正しいはず)が混じっているのが気持ち悪いなーというのはありますが、たぶんそんなに気にするほどでもないのかな?

if ( isset($_GET['import']) && !defined('WP_LOAD_IMPORTERS') )

if ( isset( $_REQUEST['post_type'] ) && post_type_exists( $_REQUEST['post_type'] ) )

あと採用されなかったもので「子テーマを使うときには親テーマのID、CLASS名、に沿う必要があるのか?」といった趣旨の質問をしてたのですが、なんでこんな質問書いたか不明だけど、以前子テーマで制作しようとしてなにかしら親テーマの制約に縛られてた気がするので書いたのかな?
ここら辺は次回の「第2回WordPressお茶会 WordBench香川」で聞いてみたいところ。

* * *

という訳で懇親会で食べたカニも美味しかったし、いろんな方々に絡んで頂けたので楽しいイベントでしたー。
WordBench福井運営のみなさんありがとうございました!!

ピカチュウもカニに大満足の図

ピカチュウもカニに大満足の図

Windows7でSCSS+Compass(導入編)

半年ほど前からSCSS(Sass)LESSについては聞いていたのですが腰が重く手をつけていなかったのですが最近TwitterのTLでよく見かけたので導入してみました。

明確な定義はよく分かっていませんが「CSSを拡張できるmeta言語」という説明をよく見かけたのでCSSを効率的に記述できるようになるフレームワークのようなものという認識です。

SCSSとSassが混同してしまいそうですが、Sassから派生したのがSCSS(Sassy CSS)らしく、記述方法もCSS同様 a { display: none; } の様に波括弧を使用しており慣れているので以下ではSCSSで統一します。

参考にさせて頂いたサイト

この記事を見ずとも参考サイトさえ見ればSCSS/LESSが理解できる、というくらい情報が豊富だったので列挙しておきます。

Less & Sass Advent calendar 2011
昨年度のAdvent Calender。SCSS/LESSに限らずCSSmeta言語やCompassフレームワークについて等、最新・マニアック?な情報が豊富です。以下参考サイトはほぼこちらから。
CSS拡張メタ言語「SCSS(Sass)」と「LESS」の比較 – (DxD)∞
SCSSとLESSのどちらを導入するか迷って、SCSSに決めたポイント – 眠る前に布団にはいろうか
まずSCSSとLESSどちらを導入するか、という点で参考にさせて頂きました。
LESSはnode.jsが必要(node.js分からない)、もしくはクライアント側JavaScriptで動的に生成(動的なのでパフォーマンス面で不安)という理由からRubyさえあれば導入できるSCSSにしました。
Sass を今すぐ実務で使おうよ! « NAVER Engineers' Blog
SCSSを導入して実際にどのように運用すれば良いのか、という実務について。
個人的には便利だけどクライアント側に導入してもらうには敷居が高いので制作時の効率化の為に使う、というのが現在の考えです。
サーバによってはSCSS自体導入不可なところもありますし。
hamashun.me : Windows PC に Ruby と Sass を導入する方法
既にWindowsにRubyをインストールしていたのですがバージョンが古かったこともあり最新版を導入する際に参考にさせて頂きました。
CSS書くならcompass使った方がいいよ。SASS使ってる人なら特に。 | howtohp
Compassを使ってSassのCSS出力を手軽にしよう|Blog|Skyward Design
SCSSを更に便利に使えるフレームワークCompassの導入・使い方について。
CSS3のborder-radiusやReset用CSSのMixinが含まれていて開発効率アップしそう、またSassコマンドより分かりやすいCompassコマンドが便利です。
NetBeansではじめるSCSS | Webエンジニアライフ
Netbeans IDE用のscss-editorの解説。プラグイン自体は便利だと思うのですが私の知識不足の為かCompass導入時にコンパイルエラーが発生してしまったので自動コンパイルは使用せずに整形の為に利用しています。

WindowにRuby、SCSS、Compassをインストールする

SCSSはRubyベースなのでWindowにRubyをインストールする必要があります。
hamashun.me : Windows PC に Ruby と Sass を導入する方法に詳しくありますが一応・・・。

Windows7にRubyをインストール

RubyInstaller for WindowsのDownlaodよりRubyInstallerをダウンロード。
rubyinstaller-1.9.3-p0.exe(12/01/17現在)を使用しました。
rubyinstaller

ダウンロードしたrubyinstaller-1.9.3-p0.exeを起動して手順どおりにインストール。
OSがCドライブの場合Cドライブ下にRuby193フォルダが生成されます。
コマンドプロンプトを起動して以下コマンドを入力。

ruby -v


上のようなエラーが出てくると思うのでRubyへのパスを通す必要があります。
“コントロールパネル > システムとセキュリティ > システム > システムの詳細”よりシステムのプロパティが開くので”詳細設定タブ > 環境変数”のシステム環境変数の中のPathの末尾に C:¥Ruby193¥bin を追加します。

環境設定を保存後再度上記コマンド入力で以下の通り現在のRubyのバージョンが表示されパスが通ったことが確認できると思います。

RubyGemsでSCSS、Compassをインストール

Rubyインストール時にRubyのパッケージ管理ツール”RubyGems”がインストールされているのでそれを用いてSCSS、Compassをインストールします。
が、その前にRubyGems自体のアップデートをしておいたほうが良いらしいのでコマンドプロンプトで以下コマンドを。

gem update --system

RubyGemsがアップデートされたら以下コマンドでSCSS、Compassをインストールできるのですが、試してみたところCompassのインストール時にSCSSもインストールされるようなのでSCSSのインストールは不要かもしれません。

gem install sass

gem install compass

以上がWindows7でSCSS+Compass(導入編)となります。
記事が中途半端ですが仕事があるので実践編は明日以降にしたいと思います。

Retinaディスプレイ時に読み込む画像を切り替えるjQueryその2

前回のRetinaディスプレイ時に読み込む画像を切り替えるjQueryでは以下の通りRethina・非Retina画像のリクエストが発生して非効率なスクリプトとなってしまっていたので修正しました。

修正後のソースは以下の通り。

[html]

<p><img src="images/grey.png" data-original="images/logo.png" alt="" width="50" height="50" /></p>

[Javascript]

$(function(){
	$('img').each(function(){
		var src = $(this).attr('data-original');
		if(window.devicePixelRatio === 2) {
			$(this).attr('data-original', src.replace(/(\.jpg|\.png)/gi,'@2x$1'));
		} 
		$(this).attr('src', $(this).data('original'));
	});
});

img要素src属性にダミー画像を入れておき、カスタムデータ属性を用いて画像パスを格納しています。
3行目でカスタムデータ属性の値を取得。
4行目でRetinaディスプレイか判別。
Retinaディスプレイの場合5行目で画像パス変更。
7行目でダミー画像のsrc属性を書き換えて描画。

これで非Retina画像のリクエストを発生させることなくRetinaディスプレイ時にRetina用画像を表示することが出来ました・・・けどRetinaディスプレイ対応自体どんな手法が正しいのか分かっていないので詳しい方いらっしゃいましたらご教授お願いします。

Retinaディスプレイ時に読み込む画像を切り替えるjQuery

2012/01/05追記

下記で記述しているスクリプトでは読み込み時に非Retina用画像のリクエストが発生してしまいます。 結果、無駄なリクエストとなるので非効率なスクリプトとなってしまいます。

2012/01/12追記

二重にリクエストが発生しないスクリプトをかいてみました。
Retinaディスプレイ時に読み込む画像を切り替えるjQueryその2

Retinaディスプレイ用画像設定

スマートフォンサイト制作時、従来の3G/3GSのような非Retinaディスプレイ用画像を用いるとRetinaディスプレイで表示した際に滲んでしまいます。
画素数320x480pxの非Retinaディスプレイと同様の3.5インチの画面サイズに4倍の画素数である640x960pxで描画されるため画像が引き伸ばされてしまうためです。

そこで非Retinaの倍の画像を作成してimg要素width/height属性に画像の半分の値を設定することでRetinaディスプレイで画像を奇麗に表示することができます。

[html]

<p>3G用画像(50x50px)<br />
<img src="logo.png" alt="" width="50" height="50" /></p>
<p>Retina用画像(100x100px)<br />
<img src="logo@2x.png" alt="" width="50" height="50" /></p>                   

Retinaディスプレイの場合のみ専用の画像を用いる

倍サイズの画像を用いる事でRetinaディスプレイで奇麗な画像を表示する事ができますが、遅い回線でアクセスした際に表示に時間が掛かるのでRetinaディスプレイ時のみ倍サイズの画像を用いる様にjQueryで振り分けるようにします。

前提として画像は2種類(非Retina用・Retina用)を作成します。
Retina用画像は “@2x” をファイル名末尾に追加しておきます。

  • logo.png(非Retina用)
  • logo@2x.png(Retina用)

[Javascript]

	$(function(){
		if(window.devicePixelRatio > 1) {
			$('img').each(function(){
				var src = $(this).attr('src');
				$(this).attr('src', src.replace(/(\.jpg|\.png)/gi,'@2x$1'));
			});
		}
	});
	

ソースは上記の通り。
2行目のwindow.devicePixelRatioでRetinaディスプレイかを判別しています。iPhone4/4Sでは値が2になります。
3行目からimg要素をループして、4行目でimg要素のsrc属性を取得、5行目でRedina用画像ファイル名に書き換えています。

以上がRetinaディスプレイの場合のみに専用の画像を用いる処理となりますが、iOSシミュレータでの確認のみですので実機での動作及び処理が正しいかは保証しかねますのでご了承ください。
また、日本で発売されているAndroid端末の場合全てではありませんがwindow.devicePixelRatio値が1.5らしいのでAndroid用に1.5倍サイズの画像を作成して、それ用の分岐も用意しておいた方が良いかもしれません。

第1回WordPressお茶会@WordBench香川を開催しました

2011/11/19(土)にデザインラボラトリー蒼様をお借りして「第1回WordPerssお茶会@WordBench香川」を開催しました。

参加者8名(WordBench香川初参加5名、県外から参加2名、ディレクター、デザイナー、プログラマ、他業種の方)と第1回にしては幅広い層の方にお集まり頂きました。

今回はキックオフミーティング時の「次回はお茶会で」との意見からカフェをお借りしてのお茶会形式に、twitterでハンズオンやりたいと呟いたところ是非というお声を頂いたので初心者向けハンズオンを、ハンズオンだけだと場所・自分のキャパに無理があったので雑談も交えてというかたちとしてみました。


ダークサイド土井の図
photo by: style-design

初心者向けハンズオンはWindows・Mac環境でローカル環境を構築してWordPressをインストールしてなにかしよう (第1回WordPressお茶会 – WordBench香川 – INDEX) という内容だったのですが環境周りの準備不足によりWordPressインストールまだで精一杯という結果に・・・(イベント進行がグダグダになるのは想定済み)

また以下の流れから作成をお願いすることになったわぷーWordBench香川バージョンについても大方の意見が集約されましたので近いうちにお披露目できると思われます。

期待!! RT @: ああ、それつくりましょうかねえ。RT @: WordBench香川用にうどんをすすってるわぷーが欲しいところです。 RT @: わぷーをダルメシアンにしたろかな。
@show_web
Sho Doi

以下反省点・今後の課題で思いついたものをつらつらと箇条書きです。

  • ハンズオン組が多くなり過ぎたため、雑談組が少人数になってしまった。
  • ハンズオンだと1対2くらいが限界で御相手できない方が居たので申し訳なかったなと。
  • 主催者がMac初心者なのでトラブルに対応できない。
  • サポート役は数人必要(今回は参加者さんで詳しい方がいらっしゃったのでヘルプして頂きました)
  • 自前の無線LAN環境は必要。(WiMAXルータ安価で性能良いのないかな?)
  • ローカル環境構築というテーマで必要かなと思えるものを考えていったら初心者向けじゃなくなってた。
  • twitterハッシュタグ決めてたけどバタバタしすぎてツイートできず。
  • 参加者が10名超えるようなら会議室借りなきゃ厳しい。
  • 個人的には勉強会みたいなのじゃなくて少人数でわいわいと、というのが好きだけど今後はどうしていったらいいのだろうか。
  • WordPressはやれることが広いので次回ハンズオンはテーマを絞らなきゃ。

参加者の皆さん長時間のお付き合いありがとうございました。
また、場所を提供頂きましたデザインラボラトリー蒼様ありがとうございました。

次回WordBench香川は来年1月あたりに開催予定です。(いつもながら内容は未定ですので要望ありましたらコメントや@show_webよりお願いします)

第1回WordPressお茶会 – WordBench香川 – WordPressのインストール

ローカル環境が整ったのでWordPressをインストールしていきます。
今回はドキュメントルートの確認(Windows7 64bit環境 / Mac OS X 64bit環境)の項で作成した wbkagawa フォルダにWordPressをインストールしたいと思います。

WordPress本体の準備

WordPress | 日本語 サイトの「WordPress 3.2.1 をダウンロード .zip — 4.2 MB」(2011/11/15現在)よりWordPressをダウンロードして解凍してください。

展開された wordpress フォルダを wbkagawa フォルダへ移動させておいてください。

データベースの準備

WordPressはMySQLデータベースを必要とします。
XAMPP、MAMPは共にMySQL管理ツールphpMyAdminがインストールされているのでこちらを使用してデータベースを作成していきます。
phpMyAdminの場所は以下を参照ください。
(なおphpMyAdminのキャプチャ画面はXAMPPのphpMyAdmin3.4.5の為、MAMP環境では多少仕様が異なります。)

Windows7 64bit環境
Mac OS X 64bit環境

phpMyAdminのログイン画面が表示されるのでXAMPPのセキュリティで設定したMySQL rootパスワードを入力してください。
(Mac OS Xではログイン画面は表示されません。(ハンズオン時に説明予定))

phpMyAdminのホーム画面です。「データベース」よりデータベースを作成していきます。

「新規データベースを作成する」のテキストボックスにデータベース名(今回はwbkagawa)を入力して「作成」をクリック。

wbkagawaデータベースが作成されました。

WordPressのインストール

WordPress本体、データベースの準備が完了したのでWordPressをインストールしていきます。
http://localhost/wbkagawa/wordpress/ へアクセスして「設定ファイルを作成する」をクリック。

データベース関連の説明を一通り読んで「次に進みましょう!」をクリック。

「データベース名」は先程作成した”wbkagawa”。
「ユーザ名」はXAMPPの場合”root”、「パスワード」はセキュリティの項で設定したパスワード、MAMPの場合は「ユーザ名」「パスワード」共に”root”(MAMPのデフォルト設定です)。
(今回はローカル環境なのでroot権限にしていますが、本番環境では別途ユーザを作成、パスワードも推測し難いものを設定してください。)
「データベースのホスト名」と「テーブル接頭辞」はデフォルトのまま。

設定に間違えがあったりMySQLを起動してない場合以下のようなエラーが表示されるので再度設定を確認してください。

問題なければインストール準備完了となるので、「インストール実行」をクリック。

「ユーザ名」はデフォルトの”admin”以外の任意のユーザ名を入力。
「メールアドレス」に登録したアドレスに本来ならログインURL、ユーザ名、パスワードが届きますが今回はローカルでのメール送信設定を行なっていないため届きません。パスワードは後程必要となるので控えておいてください。
その他入力が完了したら「WordPressをインストール」をクリック。

以上でWordPressインストール完了です。「ログイン」をクリックしてログイン画面へ。

登録したユーザ名・パスワードを入力して「ログイン」。

第1回WordPressお茶会 – WordBench香川 – PHP環境設定

日本語などマルチバイト文字列関数設定の為にPHPの設定ファイルphp.iniを編集します。
各環境のphp.iniの場所及びPHPの設定一覧のURLは以下の通りです。

Windows7 64bit環境
c:¥xampp¥php¥php.ini
http://localhost/xampp/phpinfo.php
Mac OS X 64bit環境
/Applications/MAMP/bin/php/php5.3.6/conf/php.ini
(MAMP2.0.5にはPHP5.2.17とPHP5.3.6がインストールされていますが今回は5.3.6を使用します)
http://localhost/mamp/phpinfo.php

Windows用拡張モジュールについて

Windows7 64bit環境ではWindows用のマルチバイト文字列関数の拡張モジュールを必要としますのでphp.iniで “extension=php_mbstring.dll” を検索してコメントアウトされている場合はアンコメントしてください。(XAMPP1.7.7では既にアンコメントされていると思います。)
PHP: Windows 用 PHP 拡張モジュール – Manual

[php.ini](変更前)

;extension=php_mbstring.dll

[php.ini](変更後)

extension=php_mbstring.dll

マルチバイト文字列関数設定

では、マルチバイト文字列関数の設定を行なっていきます。
php.iniで [mbstring] を検索してください。

[php.ini]

	[mbstring]
	; language for internal character representation.
	; http://php.net/mbstring.language
	;mbstring.language = Japanese
	
	; internal/script encoding.
	; Some encoding cannot work as internal encoding.
	; (e.g. SJIS, BIG5, ISO-2022-*)
	; http://php.net/mbstring.internal-encoding
	;mbstring.internal_encoding = EUC-JP
	
	; http input encoding.
	; http://php.net/mbstring.http-input
	;mbstring.http_input = auto
	
	; http output encoding. mb_output_handler must be
	; registered as output buffer to function
	; http://php.net/mbstring.http-output
	;mbstring.http_output = SJIS
	
	; enable automatic encoding translation according to
	; mbstring.internal_encoding setting. Input chars are
	; converted to internal encoding by setting this to On.
	; Note: Do _not_ use automatic encoding translation for
	;       portable libs/applications.
	; http://php.net/mbstring.encoding-translation
	;mbstring.encoding_translation = Off
	
	; automatic encoding detection order.
	; auto means
	; http://php.net/mbstring.detect-order
	;mbstring.detect_order = auto
	
	; substitute_character used when character cannot be converted
	; one from another
	; http://php.net/mbstring.substitute-character
	;mbstring.substitute_character = none;
	
	; overload(replace) single byte functions by mbstring functions.
	; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
	; etc. Possible values are 0,1,2,4 or combination of them.
	; For example, 7 for overload everything.
	; 0: No overload
	; 1: Overload mail() function
	; 2: Overload str*() functions
	; 4: Overload ereg*() functions
	; http://php.net/mbstring.func-overload
	;mbstring.func_overload = 0
	
	; enable strict encoding detection.
	;mbstring.strict_detection = Off
	
	; This directive specifies the regex pattern of content types for which mb_output_handler()
	; is activated.
	; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml)
	;mbstring.http_output_conv_mimetype=
	
	; Allows to set script encoding. Only affects if PHP is compiled with --enable-zend-multibyte
	; Default: ""
	;mbstring.script_encoding=
	

上記がXAMPP環境でのマルチバイト文字列関数の設定箇所となります。MAMP環境でも表記の違い等はありますが設定する項目は同様ですのでこちらをもとに設定を行なっていきます。
ハイライトされている行が設定する項目となります。各項目の詳細に関してはPHPマニュアル、参考サイトを御覧ください。

なお、デフォルトでのmbstringの設定を http://localhost/xampp/phpinfo.php より確認すると以下の通りとなっています。

ではphp.iniのmbstringの設定を編集していきます。

デフォルト言語を日本語に設定します。mbstring_languageをアンコメントします。

	;mbstring_language = Japanese
	
	mbstring_language = Japanese
	

内部文字エンコーディングのデフォルト値を”UTF-8″にします。

	;mbstring.internal_encoding = EUC-JP
	
	mbstring.internal_encoding = UTF-8
	

HTTP入出力文字エンコードのデフォルト値を”pass”にします。

	;mbstring.http_input = auto
	;mbstring.http_output = auto
	
	mbstring.http_input = pass
	mbstring.http_output = pass
	

HTTP入力エンコーディング変換を無効にします。

	;mbstring.encoding_translation = Off
	
	mbstring.encoding_translation = Off
	

文字コード検出順序のデフォルト値を定義します。”auto”だとASCII, JIS, UTF-8, EUC-JP, SJISの順序となるので指定しておきます。

	;mbstring.detect_order = auto
	
	mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII
	

無効な文字列があった場合の代替文字のデフォルト値を設定します。今回は”none”を指定します。

	;mbstring.substitute_character = none;
	
	mbstring.substitute_character = none;
	

シングルバイト対応の関数をマルチバイト対応関数でオーバーライド(置換)すると不具合が発生する可能性があるのでオフにします。
PHP: 関数のオーバーロード機能 – Manual

	;mbstring.func_overload = 0
	
	mbstring.func_overload = 0
	

文字コードの自動判別を厳密に行うかどうかの設定でメリット・デメリットがあるようですが今回は”Off”にします。

	;mbstring.strict_detection = Off
	
	mbstring.strict_detection = Off
	

以下2つに関しては今回は必要無いのでコメントのままとしておきます。

	;mbstring.http_output_conv_mimetype=
	;mbstring.script_encoding=
	

php.iniを上書きした後、Apacheを再起動して変更を反映させてください。
再度PHPの設定一覧よりmbstringの項目を見ると設定内容が反映されているのが確認できると思います。

第1回WordPressお茶会 – WordBench香川 – MAMPの環境設定(外部からのアクセス制限設定)

今回はローカル環境構築が目的なのでローカル以外からのアクセスを拒否するように設定します。

httpd.conf(Apacheの設定ファイル)編集

/Applications/MAMP/conf/apache/httpd.confを編集します。
(Windows7 64bit環境ではXAMPPの環境設定(セキュリティ設定)で外部からのアクセス制限設定を行なっていますが本記事を参考にhttpd.confを編集することで同様にアクセス制限設定を行うことができます。)

ソースの以下の箇所を変更します。

[httpd.conf](変更前)

	<Directory "/Applications/MAMP/htdocs">

		中略

		Order allow,deny
		Allow from all

</Directory>

[httpd.conf](変更後)

<Directory "/Applications/MAMP/htdocs">

    中略

    # Order allow,deny
    # Allow from all
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
    Allow from localhost
    Allow from 192.168

</Directory>

Order,Allow,Denyディレクティブについて

処理の流れの説明の前にOrder,Allow,Denyディレクティブについて簡単に解説。

Order ディレクティブ

Order ディレクティブはデフォルトのアクセスの状態Allow ディレクティブと Deny ディレクティブが評価される順番を制御します。
http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#order

Allow ディレクティブ

Allow ディレクティブはどのホストがサーバのある領域をアクセスできるかに影響を与えます。
アクセスはホスト名、IP アドレス、IP アドレスの範囲や、 環境変数として取得された、その他のクライアントのリクエストの 特徴によって制御することができます。
http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#allow

Deny ディレクティブ

Deny ディレクティブはホスト名、IP アドレス、環境変数に基づいてサーバへのアクセスを制限します。
Deny ディレクティブの引数は Allow ディレクティブとまったく同じです。
http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#deny

デフォルトでの処理

デフォルトでは以下のような流れで処理が行われています。

<Directory "/Applications/MAMP/htdocs">

ドキュメントルート(/Applications/MAMP/htdocs)を対象に設定を行います。

		Order allow,deny
		

デフォルトでは全てのアクセス拒否するようにし、次に続くallow,denyの評価の順番を制御しています。この場合、次行のallow,denyの記述の順番に関わらず、allow,denyの順番で評価されます。

		Allow from all
		

全てのホストからのアクセスを許可します。

	</Directory>
	

対象ディレクトリを閉じます。

ローカル環境からのみアクセス許可の処理

デフォルトの設定ではドキュメントルートへ全てのホストからアクセス出来てしまうのでローカル環境からのみアクセスできるようにしたのが以下の流れとなります。

	<Directory "/Applications/MAMP/htdocs">
	

ドキュメントルート(/Applications/MAMP/htdocs)を対象に設定を行います。

	# Order allow,deny
	# Allow from all
	

とりあえずデフォルトの設定はコメントアウト。

	Order Deny,Allow
	

デフォルトでは全てのアクセス許可するようにし、次に続くallow,denyの評価の順番を制御しています。この場合、次行のallow,denyの記述の順番に関わらず、deny,allowの順番で評価されます。

	Deny from all
	

まず全てのホストからのアクセスを拒否します。

	Allow from 127.0.0.1
	Allow from localhost
	Allow from 192.168
	

Allowディレクティブの設定により以下からのアクセスに対して許可を与えます。

  • 127.0.0.1(ループバックアドレス:ネットワーク上における自分自身の仮想的なアドレス)
  • localhost(127.0.0.1の通常用いられているホスト名)
  • 192.168(一般的に用いられているプライベートIPアドレス:192.168.n.n)
	</Directory>
	

対象ディレクトリを閉じます。

以上の設定で外部からのアクセスを制限することは出来たのですが問題が一つ発生してしまっています。
ドキュメントルートの確認の際に作成した sample.php を表示しようと http://127.0.0.1/sample.php へアクセスすると問題なく表示されるのですが、 http://localhost/sample.php へアクセスするとその表示に非常に時間が掛かるようになってしまいました。

原因はMac OS X v10.3以降ではデフォルトでIPv6が有効になっている事です。(Windows環境もVistaからIPv6が有効になっているようです)結果 http://localhost/ にアクセスした際に以下の段階でページが表示されるため表示まで時間が掛かってしまいます。

  1. http://localhost/ にアクセスするとまずIPv6で繋ごうとする
  2. タイムアウト発生
  3. IPv4でのアクセスに切り替えてアクセス
  4. ページが表示される

そこでlocalhostでのアクセスがIPv4で行われるよう変更します。

localhostからのアクセスをIPv4にする

まず /Applications/Utilities/Terminal.app からターミナルを起動します。
hostsファイル(ホスト名とIPアドレスの対応を定義するためのテキストファイル)を編集するために開く。viエディタが有名なようですが私は使い方が分からないのでnanoエディタで編集

	sudo nano /etc/hosts
	

上記入力後root権限パスワードを求められるので入力するとエディタが起動します。

::1 localhost をコメントアウトします。

control+xでエディタを終了します。
“Save modified buffer (ANSERING “No” WILL DESTROY CHANGES) ? ” と聞かれるので “y”

“File Name to Write: /etc/hosts” と上書きするか聞かれるので “enter”

ターミナルで以下を入力してDNSキャッシュを削除。

	sudo dscacheutil -flushcache
	

これで http://localhost/ でアクセスしても問題なく表示されるようになりました。

[2011/11/16追加] Mac OS X のファイアウォールについて

Mac OS X にはファイアウォールが搭載されていますがデフォルトでは無効になっているので有効にしておきます。
システム環境設定 > セキュリティとプライバシー > ファイアウォール

次はPHP環境設定を行なっていきます。

第1回WordPressお茶会 – WordBench香川 – XAMPPの環境設定(ドキュメントルートの確認)

XAMPPのインストールが完了したのでローカルサーバ環境を構築できるようになりました。
実際にサーバを起動してサンプルを用い表示確認をしてみたいと思いますが、その前にドキュメントルートについて説明しておきます。

ドキュメントルート(Document Root)について

標準でHTMLやPHPファイルを入れる場所は C:¥xampp¥htdocs¥ となり(OSインストール先がcドライブの場合)、このフォルダを ドキュメントルート(Document Root)と呼びます。
レンタルサーバによって異なりますが “example.com/public_html/” や “www/htdocs/”に当たる部分と考えて頂ければいいと思います。
ドキュメントルートに保存したファイルへのアクセスはブラウザから http://localhost/ または http://127.0.0.1/ となります。

では実際に表示を確認したいと思います。
まずXAMPPコントロールパネルからApacheとMySQL(今は必要ありませんが後の作業の為)を開始します。

以下のソースをテキストエディタに入力し sample.php で C:¥xampp¥htdocs¥ に保存、http://localhost/sample.php にアクセスすると “Hello WordPress” の表示が確認できると思います。

[sample.php]

	<?php
		echo "Hello WordPress";
	

ドキュメントルートまとめ
ブラウザのリクエストURL http://localhost/sample.php
コンテンツの保存先 C:¥xampp¥htdocs¥sample.php

実習では C:¥xampp¥htdocs¥ 以下にフォルダを作成してそのフォルダを1つのウェブサイトとしてWordPressを構築していきます。
ただ、このままでは以下の様にサブディレクトリ形式となり、独自ドメインでの運用を想定した時に違和感を感じてしまいます。

ウェブサイトhoge http://localhost/hoge/
ウェブサイトhuga http://localhost/huga/

そこでバーチャルホストの設定をして以下の様に独自ドメインでの運用と同様のURLでアクセスできるようにしたいと思います。

ウェブサイトhoge http://hoge/
ウェブサイトhuga http://huga/

バーチャルホストの設定

バーチャルホストという用語は、1 台のマシン上で (www.company1.com and www.company2.com のような) 二つ以上のウェブサイトを扱う運用方法のことを指します。 バーチャルホストには、各ウェブサイトに違う IP アドレスがある 「IP ベース」と、それぞれの IP アドレスに 複数の名前がある「名前ベース」とがあります。 複数のサイトが物理的に同じサーバで扱われている、ということはエンドユーザには 明らかではありません。
Apache バーチャルホスト説明書

上記引用の通りバーチャルホストは1台のマシン上で複数のウェブサイトを扱う運用方法です。今回は「名前ベース」の手法を用い、127.0.0.1(ループバックアドレス:ネットワーク上における自分自身の仮想的なアドレス)に複数のホスト名を設定したいと思います。

編集が必要なファイルは以下2つ、hosts ファイル(IPアドレスとホスト名の対応を記述したテキストファイル)と httpd.conf(Apacheの設定ファイル)です。

  • C:¥Windows¥System32¥drivers¥etc¥hosts
  • C:¥xampp¥apache¥conf¥httpd.conf

また、前提として C:¥xampp¥htdocs¥ に wbkagawa フォルダを作成、先ほどの sample.php を index.php にリネームし wbkagawa フォルダに移動、http://wbkagawa/ でこれが閲覧できるように設定します。

hosts ファイル

Windows7 64bit環境(Vista環境)では hosts ファイル編集に管理者権限がとなります。hosts ファイルに関してはメモ帳で編集可能なのでメモ帳を使用します。

まず、”メモ帳アイコン上で右クリック > 管理者として実行”

ユーザーアカウント制御ダイアログが出るので「はい」をクリック。

“ファイル > 開く” から hosts ファイルがあるディレクトリまで辿り、「テキスト文書(*.txt)」を「すべてのファイル(*.*)」に変更。ファイル一覧が出てくるので hosts ファイルを選択し「開く」。

“127.0.0.1 wbkagawa”を追加して上書き保存で hosts ファイル編集完了です。

[hosts]

		127.0.0.1	localhost
		::1 		localhost
		127.0.0.1 	wbkagawa
		

httpd.conf

テキストエディタで httpd.conf を開き一番下に以下ソースを追加します。

[httpd.conf]

		NameVirtualHost *:80
	
		<VirtualHost *:80>
		DocumentRoot "C:/xampp/htdocs/"
		ServerName localhost
		</VirtualHost>
		
		<VirtualHost *:80>
		DocumentRoot "C:/xampp/htdocs/wbkagawa/"
		ServerName wbkagawa
		</VirtualHost>
		

1行目の NameVirtualHost ディレクティブは名前ベースのバーチャルホストを用いる時に必要で、バーチャルホストのためのIPアドレスを指定しています。
今回はすべてのIPアドレスを受け入れ80ポートを指定しています。
NameVirtualHost ディレクティブ

3-6,8-11行目で、扱うホスト名に対して VirtualHost を作成しています。 VirtualHost ディレクティブの引数は NameVirtualHost ディレクティブで指定した引数 *:80 に正確に合っている必要があ ります。
そして VirtualHost の中に各ホスト名に関しての設定を記述しています。
設定項目は最低限必要な、どのホスト名が扱われるかを示す ServerName ディレクティブ(hosts ファイルで設定したホスト名)、そのホスト名のドキュメントルートの場所を示す DocumentRoot ディレクティブとなります。

また、既存サーバにバーチャルホストを設定するとメインホストがなくなるため、1つ目の VirtualHost で再定義しています。
名前ベースのバーチャルホスト

XAMPPコントロールパネルからApacheを再起動して、ブラウザで http://wbkagawa/ へアクセスすると “Hello WordPress” の表示が確認できると思います。

以上でローカル環境でサーバが動作しているのが確認できたと思います。
ただ、XAMPP環境設定がデフォルトのままだとセキュリティに問題があるので次はXAMPPの環境設定(セキュリティ設定)を行なっていきます。

第1回WordPressお茶会 – WordBench香川 – MAMPの環境設定(ドキュメントルートの確認)

MAMPのインストールが完了したのでローカルサーバ環境を構築できるようになりました。
実際にサーバを起動してサンプルを用い表示確認をしてみたいと思いますが、その前にドキュメントルートについて説明しておきます。

ドキュメントルート(Document Root)について

標準でHTMLやPHPファイルを入れる場所は /Applications/MAMP/htdocs となり、このフォルダを ドキュメントルート(Document Root)と呼びます。
レンタルサーバによって異なりますが “example.com/public_html/” や “www/htdocs/”に当たる部分と考えて頂ければいいと思います。
ドキュメントルートに保存したファイルへのアクセスはブラウザから http://localhost/ または http://127.0.0.1/ となります。

現在のドキュメントルートの場所は MAMPコントロールパネル > 環境設定 > Apacheタブ から確認できます。

では実際に表示を確認したいと思います。
以下のソースを /Applications/MAMP/htdocs/ に保存し、http://localhost/sample.php にアクセスすると “Hello WordPress” の表示が確認できると思います。

[sample.php]

	<?php
		echo "Hello WordPress";
	

ドキュメントルートまとめ
ブラウザのリクエストURL http://localhost/sample.php
コンテンツの保存先 /Applications/MAMP/htdocs/sample.php

実習では /Applications/MAMP/htdocs/ 以下にフォルダを作成してそのフォルダを1つのウェブサイトとしてWordPressを構築していきます。

ただ、このままでは以下の様にサブディレクトリ形式となり、独自ドメインでの運用を想定した時に違和感を感じてしまいます。

ウェブサイトhoge http://localhost/hoge/
ウェブサイトhuga http://localhost/huga/

そこでバーチャルホストの設定をして以下の様に独自ドメインでの運用と同様のURLでアクセスできるようにしたいと思います。

ウェブサイトhoge http://hoge/
ウェブサイトhuga http://huga/

バーチャルホストの設定

バーチャルホストという用語は、1 台のマシン上で (www.company1.com and www.company2.com のような) 二つ以上のウェブサイトを扱う運用方法のことを指します。 バーチャルホストには、各ウェブサイトに違う IP アドレスがある 「IP ベース」と、それぞれの IP アドレスに 複数の名前がある「名前ベース」とがあります。 複数のサイトが物理的に同じサーバで扱われている、ということはエンドユーザには 明らかではありません。
Apache バーチャルホスト説明書

上記引用の通りバーチャルホストは1台のマシン上で複数のウェブサイトを扱う運用方法です。今回は「名前ベース」の手法を用い、127.0.0.1(ループバックアドレス:ネットワーク上における自分自身の仮想的なアドレス)に複数のホスト名を設定したいと思います。

編集が必要なファイルは以下2つ、hosts ファイル(IPアドレスとホスト名の対応を記述したテキストファイル)と httpd.conf(Apacheの設定ファイル)です。

  • /private/etc/hosts
  • /Applications/MAMP/conf/apache/httpd.conf

また、前提として /Applications/MAMP/htdocs/ に wbkagawa フォルダを作成、先ほどの sample.php を index.php にリネームし wbkagawa フォルダに移動、http://wbkagawa/ でこれが閲覧できるように設定します。

hosts ファイル

“メニューバーの移動 > フォルダへ移動…”、 /etc/ と入力して「移動」をクリック。

etc フォルダ内に hosts ファイルがあるのでテキストエディタで開きます。
“127.0.0.1 wbkagawa”を追加して上書き保存で hosts ファイル編集完了です。

[hosts]

		127.0.0.1		localhost
		127.0.0.1 		wbkagawa
		255.255.255.255 broadcasthost
		::1 			localhost
		fe80::1%1o0 	localhost
		

httpd.conf

テキストエディタで httpd.conf を開き一番下に以下ソースを追加します。

[httpd.conf]

		NameVirtualHost *:80
	
		<VirtualHost *:80>
		DocumentRoot "/Applications/MAMP/htdocs/"
		ServerName localhost
		</VirtualHost>
		
		<VirtualHost *:80>
		DocumentRoot "/Applications/MAMP/htdocs/wbkagawa/"
		ServerName wbkagawa
		</VirtualHost>
		

1行目の NameVirtualHost ディレクティブは名前ベースのバーチャルホストを用いる時に必要で、バーチャルホストのためのIPアドレスを指定しています。
今回はすべてのIPアドレスを受け入れ80ポートを指定しています。
NameVirtualHost ディレクティブ

3-6,8-11行目で、扱うホスト名に対して VirtualHost を作成しています。 VirtualHost ディレクティブの引数は NameVirtualHost ディレクティブで指定した引数 *:80 に正確に合っている必要があ ります。
そして VirtualHost の中に各ホスト名に関しての設定を記述しています。
設定項目は最低限必要な、どのホスト名が扱われるかを示す ServerName ディレクティブ(hosts ファイルで設定したホスト名)、そのホスト名のドキュメントルートの場所を示す DocumentRoot ディレクティブとなります。

また、既存サーバにバーチャルホストを設定するとメインホストがなくなるため、1つ目の VirtualHost で再定義しています。
名前ベースのバーチャルホスト

MAMPコントロールパネルからサーバを再起動して、ブラウザで http://wbkagawa/ へアクセスすると “Hello WordPress” の表示が確認できると思います。

以上でサーバ環境は整いましたがデフォルトのMAMPの設定では外部からアクセス可能のままですので次はMAMPの環境設定(外部からのアクセス制限設定)を行なっていきます。