カテゴリー別アーカイブ: 近況報告

近況&進捗の報告。その他雑感なども。

WordPress Popular Postsが3.0になり実用に耐えるようになったというか

ブログのサイドバーなどによくある、「人気記事」といったような内容のリンク集を作るためのプラグイン。WordPress Popular Postsというものがあるのだけれど、このプラグインはとりあえずWordPressサイトを立ち上げたら必ずインストールしておく程度には重宝している。
勿論このブログにもインストールしてある。「人気記事」的リンク集は表示していないのに、このプラグインの意味があるのかという疑問が湧くかもしれないが、このプラグインをインストールしておくと、設定ページで各ページ毎のアクセス数を24時間単位、1週間単位、1ヶ月単位、累積といったように記録・表示してくれる。したがって、現在ブログでホットエントリになっている記事はどれなのかとか、それがここ1ヶ月の傾向と比べてどうなのかとかのチェックが一発で行える。
そういったことは、Google Analyticsでもインストールしてチェックすれば良いのではと思われるかもしれないが、URLとアクセス数の組ではなく、標準で記事名とアクセス数を突き合わせて表示してくれるというところが大変便利なのだ。

これまでのWordPress Popular Postsの数字は不正確

ただ、ブログの運営期間が長くなってくると、どうしてもスパムコメントが付き易くなる。そしてこれまでのWordPress Popular Postsでは、特定記事に向けてスパムコメントをつけにくるbotや、検索エンジンのbotなどもアクセス数としてカウントしてくれてしまっていた。したがって、明らかにあり得ない数の閲覧数になっている記事が出てきてしまい、そうした”ホットエントリ”以外の閲覧傾向を捉える程度にしか使えなかった。ましてや、人気記事表示機能も使うのであれば、スパムが多くついた記事が人気記事として居座ってしまっていたことだろう。使用に耐えないという評価をして外してしまった人も多いに違いない。

一見人気サイトに見える

一見人気サイトに見える

WordPress Popular Posts 3.0で、bot detectionがついた

数日程前に、これまでの2.xから3.xへとヴァージョンアップが行われたのだが、そこで新機能としてbot detectionがついた。これにより、おそらく正確であろうと思われる、現実的な数字が表示されるようになった。知らずにアップデートすると、急にアクセス数が減ったように見えて大変驚く。

やった!過疎サイトに

やった!過疎サイトに

そのため、botのカウントが嫌で一度アンインストールしてしまった人も、入れ直して良いタイミングではないかというお知らせでした。


PHPテンプレートエンジンを使おう 素のPHP編

このブログの作成当初、「作成するサイトにはテンプレートエンジンとしてSmartyを採用します!」とか言ってしまっているのだけれど、現在のところ結局Twigに落ち着いてしまっている。いや、色々と理由があったのだけれども、それらをすっ飛ばして、当初の宣言を無かった事にしてTwigの紹介を始めても、というところがあるので、本当にさらっとテンプレートエンジンとは何かと、諸事情で通過してしまったSmartyについて書こうと思う。

テンプレートの考え方

というわけで、まずテンプレートとは何か。テンプレートというのは、Dreamweaverを始めとして数々のPCアプリケーションではそのままの単語が使用されている、作成する書類の「ひな形」の事だ。つまりもう文書構造まではでき上がっているファイルに、タイトルだの本文だのオリジナルな情報を加えて保存すると、立派な当たり障りの無いファイルが出来る。また、オリジナル情報の部分を書き換える事で、似たような文書を量産する事が出来る、そういった仕組みだ。

WEBサイトを構成するhtmlファイルについても、サイトの全ページを集めて見比べてみると、共通部分が多い事に気付くだろう。たとえばヘッダ部分とかフッタ部分とか。ブログなどでは記事横のサイドバーなども共通するし、広告を表示する設定にしているならば、その部分も共通している。ちょっと例を挙げてみよう。

 
<!-- トップページ -->
<!DOCTYPE html>
<html lang="ja">
<head>
.
.
<title>サンプル株式会社 トップページ</title>
</head>
<body>
<header>
<h1>サンプル株式会社</h1>
</header>
<div id="wrapper">
<div id="main">
<article>
<h1>ごあいさつ</h1>
<p>ようこそサンプル株式会社ホームページへ!</p>
.
.
</article>
</div>
<div id="sidebar">
<aside>
.
.
</aside>
</div>
</div>
<footer>
.
.
</footer>
</body>
</html>
 
<!-- 各商品紹介ページ -->
<!DOCTYPE html>
<html lang="ja">
<head>
.
.
<title>サンプル株式会社 商品A</title>
</head>
<body>
<header>
<h1>サンプル株式会社</h1>
</header>
<div id="wrapper">
<div id="main">
<article>
<h1>商品Aの概要</h1>
<p>説明説明説明</p>
.
.
</article>
</div>
<div id="sidebar">
<aside>
.
.
</aside>
</div>
</div>
<footer>
.
.
</footer>
</body>
</html>

この2つのページは、ほぼ共通部分によって構成されている。違いと言えば、ページタイトルとid=”main”の中のarticleだけだ。
テンプレートを使わない方法では、たとえばテキストファイルでページタイトルとarticle以外の部分を空白にした文書を作っておき、新しくページを加える際にはそのファイルを元にして新ページのファイルを書くといった手順になるだろう。
けれども、この方法だと全ページのサイドバーに項目を増やしたいなどとなったとき、テキストファイルを開いてコピー、開いてコピーと忙しい。非現実的である。

Dreamweaverにおけるテンプレート

そこで、Dreamweaverなんかではテンプレートファイル.dwtを作成して、テンプレート全体に渡る変更はこの.dwtファイルを弄れば良いというような仕組みでやっている。

 
<!-- テンプレートファイル.dwt -->
<!DOCTYPE html>
<html lang="ja">
<head>
.
.
<!-- TemplateBeginEditable name="doctitle" -->
<!-- TemplateEndEditable -->
</head>
<body>
<header>
<h1>サンプル株式会社</h1>
</header>
<div id="wrapper">
<div id="main">
<!-- TemplateBeginEditable name="mainarea" -->
<!-- TemplateEndEditable -->
</div>
<div id="sidebar">
<aside>
.
.
</aside>
</div>
</div>
<footer>
.
.
</footer>
</body>
</html>

このような.dwtファイルを作成しておき、新しくページを作成する際はこのテンプレートを元にTemplateBeginEditable…というhtmlコメントアウトとTemplateEndEditable…に挟まれた部分にページオリジナルのコンテンツを入れる。もしテンプレート自体に変更が起きた場合は、そのテンプレートを元に作成された全てのページへの同様の変更が有効になるといった具合だ。

PHPでテンプレート方式を利用する

でも、Dreamweaverはお高い。現在ではCreative Cloudなんかで継続的にコストがかかるし、契約を止めてしまえば作成した.dwtファイルなんて無用の長物になってしまう。そこで、テンプレート機能のためだけにDreamweaverを導入するくらいならば、プログラムで何とかしてしてしまおうという考え方もあるだろう。
幸いPHPにはテンプレート方式を利用するのに具合の良い仕組みがある。一番大きいのは、html文書の途中にインラインで出力命令を埋め込めること。そこで、実際ページ毎に出力が異なる部分にあらかじめecho命令を書いておいたものをテンプレートファイルとして保存し、各ページのアドレスに対応するファイルから変数に出力する値を設定して呼び出せば良いのだ。

 
//テンプレートファイル template.php
<!DOCTYPE html>
<html lang="ja">
<head>
.
.
<title><?php echo $title; ?></title>
</head>
<body>
<header>
<h1>サンプル株式会社</h1>
</header>
<div id="wrapper">
<div id="main">
<?php echo $honbun; ?>
</div>
<div id="sidebar">
<aside>
.
.
</aside>
</div>
</div>
<footer>
.
.
</footer>
</body>
</html>
 
//トップページ index.php
<?php
$title = "サンプル株式会社 トップページ";
$honbun = "<article>
<h1>ごあいさつ</h1>
<p>ようこそサンプル株式会社ホームページへ!</p>
.
.
</article>";
include("template.php");
?>
 
//各商品紹介ページ itemA.php
<?php
$title = "サンプル株式会社 商品A";
$honbun = "<article>
<h1>商品Aの概要</h1>
<p>説明説明説明</p>
.
.
</article>";
include("template.php");
?>

ショートタグを使えばプレースホルダに近く

呼び出し側のファイルでは、変数を参照する箇所で毎度毎度インラインのPHPを呼び出し、echo命令を打っている。このままでも別に構わないのだろうが、よりテンプレートっぽくするために、プレースホルダに近い省略表現にしてみよう。
プレースホルダというのは、テンプレートエンジンで使われる用語の一つで、後から何か別のものを置く場所に仮置きしておくものである。Dreamweaverではイメージプレースホルダーという名前の、仮置き用のイメージをおける機能があるが、これはとりあえず関係ない。先の例でechoを使っていた部分を、そこに吐き出す変数名とプレースホルダであることを示すちょっとした目印表現の組み合わせ程度に簡略化すれば、仮置きらしくなる。
PHPは本当にテンプレートに向いている言語というべきか、echo命令の同義語として以下のような変換が出来る。

//これが
<?php echo $title; ?>
 
//これと同義語に
<?= $title ?>

幾分短くなった。この書き換えは、PHP5.4以降のヴァージョンなら標準で、5.3以前のヴァージョンなら、php.iniを書き換えてshort_open_tagをOnにすればできる(残念ながらini_setでは不可能)。
テンプレート使用のメリットの一つとして、デザイナーとプログラマーの作業の分担というものがある。PHPは全く分からないというデザイナー・htmlコーダにテンプレートファイルを渡して、”<?=”と”?>”に囲まれている部分には絶対に手を付けるなと言っておけば、デザイン作業が進みつつ、プログラマも並行してプログラムを書くことが出来る。ということで、テンプレート導入は、WEB制作の大きなパラダイムとなったわけだ。


スパムコメントが3日で1万件以上…

開設より5年近くなる当サイトだが、ここのところこれまでに無かった頻度でスパムコメントが付くようになり、その処理に手こずらされている。

前回の投稿で紹介したように、スパムコメント対策としては、場合により有料となってしまうWordPress推奨のプラグインAkismetではなく、Spammer Blockerというプラグインを入れて対策をとっている。このプラグインはスパムコメントのブラックリストを作成し、同じコメント元からのコメントをブロックしてくれるというものだが、こうした仕組みを導入してなお、リストをかいくぐって悪質な宣伝コメントが付くのだ。その数、3日で11000件。
コメントのほとんどが似たような文章で偽ブランド品の販売業者のリンクを貼ったものであり、ただコメントの発信元のIPはそれぞれ異なっているのでたちが悪い。リストの意味も無くなってくる。

一応、WordPress側の標準機能としてコメントのフィルタリングも可能になっている。たとえば特定単語を含んだコメントを表示しない、リンクを含むコメントを非表示、ユーザ登録しないとコメントを受け付けない、そもそもコメント自体を受け付けないなど。

いずれの解決法も決定的ではない。記事に対する意見のコメントなどを見落とさず、かつスパムによる支障のないブログ運営が出来る方法を探さなければならない。

まあ、近頃更新が滞っていたのはまたそれとは別の理由。


WordPressのスパムコメント対策 Spammer Blocker

WordPressのブログを長く運営していると、投稿に対して無関係なスパムコメントが大量につくようになる。その数たるや、当ブログのような零細ブログであっても1日に数十件、多い時は100件を超える程になる。
これらのスパムコメントを、コメント欄に無条件に表示するようにしてしまっていては、ブログの訪問者に管理されていないサイトであるとの印象を与えるし、また検索エンジンからもスパムリンクを放置しているサイトということで、低い評価をもらってしまう。つまりSEO的にもかなり問題がある。
そこで、コメントはまず承認制にして、スパムコメントでないコメントを管理者のチェックにより表示させるようにしなければならない。でも、日に100件のコメントをいちいちチェックするのは面倒極まりない。

標準でついてくるAkismetプラグイン

WordPressの配布元もスパムコメントの問題については把握しており、いちいち人間の目を通してスパムチェックを行わなくても良いように、自動判別してくれるプラグインが付属している。それがAkismetで、ダッシュボードのプラグイン>インストール済みプラグインから勝手にインストールされていることが確認できる。
Akismetを有効にするには、インストール済みプラグインから有効化を選ぶだけでは不十分だ。Akismet API keyというものを、リンクから飛んで取得しないと行けない。そして(一応申告制なのでごまかせるのかもしれないが)ビジネスユースの場合には有料でキーを取得しなければならない。ということで、運営ブログがビジネスユースなのかそうでないのか判別がつきにくいケースなどでは、有料プランにするべきか不明瞭なこともあり、どうも導入に消極的になってしまう。

特定IPからのコメントをスパム判定する

そこで、Akismetを導入しないでもスパムチェックの手間を省く方法を考える。一日に100件のスパムコメントの中には、似たような内容のものが多いということに気付くだろう。実際、コメント元のIPアドレスは100種類も無く、同一IPアドレスからのスパム投稿が多い。つまり、IPアドレスのブラックリストを作ってしまい、リストに当てはまる投稿者のコメントをスパムに振り分けるようにしてしまえば良いのである。

特定IPをブラックリストに放り込むには、ダッシュボードの設定>ディスカッションでディスカッション設定のページに移動、コメントブラックリストという入力フィールドにIPアドレスを列挙すれば良い。単語の一致でも指定できるので、スパムコメントにありがちなブランド名等でもフィルタリングが行える。

コメントブラックリスト

コメントブラックリスト

IPアドレスは、スパムコメントの下に書いてある、192.168.0.0のような数字である。ただ、これをいちいち控えて、ブラックリストに加えて…という作業は面倒臭い。

Spammer Blockerプラグインを使う

そこで、コメントの一覧からスパム認定を行ったコメントのIPを自動で記録し、次回以降そのIPからのコメントはブロックするという挙動のプラグイン、Spammer Blockerを使うと便利である。
インストールはダッシュボード>プラグイン>新規追加から行えばよい。
インストールして有効化すると、一度スパム認定を行ったIPからのコメントをブロックする。スパム認定を行うわけではなく、そもそも投稿自体をブロックするので、スパムコメントがデータベース上に増えていくこともない。

なお、このSpammer BlockerによってブロックされているIPは、前段で説明したコメントブラックリストに蓄積される訳ではなく、独自のデータベースに貯まっていくことになる。ダッシュボード>設定>Spammer Blockerから設定画面が見られるが、Banned IP addressというセクションに一覧があるので、スパム認定の解除や管理などはここで行えば良い。

このプラグインを導入してからというものの、スパムコメントが多くても1日5件くらいまでに抑えられるようになった。つまり、1日5件くらいまでは新しいアドレスからスパムが来ていたということになるのだが、完璧なブロックを志すなら、コメントブラックリストやAkismetと組み合わせて対処するしかないのだろう。


PHP5.5のリリースに合わせて、php.netをリニューアルしたそうな

いつも大変お世話になっております、php.net。久しぶりにじっくりと舐め回すように眺めたら、ページの頭の部分に”Step into the future! Click here to switch to beta php.net site”という文字が書かれている。どうせスパムリンクだろうと思って迷わずクリックしたら、php.netのリニューアルヴァージョンが出てきた。

PHPのヴァージョンも5.5でキリが良いし、php.netもいっちょリニューアルしておくかということらしく、今後はリニューアル後も一向にあか抜けない見た目の、新ヴァージョンに切り替えるらしい。なにこれ、jQuery(おまけにjQuery UIまで!)とか使ってしまって、PHPerとしては軟派になったphp.netを許せない!静的サイトで作り直せ!

ということを愚痴っても仕方が無いので、PHP5.5まわりについて言及しておこう。PHP5.5がリリースとなった事で、決まり通り2ヴァージョン前の5.3のサポートが打ち切られるということになるはずだけど、結局1年間は延長サポートになるらしい。

大抵のレンタルサーバって、PHPのヴァージョン5.2.8か5.3.6かを選ばせている段階だろうから、サポートが少し伸びた事は朗報だろうか。5.4が嫌悪されたということなのかねぇ。

PHP5.5では、cURLがHTTP Pipeliningに対応した。つまりこれまで作ったプログラムを通信部分が高速なものに書き直せるということで、非常に興味があるのだけれど、これまで作ったプログラムはまだ5.4の壁を越えられていないので…

まず5.4の変更点を慌てて読み返す作業にとりかからねば。


WordPress.comでTwenty Thirteenを試す

WordPressのサイトを新しく始めようと思った時、まずレンタルサーバを借りて、WordPressを手順通りインストールして…というような手続きが必ずしも必要というわけではない。というのは、WordPress.comという公式が提供するASPが存在するからだ。WordPress.com(日本語版)

このサービスに登録すると、×××.wordpress.comというアドレスが貰え、不要なインストールをせずにWordPressのブログページが作成できる。勿論、広告が多少入り、また完全版より機能が劣っているという制限はあるのだが、少しの気まぐれで思いついたサイトを実現するには、手軽で丁度良い。WordPress形式なので、本格的にサイトを始動しようと思った時は、データベースのエクスポートをして移行すれば良い。

私はTwenty Thirteenを見た。

このWordPress.comだが、デフォルトのテーマ選択肢の中に、Twenty Thirteenが入っている。最近Twenty Twelveが正式版になったばかりだという印象もあったのだが、何とも気の早いことで、ベータヴァージョンというわけでもなく使えてしまうのである。各所で話題になっているようだが、今回のデフォルトテーマの見た目は非常にポップである。

Twenty Thirteen見た目

Twenty Thirteen見た目

これまでのものと比べ、アクの強さもかなりある。きっともう増やす機能がなかったので、メジャーリリースのインパクトを損じないようにデザインを大きくいじったのだろう。

おそらく、最大の目玉機能となるのは、WEBフォントの全面採用。アイコン類もフォントにすることで、真にスケーラブルな、レスポンシブデザインに近づけたということなのだろう。まあ、正直時期尚早だと思っているのだが、これまでも、WordPressが先進技術を積極的に採用してきてくれたおかげで、それらの技術がWEB標準に育っていったという経緯を見ているので(HTML5やレスポンシブデザインね)、諸手を上げて歓迎しておこう。

で、WordPress.comは実用に足るのかということだけど、プラグインが使えない。この時点で、選択肢から外れてしまう。ただ、WordPressの事が何も分からないという人に手っ取り早くブログを作らせるには、インストールもいらないWordPress.comを勧めておけば良いということだろう。


WordPressプラグイン WP Social Bookmarking Lightを導入 

今更ながら、世間で流行っているtwitter、Facebookのユーザにおいでおいでをするため、ツイートするボタンやいいね!ボタンをブログ記事につけられるプラグインを入れてみた。WP Social Bookmarking Liteという、日本では非常にポピュラーなプラグイン。

何故導入するに至ったかというと、数年前と比べてこのブログ(前身は2010年からですので、もう4年経ちましたか)に他ブログからリンクが貼られることが少なくなり、たまに貼られるリンクはtwitterやFacebookのものが多くなってきていたもので。おそらく、以前ネット上でどこか他のページのコンテンツを紹介する際に行われていた、URLコピー&ペーストという儀式が廃れ、全てSNSのボタンをクリック→紹介という手順に変わってしまったのだろうと思われる。最早、URLという存在があるということも意識されていないかもしれない。twitterのタイムラインだけ眺めて、自分ではネットサーフィンをしないという利用もあるかもしれない。

で、導入の手順は、wordpressのプラグインメニューで検索して、インストールするだけなのだが、設定が独特だったので、少し解説をしておきたいと思う。

WP Social Bookmarking Light設定

設定画面

まず一般設定のタブで、SNSボタンの表示位置や表示非表示を決める。表示するものは、ウィジェットの登録と同じようにドラッグ&ドロップで左の枠に投げ込む。

スタイルのタブは、CSSをいじる画面。その隣から先ほど登録したサービスごとの設定画面になるが、言語設定が選べるので、国粋主義者なら日本語を選ぼう。もし志賀直哉ならば、フランス語を選んでも良い。

以上で、記事中の決めた位置にボタンが出るようになる。まあ大抵のテーマならデフォルトの位置で大丈夫だろうけど、見栄えが悪いようだったらCSSでmarginなどをつめるとよい。何故か全てのボタンを囲む.wp_social_bookmarking_lightというクラスのdivは、高さが指定されておらず、ボタンがはみ出している状態で表示されているので、marginをつけるのならばまずheightを指定しておかないといけない。それ以外は特に気をつけることはないだろう。

あと数年もすれば、ボタンを押す手間もなく念ずるだけでリンクが出来るようになるはずなので、それまでこのプラグインには活躍してもらおう。