webデザイン案件はテンプレ買えばよくね?

最近安価なホームページ作成依頼が多くて、どうやってコストを下げようかと考えてます。ホームページ作成案件の流れは、

  1. 営業部隊が案件をとってくる。
  2. 営業の人が要望を聞いてくるので、それを元にデザイナーがトップのデザインを作る。
  3. okもらえたらHTMLコーディング。
  4. 納品。

といのが大筋の流れです。この中で楽に削れそうなのは、2のデザインを作るとこですね。デザイン作るのは1日かかります。ボツだったり修正などで最長3日くらいかかったりもします。
というわけで、デザインはテンプレートを買ってコストを下げようということになりました。購入先のテンプレートはモンスターテンプレートというところです。大体1つ7000円くらいなので、人日4万(営業費込み)と比較すれば大分いい感じですね。楽ですし。それ以上に、最初の段階でこんな感じのデザインという"クライアントとの認識合わせ"が出来るのが一番良いです。

で、テンプレートを使う際に気をつけないといけないのは著作権などのライセンスの問題です。モンスターテンプレートへ実際に聞いてみました。以下がモンスターテンプレートの利用条件です。

  • 商用利用可
  • 転売は禁止
  • 1購入につき1ドメインのみ

(2ドメイン以上の場合には、必要数分ダウンロードの必要あり)

まぁ、普通に使ってれば全く問題ないですね。後日、実際どうだったか書く予定です。

PHP5.4を知らない人は要チェック。いやPHP6.0か?

最近PHP5.4が気になったので調査してみた。今(2010/9/25)はPHP5.3が最新だが次のバージョンアップではどうやらかなり変わるらしい。しかもPHP5.4にするかPHP6.0にするかまだ決まっていないので、今のtrunkにはphp5.3.99devというバージョンになっている。みんなも経験があると思うが、PHPはマイナーバージョンアップでもいきなり仕様が変わって困ることが多いので今回は恐ろしいことになりそうだ。

バージョンに関しては、自分的にはPHP6.0よりPHP5.4になる予感がするのであえてPHP5.4と書くことにする。検索するときは、PHP5.4よりもPHP6.0のほうが圧倒的に情報多いので調査のときは、PHP6.0で検索することをお勧めする。では一覧で紹介してくが、この情報はリポジトリにあったNEWSで、日々更新されるのでおおまかに説明してくことにする。

PHP5.4で何が変わるのか

dereferencingをサポート

(原文)
Added array dereferencing support. (Felipe)

JavaScriptでお馴染みのやつですね。

<?php
function getArray() {
    return array(“elem1”, “elem2”, “elem3”);
}

print getArray()[0]; // elem1
print getArray()[1]; // elem2
print getArray()[2]; // elem3

タイプヒンティングにスカラー値を追加

(原文)
Added scalar typehinting. (Ilia, Derick)

ついにつきました!
いままでは、arrayとobject(クラス)だけでしたが、intやstringも指定できるようになった。

<?php

function test1(int $sample1) {
    print $sample1;
}

function test2(string $sample2) {
    print $sample2;
}

function test3(float $sample3) {
    print $sample3;
}

test1(1); // 1
test1('hoge'); // FetalErrorが発生
test1('1'); // FetalErrorが発生

test2('foo'); // foo
test2(1); // FetalErrorが発生
test2(array('foo')); // FetalErrorが発生

test3(1.1); // 1
test3(0.0); // 0.0 (いいんだ・・・)
test3(1); // FetalErrorが発生
test3(0); // FetalErrorが発生

ちなみにエラーの場合は、以下のようなFetalErrorが出る。

PHP Catchable fatal error:  Argument 1 passed to test3() must be of the type double, integer given, called in /home/admin/install/php5.4/test_typeh.php on line 24 and defined in /home/admin/install/php5.4/test_typeh.php on line 11

Catchable fatal error: Argument 1 passed to test3() must be of the type double, integer given, called in /home/admin/install/php5.4/test_typeh.php on line 24 and defined in /home/admin/install/php5.4/test_typeh.php on line 11

Traitのサポート

(原文)
Added support for Traits. (Stefan)

Traitは多重継承ができ、Scalaで使われててアスペクト志向とかに向いているというもの。
今はextendで1つしかクラスを継承できないが、traitを使うと複数継承できる。
実際に使ってみる。

(参考)
http://wiki.php.net/rfc/traits

 <?php
 class Base {
   public function sayHello() {
     echo 'Hello ';
   }
 }
 
 trait SayWorld {
   public function sayHello() {
     parent::sayHello();
     echo 'World!';
   }
 }
 
 class MyHelloWorld extends Base {
   use SayWorld;
 }
 
 $o = new MyHelloWorld();
 $o->sayHello(); // echos Hello World!

なかなか便利そう。だがちょっと不満な点があるので、traitに関しては、別記事として書く予定。

TokyoCabinetをサポート

(原文)
Added Tokyo Cabinet abstract DB support to ext/dba. (Michael Maclean)

最近話題のKVSですね。ちょっと使ってみましょう。


1、TokyoCabinet自体をインストール

sudo yum install tokyocabinet*


2、PHPインストール

1、まずダウンロード

svn co http://svn.php.net/repository/php/php-src/trunk


2、--with-tcadbをつけて、てきとうなとこにインストール。

./buildconf
./configure --prefix=/home/admin/install/php5.4/ --with-tcadb
make
make install


3、動作テスト用スクリプトを用意

<?php

$id = dba_open("test.tch", "c", "tcadb");

if (!$id) {
    echo "dba_open failed\n";
    exit;
}

$key = "test_key";
$value = "test_value";

// 追加
dba_insert($key, $value, $id);

// 取得
var_dump(dba_fetch($key, $id));

dba_close($id);

詳しくはマニュアル参照
http://www.php.net/manual/ja/ref.dba.php


4、実行

[admin@localhost trunk]$ ~/install/php5.4/bin/php ./cabinet_test_fetch.php
string(10) "test_value"

とりあえず動くことを確認したので満足。
次。

削除されたもの

 - Removed legacy features:
  . allow_call_time_pass_reference. (Pierrick)
  . define_syslog_variables ini option and its associated function. (Kalle)
  . highlight.bg ini option. (Kalle)
  . import_request_variables(). (Kalle)
  . register_globals. (Kalle)
  . register_long_arrays ini option. (Kalle)
  . Safe mode. (Kalle)
  . Session bug compatibility mode (session.bug_compat42 and
    session.bug_compat_warn ini options). (Kalle)
  . session_is_registered(), session_register() and session_unregister()
    functions. (Kalle)
  . y2k_compliance ini option. (Kalle)

注目すべきものは、以下の2つ

ついに削除されたー。

Dtraceをサポート

(原文)
Added DTrace support. (David Soria Parra)

Dtraceは強力なデバッガで、プログラムの実行をトレースしたりします。例えばPHPでどの関数がどの関数を実行してきたのか等を調べることが出来ます。ですがSoraris用の仕組みなので今回はサンプルを用意できませんでした。。。
リンクだけ張っておきます。

Dtraceとは

Dtrace for PHP

パフォーマンス向上について

(原文)
 - Added caches to eliminate repeatable run-time bindings of functions, classes,
   constants, methods and properties (Dmitry)
 - Added a number of small performance tweaks and optimizations (Dmitry)
  . ZEND_RECV now always has IS_CV as its result
  . ZEND_CATCH now has to be used only with constant class names
  . ZEND_FETCH_DIM_? may fetch array and dimension operans in a different order
  . ZEND_RETURN is splitted into two new instructions ZEND_RETURN and
    ZEND_RETURN_BY_REF
  . optimized access to global constants using values with pre-calculated
    hash_values from litersls table
  . optimized access to static properties using executor specialization.
    A constant class name may be used as a direct operand of ZEND_FETCH_*
    instruction without previous ZEND_FETCH_CLASS.
 - Added concept of interned strings. All strings constants known at compile
  time are allocated in a single copy and never changed. (Dmitry)
 - Added an optimization which saves memory and emalloc/efree calls for empty
  HashTables (Stas, Dmitry)

まぁ色々と向上させたらしい。
PHP内部の話なのであまり興味ないあるよ。(汗

2種類のハッシュをサポート

(原文)
Added Jenkins's one-at-a-time hash support to ext/hash. (Martin Jansen)
Added FNV-1 hash support to ext/hash. (Michael Maclean)

one-at-a-timeハッシュは、perlで使われてるらしい
ぁーなんか興味ない。
次。

Reflectionクラス拡張

(原文)
Added ReflectionExtension::isTemporary() andReflectionExtension::isPersistent(). (Johannes)
Added ReflectionZendExtension class. (Johannes)
Added ReflectionClass::isCloneable(). (Felipe)
  • isTemporary()メソッド追加
  • isPersistent()メソッド追加
  • ReflectionZendExtensionクラス追加
  • isCloneable()メソッド追加

Reflectionクラスにメソッド追加? あんま興味ない。。
次。

default_charsetのデフォルトはUTF-8

(原文)
default_charset if not specified is now UTF-8 instead of ISO-8859-1. (Rasmus)

ぉぉーついにそうなりましたか。
試してみましょう。

1、--enable-mbstringつけてPHPインストール

make clean (さっきTokyoCabinetインストールしたので)
./configure --prefix=/home/admin/install/php5.4/ --enable-mbstring
make
make install

2、テスト実行

mb_internal_encoding()でちゃんとUTF8になってるか確認・・・

[admin@localhost trunk]$ ~/install/php5.4/bin/php -r "var_dump(mb_internal_encoding());"
string(10) "ISO-8859-1"

ぁ゛?

iniになんかセットされて・・・

[admin@localhost php6.0]$ ~/install/php5.4/bin/php -r "var_dump(ini_get('default_charset'));"
string(0) ""

ない。ならUTF8になるはずじゃ・・・?

[admin@localhost php6.0]$ ~/install/php5.4/bin/php -i | grep default_charset
default_charset => no value => no value

謎・・・まぁ、さすがPHPということで。

国際化に関して

国際化は、「ICU (International Components for Unicode)」というライブラリを使って実装される予定でしたが、今回のアップデートからは外されてます。先日のPHPカンファレンス2010では話題に上がりましたね。全世界に対応するとコードの量が膨大になりすぎるとかで断念したらしい。(?)
これが導入されると、mb_serlen()とか使わなくてもちゃんとマルチバイトを認識して処理してくれます。ということは英語圏の人作った膨大なスクリプトを手を加えずに再利用できるので早く導入してほしい。

まとめ

まだ他にもあるがここまで。ひたすら書きましたがそんなに変わるか?というのが印象でした。なのでPHP5.4になりそうな気はしてます。やっぱ大きいのは国際化だなー早く対応してほしい。タイプヒンティングもスカラに対応したのでプロジェクトで強制したい場合はとてもやくに立つんじゃないですかね。あと、どれくらいパフォーマンスが向上したかベンチマークしてみたいなー。

リサーチ方法のまとめ - evernote編

基本は、検索とソーシャルメディアで調べることになる。wikiの情報は最新じゃない場合が多いので注意。今回はevernoteを調査する機会があったので、メモがてらまとめた。
(※この統計はあくまで個人で調査した推定のものです)


ユーザー数

調査方法1

まずは検索。
(例)

http://blog.evernote.com/jp/?p=920
400万人突破とのこと。

調査方法2

1の方法で見つからなければ、twitter/facebook/mixi等で中の人がいれば直接聞く。
バレるとメンドウなら捨てアカウントで。

売上

売上を出すために必要な項目を考える。
evernoteなら

  • 有料会員数
  • 価格
有料会員数

具体的に数値が載ってるかもしれないので検索。
(例)

http://blogs.itmedia.co.jp/saito/2010/05/evernote-fe69.html
有料会員率は2%とのこと。
4,000,000 x 0.02 = 80,000人

価格

公式サイトに載っている。
5$ (以下500円で計算)

売上

有料会員数 x 価格
80,000 x 500 = 40,000,000

インデックス数

google検索でsite:を使用する。

site:www.evernote.com
インデックス分析
  • 全体 : 5,170ページ
  • googleで表示可能なページ数 : 842ページ
  • 基本的なサイト情報 : 195ページ
  • スパムSEO用(?)PDF : 50ファイル
謎のPDF群。。。
site:www.evernote.com/about/intl/jp/support/templates/
  • ユーザーが公開しているノート : 4925ページ (5170 - (50 + 195))
  • 400万人もいるのに、全体に公開しているユーザーはものすごく少ないということになる。

コストやリリース日

evernoteは結構情報多く、コストなども載ってたので記載。

  • 一人あたりの月間コスト : 9セント
  • 1年半ほど前(2009/9頃)から黒字
  • リリース日(推定) : 2005年

統計のまとめ

  • ユーザー数 : 4,000,000人
  • 課金率 : 2%
  • 課金ユーザー数 : 80,000人
  • 売上 : 40,000,000円
  • インデックス数 : 5,170
  • 一人あたりの月間コスト : 9セント (約7円)
  • 1年半ほど前(2009/9頃)から黒字
  • リリース日(推定) : 2005年

まとめ

競合調査や企画書で統計書くならこれくらいで十分だと思う。今回はevernoteの調査だったがほかのサービスも同じように調べれば大体でてくる。ややマイナーな場合はtwitterで中の人に聞くのが手っ取り早い。統計等の数字を知っておくと、営業とかwebサービスの話をするときに説得力がすごく増すので覚えておいた方がいいですね。今色々なサービスを調査しているのでまとめたら書きますー。

3大モバイルSNS統計のまとめ

最近ソーシャルアプリ案件の話をやたら聞くので勉強がてらまとめた。

会員数

  • GREE : 2125万
  • モバゲー : 2048万
  • mixi : 2102万

(2010年7月末時点)


ここの記事をまとめてみた。

GREE・モバゲー・mixiの“3大モバイルSNS”課金ユーザ、リアルな比率が判明……MMD研究所調べ
http://news.biglobe.ne.jp/it/206/rbb_100907_2063309561.html


実施日 : 2010/8/30から4日間
アンケート回答数 : 1,766人

SNSの登録率

  • GREE 63.0%
  • モバゲー 53.3%
  • mixi 43.8%

アクティブユーザー

  • GREE 36.4%
  • モバゲー 30.3%
  • mixi 28.5%

課金率

  • GREE 14.2%
  • モバゲー 11.9%
  • mixi 6.3

mixiは極端に少ない。

年齢別課金率

  • GREE 30代前半
  • モバゲー 20代後半
  • mixi 20代後半

3つとも10代課金率は5%以下。極端に低い。

この資料だと50代以上の率がすべて高いが、ほんと???

まとめ

  • GREEが一番勢力が強い。
  • 10代向けのアプリよりも20台後半〜30台前半向けのアプリを作ると課金ユーザー率がUPする。

各種ソフト

Analog

http://www.analog.cx/

  • 1995頃から存在。
  • 約12,000行を1分29秒で解析。
  • もう開発はしていない様子。
  • 歴史があり、高速な解析がウリ。

Webalizer

http://www.webalizer.org/

  • Analogの次に台頭したソフト。
  • 約12,000行を2分22秒で解析。
  • 開発は活発でない。

Webdruid

http://www.projet-webdruid.org/

  • webalizerの進化形。
  • 1年前から開発してない様子。
  • URLのアクセス遷移をグラフィカルに図示。

Visitors

http://www.hping.org/visitors/index_jp.php
http://gigazine.net/index.php?/news/comments/20070305_visitors/

  • 高速なアクセスログ解析。
  • 2006年から開発してない様子。
  • URLのアクセス遷移をグラフィカルに図示。

AWStats

http://awstats.sourceforge.net/

  • Webalizerの次に台頭したソフト。
  • 約12,000行を7分41秒で解析。
  • 定期的に開発が進んでいる。現在7.0を開発中の様子。
  • Analog、Webalizerより多機能。
  • 数多くのレンタルサーバで採用されている。
  • グラフが見やすい。
  • お気に入り件数が見れる。

このソフトが無難そうなので決定。

マニュアル

使い方がいまいち分からなかったのでマニュアルを見てみた。

基本的な使い方

Syntax: awstats.pl -config=virtualhostname [options]

設定ファイルについて

(原文)
First, awstats tries to read awstats.virtualhostname.conf as the config file.
If not found, awstats tries to read awstats.conf
(訳)
最初に、awstats.virtualhostname.confを設定ファイルとして読み込みます。
もし見つからないならawstats.confを読み込みます。
(原文)
Note 1: Config files (awstats.virtualhostname.conf or awstats.conf) must be in /etc/awstats, 
/usr/local/etc/awstats, /etc or same directory than awstats.pl script file.
(訳)
設定ファイルは、/etc/awstats か /usr/local/etc/awstats か /etc か
 awstats.plと同じディレクトリに配置する必要があります。

ふーんなんか変な仕様な気が・・・・

こんな使い方してます

./awstats.pl -config=hoge -LogFile=access_log -update -output -staticlink > report.html

出力したhtmlを開くと、統計やグラフがひたすら表示されます。
グラフはこのような感じです。(月別のグラフ)

統計の項目はこのようなものがあります。

  • いつ
    • 日付
    • 曜日
    • 時間
  • だれ
    • 全リスト
    • ホスト
    • 全リスト
    • 最後の訪問
    • 不明なIPアドレス
    • ロボット/スパイダーの訪問者
    • 全リスト
    • 最後の訪問
  • ナビゲーション
  • 参照
    • アクセス元
    • 検索エンジン
    • ホームページ
    • 検索
    • 検索文字列(キーフレーズ)
    • 検索文字列(キーワード)
  • その他
    • その他
    • HTTPエラーコード
    • ページが見つかりません

かなり色々と見れます。使いこなしてSEOに役立てたいと思います。

でもやっぱりグーグルアナリティクスは最強だと認識させられましたね。。。

導入の経緯

会社で運営しているCMSASPサービスで各CMSごとのアクセス数を確認するためアクセス解析のツールを導入することにしました。CMS独自ドメインなのでグーグルアナリティクスを使えず、apacheアクセスログを解析するソフトを使うことに。フリーソフトに限定で探しましたがいくつかあったのでまとめてみました。

javascriptのコーディング規約で悩む

javascriptのコーディング規約を決めたいのですが、困ったことにフレームワークや会社によって書き方が見事なまでにバラバラなのです。。。

うちの会社ではjavascriptフレームワークjQueryなのでjQueryのコーディング規約でいいかと思ったが、

http://docs.jquery.com/JQuery_Core_Style_Guidelines

のように、あまりちゃんと決まってないようで・・・

仕方ないので他のを探すと、mozillajavascriptコーディング規約が。

https://developer.mozilla.org/ja/JavaScript_style_guide

うん。これでいこっと。


というか、mozillajavascriptcssのドキュメントが充実しすぎw
https://developer.mozilla.org/ja/JavaScript

まぁ、IEで使えないものが分からないのが難点ですが・・・
大体感覚で分かると思いますけど。