ホーム  >  TECHNICALSKILLBLOG  >  

PROGRAM

CMSを導入する際に検討すべきポイント 

CMS | witten by waki
エムハンドでは、ウェブログ(ブログ)システムをCMSとして利用することをお客様にご 提案しています。これらのCMSを導入する際に一番最初に検討すべき4つのポイントを解説します。


      CMSを導入する際に検討すべきポイント 目次

   1. どのシステムを使おう? 
   2. サーバーどうしよう? 
   3. 更新/運用に関わる人の数は? 
   4. 必要な機能は? 
 
 
1.どのシステムを使おう?

ブログシステムはMovableType(MTと略されることが多い)とWordPress(WPと略されることが多い)の二つのシステムがそのシェアの大半を占めています。エムハンドでは主にこの2大ブログシステムをCMSとして利用することを提案しています。これらのシステムを選 ぶ上でのポイント。

    * アクセス数が多くなりそう?
    * 更新頻度が高くなりそう?
    * システムに費やせる予算は?

MTとWPの最大の違いは「静的か動的か」と「メーカー製(商用は有料)かオープンソース(無料)か」です。ユーザーのアクセス数が多くなることが予想されるなら、MTの方がサーバーへの負担は少なく有利です。
更新頻度が高く、ほぼ毎日更新するなら「再構築」を必要としないWPの方が更新は楽です。ユーザーの利便性(MT)と管理者の利便性(WP)のどちらを優先する?ってことになります。そして、メーカー製であるMTの場合は、ライセンス購入後1年のサポートがあるので使い方で困ったらメールで問い合わせることが出来ます。オープンソースのWPの場合は、サポートはありませんが、ライセンス料がかからず安価に構築が可能です。エムハンドでは、これらのメリット/デメリット両方を理解した上でお客様にあわせて提案しています。


2.サーバーどうしよう?

どちらのシステムを利用するにしても、記事数が数千件に達したり、閲覧ユーザーのアクセスが増えて来ると、サーバーへの負荷が大きくなり、不具合が出てくることがあります。立ち上げ当初は、問題無くとも、長く使っていくうちに限界は確実に近づいてきます。エムハンドがお客様にご提案させていただくサーバーの多くは、出来るだけ月々のランニ 
ングコストを抑えつつ、必要な機能を満たすものです。予算に余裕があり、最初から高い負荷が予想されるなら、高価なサーバーを提案させていただきますが、通常はサイトの成長に合わせたステップアップを提案しています。


3.更新/運用に関わる人の数は?

WPの場合、オープンソースなのでアカウントの追加にコストは発生しません。MTの場合、商用利用は有料となります。
ライセンスの考え方は1ユーザーにつき1アカウントです。1つのアカウントを複数人で使い回すことは原則的にはアウトです。
基本パッケージは5ユーザーまでの制限があり、(一部サーバーにセットになっているモノで1ユーザーのものがあります)1つはサイト構築のためのエムハンド用に割り当てて頂く必要があるため、記事を書く人の数が4人以上になりそうな場合は「ユーザー数無制限版」の購入を提案しています。


4.必要な機能は?

例えば、スタッフが記事を書いて直属の上司がチェックして承認しないと公開できない「承認機能」。携帯電話からの投稿を可能にする「携帯投稿機能」。メールフォームやプレゼント応募フォームなどを簡単に設置/削除する「簡易フォーム作成機能」。などなど...これらの機能は標準のブログシステムにはありません。これらの機能を付加するには「プラグイン」と呼ばれる追加機能によって可能になり、方法はいくつかあります。

一つは無料プラグインをインストールする方法。設定工数だけなのでお安く仕上がりますが、無料のプラグインなので不具合があってもサポートが受けられずトラブルの内容によっては使用出来なかったり、プラグイン同士の相性問題など、不便なコトもあります。

もう一つは有料のプラグインやプラグインパッケージを利用する方法。こちらはサポートが受けられ、プラグイン同士が高度に連動するようになっていて、お金を払うだけの価値があります。
↓下記はMTのCMS機能を強化するプラグインパッケージのご紹介です。(98,000円~)
http://www.mtcms.jp/
数千万円するCMSが存在することを考えると破格の安さ?と言えるのかも。

機能を追加するには導入設定だけでなく運用ルールやワークフローの策定も含めて決めることがたくさんあります。制作スケジュールにも影響することなので必要な機能は早い段階で決めておきましょう。下記にチェックリストを作成しました。導入時の一助になれば。

    * 携帯でサイトを見れるようにしたい
    * スマートフォンで最適な大きさでサイトを見れるようにしたい
    * 携帯電話からの記事投稿を可能にしたい
    * 複数のアカウントをグループ分けして管理したい
    * 記事作成者以外のスタッフが承認しないと公開出来なくしたい
    * 指定日時が来たら公開したい
    * 指定日時が来たら公開していた記事を削除したい
    * 問合せフォームなどを自由に作成/公開したい
 
以上、CMSを導入する上で検討しておきたいポイント4つでした。
一昔前は、数百万円以上するのが当たり前だったCMSですが、ウェブログシステムから進化したMTやWPの登場以来、多くのディベロッパーのおかげで安価かつ手軽に導入できるようになりました。賢く使って楽にサイト運用出来るよう、前準備は怠らないようにしたいものです。

2011

11/12

11:45

MTのユーザ名とパスワードを忘れてしまった場合の対処法

MT PROGRAM | witten by 奥村
MTのユーザ名とパスワードを忘れてしまった場合の対処法を
以下に記載しておきますので、ご確認ください。

▼対処法
1.―――――――――――――――――――
MT-Medicをダウンロード
http://www.nonplus.net/software/mt/MT-Medic.htm
ZIPファイルなので、ダウンロード後に、解凍。

2.―――――――――――――――――――
解凍すると、「mt-medic.cgi」が現れます。これを開き、
11行目「my $ADMIN_PASSWORD = "ここに任意のパスワードを記入";」
15行目「my $INFO_PASSWORD = "ここに任意のパスワードを記入";」
この部分に好きなパスワードを入れて上書き保存します。

3.―――――――――――――――――――
その後、ログインできなくなったMovable Typeのデータが入っているサーバの
ディレクトリにFTPでアクセスし、「mt-medic.cgi」をアップロードして、属
性を「700」に変更します。

4.―――――――――――――――――――
アップロードが完了したら、ブラウザで直接「mt-medic.cgi」のURLへアクセス。
例:「http://www.exsample.com/mt-medic.cgi」

英語の管理画面っぽいページが開くので、「Auther」というリンクをクリックし
て、先ほど記入したパスワードを入力して、「LOGIN」をクリックします。

ログインして該当ユーザー名(以前設定したログイン名があるはず)を見つけた
ら、右側にある「EDIT」をクリックしてパスワードを再設定していきます。

「Username」=「ログイン名」
「Password change」、「Password confirm」両方に「設定したいパスワード」
を入力してください。

以上で、再設定が可能です。

2010

04/19

9:33

PHPでソケット通信を使って他のサーバーのデータを取得する方法

PHP | witten by 村田佑介
PHPのrequire_onceなどで別サーバーのデータが取れない場合、ソケット通信でデータを取得します。その際に起こった問題をなんやかんやで解決していって現在実用しているのが下記のコードです。

data_get()の第一引数に取得したいURLを入力すると内容が返ってきます。BASIC認証をかけている場合はユーザー名とパスワードをそれぞれ第二引数、第三引数に渡して下さい。


<?php
//ソケットでデータを取得
function data_get($url,$authuser="",$authpass=""){
unset($basic);
$tmp = parse_url($url);
if($tmp[query]){
$tmp[path] = $tmp[path]."?".$tmp[query];
}
$fp = fsockopen($tmp["host"], 80, $errno, $errstr, 4); // 80番ポートに接続
if(!$fp){
//print $errno.":".$errstr; // これでエラー内容表示されるはず
return array("status" => "connect_fail","msg" => $errstr);
}
$out = "GET {$tmp['path']} HTTP/1.1\r\n";
$out .= "Host: {$tmp['host']}\r\n";
$out .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n";
if($authuser){
$out .= "Authorization: Basic ".base64_encode($authuser.":".$authpass)."\r\n"; 
}

$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
stream_set_timeout($fp, 4);
//コンテンツ部分の受信
$in = '';
while (!feof($fp)) {
$in .= fgets($fp, 4096);
}
fclose($fp);
//ヘッダーとコンテンツ部分に分割
$in = split("\r\n\r\n",$in);
//ヘッダーを配列に格納
$info = decode_header($in[0]);
//デコード
unset($in[0]);//ヘッダー削除
$in = join("\r\n\r\n",$in);
$body = decode_body($info, $in);
return mb_convert_encoding($body, "UTF-8","ASCII,JIS,UTF-8,EUC-JP,SJIS");
}
function decode_header($str){
//<CRLF>ごとに分割
$part = preg_split("/\r\n/", $str, -1, PREG_SPLIT_NO_EMPTY);
$out = array ();
for ($h = 0; $h < sizeof($part); $h++) {
if ($h != 0) {
// :で区切ってkeyとvalueを作成
$pos = strpos($part[$h], ':');
$k = strtolower(str_replace(' ', '', substr($part[$h], 0, $pos)));
$v = trim(substr($part[$h], ($pos + 1)));
else{
//1行目ステータスコード
$k = 'status';
$v = explode (' ', $part[$h]);
$v = $v[1];
}
//keyとvalueを配列に格納
if ($k == 'set-cookie') {
$out['cookies'][] = $v;
elseif ($k == 'content-type') {
if (($cs = strpos($v, ';')) !== false) {
//目的が解析なのでサブタイプは切り捨てない
$out[$k] = $v;
}
else{
$out[$k] = $v;
}
}
else{
$out[$k] = $v;
}
}
return $out;
}
function decode_body ($info, $str, $eol = "\r\n"){
$tmp = $str;
$add = strlen($eol);
//チャンク形式の判定
if (isset($info['transfer-encoding']) && $info['transfer-encoding'] == 'chunked') {
do {
//チャンクサイズ取得してを10進数に変換
$tmp = ltrim($tmp);
$pos = strpos($tmp, $eol);
$len = hexdec(substr($tmp, 0, $pos));
//圧縮転送されている場合解凍する
if (isset($info['content-encoding'])) {
$str2 .= gzinflate(substr($tmp, ($pos + $add + 10), $len));
else{
$str2 .= substr($tmp, ($pos + $add), $len);
}
$tmp = substr($tmp, ($len + $pos + $add));
$check = trim($tmp);
} while (!empty($check));
}
elseif(isset($info['content-encoding'])) {
//圧縮転送されている場合解凍する
$str2 = gzinflate(substr ($tmp, 10));
}
else{
$str2 = $str;
}
return $str2;
}
?>

2010

03/26

18:09

CakePHPのコントローラ内で処理を途中で終わらせる方法

CAKEPHP | witten by 村田佑介
CakePHPでは呼ばれたアクションのメソッドを最後まで実行してからviewを出力するのですが、処理を途中で終了させたいことも多々あります。

そういう時は今まで$this->render();を使ってたんですが、ループさせた時に実はこれでは終了しないということが判明しました。exit();などではその後の処理が止まって正常にviewが表示されなくなりますが、$this->render();のすぐ後にreturn 0;でうまく処理が終了してくれました。


------------------------------------
class UsersController extends AppController {

    function test(){
        if(hoge){
            //処理1
            $this->render();
            return 0;
        }
        //処理2←上のif文に入った場合は実行されない
    }

}
------------------------------------

以上備忘録でした。

2010

03/05

13:43

身も蓋もないjavascriptの配列のお話

JS | witten by yama

先日Javasciptはプロトタイプベースの言語である事を失念して恥ずかしい思いをしました。
同じミスをしないようにメモしておきます。

---------------------------------------------
var o = {huga: 'huga', moge: 'moge'};
for (var i=0; i<o.length; i++) {
  alert(o[i]);
}

---------------------------------------------

あれ?動かない・・・っていうので10分ほど思考停止。


PHPばっかり書いていて、そちらの連想配列に慣れてしまうとたまに意味が分からないことをしてしまいます。

PHPとjavascriptの連想配列は全く違うんですよね。

javascriptはすべてオブジェクトです。
つまりjavascriptの配列は'連想配列'の特殊なパターンのわけです。

だから、'.length'使いたかったらこう書かないといけませんよね。。

---------------------------------------------

var o = {0: 'huga', 1: 'moge', 2: 'hage', length: 3}
o.__proto__ = Array.prototype;

---------------------------------------------


でもこんなの何の意味がないのは見れば当然...わざわざlengthに自分で数を入れるなんて、無意味もいいところなので。

素直に

---------------------------------------------

for(var i in o){
  alert(o[i]);
}

---------------------------------------------

で、解決しました。

2010

03/04

18:06

JQueryで画像のロールオーバーを簡略化

JQUERY | witten by 村田佑介
imgタグにロールオーバーをつけていくのが面倒なので、記述を簡略化できるスクリプトを作成しました。

通常は、
<img src="img_001.jpg" onmouseover="src='img_001_o.jpg'" onmouseout="src='img_001.jpg'" />
と書かなければならないところを、
<img class="over" src="img_001.jpg" />
で済むようにしました。

--------------------
■使い方
1.ロールオーバー用の画像を用意してファイル名に_oをつけます。
例:img_001.jpgとimg_001_o.jpg

2.Jqueryを読み込んで下記タグを貼りつけます。
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js" type="text/javascript"></script> 
<script language="JavaScript">
<!--
$('document').ready(function(){
	$('.over').hover(
		function(){
			var src = $(this).attr('src');
			var src_o = src.substr(0, src.lastIndexOf('.')) + '_o' +
			src.substring(src.lastIndexOf('.'));
			$(this).attr('src',src_o);
		},
		function(){
			var src = $(this).attr('src');
			var src = src.substr(0, src.lastIndexOf('.')-2) +
			src.substring(src.lastIndexOf('.'));
			$(this).attr('src',src);
		}
	)
});
// -->
</script>

3.ロールオーバーしたい画像にoverクラスをつけます。
例:<img class="over" src="img_001.jpg" />
--------------------
ご自由にお使い下さい。

2010

03/03

17:26

MTで高速Ajaxブログ内全文検索

MT | witten by 村田佑介
このブログ構築の際にブログ内検索をどうしようかと色々調べたところ、いい感じのスクリプトを提供している方がいらっしゃったので拝借しました。

本家:http://java.cocolog-nifty.com/blog/2005/10/javascript_c163.html
パッチ:http://furyu.tea-nifty.com/annex/2006/05/blog_ajax_json__94c8.html
参考:http://bizcaz.com/archives/2006/09/19-231447.php

解説ではprototype.jsを読み込んでいますが、当サイトではJQueryを使っているのでprototype.js読み込みのスクリプトは外しました。

あとは検索結果を一番左のカラムに出したので、もともと左カラムにあった内容はJQueryで消してます。こんな感じ。
--------------------
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
	$("#search_button").bind("click",function(){
		$("#blog_in").slideUp();
	});
});
</script>

(中略)

<div class="content"></div><!--←ここに検索結果を表示-->
<div class="blog_in">(中略)</div><!--←ここにコンテンツの内容を表示。検索されると消える。-->
--------------------

このブログでも使っていますので、右上の検索ボックスからお試し下さい。


*********************
追記:2010/03/08
*********************
上記のスクリプトではエンターボタンで検索した時に左側のコンテンツが消えないので修正しました。

修正箇所:
1.formにid="searchform"を追加

2.スクリプトを下記に変更
--------------------
<script type="text/javascript">
$(function(){
	$("#search_button").bind("click",function(){
		$("#blog_in").slideUp();
	});
	$("#searchform").submit(function(){
		$("#blog_in").slideUp();
	});
});
</script>
--------------------

2010

03/03

15:44

カテゴリー

月別アーカイブ

TECHNICAL SKILL BLOG

2011/11/12
PROGRAM

CMSを導入する際に検討すべきポイント 

エムハンドでは、ウェブログ(ブログ)システムをCMSとして利...

2011/09/01
DESIGN

PSD→JPEG一括変換

PSDからJPEGに一括変換する方法を3種類ご紹介します。 ...

2011/08/20
OTHERS

スタッフ募集中 【WEBデザイナー&ディレクター】

【募集職種】 Webデザイナー &ディレクター━━━━━━━...

ホームページ制作のお問い合わせ

PAGE TOP

〒142-0051 東京都 品川区平塚2-6-13 スバルビル7F
電話:03-5751-4240
FAX:03-5751-7685

〒553-0004 大阪市福島区玉川2-8-4 阪神玉川オフィスビル6階
電話:06-6449-6155
FAX:06-6449-5045

〒605-0992 京都市東山区下堀詰町246 テイブンビル2階
電話:075-533-6316
FAX:075-533-6317

(C)2009 M-hand Corporation.  All Rights Reserved.