ブログをWordPressに移行した。


当ブログをWordPressに移行しました。見た目上の変更はほとんどありません。

これまではPerlで開発されたSerene Bachを2004年から8年近く使っていましたが、記事数が500を超えたくらいから再構築に非常に時間がかかるようになり、またアクセス解析のプラグインが動かなくなるなど細かい問題が生じていました。
さらに仕事上でCMSを提案したり、また実際に使うことがあるため、ここらでガツンとCMSを使い込んでみることにした次第です。

初期構築にはそれほど時間がかからず、またデフォルトのデザインテーマも美しいので、難しいことをしようと思われなければ簡単にWordPressの世界に入っていけそうです。
気軽に機能を追加できるプラグインや、パーツの表示・非表示が簡単に制御できるウィジェットの使い勝手はすばらしいですね。

今回、一番手間がかかったのは、従来のブログ記事を移行かつURL・ドメインを継続し、これまでのデザインや使用していた機能を再現すること。
(RSSフィードもリダイレクトしてるのでRSS購読している人にもこの更新は読めている・・・はず)
Serene Bachからの移行手順として近いうちにまとめたいと思います。

WordPressに変更したところでブログの更新頻度が増えるかわかりませんが引き続き当ブログをよろしくお願いします。
(管理画面が変わり、また便利な管理機能が増えたことで少し気軽に更新できる気がします)

新米ウェブディレクターにすすめたい本5冊

友人が他業界から転職してウェブディレクターになり、参考書籍を教えてくれと依頼があったのでまとめてみます。
なお、小生は業界向け出版社のウェブ部門の人間なので、ウェブディレクターを専門職種とされている方には遠く及びません。
小生の経験にもとづく、友人に向けた私信としてご理解頂けますと幸いです。
あとタイトルは流行りっぽくしてみました。

ノンデザイナーズ・デザインブック

ノンデザイナーズ・デザインブック [フルカラー新装増補版]
まずはこれを読んでデザインの超基礎を学ぶ。縦線を揃えろ!字体は適当に選ぶな!余白を恐れるな!
絵が描けなくても良いデザインはわかる。すなわち、そこに法則があるのだ!!
ウェブデザインだけでなく、企画書・資料を作るときにも役立ちます。
社会人1、2年目だったか、本屋の書棚でこの本を見つけたときは探していたものが見つかったと身震いしました。
(当時は青い表紙の地味な本だった)

Webプロジェクトマネジメント標準

Webプロジェクトマネジメント標準 PMBOK(R)でワンランク上のWebディレクションを目指す
色々なウェブディレクションの参考書を読んでは、いまいち自分の実情に合わず、何だか手探りで試行錯誤しては案件を炎上させていたある日。
この本を読んで小生は身震いしました(再)
これこそ、まさにウチの会社の実情にマッチする手法だ!
まずはチャーターを立てろ、スコープを定めよと、システム開発では当たり前のことかもしれませんが、「ウェブ制作」の視点からまとめられたプロジェクトマネジメントの本です。
小生はこれを実践するようになってから、規模感が掴めない新規案件を恐れなくなり、またプロジェクトの炎上も無くなりました。
ディレクターとして数年経験を積んでから読んだ方が納得感があるかもしれません。

2ちゃんねるで学ぶ著作権

2ちゃんねるで学ぶ著作権
なぜこのセレクト?と思われるかもしれませんが、ウェブディレクターにとって著作権の理解は非常に重要です。
(特に小生が出版社のウェブ部門の人間だからかもしれませんが)
別に他の入門書でも良いのですが、身近(?)な2chをもとに楽しく読めます。
そして著作権についての基本が一通り理解できます。「著作権」って言ってもこんな種類があったのか。

ソフトウェア見積り―人月の暗黙知を解き明かす

ソフトウェア見積り―人月の暗黙知を解き明かす

正直この本の9割は理解できていません。数学的な議論をベースにした高度な専門書です。
全部を読み通す必要も無いかもしれません。
ただ、この中の一節が小生の見積に対する考えを変えました。

できるときはいつでも、まず数えよう。数えられないときは、計算しよう。判断だけに頼るのは最後の手段だ。

「開発一式:XX円」ではなく、不確かでも良いから数えられるもの(機能・工数)を積み上げるだけで、見積はより正確なものになります。
また「そんな金額じゃできない」ではなく、

互いの利益になるような代替案を用意する

のがビジネスです。

マンガでわかるWebマーケティング ―Webマーケッター瞳の挑戦!―

マンガでわかるWebマーケティング ―Webマーケッター瞳の挑戦!―
小生は受託案件が中心の業務なのですが、昨年に自社サービスを立ち上げることになり、マーケティング関連の本を読んだ中での1冊です。
受託では顧客の要望を叶えることを重視しますが、新規商品開発には市場の需要、一般ユーザーの視点が重要だと実感した1冊です。マンガよりも解説に読み応えがあります。
(ECサイトやBtoCをやっている人には当たり前のことなんだと思いますが)
●その他
重要だけど上の5冊にいれなかった本です。

・ウェブディレクション全般

ウェブディレクション全般を扱う書籍として下記2冊を挙げておきます。

Webディレクション標準ガイド
Webディレクション標準ガイド プロジェクト始動からサイトの設計・構築まで


ウェブの仕事力が上がる標準ガイドブック 3 Webディレクション
ウェブの仕事力が上がる標準ガイドブック 3 Webディレクション

これらはウェブディレクション業務を概観するのには良いのですが、具体的に何かをしようとするには物足りません。
ウェブディレクターになって最初の1冊には良いと思います。

・コーディング関係

Web標準の教科書―XHTMLとCSSでつくる“正しい”Webサイト
Web標準の教科書―XHTMLとCSSでつくる“正しい”Webサイト

ウェブディレクターであれば自らコーディングをすべきでは無いでしょう。
しかし「正しい」HTMLがあるという認識は重要だと思います。
自分でコーディングの一部も行っていた頃に何度も読んだ本です。
HTML5の時代になった今ではもう古い情報でしょうか。

・サーバ、ネットワーク、ウェブアプリーション関係

DNSの仕組みとか、ドメインの運用とか、OS、サーバ、ミドルウェアの特徴とか、FTP、SSH、SSL、CMS、SQLとか、Cookieとか、セッションとか、キャッシュとか、セキュリティ対策とか、冗長構成とか、、、。
ウェブディレクターが知らなければならない技術は広く浅くたくさんあります。
これらを体系的に学べる一冊・・・ありますかね?
小生は、結局いろんな本やウェブの拾い読みや経験から学ぶしかありませんでした。
遠回りせずにすむなら、そんな一冊ですませたいものです。
下記の記事に良さそうな本がありましたので参考にしてください(小生は未読です)。
今日からソフトウェア開発者になった人に本気で勧める5冊 – ledsunの日記
いちばんやさしいネットワークの本
いちばんやさしいネットワークの本 (技評SE選書)

これだけは知っておきたい Webアプリケーションの常識”
これだけは知っておきたい Webアプリケーションの常識

・最近読んでる本

技術的な背景のない文系ウェブディレクターに求められるスキルは「情報設計」だ!と、最近はIAの勉強中です。
IAシンキング Web制作者・担当者のためのIA思考術
IAシンキング Web制作者・担当者のためのIA思考術

以上、漏れや偏りはご容赦ください。
他にオススメなどありましたら教えてください。
後進の教育の前に、こっそり小生が読みます。

CakePHPでのセキュリティ対策メモ

百式さんのブログIDEA*IDEAの記事「CakePHPのAuthComponentではまったところ」から、以前に小生が「人力検索はてな」でした質問にリンクされた記念(同じ問題に直面したようで嬉しい)として、CakePHPのセキュリティ対策について途中までまとめて放置していたメモをアップします。

CakePHPで開発した「30日ブログ」は、不特定多数が利用するウェブアプリケーションであるためセキュリティ対策にはかなり気を使いました(一応ウェブディレクターの端くれとしてもこの辺は慎重に)。
そしてウェブアプリケーションの一般的な脆弱性については、CakePHPがある程度まで自動的に処理してくれます(フレームワークの素晴らしいメリット)。
そこでCakePHPと代表的な脆弱性3つについてまとめました。
●SQLインジェクション
・概要:ユーザーが任意のSQLを実行できデータベースが不正操作される。価格.comが昔くらった。
・PHPの対策:入力値をエスケープする。DBごとに関数が異なるので使い分ける〔mysql_real_escape_string(),pg_escape_string()〕。
・CakePHPの対策findreadなどの組込関数は自動処理されるので対策不要。ただし自分でSQLを組み立てて実行している場合はセオリー通りの対策が必要。
●クロスサイト・スクリプティング(XSS)
・概要:ユーザー入力がそのままHTMLに表示され任意のコードが実行される。はまちさんの得意技。
・PHPの対策:HTML出力時にサニタイジングする〔htmlspecialchars($str,ENT_QUOTES)〕。
・CakePHPの対策viewでサニタイジングする。省略記法h()。echoも含めてe(h($value))で覚えよう。
●クロスサイト・リクエスト・フォージェリ(CSRF)
・概要:管理者権限をもつユーザーにURLをクリックさせて不正な操作を強いる。相手は死ぬ。
・PHPの対策:ワンタイムチケットを発行する。
・CakePHPの対策:・・・
今回CakePHPで開発していてMVCモデルを採用するCakePHPはCSRFの脆弱性が生じやすいのではと思いました(素人の感想です)。
MVCモデルではhttp://example.co.jp/モデル/コントローラ/パラメータとなりますが、プログラムの作り方によってはhttp://example.co.jp/user/delete/1というURLをクリックすることでuser_id=1が削除されてしまいます。
そこで「ログインしたユーザーしか自分のIDは削除できないことにすれば」という処理を加えても、ログインしたユーザーが<a href=http://example.co.jp/user/delete/1>エロ動画</a>なんでリンクを思い余ってクリックしたら、ログイン状態が継続している場合は同様に実行されてしまうのです。
CakePHPでの対策方法を調べると色々あるのですが、急に敷居が上がってしまい、また同一ページ内に複数のフォームがあった場合にSecurityコンポーネントがうまく動きませんでした。
"クロスサイトリクエストフォージェリ対策" フォーラム – CakePHP Users in Japan
(小生は無理やりな対策を施しましたが現在のバージョンでは正式な対応方法があるのでしょうか?)
CakePHPだからCSRFが危険と言うわけではないですが、参考書通りに作成すると危ないなーと感じた次第です。

フレームワークのメリットはアプリケーションの機能に集中して開発ができるところだと考えています。
CakePHPもセキュリティ面をカバーしてくれるので安心して開発ができました。
セキュリティの専門家に怒られそうですが・・・。

CakePHP(MySQL)でちょっと変わった検索条件。

久しぶりのCakePHPネタです。30日ブログに機能を追加しました。
http://30daysblog.com/
30日ブログ

数ヶ月ぶりにソースコードを覗けば、もはや自分で書いたものとは思えない世界が広がっていました。
それでも既存コードをコピペしてイジリながらで、思っていたより簡単に機能追加。
フレームワークでMVCが分離されていることで、後から見返してもわかりやすく、機能の追加がしやすいということを実感しました。
●ランダム表示
DBに登録されている「テーマ」をトップページにランダム表示(3件)するようにしました。
$home_theme = $this->Theme->find('all', array(
'limit'=>3,
'order'=>'rand()',
));

‘order’=>’rand()’はCakePHPではなくMySQLの実装(”order by rand()”)です。
ランダムな数値を出して、それをidの検索条件にして・・・など考えていましたが簡単でした。
●カンマ区切りフィールドの検索
DBに登録されている「テーマ」をカテゴリー別に表示するページを追加しました。
http://30daysblog.com/themes/cateview/1
cateviewという、何ともダサいネーミングのアクションです。
各「テーマ」レコードは「カテゴリー」フィールド(category_id)を持っているのですが、テーマが複数カテゴリーに属するように“1,3,5”のようにCSVでcategory_idを保持しています。
本来DB設計としてはやってはいけないことなんだと思いますが、諸々の面倒を考えこのような形をとっています。
このCSVの中から特定のcategory_idを取得する方法についてWhereのLIKE検索を考えました。
SELECT * FROM db WHERE category_id LIKE ‘%$param%’
しかしこれでは、$paramが”1″の場合、”1″以外に”11″や”10″などにもマッチしてしまいます。
まさに同じような課題を人力検索はてなで見つけました。
MySQLでデータの保存方法について質問です。 1つのフィールド内に「1,2,3」と言うようにカンマ区切りのデータを保存する箇所があります。通常、この部分は正規化して別テー.. – 人力検索はてな
なるほど正規表現を使うのかー。
以下CakePHPでの実装。
function cateview($param = null) {
$data = $this->Theme->find('all', array(
'conditions' => array('Theme.category_id REGEXP' => "^$param$|^$param,|,$param$|,$param,"),
));
$this->set("data", $data);
}

CakePHPではfindを使えば柔軟にSQL文を作成できます。
以下、自分でコピペする際の雛型。
$data = $this->Model->find('all', array(
'conditions' => array("Model.id" => $param,"Model.hoge <>" => ""),//条件式。","でand。比較演算子の位置に注意。
'fields' => array('id', 'title'),//取得するフィールド。未指定は全件。
'recursive' => 0,//アソシエーションの取得数
'order' => 'Model.created desc',//取得順序
'limit' => 100,//取得件数
));

DB設計をいじらない表面上の処理であれば色々と簡単に実装できそうです。

CakePHPで更新pingを送信(PEARのXML/RPC)+RSS配信

先日公開しました「30日ブログ」
引き続き機能の追加などを行っており、今回は日記作成時に「更新ping」を送信させるようにしました。
「更新ping」とは検索エンジンなどに対する更新通知であり、更新ping送信するとクローラーが巡回してくるので早めに検索エンジンなどに反映されるようになります。

●更新ping送信の実装

ググって以下の二つを参考にしました。
PHPでBlog更新ping (XML-RPC)を送信する|PHPプログラムメモ|プログラムメモ
PHPでPingを送信すべし:High5.log~Webとか~
どちらもPHPの場合ですがcontrollerにほぼ丸々コピペでいけます。
ただCakePHPでPEARライブラリを使う方法がいまいちわからず。
調べると色んな手法があるようですが、小生の場合は下記のようにしました。
1.PEARのRPC.phpを以下に保存
/app/vendors/pear/xml/RPC.php
2.更新pingを送信するfunctionの冒頭に以下の1行を追加。
App::import('Vendor', 'XML_RPC', array('file'=>'pear'.DS.'xml'.DS.'RPC.php'));
PEARライブラリも簡単に使えるとなると拡張性も十分だ。
日記の入力にwiki記法を使えるようにもしました。
CakePHPのヘルパーからPEAR::Text_Wikiを使ってお手軽変換 – 「最果て」の支部
以上で日記作成時に更新pingが送信されている・・・はずです。
#本当にクローラがやってきてるのか動作確認がいまいち。
#successの反応が返ってきてるので、たぶん大丈夫なんだろうけど。

●RSS配信

更新pingを送信すると、クローラはそのサイトのRSSをチェックする場合があるようです。
そこでRSS配信も実装。これはCakePHP1.2単体で実現できます。
参考サイトはこちら。
CakePHP1.2でRSSフィードを使う | エムティシステム
あれ?エラーになる。
どうやらレイアウトファイルが無かったようです。
/cake/libs/view/template/layouts/rss/default.ctp
  ↓
/app/view/layouts/rss/normal.ctp

さらにdebugレベルを0にします。
Configure::write('debug', 0);
CakePHP Note:RSSヘルパー
あれ?それでもダメだ。
試行錯誤の上、normal.ctpの下記をコメントアウトしたら動いた。何で?
//echo $rss->header();
最後にブラウザやクローラにRSSの在り処を知らせるためのリンク、RSS auto-discoveryをviewに仕込みます。
複数の RSS を RSS auto-discovery で提供するには
<link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="xxxx.rss" />
これでRSS配信をブラウザでも確認することができました。
思ってたよりも簡単に二つの機能を実装できて、あらためてフレームワークの威力に驚いています。

  • 他のブログ

    育児で買ったモノたち
  • Twitter

  • 最近の投稿

  • 最近のコメント

  • はてなブックマーク

  • RSS購読

    RSS Feed RSS - 投稿

  • カテゴリー

  • 月別

  • カレンダー

    2017年4月
    « 3月    
     12
    3456789
    10111213141516
    17181920212223
    24252627282930
  • プロフィール


    健康・医療系の出版社でウェブに関わる営業企画と浅い技術。Webディレクター?
  • キーワード検索