<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>エスキュービズム ラボ Blog</title>
	<atom:link href="http://labs.s-cubism.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://labs.s-cubism.com/blog</link>
	<description>エンジニアの活動報告などなど</description>
	<pubDate>Thu, 11 Mar 2010 13:48:50 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>ja</language>
			<item>
		<title>公開鍵、秘密鍵ってなに?</title>
		<link>http://labs.s-cubism.com/blog/2010/03/11/175/</link>
		<comments>http://labs.s-cubism.com/blog/2010/03/11/175/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 13:42:53 +0000</pubDate>
		<dc:creator>hosoda</dc:creator>
		
		<category><![CDATA[告知]]></category>

		<guid isPermaLink="false">http://labs.s-cubism.com/blog/?p=175</guid>
		<description><![CDATA[セキュアな通信で使われる公開鍵、秘密鍵ってどこまで理解していますか？
暗号化に素因数分解の困難性を利用してることはよく聞くかもしれません。
しかし、実際、素因数分解しただけではそんな鍵は出てこなそうです…
もう少しだけ、どのような仕組みかをみていきたいと思います。


]]></description>
			<content:encoded><![CDATA[<p>セキュアな通信で使われる公開鍵、秘密鍵ってどこまで理解していますか？</p>
<p>暗号化に素因数分解の困難性を利用してることはよく聞くかもしれません。</p>
<p>しかし、実際、素因数分解しただけではそんな鍵は出てこなそうです…</p>
<p>もう少しだけ、どのような仕組みかをみていきたいと思います。</p>
<p><span id="more-175"></span></p>
<div id="__ss_3385384" style="width: 531px;"><strong style="display:block;margin:12px 0 4px"></strong><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="531" height="444" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=100311-rsa-100310072145-phpapp01&amp;stripped_title=ss-3385384" /><embed type="application/x-shockwave-flash" width="531" height="444" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=100311-rsa-100310072145-phpapp01&amp;stripped_title=ss-3385384" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
]]></content:encoded>
			<wfw:commentRss>http://labs.s-cubism.com/blog/2010/03/11/175/feed/</wfw:commentRss>
		</item>
		<item>
		<title>expectで楽できたら…</title>
		<link>http://labs.s-cubism.com/blog/2010/02/21/174/</link>
		<comments>http://labs.s-cubism.com/blog/2010/02/21/174/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 10:20:14 +0000</pubDate>
		<dc:creator>t.ogawa</dc:creator>
		
		<category><![CDATA[告知]]></category>

		<guid isPermaLink="false">http://labs.s-cubism.com/blog/?p=174</guid>
		<description><![CDATA[作業してると―――
　sshで接続→別のサーバへ接続→更に別のサーバへ…
なんてことはないでしょうか。
接続先にrsh入れることに問題ないのであれば、
それでもいいんですが多くの場合そうもいかず。
大抵は「ログイン用の手順を保存しておいてコピペ」で済ますんですが、
長い人生それすらも煩わしくなる時もあり。
そんな時はコイツで手間を省いてみたりしてます。

【expect】
http://www.linux.or.jp/JM/html/expect/man1/expect.1.html
http://expect.nist.gov/
インストールはyumで大丈夫かと思います。
私自身そもそも「面倒くせぇ(&#8217;A`)」から始まったのでｗ
で、例えば以下をファイルに保存して、
実行件を与えて実行してみると…
※【＊＊＊】の部分は適宜修正してください
#! /usr/bin/expect
#120秒応答が無ければ終了
set timeout 120
#############################
#login（以降はこれをコピペ→ログイン情報調整）
set host 【接続先サーバーIP】
set user 【接続ユーザー】
set pass 【パスワード】
set prpt 【ログイン後のプロンプト】
spawn ssh $user@$host
expect &#8220;password:&#8221;
send &#8220;$pass\r&#8221;
expect &#8220;$prpt&#8221;
############################
#制御をユーザーに戻す
interact
はい、ログイン完了。
あとは「########」～「########」の間をコピペすると、
２度３度とsshでログインしてくれます。
実際、どういう処理になっているかというと―――
１．「spawn ssh $user@$host」で、
　コマンド「ssh $user@$host」を契機にexpectのプロセスを生成。
２．標準出力内に「password:」という文字列がくるまで待ち続ける。
こなければ「set timeout ***」で指定した秒数経過で終了。
３．「２」で待っていた文字列が見つかったら、「$pass」＋「改行(CR)」を自動で出力。
４．「interact」で制御をユーザーに戻す
のようになっています。
ただ、ココで気になるのは「２」の時点でで、
「記述した文字列と完全一致でないとダメなのか」
「初めてログインした時、証明書云々の入力を求められたら？」
という話ですが―――

&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
【before】
expect &#8220;password:&#8221;
send &#8220;$pass\r&#8221;
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
【after】
expect {
  -re &#8220;\[Pp]assword:&#8221; {
    send &#8220;$pass\r&#8221;
  }
  &#8220;connecting (yes/no)?&#8221; {
    send &#8220;yes\r&#8221;
    exp_continue
  }
}
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;

例えばこのような記述で、
「複数の文字列の指定」「正規表現指定」「もう一度待つ，そのまま進む」
が可能だったりします。
ここまでくると、他のコマンドと合わせることで、
定期的に行う必要のある作業で、
手間を省けるものが結構ありそうだってのは、お解りかと思います。
ちなみに―――
expect -c &#8221;
ecpect \&#8221;password:\&#8221;
send &#8220;$pass\r&#8221;
という記述でシェルからも呼べますので、
sed,awkなどと組み合わせてやれば、かなり色々できるかと思います。
（環境構築とかSSL申請時のCSR生成とか）
これでどなたかの日頃のイライラが少しでも減れば幸いかな…っと。
]]></description>
			<content:encoded><![CDATA[<p>作業してると―――</p>
<p>　sshで接続→別のサーバへ接続→更に別のサーバへ…</p>
<p>なんてことはないでしょうか。</p>
<p>接続先にrsh入れることに問題ないのであれば、<br />
それでもいいんですが多くの場合そうもいかず。</p>
<p>大抵は「ログイン用の手順を保存しておいてコピペ」で済ますんですが、<br />
長い人生それすらも煩わしくなる時もあり。</p>
<p>そんな時はコイツで手間を省いてみたりしてます。</p>
<p><span id="more-174"></span><br />
【expect】<br />
<a href="http://www.linux.or.jp/JM/html/expect/man1/expect.1.html">http://www.linux.or.jp/JM/html/expect/man1/expect.1.html</a><br />
<a href="http://expect.nist.gov/">http://expect.nist.gov/</a><br />
インストールはyumで大丈夫かと思います。<br />
私自身そもそも「面倒くせぇ(&#8217;A`)」から始まったのでｗ</p>
<p>で、例えば以下をファイルに保存して、<br />
実行件を与えて実行してみると…<br />
※【＊＊＊】の部分は適宜修正してください</p>
<blockquote><p>#! /usr/bin/expect</p>
<p>#120秒応答が無ければ終了<br />
set timeout 120</p>
<p>#############################<br />
#login（以降はこれをコピペ→ログイン情報調整）<br />
set host 【接続先サーバーIP】<br />
set user 【接続ユーザー】<br />
set pass 【パスワード】<br />
set prpt 【ログイン後のプロンプト】<br />
spawn ssh <a href="mailto:$user@$host">$user@$host</a><br />
expect &#8220;password:&#8221;<br />
send &#8220;$pass\r&#8221;<br />
expect &#8220;$prpt&#8221;<br />
############################</p>
<p>#制御をユーザーに戻す<br />
interact</p></blockquote>
<p>はい、ログイン完了。<br />
あとは「########」～「########」の間をコピペすると、<br />
２度３度とsshでログインしてくれます。</p>
<p>実際、どういう処理になっているかというと―――</p>
<blockquote><p>１．「spawn ssh <a href="mailto:$user@$host">$user@$host</a>」で、<br />
　コマンド「ssh <a href="mailto:$user@$host">$user@$host</a>」を契機にexpectのプロセスを生成。</p>
<p>２．標準出力内に「password:」という文字列がくるまで待ち続ける。<br />
こなければ「set timeout ***」で指定した秒数経過で終了。</p>
<p>３．「２」で待っていた文字列が見つかったら、「$pass」＋「改行(CR)」を自動で出力。</p>
<p>４．「interact」で制御をユーザーに戻す</p></blockquote>
<p>のようになっています。<br />
ただ、ココで気になるのは「２」の時点でで、<br />
「記述した文字列と完全一致でないとダメなのか」<br />
「初めてログインした時、証明書云々の入力を求められたら？」<br />
という話ですが―――</p>
<blockquote>
<p style="text-align: left;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
【before】<br />
expect &#8220;password:&#8221;<br />
send &#8220;$pass\r&#8221;<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
【after】<br />
expect {<br />
  -re &#8220;\[Pp]assword:&#8221; {<br />
    send &#8220;$pass\r&#8221;<br />
  }<br />
  &#8220;connecting (yes/no)?&#8221; {<br />
    send &#8220;yes\r&#8221;<br />
    exp_continue<br />
  }<br />
}<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
</blockquote>
<p>例えばこのような記述で、<br />
「複数の文字列の指定」「正規表現指定」「もう一度待つ，そのまま進む」<br />
が可能だったりします。<br />
ここまでくると、他のコマンドと合わせることで、<br />
定期的に行う必要のある作業で、<br />
手間を省けるものが結構ありそうだってのは、お解りかと思います。</p>
<p>ちなみに―――</p>
<blockquote><p>expect -c &#8221;<br />
ecpect \&#8221;password:\&#8221;<br />
send &#8220;$pass\r&#8221;</p></blockquote>
<p>という記述でシェルからも呼べますので、<br />
sed,awkなどと組み合わせてやれば、かなり色々できるかと思います。<br />
（環境構築とかSSL申請時のCSR生成とか）<br />
これでどなたかの日頃のイライラが少しでも減れば幸いかな…っと。</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.s-cubism.com/blog/2010/02/21/174/feed/</wfw:commentRss>
		</item>
		<item>
		<title>改めてプロジェクト管理を考えてみる</title>
		<link>http://labs.s-cubism.com/blog/2010/02/05/173/</link>
		<comments>http://labs.s-cubism.com/blog/2010/02/05/173/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 04:58:21 +0000</pubDate>
		<dc:creator>junya.wako</dc:creator>
		
		<category><![CDATA[告知]]></category>

		<guid isPermaLink="false">http://labs.s-cubism.com/blog/?p=173</guid>
		<description><![CDATA[皆さんは、こんな経験ありませんか。

「欲しいのはこれじゃない！」と言われる
システムをリリースしても、バグが多発する
納期が守れない
必死で作ったのに赤字

システム開発に関わっている人なら誰しも一度は経験していることなのではないかと思います。プロジェクトは、まさに生き物です。努力、根性も重要ですが、これをシステマティックになんとかする！それがプロジェクト管理が必要とされる所以です。
エンジニアは、技術のスキルを高めるのと同時に、チームで仕事をする上でプロジェクト管理についての知識やスキルも高める必要があると思います。そこで今回は、改めてプロジェクト管理の基礎をまとめてみたいと思います。
まずはじめに、プロジェクトの成功とは、一般的にQCDが全て満たされた時に成功したと言われます。QとはQuality（品質）、CとはCost(コスト)、DとはDelivery（納期）です。ただし、品質の達成なくして、コストと納期を守っても意味がありません。
次にプロジェクト成功のためには、次に挙げるようないくつかの条件が必要です。

顧客が何を求めているのかを理解し、ゴールへの合意がなされていること
品質、コスト、納期についての現状が把握できること
問題が発見された場合、それに対してのアクションをとることが可能なこと
顧客、メンバー間で認識の齟齬がないこと、相互に信頼関係が築かれていること
・・・

そして、これらを満たすために必要なアクションがプロジェクト管理であるといえます。PMBOKという、プロジェクト管理の知識体系では、そのアクションとして次の9つの管理体系を定義しています。今回は、システム開発において特に重要な、品質管理、スケジュール管理を掘り下げてみたいと思います。

統合管理
品質管理
スケジュール管理
コスト管理
スコープ管理
メンバー管理
コミュニケーション管理
リスク管理
調達管理

「品質」の定義は難しく、バグが少ないこと、機能がたくさんあること、アフターサービスが優れていること、、、、いろんな考え方があると思いますが、視点を変えると「顧客が満足していること」、それが品質が良いと言うこともできると思います。顧客満足は、良いものを多く提供すれば上がりますが、リソースには限界があります。したがって、顧客の期待値を適切なモノにする事も一方では重要で、最小限の成果物で顧客満足を達成するのが最善だと言えます。とても難しいことではありますが。
次にスケジュール管理ですが、最も重要なのは、何を以って進捗とするのかということです。それは、測定可能な指標でなければならず、その上で予実差異を把握できる仕組みを構築することが必要です。その際ポイントとなるのは、ターゲットとマイルストーンを設けること、クリティカルパスとタスクの依存関係を見極めること、遅れと学習曲線を想定することだと思います。
いかがでしたか。今回はプロジェクト管理の基本を少しご紹介してみました。ただ、いくらプロジェクト管理をしっかりやったとしても、顧客の要望は変わり、モチベーションは上下し、想定外の問題は起きるものです。そんな時に大切なのは、計画を遵守すること以上に、変化に対応することではないでしょうか。
厳しい状況でもチーム一丸となってやり切る、1+1が2を超えるようなそんな力が必要とされ、そんな力を持っているチーム、組織は強いと思います。そんな高みを目指しながら、プロジェクトという生き物と楽しく、元気に付き合っていきたいと思います。
]]></description>
			<content:encoded><![CDATA[<p>皆さんは、こんな経験ありませんか。</p>
<ul>
<li>「欲しいのはこれじゃない！」と言われる</li>
<li>システムをリリースしても、バグが多発する</li>
<li>納期が守れない</li>
<li>必死で作ったのに赤字</li>
</ul>
<p>システム開発に関わっている人なら誰しも一度は経験していることなのではないかと思います。プロジェクトは、まさに生き物です。努力、根性も重要ですが、これをシステマティックになんとかする！それがプロジェクト管理が必要とされる所以です。<br />
エンジニアは、技術のスキルを高めるのと同時に、チームで仕事をする上でプロジェクト管理についての知識やスキルも高める必要があると思います。そこで今回は、改めてプロジェクト管理の基礎をまとめてみたいと思います。</p>
<p>まずはじめに、プロジェクトの成功とは、一般的にQCDが全て満たされた時に成功したと言われます。QとはQuality（品質）、CとはCost(コスト)、DとはDelivery（納期）です。ただし、品質の達成なくして、コストと納期を守っても意味がありません。</p>
<p>次にプロジェクト成功のためには、次に挙げるようないくつかの条件が必要です。</p>
<ul>
<li>顧客が何を求めているのかを理解し、ゴールへの合意がなされていること</li>
<li>品質、コスト、納期についての現状が把握できること</li>
<li>問題が発見された場合、それに対してのアクションをとることが可能なこと</li>
<li>顧客、メンバー間で認識の齟齬がないこと、相互に信頼関係が築かれていること</li>
<li>・・・</li>
</ul>
<p>そして、これらを満たすために必要なアクションがプロジェクト管理であるといえます。PMBOKという、プロジェクト管理の知識体系では、そのアクションとして次の9つの管理体系を定義しています。今回は、システム開発において特に重要な、品質管理、スケジュール管理を掘り下げてみたいと思います。</p>
<ol>
<li>統合管理</li>
<li>品質管理</li>
<li>スケジュール管理</li>
<li>コスト管理</li>
<li>スコープ管理</li>
<li>メンバー管理</li>
<li>コミュニケーション管理</li>
<li>リスク管理</li>
<li>調達管理</li>
</ol>
<p>「品質」の定義は難しく、バグが少ないこと、機能がたくさんあること、アフターサービスが優れていること、、、、いろんな考え方があると思いますが、視点を変えると「顧客が満足していること」、それが品質が良いと言うこともできると思います。顧客満足は、良いものを多く提供すれば上がりますが、リソースには限界があります。したがって、顧客の期待値を適切なモノにする事も一方では重要で、最小限の成果物で顧客満足を達成するのが最善だと言えます。とても難しいことではありますが。</p>
<p>次にスケジュール管理ですが、最も重要なのは、何を以って進捗とするのかということです。それは、測定可能な指標でなければならず、その上で予実差異を把握できる仕組みを構築することが必要です。その際ポイントとなるのは、ターゲットとマイルストーンを設けること、クリティカルパスとタスクの依存関係を見極めること、遅れと学習曲線を想定することだと思います。</p>
<p>いかがでしたか。今回はプロジェクト管理の基本を少しご紹介してみました。ただ、いくらプロジェクト管理をしっかりやったとしても、顧客の要望は変わり、モチベーションは上下し、想定外の問題は起きるものです。そんな時に大切なのは、計画を遵守すること以上に、変化に対応することではないでしょうか。</p>
<p>厳しい状況でもチーム一丸となってやり切る、1+1が2を超えるようなそんな力が必要とされ、そんな力を持っているチーム、組織は強いと思います。そんな高みを目指しながら、プロジェクトという生き物と楽しく、元気に付き合っていきたいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.s-cubism.com/blog/2010/02/05/173/feed/</wfw:commentRss>
		</item>
		<item>
		<title>EC-CUBEにつぶやくボタンを設置する方法</title>
		<link>http://labs.s-cubism.com/blog/2010/01/28/172/</link>
		<comments>http://labs.s-cubism.com/blog/2010/01/28/172/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 04:56:58 +0000</pubDate>
		<dc:creator>kimoto</dc:creator>
		
		<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://labs.s-cubism.com/blog/?p=172</guid>
		<description><![CDATA[「つぶやくボタンを設置したいけど、どうしたらいいんだろう？」というつぶやきをTwitterで見かけたので調べてみました。

仕様はいたって簡単
http://twitter.com/home?status=URLエンコードしたつぶやいてもらいたい内容
こういうリンクを作るだけでOKです。
ではこれをEC-CUBEの商品詳細画面に組み込んでみます。
data/Smarty/templates/default/detail.tpl 221行目辺り
&#60;p&#62;&#60;a href=&#8221;&#60;!&#8211;{$twitter&#124;escape}&#8211;&#62;&#8221;&#62;&#60;img alt=&#8221;Twitterでつぶやくボタン&#8221; src=&#8221;ボタンの画像のパス&#8221; border=&#8221;0&#8243; /&#62;&#60;/a&#62;&#60;/p&#62;
data/class/pages/products/LC_Page_Products_Detail 277行目辺り
$tw             = SITE_URL . &#8216;detail.php?product_id=&#8217; . $tmp_id . &#8216; &#8216; . $this-&#62;arrProduct["name"];
$this-&#62;twitter  = &#8220;http://twitter.com/home?status=&#8221; .urlencode($tw);
これでつぶやくボタンが表示されるので商品詳細画面で確認してみてください。
内容を変えたい場合は
SITE_URL . &#8216;detail.php?product_id=&#8217; . $tmp_id . &#8216; &#8216; .  $this-&#62;arrProduct["name"]
ここをつぶやいてもらいたい内容に変えてください。
以上、EC-CUBEにつぶやくボタンを設置する方法でした。
]]></description>
			<content:encoded><![CDATA[<p>「つぶやくボタンを設置したいけど、どうしたらいいんだろう？」というつぶやきをTwitterで見かけたので調べてみました。</p>
<p><span id="more-172"></span></p>
<p>仕様はいたって簡単</p>
<blockquote><p>http://twitter.com/home?status=URLエンコードしたつぶやいてもらいたい内容</p></blockquote>
<p>こういうリンクを作るだけでOKです。</p>
<p>ではこれをEC-CUBEの商品詳細画面に組み込んでみます。</p>
<p>data/Smarty/templates/default/detail.tpl 221行目辺り</p>
<blockquote><p>&lt;p&gt;&lt;a href=&#8221;&lt;!&#8211;{$twitter|escape}&#8211;&gt;&#8221;&gt;&lt;img alt=&#8221;Twitterでつぶやくボタン&#8221; src=&#8221;ボタンの画像のパス&#8221; border=&#8221;0&#8243; /&gt;&lt;/a&gt;&lt;/p&gt;</p></blockquote>
<p>data/class/pages/products/LC_Page_Products_Detail 277行目辺り</p>
<blockquote><p>$tw             = SITE_URL . &#8216;detail.php?product_id=&#8217; . $tmp_id . &#8216; &#8216; . $this-&gt;arrProduct["name"];<br />
$this-&gt;twitter  = &#8220;http://twitter.com/home?status=&#8221; .urlencode($tw);</p></blockquote>
<p>これでつぶやくボタンが表示されるので商品詳細画面で確認してみてください。</p>
<p>内容を変えたい場合は</p>
<blockquote><p>SITE_URL . &#8216;detail.php?product_id=&#8217; . $tmp_id . &#8216; &#8216; .  $this-&gt;arrProduct["name"]</p></blockquote>
<p>ここをつぶやいてもらいたい内容に変えてください。</p>
<p>以上、EC-CUBEにつぶやくボタンを設置する方法でした。</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.s-cubism.com/blog/2010/01/28/172/feed/</wfw:commentRss>
		</item>
		<item>
		<title>『QC的思考』のススメ</title>
		<link>http://labs.s-cubism.com/blog/2010/01/19/168/</link>
		<comments>http://labs.s-cubism.com/blog/2010/01/19/168/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 13:49:04 +0000</pubDate>
		<dc:creator>murase</dc:creator>
		
		<category><![CDATA[告知]]></category>

		<guid isPermaLink="false">http://labs.s-cubism.com/blog/?p=168</guid>
		<description><![CDATA[みなさんは『QC』を知っていますか？
  
日本語に訳すと「品質管理（Quality Control）」という平々凡々な言葉になってしまうのですが、企業において社員が小グループを作り、職場環境の改善や生産品質の向上を目指して行う改善活動のことをQC活動と言います。また、QC活動を行うグループのことをQCサークル、QCサークルが活動内容を発表する手順を標準化したものを、QCストーリーと呼びます。
トヨタの「カイゼン」活動といえば、聞き覚えのある方が多いのではないでしょうか。
言わずと知れた、QCの代表例です。
・・・まだピンと来ない？わかりました。
では、百聞は一見にしかずということで、実際にやってみましょう。
 

これから、典型的（だと私が思っている）QCストーリーを１つ紹介します。
※簡単のためいろんなところを省いています。
 

テーマ
　「○○システム機能追加開発における品質改善」
取り上げた理由
　○○システム2次開発では、商用リリース後に１０件ものバグが見つかってしまい、お客様より品質についてお叱りを受けることとなってしまった。3次開発の受注は決まっているものの、更なる追加開発受注のためにも3次開発での品質の改善が必須であると考えたため、今回のテーマを選択した。
現状の把握
　2次開発で発見されたバグを分類すると下図の通りとなる。
（パレート図によって、優先して対策を打つべき問題点を洗い出します。）

　デグレードによるバグが大半を占めていることがわかる。
目標設定
　（目標を設定しない場合もあるようです。）
　3次開発では、「リース後のバグ件数を5件以下に減らす」ことを目標とする。
解析
　デグレードが起きてしまった原因を分析した結果を下図に示す。
（特性要因図を用い、問題点に対して「なぜ」を繰り返し掘り下げることによって、「真の原因」を洗い出します。　※ここは特にサボっています！真の原因はたいてい１つではありません。）

対策の立案
　要因解析によって洗い出した原因に対して以下の通り対策案を立案し、実現性・効果・コストの観点から評価して対策の採否を判定した。
対策の実施

デグレード試験項目を新たに作成する

　　　　　バグの再テストを行う際、バグを検出した試験を再度行うだけではなく、その周辺機能についてデグレード試験項目を作成することとした。

再試験項目レビューを行う

　　　　　バグの再試験を行う際、作成した試験項目をチーム内でレビューすることとした。　
効果の確認
先述した対策をした結果、3次開発ではリリース後のバグ件数を4件に減らすことができた。
  
よって、
目標達成！！
 
歯止め
 今回実施した対策を次開発以降も継続するため、デグレード試験項目の作成や再試験項目レビューを試験実施要領としてルール化し、グループ内へ展開した。

今後に向けて
次開発でさらにバグ件数を減らすため、デグレード以外によるバグに対しても何らかの対策を講じていきたいと考えている。

 
以上です。ご清聴ありがとうございました！（ﾊﾟﾁﾊﾟﾁﾊﾟﾁ）
 
・・・いかがでしたか？
すごい！うちの職場でもやった方がいい！と思いましたか・・・？思いませんよねぇ。
そうなんです。残念ながらQCサークルが有効に機能している例はおそらくごくわずかなのではないかと思います。
今回QCについてネットで調べてみても、最近はQC活動を行う企業が減ってきているだとか、廃れているだとかネガティブな記事が多く目につきました。
なぜでしょうか。
それは、QC活動の目的が本来のものから外れて、「QCストーリーを発表すること」になってしまったからだと思います。
人前で発表するなら誰でも“いいストーリー”を発表をしたいと思いますよね。
そうすると、改善活動の効果をよく見せるためにデータを捏造したり、実際は対策ありきだったにも関わらずたくさんの対策案を検討したことにしてみたり、ということが起こってしまうのです。（私もよくやったものです・・）
でも、それはそれで仕方ない面もあります。
なぜなら、そもそもQCに適したテーマがそうそう転がっているものではないからです。
身の回りで起こる問題ってたいてい、ちょっと考えればどう対処すればいいかわかりますよね。そうでなくとも、「よし、ここはひとつQCを使ってじっくり原因を分析してみよう」なんていうケースはなかなかなさそうですよね。
そういう理由もあって、QC活動をやる企業が減ってきたりしているのだと思います。。
 
しかし！
これは決して、QCの本質に問題があるということではありません。
トヨタのカイゼン活動がそうであるように、QCはその効力を事実示してきました。
 
そこで私がオススメするのが、（だいぶ前に忘れ去っていると思いますが）今回のブログのテーマ、『QC的思考』です。
改めて『○○的思考』なんていうと大層に聞こえますが、平たく言えば「頭の中でQCストーリーを展開してみよう」くらいのことです。
例えば。
もしバグが出てしまったら、ただ漫然とソースを修正するのではなく「なぜ」「なぜ」「なぜ」を繰り返して本当の原因を探ります。そうすれば、次回同じ原因でバグを作らなくてすみそうじゃないですか？ひょっとしたら同じ原因の、また別のバグに気づくことができるかもしれません。
また、（品質改善に限ったことではなく、）ちゃんとしたストーリーから導き出された結論には、説得力がこもりますよね。
 
みなさんも試してみてはいかがでしょうか。『QC的思考』。
私も明日から始めてみたいと思います。
]]></description>
			<content:encoded><![CDATA[<p>みなさんは『QC』を知っていますか？</p>
<p>  </p>
<p>日本語に訳すと「品質管理（Quality Control）」という平々凡々な言葉になってしまうのですが、企業において社員が小グループを作り、職場環境の改善や生産品質の向上を目指して行う改善活動のことをQC活動と言います。また、QC活動を行うグループのことをQCサークル、QCサークルが活動内容を発表する手順を標準化したものを、QCストーリーと呼びます。</p>
<p>トヨタの「カイゼン」活動といえば、聞き覚えのある方が多いのではないでしょうか。<br />
言わずと知れた、QCの代表例です。<br />
・・・まだピンと来ない？わかりました。<br />
では、百聞は一見にしかずということで、実際にやってみましょう。</p>
<p> </p>
<p><span id="more-168"></span></p>
<p>これから、典型的（だと私が思っている）QCストーリーを１つ紹介します。<br />
※簡単のためいろんなところを省いています。</p>
<p> </p>
<ol>
<li>テーマ<br />
　「○○システム機能追加開発における品質改善」</li>
<li>取り上げた理由<br />
　○○システム2次開発では、商用リリース後に１０件ものバグが見つかってしまい、お客様より品質についてお叱りを受けることとなってしまった。3次開発の受注は決まっているものの、更なる追加開発受注のためにも3次開発での品質の改善が必須であると考えたため、今回のテーマを選択した。</li>
<li>現状の把握<br />
　2次開発で発見されたバグを分類すると下図の通りとなる。</li>
<p>（パレート図によって、優先して対策を打つべき問題点を洗い出します。）</p>
<p><img src="http://labs.s-cubism.com/blog/wp-content/uploads/2010/01/pareto.jpg" alt="パレート図" width="260" height="239" /></p>
<p>　デグレードによるバグが大半を占めていることがわかる。</p>
<li>目標設定<br />
　（目標を設定しない場合もあるようです。）</li>
<p>　3次開発では、「リース後のバグ件数を<strong>5件以下</strong>に減らす」ことを目標とする。</p>
<li>解析<br />
　デグレードが起きてしまった原因を分析した結果を下図に示す。</li>
<p>（特性要因図を用い、問題点に対して「なぜ」を繰り返し掘り下げることによって、「真の原因」を洗い出します。　※ここは特にサボっています！真の原因はたいてい１つではありません。）</p>
<p><img src="http://labs.s-cubism.com/blog/wp-content/uploads/2010/01/fishbone.jpg" alt="" width="524" height="312" /></p>
<li>対策の立案<br />
　要因解析によって洗い出した原因に対して以下の通り対策案を立案し、実現性・効果・コストの観点から評価して対策の採否を判定した。<img src="http://labs.s-cubism.com/blog/wp-content/uploads/2010/01/list.jpg" alt="" width="483" height="120" /></li>
<li>対策の実施
<ul>
<li>デグレード試験項目を新たに作成する</li>
</ul>
<p>　　　　　バグの再テストを行う際、バグを検出した試験を再度行うだけではなく、その周辺機能についてデグレード試験項目を作成することとした。</p>
<ul>
<li>再試験項目レビューを行う</li>
</ul>
<p>　　　　　バグの再試験を行う際、作成した試験項目をチーム内でレビューすることとした。　</li>
<li>効果の確認<br />
先述した対策をした結果、3次開発ではリリース後のバグ件数を<strong>4件</strong>に減らすことができた。<br />
  <br />
よって、<br />
<strong><span style="color: #ff0000; font-size: medium;">目標達成！！</span></strong><br />
 </li>
<li>歯止め<br />
 今回実施した対策を次開発以降も継続するため、デグレード試験項目の作成や再試験項目レビューを試験実施要領としてルール化し、グループ内へ展開した。
</li>
<li>今後に向けて<br />
次開発でさらにバグ件数を減らすため、デグレード以外によるバグに対しても何らかの対策を講じていきたいと考えている。</li>
</ol>
<p> </p>
<p>以上です。ご清聴ありがとうございました！（ﾊﾟﾁﾊﾟﾁﾊﾟﾁ）</p>
<p> <br />
・・・いかがでしたか？<br />
すごい！うちの職場でもやった方がいい！と思いましたか・・・？思いませんよねぇ。<br />
そうなんです。残念ながらQCサークルが有効に機能している例はおそらくごくわずかなのではないかと思います。<br />
今回QCについてネットで調べてみても、最近はQC活動を行う企業が減ってきているだとか、廃れているだとかネガティブな記事が多く目につきました。</p>
<p>なぜでしょうか。</p>
<p>それは、QC活動の目的が本来のものから外れて、「QCストーリーを発表すること」になってしまったからだと思います。<br />
人前で発表するなら誰でも“いいストーリー”を発表をしたいと思いますよね。<br />
そうすると、改善活動の効果をよく見せるためにデータを捏造したり、実際は対策ありきだったにも関わらずたくさんの対策案を検討したことにしてみたり、ということが起こってしまうのです。（私もよくやったものです・・）</p>
<p>でも、それはそれで仕方ない面もあります。</p>
<p>なぜなら、そもそもQCに適したテーマがそうそう転がっているものではないからです。</p>
<p>身の回りで起こる問題ってたいてい、ちょっと考えればどう対処すればいいかわかりますよね。そうでなくとも、「よし、ここはひとつQCを使ってじっくり原因を分析してみよう」なんていうケースはなかなかなさそうですよね。</p>
<p>そういう理由もあって、QC活動をやる企業が減ってきたりしているのだと思います。。</p>
<p> </p>
<p>しかし！</p>
<p>これは決して、QCの本質に問題があるということではありません。</p>
<p>トヨタのカイゼン活動がそうであるように、QCはその効力を事実示してきました。</p>
<p> </p>
<p>そこで私がオススメするのが、（だいぶ前に忘れ去っていると思いますが）今回のブログのテーマ、『QC的思考』です。</p>
<p>改めて『○○的思考』なんていうと大層に聞こえますが、平たく言えば「頭の中でQCストーリーを展開してみよう」くらいのことです。</p>
<p>例えば。</p>
<p>もしバグが出てしまったら、ただ漫然とソースを修正するのではなく「なぜ」「なぜ」「なぜ」を繰り返して本当の原因を探ります。そうすれば、次回同じ原因でバグを作らなくてすみそうじゃないですか？ひょっとしたら同じ原因の、また別のバグに気づくことができるかもしれません。</p>
<p>また、（品質改善に限ったことではなく、）ちゃんとしたストーリーから導き出された結論には、説得力がこもりますよね。</p>
<p> </p>
<p>みなさんも試してみてはいかがでしょうか。『QC的思考』。</p>
<p>私も明日から始めてみたいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.s-cubism.com/blog/2010/01/19/168/feed/</wfw:commentRss>
		</item>
		<item>
		<title>スマートフォン使ってみたら、ケータイがいらなくなった</title>
		<link>http://labs.s-cubism.com/blog/2010/01/13/167/</link>
		<comments>http://labs.s-cubism.com/blog/2010/01/13/167/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 09:31:26 +0000</pubDate>
		<dc:creator>みー</dc:creator>
		
		<category><![CDATA[アプリ]]></category>

		<category><![CDATA[ハードウェア]]></category>

		<guid isPermaLink="false">http://labs.s-cubism.com/blog/?p=167</guid>
		<description><![CDATA[
年末、ブログを更新が少し滞ったのでご心配をかけたかもしれませんが…
元気すぎてお仕事が山積みになり、社員一丸となって取り組んでおりました。
おかげさまで新しいメンバーも多数加わり、キモチも新たに2010年もゲンキ良くスタートを切っております。
本年もよろしくお願いいたします。
＜このブログは、エスキュービズムのエンジニア陣が担当制で更新しています＞
さて、では、僕はセキュリティ対策の話を…と考えていたのだけど、ウイルス対策の次にセキュリティの話だと盛り上がらないなぁと思い、全く別の話題を。
最近よく「あの、新しいグーグルの携帯買わないの？」と聞かれる。
グーグルの携帯といってもドコモから出ているAndroid携帯ではなく、アメリカで発売された Nexus One のことだ。

確かに、古くは NEC Mobile Gear（通称：モバギ）に始まり、シャープ Zaurus、最近なら Willcom の es やネットブックなど、小型端末が発売される度に衝動買いしてきたモノとしては、とても気になる。めちゃめちゃ欲しい。
が、「まだ待ち」が正解な気がしている。iPhone 3GSを明らかに上回る端末がこれから登場すると思うからだ。これが新iPhoneなのか、Androidなのかはわからないけど。
ただ、まあ、ようやくスマートフォンを一般の方にも勧められる時代になったのは確かだと思う。
今までは動きが遅すぎたり、設定が複雑すぎて、一般の方には使いこなせないものばかりだったが、これらの「基本機能」は大きく改善された。つまり「使えるかどうか」ではなく、「どう使うか」の時代になったと思う。
そこで、スマートフォンの購入を迷っている方向けに、チェックリストを作ってみた。
以下の項目に多数当てはまる方は、スマートフォン、おすすめです！

ブログ、ネットニュースをついつい見てしまう
天気、乗換案内、グルメ情報などを頻繁にチェックする
毎日、膨大な数のメールをパソコンで読んでいる
Twitterで常につぶやかないと落ち着かない
ToDo管理、タスク管理が必需品
音楽プレイヤーが肌身離せない
動画を持ち歩いて観るのが好き
ゲーム好きで、PS3よりはDS派
趣味が写真加工などの創作活動
自分でプログラムが組める
クラウドをバリバリと活用している
デジタルなガジェットが大好き
いつも手持ち無沙汰で、ケータイをばかり見てる

実質、日本では iPhone しか選択肢がないようなもんなので、これらの項目は iPhone を前提にしている。
ただこれらって今までのケータイでもできると言えばできる。スマートフォン（iPhone）って結局、
　「今までのケータイと何が違うんだ？」
と思われるかもしれないが、iPhoneはそれぞれの機能に特化した「アプリ」が存在するのが大きく違う。
道具は用途に特化した方が使い易い。例えば、Twitterやメールの閲覧など、パソコンよりも iPhone の方が便利だったりすることが多々ある。
iPhoneはその素晴らしいインターフェイスの上に、特定の用途に適したアプリを入れていくことで、様々な道具として化けていくのがとにかく便利なのだ。しかもその道具はユーザからの厳しい意見によって、日々アップデートされて使いやすくなっていく。iPhoneを購入して半年ぐらいだが、当初に比べて全てのアプリが（場合によっては別アプリが登場して）使いやすくなったと言っても過言ではない。
もう1つは、クラウドとの相性の良さだろう。
こちらはまだまだ一部の人しか当てはまらないかもしれないけど、Gmailやタスク管理などクラウド上にデータを置いた生活を送っている人にとっては、スマートフォンは最高に相性が良い。
ちょっとした移動時間に確認して本格的な作業は家や会社で行うという人ならば、1日の利用効率が高まりまくる。
会社に来てパソコンに電源を入れてぼ～っとしている時間が必要なくなるわけだ。
　「そんな電子データに追い立てられる人生はイヤだ」
と思うかもしれないけど、実は逆で、効率が上がった分、他のことができる時間が増えるということ。実際、僕は iPhone のおかげで、本を読める時間が増えた。
ただし、大きな注意点が1つある。
残念ながら日本ではiPhoneのキャリアは ソフトバンク なのだ。
特にドコモからの乗り換えの方は要注意、回線品質はドコモとは比べ物にならない。
頻繁に電話を使う人、圏外が多いと困る人はキャリア変更は慎重になった方が良い。
あとはおサイフケータイが使えないのもイタイかな。
まあ、何にせよ、携帯がない時代が考えられないように、スマートフォンがない時代が考えられないぐらいになる予感がする。
（携帯なくても済む人がいるように、スマートフォンなくても良いよって人もいるだろうけど）
]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-166" title="スマートフォン時代" src="http://labs.s-cubism.com/blog/wp-content/uploads/2010/01/smartphone.jpg" alt="" width="460" height="200" /></p>
<p>年末、ブログを更新が少し滞ったのでご心配をかけたかもしれませんが…<br />
元気すぎてお仕事が山積みになり、社員一丸となって取り組んでおりました。</p>
<p>おかげさまで新しいメンバーも多数加わり、キモチも新たに2010年もゲンキ良くスタートを切っております。<br />
本年もよろしくお願いいたします。</p>
<p>＜このブログは、エスキュービズムのエンジニア陣が担当制で更新しています＞</p>
<p>さて、では、僕はセキュリティ対策の話を…と考えていたのだけど、ウイルス対策の次にセキュリティの話だと盛り上がらないなぁと思い、全く別の話題を。</p>
<p>最近よく「あの、新しいグーグルの携帯買わないの？」と聞かれる。<br />
グーグルの携帯といってもドコモから出ているAndroid携帯ではなく、アメリカで発売された Nexus One のことだ。</p>
<p><span id="more-167"></span><br />
確かに、古くは NEC Mobile Gear（通称：モバギ）に始まり、シャープ Zaurus、最近なら Willcom の es やネットブックなど、小型端末が発売される度に衝動買いしてきたモノとしては、とても気になる。めちゃめちゃ欲しい。</p>
<p>が、「まだ待ち」が正解な気がしている。iPhone 3GSを明らかに上回る端末がこれから登場すると思うからだ。これが新iPhoneなのか、Androidなのかはわからないけど。</p>
<p>ただ、まあ、ようやくスマートフォンを一般の方にも勧められる時代になったのは確かだと思う。<br />
今までは動きが遅すぎたり、設定が複雑すぎて、一般の方には使いこなせないものばかりだったが、これらの「基本機能」は大きく改善された。つまり「使えるかどうか」ではなく、「どう使うか」の時代になったと思う。</p>
<p>そこで、スマートフォンの購入を迷っている方向けに、チェックリストを作ってみた。<br />
以下の項目に多数当てはまる方は、スマートフォン、おすすめです！</p>
<ul>
<li>ブログ、ネットニュースをついつい見てしまう</li>
<li>天気、乗換案内、グルメ情報などを頻繁にチェックする</li>
<li>毎日、膨大な数のメールをパソコンで読んでいる</li>
<li>Twitterで常につぶやかないと落ち着かない</li>
<li>ToDo管理、タスク管理が必需品</li>
<li>音楽プレイヤーが肌身離せない</li>
<li>動画を持ち歩いて観るのが好き</li>
<li>ゲーム好きで、PS3よりはDS派</li>
<li>趣味が写真加工などの創作活動</li>
<li>自分でプログラムが組める</li>
<li>クラウドをバリバリと活用している</li>
<li>デジタルなガジェットが大好き</li>
<li>いつも手持ち無沙汰で、ケータイをばかり見てる</li>
</ul>
<p>実質、日本では iPhone しか選択肢がないようなもんなので、これらの項目は iPhone を前提にしている。</p>
<p>ただこれらって今までのケータイでもできると言えばできる。スマートフォン（iPhone）って結局、</p>
<p>　「今までのケータイと何が違うんだ？」</p>
<p>と思われるかもしれないが、iPhoneはそれぞれの機能に特化した「アプリ」が存在するのが大きく違う。<br />
道具は用途に特化した方が使い易い。例えば、Twitterやメールの閲覧など、パソコンよりも iPhone の方が便利だったりすることが多々ある。</p>
<p>iPhoneはその素晴らしいインターフェイスの上に、特定の用途に適したアプリを入れていくことで、様々な道具として化けていくのがとにかく便利なのだ。しかもその道具はユーザからの厳しい意見によって、日々アップデートされて使いやすくなっていく。iPhoneを購入して半年ぐらいだが、当初に比べて全てのアプリが（場合によっては別アプリが登場して）使いやすくなったと言っても過言ではない。</p>
<p>もう1つは、クラウドとの相性の良さだろう。<br />
こちらはまだまだ一部の人しか当てはまらないかもしれないけど、Gmailやタスク管理などクラウド上にデータを置いた生活を送っている人にとっては、スマートフォンは最高に相性が良い。</p>
<p>ちょっとした移動時間に確認して本格的な作業は家や会社で行うという人ならば、1日の利用効率が高まりまくる。<br />
会社に来てパソコンに電源を入れてぼ～っとしている時間が必要なくなるわけだ。</p>
<p>　「そんな電子データに追い立てられる人生はイヤだ」</p>
<p>と思うかもしれないけど、実は逆で、効率が上がった分、他のことができる時間が増えるということ。実際、僕は iPhone のおかげで、本を読める時間が増えた。</p>
<p>ただし、大きな注意点が1つある。<br />
残念ながら日本ではiPhoneのキャリアは ソフトバンク なのだ。<br />
特にドコモからの乗り換えの方は要注意、回線品質はドコモとは比べ物にならない。<br />
頻繁に電話を使う人、圏外が多いと困る人はキャリア変更は慎重になった方が良い。</p>
<p>あとはおサイフケータイが使えないのもイタイかな。</p>
<p>まあ、何にせよ、携帯がない時代が考えられないように、スマートフォンがない時代が考えられないぐらいになる予感がする。<br />
（携帯なくても済む人がいるように、スマートフォンなくても良いよって人もいるだろうけど）</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.s-cubism.com/blog/2010/01/13/167/feed/</wfw:commentRss>
		</item>
		<item>
		<title>そのアンチウィルスソフト、本当に安全？ ～アンチウィルスソフトの評価サイト～</title>
		<link>http://labs.s-cubism.com/blog/2010/01/07/165/</link>
		<comments>http://labs.s-cubism.com/blog/2010/01/07/165/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 11:35:33 +0000</pubDate>
		<dc:creator>ohashi</dc:creator>
		
		<category><![CDATA[アプリ]]></category>

		<category><![CDATA[セキュリティ]]></category>

		<guid isPermaLink="false">http://labs.s-cubism.com/blog/?p=165</guid>
		<description><![CDATA[新しいPCを購入した際、まずアンチウィルスソフトをインストールする方は多いと思います。ウィルス対策はますます重要になっていますが、次に気になるのはアンチウィルスソフト自体の安全性です。そこで今回は、アンチウィルスソフトを公平な立場で、多角的に評価している海外のサイトを2つ紹介したいと思います。


- Virus Bulletin
http://www.virusbtn.com/vb100/
Virus Bulletinはイギリスのサイトで、VB100という手法でアンチウィルスソフトをテストし、パスしたソフトにVB100 Certificationという認証を与えています。VB100テストは2ヶ月に1度行われ、海外ではVB100認証を何度取得した、をうたい文句にする製品があるほどメジャーな認証です。
VB100は『100種の最新かつメジャーなウィルスに対して、全てのウィルスを検知できた場合にはパス』という方法でアンチウィルスソフトを評価しています。1つでも検知できなかった場合、もしくは誤検知（False Positive：本当はウィルスが無いのにウィルスだと検知してしまうこと）があった場合はパスできません。
日本でも人気のKasperskyやEsetは毎回テストにエントリーしており、2009年の6回のテスト全てでVB100認証を取得しています。
VB100はテスト方法がシンプルで分かりやすいこと、テストが定期的に行われ、常に最新のウィルスを使用していることなどから人気があります。一方でそのシンプルさゆえに、パスした製品同士が比較しにくいという問題があります。
　
　
- AV-Comparatives
http://www.av-comparatives.org/comparativesreviews/main-tests
そこで次に紹介するのがオーストラリアのアンチウィルスソフト評価サイト、AV-Comparativesです。
AV-Comparativesでは年2回、16個のメジャーなアンチウィルスソフトの詳細なテストと比較評価を行っています。テスト項目にはウィルス検知率、誤検知率（False Positive）、パフォーマンス、さらには未知のウィルスの検知率といったものまであります。レポートの最後ではそれらを元に製品を比較し、一ツ星から三ツ星までのランク付けを行っています。
2009年11月のテストではG DATA、Kaspersky、Eset、Microsoft Security Essentials、Avast、BitDefender、eScanの7製品が三ツ星に選ばれました。
　
　
アンチウィルスソフトは数多くリリースされていますが、実際にどれが良いのかは情報が少なく、悩むことも多いのではないでしょうか。次回アンチウィルスソフトを選ぶ際は、ぜひこれらのサイトを参考にしてみてください。
]]></description>
			<content:encoded><![CDATA[<p>新しいPCを購入した際、まずアンチウィルスソフトをインストールする方は多いと思います。ウィルス対策はますます重要になっていますが、次に気になるのはアンチウィルスソフト自体の安全性です。そこで今回は、アンチウィルスソフトを公平な立場で、多角的に評価している海外のサイトを2つ紹介したいと思います。<br />
<br />
<span id="more-165"></span><br />
<strong>- Virus Bulletin</strong><br />
<a href="http://www.virusbtn.com/vb100/" target="_blank">http://www.virusbtn.com/vb100/</a></p>
<p>Virus Bulletinはイギリスのサイトで、VB100という手法でアンチウィルスソフトをテストし、パスしたソフトにVB100 Certificationという認証を与えています。VB100テストは2ヶ月に1度行われ、海外ではVB100認証を何度取得した、をうたい文句にする製品があるほどメジャーな認証です。</p>
<p>VB100は『100種の最新かつメジャーなウィルスに対して、全てのウィルスを検知できた場合にはパス』という方法でアンチウィルスソフトを評価しています。1つでも検知できなかった場合、もしくは誤検知（False Positive：本当はウィルスが無いのにウィルスだと検知してしまうこと）があった場合はパスできません。</p>
<p>日本でも人気のKasperskyやEsetは毎回テストにエントリーしており、2009年の6回のテスト全てでVB100認証を取得しています。</p>
<p>VB100はテスト方法がシンプルで分かりやすいこと、テストが定期的に行われ、常に最新のウィルスを使用していることなどから人気があります。一方でそのシンプルさゆえに、パスした製品同士が比較しにくいという問題があります。<br />
　<br />
　<br />
<strong>- AV-Comparatives</strong><br />
<a href="http://www.av-comparatives.org/comparativesreviews/main-tests" target="_blank">http://www.av-comparatives.org/comparativesreviews/main-tests</a></p>
<p>そこで次に紹介するのがオーストラリアのアンチウィルスソフト評価サイト、AV-Comparativesです。</p>
<p>AV-Comparativesでは年2回、16個のメジャーなアンチウィルスソフトの詳細なテストと比較評価を行っています。テスト項目にはウィルス検知率、誤検知率（False Positive）、パフォーマンス、さらには未知のウィルスの検知率といったものまであります。レポートの最後ではそれらを元に製品を比較し、一ツ星から三ツ星までのランク付けを行っています。</p>
<p>2009年11月のテストではG DATA、Kaspersky、Eset、Microsoft Security Essentials、Avast、BitDefender、eScanの7製品が三ツ星に選ばれました。<br />
　<br />
　<br />
アンチウィルスソフトは数多くリリースされていますが、実際にどれが良いのかは情報が少なく、悩むことも多いのではないでしょうか。次回アンチウィルスソフトを選ぶ際は、ぜひこれらのサイトを参考にしてみてください。</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.s-cubism.com/blog/2010/01/07/165/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ChromeOSをインストールしてみました</title>
		<link>http://labs.s-cubism.com/blog/2009/11/27/163/</link>
		<comments>http://labs.s-cubism.com/blog/2009/11/27/163/#comments</comments>
		<pubDate>Fri, 27 Nov 2009 01:42:43 +0000</pubDate>
		<dc:creator>goto</dc:creator>
		
		<category><![CDATA[アプリ]]></category>

		<guid isPermaLink="false">http://labs.s-cubism.com/blog/?p=163</guid>
		<description><![CDATA[先週あたりに現在開発中のGoogleのOSである、&#8221;Chrome OS&#8221;が&#8221;Chromium OS&#8221;というプロジェクト名でオープンソース化され、ソースコードが入手可能になったので、早速試してみることにしました。
今回の目次

ChromeOSって何？
ビルド環境の準備
ビルド
使ってみる


ChromeOSって何？
Googleが開発中のオープンソースのOSです。Linuxカーネルの上に、独自のウィンドウシステムを備えています。webの閲覧とwebアプリの実行に特化したOSということで、非常に軽量なOSとなっています。
詳しいアーキテクチャについては本家のサイトを参照してください。
 http://www.chromium.org/chromium-os/chromiumos-design-docs/software-architecture
ビルド環境の準備
上記のサイトに詳しい説明がありますので、それに沿って進めていきます。
http://code.google.com/p/chromium/wiki/LinuxBuildInstructionsPrerequisites
http://sites.google.com/a/chromium.org/dev/chromium-os/building-chromium-os/getting-the-chromium-os-source-code
ビルド用のOSを準備
UbuntuやopenSUSEやFedoraでの準備が紹介されていますが、公式での解説はUbuntu8.04以上（最新の9.10推奨）で進められているので、Ubuntu9.10を用意することにします。
Windows上でVMwarePlayerを用いて構築しました。
■VMwarePlayer
http://www.vmware.com/jp/products/player/
■Ubuntu
http://www.ubuntulinux.jp/products/JA-Localized/download
必要なパッケージのインストール
ChromeOSのビルドに必要なパッケージをまとめて一気に入れてしまいます。
$ sudo apt-get install subversion pkg-config python perl g++ g++-multilib \
bison flex gperf libnss3-dev libgtk2.0-dev libnspr4-0d libasound2-dev \
libnspr4-dev msttcorefonts libgconf2-dev libcairo2-dev libdbus-1-dev
$ sudo apt-get install wdiff lighttpd php5-cgi sun-java6-fonts
基本的にはSSHで接続してターミナルで操作したいのと、最終的にできあがったイメージをSCPで落とす必要があるので、SSHも入れておきます。
$ sudo apt-get install ssh
ついでにiptablesも開放しておきます。一時的にしか使わないので、とりあえずINPUTとOUTPUTを全開放
$ sudo iptables -P INPUT ACCEPT
$ sudo iptables -P OUTPUT ACCEPT
ソースコードの入手
gitから落としてくる方法もありますが、結構時間がかかるので、tarで入手します。
ちなみに作業は全てユーザのホームディレクトリで進めていきます。
$ cd ~
$ wget http://build.chromium.org/buildbot/archives/chromiumos-0.4.22.8.tar.gz
ローカルリポジトリの作成
$ tar zxvf chromiumos-0.4.22.8.tar.gz
$ ln -s chromiumos-0.4.22.8 [...]]]></description>
			<content:encoded><![CDATA[<p>先週あたりに現在開発中のGoogleのOSである、&#8221;Chrome OS&#8221;が&#8221;Chromium OS&#8221;というプロジェクト名でオープンソース化され、ソースコードが入手可能になったので、早速試してみることにしました。</p>
<p>今回の目次</p>
<ol>
<li>ChromeOSって何？</li>
<li>ビルド環境の準備</li>
<li>ビルド</li>
<li>使ってみる</li>
</ol>
<p><span id="more-163"></span></p>
<h2>ChromeOSって何？</h2>
<p>Googleが開発中のオープンソースのOSです。Linuxカーネルの上に、独自のウィンドウシステムを備えています。webの閲覧とwebアプリの実行に特化したOSということで、非常に軽量なOSとなっています。</p>
<p>詳しいアーキテクチャについては本家のサイトを参照してください。<br />
<a href="http://www.chromium.org/chromium-os/chromiumos-design-docs/software-architecture" target="_blank"> http://www.chromium.org/chromium-os/chromiumos-design-docs/software-architecture</a></p>
<h2>ビルド環境の準備</h2>
<p>上記のサイトに詳しい説明がありますので、それに沿って進めていきます。</p>
<p><a href="http://code.google.com/p/chromium/wiki/LinuxBuildInstructionsPrerequisites" target="_blank">http://code.google.com/p/chromium/wiki/LinuxBuildInstructionsPrerequisites</a></p>
<p><a href="http://sites.google.com/a/chromium.org/dev/chromium-os/building-chromium-os/getting-the-chromium-os-source-code" target="_blank">http://sites.google.com/a/chromium.org/dev/chromium-os/building-chromium-os/getting-the-chromium-os-source-code</a></p>
<p><strong>ビルド用のOSを準備</strong></p>
<p>UbuntuやopenSUSEやFedoraでの準備が紹介されていますが、公式での解説はUbuntu8.04以上（最新の9.10推奨）で進められているので、Ubuntu9.10を用意することにします。</p>
<p>Windows上でVMwarePlayerを用いて構築しました。</p>
<p>■VMwarePlayer</p>
<p><a href="http://www.vmware.com/jp/products/player/" target="_blank">http://www.vmware.com/jp/products/player/</a></p>
<p>■Ubuntu</p>
<p><a href="http://www.ubuntulinux.jp/products/JA-Localized/download" target="_blank">http://www.ubuntulinux.jp/products/JA-Localized/download</a></p>
<p><strong>必要なパッケージのインストール</strong></p>
<p>ChromeOSのビルドに必要なパッケージをまとめて一気に入れてしまいます。</p>
<blockquote><p><span class="pln">$ sudo apt</span><span class="pun">-</span><span class="kwd">get</span><span class="pln"> install subversion pkg</span><span class="pun">-</span><span class="pln">config python perl g</span><span class="pun">++</span><span class="pln"> g</span><span class="pun">++-</span><span class="pln">multilib </span><span class="pun">\</span><span class="pln"><br />
bison flex gperf libnss3</span><span class="pun">-</span><span class="pln">dev libgtk2</span><span class="pun">.</span><span class="lit">0</span><span class="pun">-</span><span class="pln">dev libnspr4</span><span class="pun">-</span><span class="lit">0d</span><span class="pln"> libasound2</span><span class="pun">-</span><span class="pln">dev </span><span class="pun">\</span><span class="pln"><br />
libnspr4</span><span class="pun">-</span><span class="pln">dev msttcorefonts libgconf2</span><span class="pun">-</span><span class="pln">dev libcairo2</span><span class="pun">-</span><span class="pln">dev libdbus</span><span class="pun">-</span><span class="lit">1</span><span class="pun">-</span><span class="pln">dev</span></p>
<p><span class="pln">$ sudo apt</span><span class="pun">-</span><span class="kwd">get</span><span class="pln"> install wdiff lighttpd php5</span><span class="pun">-</span><span class="pln">cgi sun</span><span class="pun">-</span><span class="pln">java6</span><span class="pun">-</span><span class="pln">fonts</span></p></blockquote>
<p>基本的にはSSHで接続してターミナルで操作したいのと、最終的にできあがったイメージをSCPで落とす必要があるので、SSHも入れておきます。</p>
<blockquote><p><span class="pln">$ sudo apt</span><span class="pun">-</span><span class="kwd">get</span><span class="pln"> install ssh</span></p></blockquote>
<p>ついでにiptablesも開放しておきます。一時的にしか使わないので、とりあえずINPUTとOUTPUTを全開放</p>
<blockquote><p>$ sudo iptables -P INPUT ACCEPT</p>
<p>$ sudo iptables -P OUTPUT ACCEPT</p></blockquote>
<p><strong>ソースコードの入手</strong></p>
<p>gitから落としてくる方法もありますが、結構時間がかかるので、tarで入手します。</p>
<p>ちなみに作業は全てユーザのホームディレクトリで進めていきます。</p>
<blockquote><p>$ cd ~</p>
<p>$ wget http://build.chromium.org/buildbot/archives/chromiumos-0.4.22.8.tar.gz</p></blockquote>
<p><strong>ローカルリポジトリの作成</strong></p>
<blockquote><p>$ tar zxvf chromiumos-0.4.22.8.tar.gz</p>
<p>$ ln -s chromiumos-0.4.22.8 ./chromiumos</p>
<p>$ cd ~/chromiumos/src/scripts</p>
<p>$ ./make_local_repo.sh</p></blockquote>
<p>結構時間がかかります。お茶でも飲みながらのんびり待ってください。</p>
<p><strong>Chromeのバイナリを入手</strong></p>
<p>ビルド時にChromeのバイナリが必要となります。</p>
<p>こちらもgitのリポジトリから入手する方法もありますが、面倒なのでバイナリをゲットしておきます。</p>
<blockquote><p>$ cd ~/chromiumos/src/</p>
<p>$ mkdir -p build/x86/local_assets</p>
<p>$ cd build/x86/local_assets</p>
<p>$ wget http://build.chromium.org/buildbot/archives/chromium-chromiumos-r32516.zip</p>
<p>$ mv chromium-chromiumos-r32516.zip chrome-chromeos.zip</p></blockquote>
<p><strong>ビルド環境の構築</strong></p>
<p>以下のスクリプトを走らせます</p>
<blockquote><p>$ cd ~/chromiumos/src/scripts</p>
<p>$ ./make_chroot.sh</p></blockquote>
<p>これで環境構築は完了です。いよいよビルドに入っていきます。</p>
<h2>ビルド</h2>
<p><strong>chroot環境に入る</strong></p>
<p>ビルドはchroot環境下でしか実行できないらしいです。以下のスクリプトを実行。</p>
<blockquote><p>$ ./enter_chroot.sh</p></blockquote>
<p><strong>ローカルユーザアカウントを有効にする</strong></p>
<p>ChromeOSはGoogleアカウントがOSのログインアカウントになります。ネットに繋がらない状況だとログインができなくなるので、この処理を入れておきます。</p>
<p>※ほぼChromeしか動かないOSを、ネットの環境がない状況で使用する意味があるかどうかは不明ですが。</p>
<blockquote><p>$ cd ../platform/pam_google &amp;&amp; ./enable_localaccount.sh USERNAME</p></blockquote>
<p>共有ユーザのパスワードも設定しておきます</p>
<blockquote><p>$ <span style="white-space:pre">./set_shared_user_password.sh</span></p></blockquote>
<p>※この2つの処理は飛ばしてしまっても問題ありません。</p>
<p><strong>ビルド</strong></p>
<p>スクリプトを走らせるとあとは自動でやってくれます。</p>
<blockquote><p>$ ./build_platform_packages.sh</p>
<p>$ ./build_kernel.sh</p>
<p>$ ./build_image.sh</p></blockquote>
<p>かなり時間がかかります。</p>
<p>C2D E7400搭載のPCで、VMのコア割り当ては1つでしたが、軽く30分はかかりました。</p>
<p>マシンスペックが低いと悲しいぐらいの時間がかかりそうです。4コアCPUのPCを使って、</p>
<p>VMにできる限りのコアを割り当ててあげると早いかもしれません。</p>
<p><strong>イメージファイルの確認</strong></p>
<p>以下のフォルダにできています。</p>
<blockquote><p>$ ~/chromiumos/src/build/images/SUBDIR</p></blockquote>
<p><strong>イメージを変換</strong></p>
<p>USBメモリに入れるためのスクリプトと、VMware用イメージの変換スクリプトがあるので、使ってみます。</p>
<p>今回はVM用のものを走らせてみます。</p>
<p>VM用にはqemuが必要なので、まずインストール</p>
<blockquote><p>$ apt-get install qemu</p></blockquote>
<p>イメージをVM用に変換します。</p>
<blockquote><p>$ cd ~/chromiumos/src/script</p>
<p>$ ./image_to_vmware.sh &#8211;from=~/chromiumos/src/build/images/SUBDIR</p></blockquote>
<p>これでSUBDIR内にvm用のイメージができていますので、取り出して使ってください。</p>
<h2>使ってみる</h2>
<p><strong>起動</strong></p>
<p>10秒ちょいで起動しました。速い。</p>
<p><img class="alignnone" src="http://tnk1.s-cubism-nz.com/data/login.jpg" alt="" /></p>
<p>ログインするといきなりChromeが立ち上がります。</p>
<p><img class="alignnone" src="http://tnk1.s-cubism-nz.com/data/display1.jpg" alt="" /></p>
<p>デスクトップ代わりのようなイメージでしょうか。Googleのサービスだけでなく、hotmailなども用意されています。</p>
<p><img class="alignnone" src="http://tnk1.s-cubism-nz.com/data/display2.jpg" alt="" /></p>
<p>JS用のコンソールもあります</p>
<p><img class="alignnone" src="http://tnk1.s-cubism-nz.com/data/js.jpg" alt="" /></p>
<p>タスクマネージャらしきものも</p>
<p><img class="alignnone" src="http://tnk1.s-cubism-nz.com/data/taskmanager.jpg" alt="" /></p>
<p>全てがブラウザ上で動作しているところがなんとなく新しい感覚です。</p>
<p>現時点では日本語入力もできませんが、使い方次第では面白いことになるのではないでしょうか。</p>
<p>今後の開発に期待です。</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.s-cubism.com/blog/2009/11/27/163/feed/</wfw:commentRss>
		</item>
		<item>
		<title>はじめて使う Google Apps</title>
		<link>http://labs.s-cubism.com/blog/2009/11/20/162/</link>
		<comments>http://labs.s-cubism.com/blog/2009/11/20/162/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 15:01:51 +0000</pubDate>
		<dc:creator>ishii</dc:creator>
		
		<category><![CDATA[サーバ構築]]></category>

		<category><![CDATA[ネットワーク]]></category>

		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://labs.s-cubism.com/blog/?p=162</guid>
		<description><![CDATA[GAEが盛り上がってきた昨今、まずは Google Apps を使うところから初めよう！
・・・と、今更ながら Google Apps を触りはじめました。
触って気付いたのですが、
個人・小規模グループレベルなら、まず無料で済み、登録・操作も簡単。
数多ある安いサーバーの違う管理画面を開く位なら、
むしろ、これで統一した方がいいんじゃない？ と感じました。
　

　
1. 独自ドメインの Google Apps アカウントを作成する
（何故、独自ドメインかというと、そのドメインで自分のメールサーバを立てたいためです。）
&#8220;Google Apps&#8221; でググってサイトを探すと
(http://www.google.co.jp/apps/intl/ja/business/index.html)
このサイトに到達するかと思います。
まずは、右上の「機能比較とお申し込み」ボタンから次の画面に進みましょう。
　
次に、「無料試用を開始する」というボタンのある画面に進みますが
(http://www.google.co.jp/apps/intl/ja/business/details.html)
無料で使いたい場合は、そのボタンではなく、
すぐ下にある「Standard Edtion」（これが無料コース）というリンクを押してください。
この後は、特にハマりポイントも無いので、
自分のドメインを入力して、アカウントを作成し、
Google Apps 管理画面に到達するまでは、手なりで進むことが出来ると思います。
　
　
2. アカウントを有効にする
最初に、その独自ドメインの所有者が本当にあなたであるという証明を
Google側にしないといけません。
方法はふたつの選択肢がありますが、
a) Googleが指定するCNAMEレコードを作成する
　　　・・・つまり、Googleが指定するサブドメインを作る。
b) ドメインのドキュメントルート直下に、Googleが指定するファイルを設置する。
どちらも、ある程度ドメインやそのサーバについての権限が必要となる点に注意してください。
可能であれば、取る方法で差がないと思います。（自分は a を選択）
これで、Google Apps を使えるようになりました。
　
　
3. 独自ドメインでメールサーバを建てる
「メールアドレスを有効にする」リンクから道なりで設定を開始すると

ASPMX.L.GOOGLE.COM.      10
ALT1.ASPMX.L.GOOGLE.COM. 20
ALT2.ASPMX.L.GOOGLE.COM. 20
ASPMX2.GOOGLEMAIL.COM.   30
ASPMX3.GOOGLEMAIL.COM.   30
ASPMX4.GOOGLEMAIL.COM.   30
ASPMX5.GOOGLEMAIL.COM.   30

このように、MXレコードを7つ設定してください、という記述があります。
えっ、全部設定するのか？と思いましたが、する必要があります。
（Gmailも、落ちないように苦労してるんだなぁ、と思いました。）
で、このMXレコードが反映され次第、設定は完了です。
hogehoge@yourdomain.com にメールを送信すると届くはずです。
簡単過ぎます、感動！
メーリングリストも、「グループ」という概念を使い、リダイレクトでのMLなら生成できました。
（件名の頭に連番が付けられるような、ちゃんとしたメーリスの作成方法はわからなかった。無いかもしれません）
　
　
以上、他の機能も色々触ってみたのですが、
とにかく、滅茶苦茶簡単なので、腰が重い方も是非お試しあれ！
]]></description>
			<content:encoded><![CDATA[<p>GAEが盛り上がってきた昨今、まずは Google Apps を使うところから初めよう！<br />
・・・と、今更ながら Google Apps を触りはじめました。</p>
<p>触って気付いたのですが、<br />
個人・小規模グループレベルなら、まず無料で済み、登録・操作も簡単。<br />
数多ある安いサーバーの違う管理画面を開く位なら、<br />
むしろ、これで統一した方がいいんじゃない？ と感じました。<br />
　<br />
<span id="more-162"></span><br />
　<br />
1. 独自ドメインの Google Apps アカウントを作成する</p>
<p>（何故、独自ドメインかというと、そのドメインで自分のメールサーバを立てたいためです。）</p>
<p>&#8220;Google Apps&#8221; でググってサイトを探すと<br />
(<a href="http://www.google.co.jp/apps/intl/ja/business/index.html">http://www.google.co.jp/apps/intl/ja/business/index.html</a>)<br />
このサイトに到達するかと思います。<br />
まずは、右上の「機能比較とお申し込み」ボタンから次の画面に進みましょう。<br />
　<br />
次に、「無料試用を開始する」というボタンのある画面に進みますが<br />
(<a href="http://www.google.co.jp/apps/intl/ja/business/details.html">http://www.google.co.jp/apps/intl/ja/business/details.html</a>)<br />
無料で使いたい場合は、<strong>そのボタンではなく</strong>、<br />
すぐ下にある「Standard Edtion」（これが無料コース）というリンクを押してください。</p>
<p>この後は、特にハマりポイントも無いので、<br />
自分のドメインを入力して、アカウントを作成し、<br />
Google Apps 管理画面に到達するまでは、手なりで進むことが出来ると思います。<br />
　<br />
　<br />
2. アカウントを有効にする</p>
<p>最初に、その<strong>独自ドメインの所有者が本当にあなたである</strong>という証明を<br />
Google側にしないといけません。</p>
<p>方法はふたつの選択肢がありますが、</p>
<p>a) Googleが指定するCNAMEレコードを作成する<br />
　　　・・・つまり、Googleが指定するサブドメインを作る。<br />
b) ドメインのドキュメントルート直下に、Googleが指定するファイルを設置する。</p>
<p>どちらも、<strong>ある程度ドメインやそのサーバについての権限が必要となる</strong>点に注意してください。<br />
可能であれば、取る方法で差がないと思います。（自分は a を選択）</p>
<p>これで、Google Apps を使えるようになりました。<br />
　<br />
　<br />
3. 独自ドメインでメールサーバを建てる</p>
<p>「メールアドレスを有効にする」リンクから道なりで設定を開始すると<br />
<code><br />
ASPMX.L.GOOGLE.COM.      10<br />
ALT1.ASPMX.L.GOOGLE.COM. 20<br />
ALT2.ASPMX.L.GOOGLE.COM. 20<br />
ASPMX2.GOOGLEMAIL.COM.   30<br />
ASPMX3.GOOGLEMAIL.COM.   30<br />
ASPMX4.GOOGLEMAIL.COM.   30<br />
ASPMX5.GOOGLEMAIL.COM.   30<br />
</code><br />
このように、MXレコードを7つ設定してください、という記述があります。<br />
えっ、全部設定するのか？と思いましたが、<strong>する必要があります</strong>。<br />
（Gmailも、落ちないように苦労してるんだなぁ、と思いました。）</p>
<p>で、このMXレコードが反映され次第、<strong>設定は完了</strong>です。<br />
hogehoge@yourdomain.com にメールを送信すると届くはずです。</p>
<p>簡単過ぎます、感動！</p>
<p>メーリングリストも、「グループ」という概念を使い、リダイレクトでのMLなら生成できました。<br />
（件名の頭に連番が付けられるような、ちゃんとしたメーリスの作成方法はわからなかった。無いかもしれません）</p>
<p>　<br />
　<br />
以上、他の機能も色々触ってみたのですが、<br />
とにかく、滅茶苦茶簡単なので、腰が重い方も是非お試しあれ！</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.s-cubism.com/blog/2009/11/20/162/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Closure Library に興味津々</title>
		<link>http://labs.s-cubism.com/blog/2009/11/12/161/</link>
		<comments>http://labs.s-cubism.com/blog/2009/11/12/161/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 05:59:48 +0000</pubDate>
		<dc:creator>hosoda</dc:creator>
		
		<category><![CDATA[プログラミング]]></category>

		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://labs.s-cubism.com/blog/?p=161</guid>
		<description><![CDATA[Closure Library (クロージャー・ライブラリ) は先日Google から出されたオープンソースのJavaScriptライブラリです。GmailやGoogle Docsなど様々なGoogleのAjaxサービスで使われてるそうです。もともとJavaScript自体は、異なるブラウザで挙動が違ったり、標準のモジュール化方法が提供されなかったりと、素で使うには厄介でした。そのために、これまで幾つものJavaScriptのライブラリ（prototype.js、jQuery、dojo、Ext JS、YUI、MooToolsなど）が登場してきました。今回のClosure LibraryはそれらライブラリにGoogleが本格的に対抗するものと捉えられます。

筆者はこれまでjQueryを好んで使っていました。一番メジャーであり、軽量かつ覚えるのも簡単で、プラグインも豊富にあるからです。ただ、とりわけ比較的大規模にJavaScriptで開発したいときに、モジュール化するのが比較的やりにくいと感じていました。簡素化のため、あえてそうしてるのだと思いますが、モジュールのインポート機能や自然なオブジェクト指向開発のためのツールが用意されていません。一方、これは、他のライブラリでは実現しているものもあります。しかし、メリットデメリットを考慮し、総合的な利便性でjQueryを選んでいました。Closure Libraryを見ると、その点でモジュール化が徹底されており、大規模開発向けな印象を受けます。そして改めて総合的に判断すると、今回はClosure Libraryに乗り換えるだけの魅力があるのではないかと感じています。
以下にClosure Libraryの主な特徴を独断と偏見で列挙したいと思います。
１．依存関係管理
Closure Libraryでの各コードファイルでは次のように、依存モジュール（ライブラリ）をインポートすることができます。
goog.provide('goog.math');

goog.require('goog.array');
goog.require('goog.math.Box');
goog.require('goog.math.Coordinate');
goog.require('goog.math.Range');
goog.require('goog.math.Rect');
goog.require('goog.math.Size');
ここでgoog.provide()関数はこのコードファイルでのパブリックなネームスペースもしくはクラスを宣言します。goog.requre()関数は他のモジュールをインポートし、このファイル内でそれらを利用できるようにします。
普通は、これら依存するコードファイルは複数のHTTPリクエストによってロードし展開します。しかし、この方法は速度的に問題があり、開発環境ではいいですが、本番環境には適していません。
そこで、calcdeps.pyというPythonのスクリプトファイルが用意されており、これを実行することによって、それら複数のコードファイルを一つのファイルにまとめ、かつ"圧縮"することができます。
2．継承
オブジェクトの継承は次のように行います。
function ParentClass(a, b) { }
ParentClass.prototype.foo = function(a) { }

function ChildClass(a, b, c) {
  ParentClass.call(this, a, b);
}
goog.inherits(ChildClass, ParentClass);

var child = new ChildClass('a', 'b', 'see');
child.foo(); // works
ChildClassのコンストラクタ内のParentClass.call(this, a, b)は親クラスのコンストラクタを呼び出す部分です。そして、goog.inherits(ChildClass, ParentClass)でChildClassをParentClassの子クラスとして定義しています。
また、固有名のParentClassではなく共通の&#8221;superClass_&#8221;変数を利用して親クラスを呼び出すこともできるようです。
ChildClass.prototype.foo = function(a) {
  ChildClass.superClass_.foo.call(this, a);
  // other code
};
[追記] Closure Libraryの継承に関しては次のブログが詳しいです：&#8221;Inheritance Patterns in JavaScript&#8220;。より自然な継承の実現やClosure [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/intl/ja/closure/library/index.html">Closure Library</a> (クロージャー・ライブラリ) は先日Google から出されたオープンソースのJavaScriptライブラリです。GmailやGoogle Docsなど様々なGoogleのAjaxサービスで使われてるそうです。もともとJavaScript自体は、異なるブラウザで挙動が違ったり、標準のモジュール化方法が提供されなかったりと、素で使うには厄介でした。そのために、これまで幾つものJavaScriptのライブラリ（prototype.js、jQuery、dojo、Ext JS、YUI、MooToolsなど）が登場してきました。今回のClosure LibraryはそれらライブラリにGoogleが本格的に対抗するものと捉えられます。</p>
<p><span id="more-161"></span></p>
<p>筆者はこれまで<a href="http://semooh.jp/jquery/">jQuery</a>を好んで使っていました。一番メジャーであり、軽量かつ覚えるのも簡単で、プラグインも豊富にあるからです。ただ、とりわけ比較的大規模にJavaScriptで開発したいときに、モジュール化するのが比較的やりにくいと感じていました。簡素化のため、あえてそうしてるのだと思いますが、モジュールのインポート機能や自然なオブジェクト指向開発のためのツールが用意されていません。一方、これは、他のライブラリでは実現しているものもあります。しかし、メリットデメリットを考慮し、総合的な利便性でjQueryを選んでいました。Closure Libraryを見ると、その点でモジュール化が徹底されており、大規模開発向けな印象を受けます。そして改めて総合的に判断すると、今回はClosure Libraryに乗り換えるだけの魅力があるのではないかと感じています。</p>
<p>以下にClosure Libraryの主な特徴を独断と偏見で列挙したいと思います。</p>
<p><strong>１．依存関係管理</strong></p>
<p>Closure Libraryでの各コードファイルでは次のように、依存モジュール（ライブラリ）をインポートすることができます。</p>
<pre>goog.provide('goog.math');

goog.require('goog.array');
goog.require('goog.math.Box');
goog.require('goog.math.Coordinate');
goog.require('goog.math.Range');
goog.require('goog.math.Rect');
goog.require('goog.math.Size');</pre>
<p>ここでgoog.provide()関数はこのコードファイルでのパブリックなネームスペースもしくはクラスを宣言します。goog.requre()関数は他のモジュールをインポートし、このファイル内でそれらを利用できるようにします。</p>
<p>普通は、これら依存するコードファイルは複数のHTTPリクエストによってロードし展開します。しかし、この方法は速度的に問題があり、開発環境ではいいですが、本番環境には適していません。</p>
<p>そこで、<code>calcdeps.pyというPythonのスクリプトファイルが用意されており、これを実行することによって、それら複数のコードファイルを一つのファイルにまとめ、かつ"圧縮"することができます。</code></p>
<p><strong>2．継承</strong></p>
<p>オブジェクトの継承は次のように行います。</p>
<pre>function ParentClass(a, b) { }
ParentClass.prototype.foo = function(a) { }

function ChildClass(a, b, c) {
  ParentClass.call(this, a, b);
}
goog.inherits(ChildClass, ParentClass);

var child = new ChildClass('a', 'b', 'see');
child.foo(); // works</pre>
<p>ChildClassのコンストラクタ内のParentClass.call(this, a, b)は親クラスのコンストラクタを呼び出す部分です。そして、goog.inherits(ChildClass, ParentClass)でChildClassをParentClassの子クラスとして定義しています。</p>
<p>また、固有名のParentClassではなく共通の&#8221;superClass_&#8221;変数を利用して親クラスを呼び出すこともできるようです。</p>
<pre>ChildClass.prototype.foo = function(a) {
  ChildClass.superClass_.foo.call(this, a);
  // other code
};</pre>
<p>[追記] Closure Libraryの継承に関しては次のブログが詳しいです：&#8221;<a href="http://bolinfest.com/javascript/inheritance.php">Inheritance Patterns in JavaScript</a>&#8220;。より自然な継承の実現や<a href="http://code.google.com/intl/ja/closure/compiler/">Closure Compiler</a>と親和性が高いこと、メモリへの配慮を行っていることが分かります。</p>
<p><strong>３．イベント</strong></p>
<p>イベント処理は次のように行います。</p>
<pre>goog.events.listen(this.elHeader_, goog.events.EventType.CLICK,
    this.onHeaderClick_, false, this);</pre>
<p>１番目の引数はイベントを発動するDOMノード、<br />
２番目の引数は捉えたいイベントタイプ、<br />
３番目の引数はイベントが起こったときに呼ばれるリスナー関数です。</p>
<p>４番目の引数は<code>capturePhaseのみでイベントを捉えるかどうかを決め、<br />
５番目の引数は</code>リスナー関数内での&#8221;this&#8221;の中身を定めます。</p>
<p>第５引数でthisの中身を指定できるのはいいですね。</p>
<p><strong>４．デバッグ</strong></p>
<p>これは次のポップアップするデバッグウインドウのデモを見るのが早いかと思います：</p>
<p><a href="http://closure-library.googlecode.com/svn/trunk/closure/goog/demos/debug.html">http://closure-library.googlecode.com/svn/trunk/closure/goog/demos/debug.html</a></p>
<p>JavaScriptではFirefoxのプラグインツールであるFirebugを用いてデバッグするのが主流ですが、IE等ではまだまだデバッグツールが貧弱なので、このようなブラウザ非依存のリッチなデバッグツールがあると便利ですね。さらに、ログレベルを細かく設定できるので(<a href="http://closure-library.googlecode.com/svn/trunk/closure/goog/docs/class_goog_debug_Logger_Level.html">参考</a>)、特に大規模な開発で役に立つと期待されます。</p>
<p><strong>４．データ管理</strong></p>
<p>APIを見ると、<span class="fn"><a href="http://closure-library.googlecode.com/svn/trunk/closure/goog/docs/class_goog_ds_DataManager.html">ds.DataManage</a>rというクラスがあり、データソースを統一的管理する仕組みが用意されているっぽいです。特に、データの変更を通知する仕組みが実装されており、これによって<a href="http://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%90%E3%82%A4%E3%83%B3%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0">データバインディング</a>ができるようになると思われます。個人的に、Flexの開発ではこのデータバインディングを重宝していて、これがJavaScriptで標準でできればと思っていました。</span></p>
<p>[追記]　よくよく見るとFlexのデータバインディングとは少し違うようですね。ただこれを利用してデータバインディング的なことはできそうです。</p>
<p><strong>５．基本ライブラリ</strong></p>
<p>数学やコレクション関連の基本ライブラリはかなり充実していると感じました。例えば、個人的には、<span class="status-body"><span class="entry-content"><a href="http://closure-library.googlecode.com/svn/trunk/closure/goog/docs/class_goog_ds_SortedNodeList.html">ds.SortedNodeList</a>や</span></span><span class="status-body"><span class="entry-content"><a href="http://closure-library.googlecode.com/svn/trunk/closure/goog/docs/class_goog_structs_Pool.html">structs.Pool</a>などの機能を独自に実装した経験があり、こういうのがあったらと思っていました。</span></span></p>
<p><strong>６．ユニットテスト</strong></p>
<p>ユニットテストのライブラリも標準として備わっており、非常に充実しています(<a href="http://closure-library.googlecode.com/svn/trunk/closure/goog/docs/class_goog_testing_TestCase.html">この辺のクラス</a>)。大規模開発では<a href="http://labs.s-cubism.com/blog/2009/06/05/118/">テスト駆動開発</a>は必須になってくるので、ここはやはりしっかり押さえています。</p>
<p><strong>６．ブラウザ機能</strong></p>
<p>ユーザインターフェースを初めブラウザ独自の機能に関わるAPIも非常に豊富です。<a href="http://closure-library.googlecode.com/svn/trunk/closure/goog/docs/index.html">APIドキュメント</a>のページの右にあるDemosタブからたくさんのデモを見ることができます。</p>
<p>基本的な設計思想としては、各ブラウザ機能をそれぞれ抽象化し、再構築している感じです。例えば、<a href="http://closure-library.googlecode.com/svn/trunk/closure/goog/demos/checkbox.html">ui.CheckBox</a>はチェックボックス機能を独自に実装しています(Input要素は使わず、span要素と背景画像の切り替えで実装しています)。また、JavaScriptの基本関数であるsetTimeoutやsetInterval関数の機能も<a href="http://closure-library.googlecode.com/svn/trunk/closure/goog/demos/timers.html">このデモ</a>にあるようなクラスで抽象化し、改良しています。</p>
<p>また、例えば、<a href="http://closure-library.googlecode.com/svn/trunk/closure/goog/demos/graphics/basicelements.html">クロスブラウザなキャンバスライブラリ</a>や<a href="http://closure-library.googlecode.com/svn/trunk/closure/goog/demos/mousewheelhandler.html">マウスホイールのハンドリング</a>など、jQueryでは外部ライブラリが必要だったもので、Closure Libraryで実装されたものが要所要所であり、便利かなと思います。逆に、Closure Libraryでなくて、jQueryであるようなものは一応見当たらなかったです。</p>
<p>・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・</p>
<p>とりあえず、以上です。全体としてJavaScriptがJAVAっぽくなった感じですが、同時に、徹底的に改良された印象を受けます。簡単な開発はjQuery、大規模な開発はClosure Libraryという流れになる気がするのですがどうでしょうか？</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.s-cubism.com/blog/2009/11/12/161/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
