【KtaiLibrary】バージョン0.4.1をリリースしました

Ktai Libraryの0.4.1をリリースしました。
今回はバグフィックスがメインになっています。

Lib3gkEmoji::emoji()で生成した絵文字をさらに自動絵文字変換を行っている際に文字化けしてしまう不具合がありました。これは emoji()の出力が既に対象キャリアの絵文字であるのに、その絵文字をdocomo絵文字と認識して再度変換をかけてしまっているためです。なので自 動絵文字変換処理の場合はemoji()ではdocomo絵文字を出力するように修正しました(以前のコードにはこの処理が入っていたけど絵文字コンバー ト手法を変更した際にそのコードを処分してしまったらしいです)。

また、Lib3gkCarrier::is_android()のラッパーメソッドがどこにも無いため追加しました。

あと、これは修正項目ではありませんが、docomoの比較的新しい機種で「SJISで拡張絵文字の数値文字参照形式(#xxxxx;)の絵文字を表示できない」現象を見つけました。P-01A等でこの現象が出ます。なのでSJISに関してはバイナリ絵文字を出力した方が良いようです。お気を付けください。

【KtaiLibrary】バージョン0.4.0公開!

お待たせしました、Ktai Libraryのバージョン0.4.0を公開いたします!

基本的にはバグフィックスと機種情報などデータ面の更新がメインだったのですが、一つだけ他の携帯向けライブラリ等には存在しない便利な機能を搭載しました。

高解像度携帯の登場で、画像の大きさがまちまちになって画面レイアウトが崩れる件については先に搭載しています画像のフィット機能で改善する事ができますが、これだけでは完全に解決することができませんでした。何故かというと「フォントの大きさ」もキャリア・機種によって異なるため、同じ文字幅で改行する事が困難だったからです。
そこで、キャリア・機種によって異なるフォントサイズの指定を肩代わりして同じように見せるような機能を搭載しました。簡単に仕組みを説明しますと、まず3キャリアでフォント使用の指定タグが異なるためそれを吸収し、またキャリア毎、あるいはSoftBankの高解像度携帯とdocomoのブラウザ2.0以降、それ以外での文字サイズの差をなくすために一工夫している感じです。

ただ、厳密にフォントの大きさを変える事はできません。携帯内が持っているフォントは固定幅でありアウトラインフォントではないため、1ピクセル単位でなめらかに大きさを変える事ができないからです(docomoのブラウザ2.0以降のみできる)。なので、おおむねそれに近い大きさの出力が可能な「small」「medium」「large」の3つの大きさが指定できます。それ以外の大きさも指定は可能ですが、そのまま出力するため同じ大きさに見えるかどうかは分かりません(というか見えないはず)。
それから本機能はXHTMLのみ有効です。HTMLでは機能しませんのでお気をつけください。

具体的にはこのように使用する事ができます。

■コントローラ(デフォルトのフォントサイズを変更する)


App::import('Controller', 'KtaiApp');
class KtaipagesController extends KtaiAppController {

	var $name = 'Ktaipages';
	var $uses = array();
	var $components = array('Ktai');
	var $helpers = array('Ktai');
	var $layout = 'ktai_default';

	//Sample ktai params
	//
	var $ktai = array(
		'use_img_emoji' => true,
		'input_encoding' => 'UTF8',
		'output_encoding' => 'UTF8',
		'use_xml' => true, 		//XHTMLに(重要)
		'default_font_size' => 'small', 	//デフォルトフォントサイズをsmallに
	);

	//Sample index action
	//
	function index(){
	}

}

■レイアウトファイル(ここが一番やりやすい)


<?php
if(Configure::read('debug') == 0){
	echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
}
?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN"
"http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<?php if($ktai->is_iphone()){ ?><meta name="viewport" content="width=260"><?php } ?>
<title><?php echo $title_for_layout; ?></title>
</head>
<body>
<?php $ktai->font(); //フォントサイズをデフォルトに指定 ?>
<?php if(!$ktai->is_ktai()){ ?><div style="width: 240px;"><?php } ?>
<?php echo $content_for_layout; ?>
<div align="center">
<hr width="90%" size="1" color="#333333" noshade>
(C)2009-2010 <a href="http://www.ecworks.jp/">ECWorks</a>
</div>
<?php if(!$ktai->is_ktai()){ ?></div><?php } ?>
<?php $ktai->fontend(); //フォントタグの終端 ?>
</body>
</html>

ktai-devのサンプルにもフォント指定がされていますので、お試しいただく事ができます。ただし、FireMobileSimulatorでは正しい文字サイズで表示する事ができませんので注意が必要です。

また、上記サンプルは完全にオプション値を省略していますが、フォント指定を行うタグを変更したり追加のスタイルを与える事もできます。詳しくは添付ドキュメントもしくはソースコード内のコメントを参照してください。

ちなみに本機能はフォントの大きさについてあまりこだわりのない方向けの機能ではないのですが、レイアウトにこだわる必要があるサイト、特に携帯ソーシャルサイトなどに便利にご利用いただけると思います(というか当方の案件で必要だったため制作しました(笑))。

Ktai Libraryの基本的な情報やダウンロードについては こちら をご覧ください。

【戯れ言】近況報告とか今後の予定とか

すっかりブログをサボってしまっていてすみませんでした。しばらくきつい作業をしていたのでこちらをやっている暇は全くありませんでした(^^;。というわけで近況報告や今後の当方の予定なんかを。

Twitterをフォローされている皆さんはご存じかもしれませんが、今まで進めていた執筆作業がようやく一段落しまして、現在は用意した原稿から実際の製本に向けての作業に入りました。発売スケジュールもほぼ確定し、それに向けてがんばっていくところです。
前回は「携帯+CakePHP」というテーマで こちら を執筆させていただきましたが、今回は携帯からは離れ、純粋に「CakePHPの詳細を解説」したリファレンス本になります。Cake本はほとんどが「入門書」しかないためにある一定レベルに達するとこれらは卒業する事になるかと思いますが、その次の段階で参考になる本が無く、また作業時にちょっと知りたいような辞書的なものがないため、その隙間をまた埋めさせていただいた感じです。
競合する本は1冊あり、おそらくは誰もが持っていると思われますが(笑) こちら は1.2ベータ版の情報で大変古く、かといってこれしか使えるものがないため、現行バージョンのものが切望されていました。そこで今回は(まあ当たり前かもしれませんが)1.3に対応し、またまだ現役で使用されている1.2でも使えるよう両対応しました。
そしてここからが重要ですが「引数で与えるオプション値」についても詳細に解説した点が今までの本との大きな違いになります。Cakeのクラスメソッドは大抵$options等で連想配列を渡す仕組みになっていますが、その中身に何を記述して良いかわからない場合が多かったと思います。またCookbookに書かれていない内容が多く、そしてそれが意外に大事だったりする事もあり、この辺は是非やりたい…いやこれをやらなければ価値がないとさえ思っていました。
今回のコンセプトとしては「今Cakeに詳しくない人が使い始め、習得しても向こう3年は使える本」を目指しました。チュートリアルや多の入門書籍を参考にCakeで簡単なサイトが作れるようになってきて、じゃあ今度はオリジナルだ!という段階になり、そこからずっとそばに…という感じです(笑)。3年というのはその頃に2.0がちらほら出始めるでしょうから、そこで寿命になるのかなという感じです。その間、いつも机のそばに置いといてもらえればうれしいです。本の大きさも現実的なものを目指し、一回り小さいサイズにしてページ数も辞書にはならないものを想定をしています(まだページ数が確定していないのでアレですが、これに関してはちょっと自信がなくなってきました)。
それによる弊害もあり、限りあるページ数でたくさんの情報を詰め込む必要があるため、サンプルソースコードは必要な部分以外は極力省かせていただきました。その代わり極限までメソッドを掲載しました。このためちょっと初級者向けの内容ではないかもしれません。この辺はコンセプトとして割り切りました。また触れる事のできなかった内容もありますが、普段使いを最優先にした内容になっています。唯一残念なのはテストケースの解説がページ数の都合でできなかった事です。この辺については こちら のような大変に参考になる本がありますので、そちらにお任せする事にしました(笑)。
発売日・書籍案内についてはまだ確定していないためにお知らせできませんが、だいたい9月末を予定しています。PHP Matsuriには間に合う予定です(笑)。
そんなわけで長らくお待たせしましたが、もう少しですのでお待ちいただけますと幸いです。

執筆の話が長くなってしまいました。ごめんなさい(^^;;;

で、とりあえず本の方は一段落しましたが、休み無く次の案件について現在取り組み始めている段階です。何をやっているかはちょっと言えないのですが、いまはやりどころの仕事でしかも結構大がかりな事をやっています。ちょっとこの辺に関してノウハウがなかったので、大変に良い経験になっていますが、その代償として休みがほとんどありませんorz。10月末までは正直何もできない状況です。

合間に、今まで放置されていたKtai Libraryのバージョンアップ作業に取り組む予定です。「時間がない」のにと思われるかもしれませんが、上記の案件で使わなければならないので(笑)。でも正直言いますと、本来は正式版を出すつもりでいましたが、その前段階のバージョンをリリースする事になるかもしれません。
目玉は「キャリア間での絵文字の相互変換」についていよいよ取り組みます。あとプラグイン化をする予定です。今までは上書きでOKだったと思いますが、次のバージョンはちょっといろいろ直してもらう必要が出ます。

そして10月はじめに開催される「PHP Matsuri」ですが、上記の件もあり表だった参加はできない予定です。何とか当日ひょこっと顔を出す可能性はあるかもしれませんが、時期的にデスマーチ期間だと思いますので(^^;。そして関係者の皆様、人員の頭数になれなくてごめんなさいm(__)m。

その代わりといってはなんですが、11月台に、これも今まで放置されていましたが「CakePHP温泉部」の2回目を開催予定でいます。10月に開発イベントをやる関係で、予定していた開発系の内容についてはまだ揺れているところですが、何かしら結果が得られるようなものにしたいとは思っています。アイデアありましたら募集しています。場所に関しても情報募集中。広いので前回のところでもまあいいのですが(笑)。

長文になってしまい申し訳ございません。
他にも書きたい事がありますがこの辺で。
刊行の正式案内は後日させていただきます。

【KtaiLibrary】Ktai Library勉強会@東海に行ってきました!

先週土曜日は「Ktai Library勉強会@東海」ということで、行ってきました。
同勉強会は東京では2回行われていますが、それ以外の地域では初めての開催でした。

東海のCakePHP関連のイベントについては@a24lovewebさんのほうで主に開催されていらっしゃるのですが、以前から「何かやりたいよね」という話をしていまして、今回はかなり題材を絞ったイベントを開催するという目的で、Ktai Libraryを題材としたCakePHP勉強会としました。「どうせみんな集まってくれないだろう」と思っていたのですが、合計14名の参加ということで、会場になった つくる人株式会社様の部屋は人でいっぱいになりました!

参加者全員で記念撮影

内容については、前半30分程度で「入門編」として当方からKtai Libraryの概要について説明させていただき、後半の2時間で実際に使っていただく、という流れで行いました。東京では完全に書籍ベースで静かに黙々と行う形式であったのに対し、名古屋では内容についてはフリーではありましたが基本的に当方からの解説に沿っていく形式であったため、ちょっと一方的に当方から話してしまった感がありました。最後の時間でディスカッション的なものを用意していたのですが、いろいろトラブル等もあって時間がなくなってしまったので、この辺は残念だったです。

トラブルというのは、まあ以前からこの手のワークショップにはありがちですが、いわゆる「環境構築にてまどう」系です。Cakeではcakeフォルダとappフォルダを別の階層のディレクトリに配置したり、webroot内のものをいろんな場所に配置したりするとあまり良く動きません。まあそういうこともあっての「事前にCakeを動かして参加してもらう」だったのですが、まあこの辺は難しいですね。

具体的な内容についてはスライドをご覧ください。

1:入門「Ktai Library」

2:実践「Ktai Library」

「実践~」の方には、先週の「第5回CakePHP勉強会@東京」にて発表しました「Ktai Library on CakePHP1.3」にて触れた「「なう」な使い方」の実践編として、そしてCakePHP1.3の新機能を用いた「PCサイトとモバイルサイトを1システムで制作する新しい方法」としてTipsを紹介させていただきました。簡単に説明すると、CakepPHP1.3からの新機能のApp::build()でのパスの登録を、モバイル時のパスを登録することでビューファイルを整理することができるというものです。本当はコントローラについてもPC用とモバイル用とで振り分けることができればなお良かったのですが、残念なことにdebug=0の時にうまく動かないなどの数々の問題点が出てしまい、結局骨抜きになってしまいました(^^;。自分としても少々消化不良ですので、良い方法を思いついたらまた研究してみたいと思いますが、まあ早い話が「Ktai Libraryのサブクラスを直接呼ぶことでもっといろいろなことができるよ」というのが言いたかったです。

参加者のレベルは本当にまちまちで、「PHPを使い始めた」方から「実際にKtai Libraryを業務で使ったことがある」方までいろいろでした。京都や東京から遠路はるばる参加された方、そして@evertOnさんは日本語が得意ではないにもかかわらず、がんばって聞いてくれました(今度携帯サイトを作る案件があるので参加してみた、とのことです)。しかし、皆なんらかの得るものがあったみたいでその辺はほっとしました。
あつさんがおっしゃるには「名古屋ではそもそも勉強会が少ないので、もっといろいろやって参加者が増えるといいな」ということでした。東京ではほぼ毎日何らかの勉強会があるんじゃないかと言うくらいインフレ状態ですけど、名古屋でももっと盛り上がってくれたらいいなと思いました。私もこれに限らずまた参加してみたいと思います。

勉強会後は懇親会でいろいろなお話を聞くことができました。
そしてSymfonyユーザ会でご活躍されています@hidenorigotoさんが途中参加され、いろいろお話を伺うことができました。
あっという間に時間が過ぎてしまいましたが本当に楽しかったです。

夜はあつさんのところにお邪魔をして、今後のこととかをいろいろお話ししました。
そして「何かやりたいね」的なお話も。

帰りはふと好奇心からJR高速バスで帰ることに。
行きはN700系できたのですが、思ったよりも居心地が悪く、またバスの方は「スーパーシート」なるものがあり、ゆったりできるかなと思ったからです。

帰り間際は、名古屋で有名な味噌カツ屋である「矢場とん」に。
1.5倍サイズのある「わらじとんかつ」を食したのですが、うまかった!

矢場とんの「わらじとんかつ」。でかいがうまい!

JR高速バスは、ここでは東名高速の昼行路線バスを指していますが、スーパーシート席のある「スーパーライナー」というのがあり、超特急便で主要バス停しか止まりません。といっても夜行バスなどの直行便と比べて停車回数も多く、それと比べるとゆっくりですが。13時に名古屋を出発して19時に到着予定「でした」。

座席は一般席と比べて若干ふかふかで、ヘッドレストが枕みたいで気持ちいい!

高速バスは何度か経験していますが、このスーパーシートはなかなか座り心地が良く快適です。
強いて問題点を挙げれば、シートピッチは普通席とあまり変わらないらしく、若干足下が狭いです。

最前席の見晴らしは最高!

またスーパーシート席は2階席の最前列から3列くらいまであり、私は運良く先頭列のど真ん中。見晴らしは最高で、ゲームみたいな見下ろしの視点で楽しく過ごすことできました。

しかし…東名で事故渋滞に遭遇し、御殿場-厚木間で40km!
ちょっと疲れました。
渋滞がなければとても満足度は高かったです。
まあこの辺は仕方がないですかね。

まあハプニングも含めてとても楽しかったです。
また名古屋に行きたいと思います。

参加者の皆様、会場を提供していただいた「つくる人株式会社」の皆様、そして主催のあつさん、どうもありがとうございました!

ほかのイベントレポートはこちら

▼Ktai Library for CakePHP勉強会@東海に参加してきた。(@mick0124)
http://mick.blog16.jp/index.php/main/2010/06/05/ktailibrary_1

▼Ktai Library for CakePHP勉強会@東海を開催しました(@a24loveweb)
http://as.blog16.jp/index.php/2010/06/06/p1332

「CakePHP勉強会@東京5」報告

昨日は1年越しの「CakePHP勉強会@東京5」が開催されました。
簡単ですがイベントの内容の報告と、当方で発表しました「Ktai Library on Cakephp1.3の資料を公開させていただきます。

ご覧の通り満員御礼!

今回は、前回の勉強会から丸1年、途中であったCakeMatsuriからも半年以上大きなイベントがなかったこともあるかもしれませんが、50名以上がひしめき合うイベントとなりました。セッション内でアンケートを採ったところ、そのうちの半分以上はこれらイベントを未経験ということで、なかなかフレッシュな集まりでした(笑)。

そして今回は、「福岡」「名古屋」「札幌」のサテライト会場、そして「ニューヨーク」からのセッションといった、今までになかった試みが行われました。凄いですね!遠くで同じイベントを共有できるなんて、時代の進歩というのか、とうとう勉強会もここまできたか!という感じでした。まあ装備や通信環境といった負担があるのでなかなか全部とは言えないですが、こういう仕組みは今後もやっていきたいですね!サテライトに名乗りを上げていただいた福岡の@k1LoWさん、札幌の@nazoさん、名古屋の@a24lovewebさん、ありがとうございました! 時差を乗り越えて発表された@yandoさんお疲れ様でした!

セッション時はこんな感じ

最初のうちは厳かに、というかちょっと堅い雰囲気でのスタートでした。

途中で茶菓子などが出たり、サテライト会場の中継とかが入って若干堅さが和らいだところで、いよいよ当方の発表とあいなったのですが… ちょっと外しましたね(^^;

というわけで、当方で発表しましたスライドを上げておきます。

「Ktai Library on CakePHP1.3」スライドの閲覧は画像をクリック

各セッション、LTの内容は今回もとっても濃かったですね。
特に、@takamunetaniiさんの「教えてこの子twitterツイート君」の事例紹介は、Twitterサービスをはじめとする「ヒットしたらドカンとアクセスが来ちゃう系サイト」を考えている方の励みになるものではないかと思います。何を隠そう、自分もとっても参考になりました!
それから、@hiromi2424さんのCakePHPハックもとても参考になりました。特に初期化周りに関してはテストコードを書く際にとっても参考になると思います。自分もはまりました(笑)。

Cakeマシュマロ配布なう

前回の勉強会は、「Cakeまんじゅう」なるものが配布されましたが、今回は「Cakeマシュマロ」が参加者全員に配布されました。これがなかなかかわいくて、食べるのがもったいない! そう思った人も多いはず(笑)。

立ち飲み形式で懇親会。#cake_beer!

勉強会が終わり、同会場で懇親会。ビールやサンドウィッチを片手に参加者との交流です。

今回とっても感じたことは、Ktai Libraryは既に業務レベルで活躍している点。そして皆さんに「とっても便利だ!」といっていただけている点にとても嬉しく思いました。本を出させていただいた点もある程度認知度の向上に役立ったかと思いますが、Ktai Libraryユーザーが確実に増えているんだなと実感できました。本当にありがとうございます!

また、今回はゲーム関連の業務をされている方にも何名かお会いしました。以前そのようなところで仕事をしていましたのでとても懐かしかったです(しかも昔おつきあいのあった会社さんだったり!)

これは懇親会開始直前の記念写真。「はい、Cake!」

それからこれも大変に驚いたのですが、なんとあの「セカイカメラ」もCakePHPで動いているそうです!
いやー、これは凄いことです!
懇親会の終わり間際に中の人とご挨拶させていただいたのですが、このあと付近の和民で2次会が行われたのですが、席をご一緒させていただけたのでずっといろいろなお話をさせていただきました。ありがとうございました。
とてもためになりました。

自分はそのあと終電の関係で先に上がらせていただいたのですが、日が変わって4次会くらいまで行われたみたいで、しかもそのあと「オクトーバーフェスト」で#cake_beerされていたみたいです。ちなみに当方は結局終電に乗れず、一人寂しく途中駅付近のマックで執筆活動をしてました(でも酔いが回っていてそれほど進みませんでしたが)。

次のCake関連のイベントは、勉強会内でもありましたとおり10/2~3に開催される「PHP Matsuri」です。海外からPHPに関連するゲストを招いてのセッションがある他、開発合宿→コンテスト等もあったり、2日間を「夜通しで」楽しめる大変に濃いイベントを現在計画しています。日頃業務以外での開発は難しいでしょうし、他の人との共同作業とかもなかなかできないと思いますので、なかなか新鮮な体験が出来るのではないでしょうか。また、それ以外にも楽しい催しも企画していますので、祭りとして楽しんでいただけますと幸いです。こちらの方も是非宜しくお願いします!

USTREAMの録画はこちら

http://www.ustream.tv/channel/cakephpstudy

他の発表者のスライドのリンクはこちら(発表順)

▼特報目玉イベント2010(@yando)
http://www.slideshare.net/yandod/20100529-phpday

CakePHP1.3 stable(@cakephper)
http://www.slideshare.net/ichikaway/cakephp-tokyo5

Ktai Library on CakePHP1.3(@ecworks_masap)
(上記にあります)

▼コアライブラリのエレガントなハック(@hiromi2424)
http://www.slideshare.net/hiromi2424/cakephpstudy5-hacks-jp

▼twitterとcloud serverとcakeで新規サービス(@takamunetanii)
http://docs.google.com/present/view?id=d4b7q8p_21cq5hkjg8

▼WordPressとCakePHP連携(@kara_d)
http://www.slideshare.net/karadweb/cakephp-and-wordpress

▼CakePHPでjQueryを使ってみた(@nano_eight)
http://www.slideshare.net/nanoeight/cakephpjquery-4357936

▼Cakephp tips for my next project(@evertOn)
http://www.notreve.com/cakephp_study-2010-05-29.pdf

▼あのCMS eZ publishをCakePHPのModelにしちゃう(@leebenny)
http://prezi.com/ugsu8hwgypud/datasource-for-ez-publish-in-cakephp/

実”戦”CakePHP Plugin(@k1LoW)
http://www.slideshare.net/k1LoW/cakephp-plugin-4364102

イベントの感想記事はこちら

▼「第5回CakePHP勉強会@Tokyo 東海サテライト」に行ってきました(@longkey1)
http://blog.longkey1.net/archives/902

▼東京のCakePHP勉強会を札幌でUst参加する会まとめ(@nazo)
http://d.hatena.ne.jp/nazone/20100529/p1

▼第 5回CakePHP勉強会 まとめ ~CakePHPへ貢献編~(@nycom)
http://d.hatena.ne.jp/nycom/20100529/1275116447

第5回CakePHP勉強会 まとめ ~発表された方のTwitter ID~(@nycom)
http://d.hatena.ne.jp/nycom/20100601/1275389287

▼第五回CakePHP勉強会に行ってきた(@tikitikipoo)
http://blog.cypher-works.com/?p=1159

▼第五回CakePHP勉強会Tokyoに行ってきました。(@hamichamp)
http://blog.livedoor.jp/hamichamp/archives/51445403.html

▼第5回 CakePHP勉強会@Tokyoに参加してきましたw(@leebenny)
http://d.hatena.ne.jp/bennylee/20100602

▼第5回CakePHP勉強会に参加してきました(@tkykmw)
http://wp.serpere.info/archives/1251

▼第5回CakePHP勉強会@Tokyoに参加してきました(@kazukichop)
http://d.hatena.ne.jp/kazukichop/20100602/1275493956

▼第5回CakePHP勉強会に参加いたしました。(@yashio)
http://yashio.wordpress.com/2010/06/03/%E7%AC%AC5%E5%9B%9Ecakephp%E5%8B%89%E5%BC%B7%E4%BC%9A%E3%81%AB%E5%8F%82%E5%8A%A0%E3%81%84%E3%81%9F%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82/

▼CakePHP 勉強会@東京(2010年5月)(@mon_sat)
http://text.tklabo.net/blog/18/cakephp-study-2010-05

▼第5回CakePHP勉強会@Tokyoに参加・発表してきました。(@hiromi2424)
http://d.hatena.ne.jp/hiromi2424/20100603/1275558884

▼第5回CakePHP勉強会メモリスト
http://pub.studio15.jp/archives/2655

▼第5回 CakePHP勉強会@Tokyo 東海サテライトを開催しました(@a24loveweb)
http://as.blog16.jp/index.php/2010/06/03/p1330

▼第5回CakePHP勉強会@Tokyoに参加してきました(@nano_eight)
http://d.hatena.ne.jp/nano-eight/20100531/1275307253

【追記】(2010/05/31)
発表者スライドのリンクを追加しました(未公開分を除く)

【追記2】(2010/05/31)
ブログ感想のリンクも追加しました

【追記3】(2010/05/31)
若干記事を修正し、ブログ感想のリンクを追加しました

【追記4】(2010/06/01)
発表者スライドのリンクを追加しました

【追記5】(2010/06/02)
ブログ感想のリンクを追加しました

【追記6】(2010/06/03)
ブログ感想のリンクを追加しました

【追記7】(2010/06/03)
スライドのリンクを修正し、ブログ感想のリンクを追加しました

【追記8】(2010/06/04)
ブログ感想のリンクを追加しました

【サーバ関連】Ktai Libraryのリポジトリ周りと公開方法を晒してみる

当方はgitの扱いに関してはまだまだど素人でして、至らない部分はあるのですが、それでも「コードを公開する」という点で興味をお持ちの方が少なからずいらっしゃると思いますし、他のご意見も聞きたかったりするので、今回「Ktai Library」周りで整備をした、ソースコードの公開方法について晒してみようと思います。

「Ktai Library」は少々特殊かもしれませんが「主にCakePHP内で利用されているライブラリ」ではありますが一応PHP全般で利用が可能な携帯サイト向けライブラリです。また、それぞれのCakePHP環境に「上書きコピー」で適用していただく方が利便性が高いと思い、CakePHPに実装した形ではなく、必要なファイルのみをアーカイブにまとめて公開していました。
ところが、当方では基本的にCakePHP内に実装した形で開発を行い、そこから必要なものを抜き出して公開イメージを作っていました。この作業が非常に面倒で、そのうちバージョン管理ミス等も起きるだろうと考え、なんとかしたい要因の一つとして前々から方法を模索していました。

それとは別に、Ktai Libraryの開発そのものもオープン化したいと考えていましたので、「ktai-dev」というプロジェクトも公開し、その複製物からKtai Libraryを生成するような仕組みが必要になってきました。共にgithabにて公開するつもりでしたので、つまりgitでバージョン管理されたものについて、いくつかの操作を行って連携していく必要があります。

そんなわけで、どうしようかとずっと悩んでいた開発環境とリポジトリ周りの構築についてようやく実用的なものが出来たので、「ktai-dev」のリリースと共に運用を始めた次第です。
まずは簡単に図にしたものをご覧ください。

ご覧の通り、gitリポジトリがた~くさんあるのですが、分散管理できるgitならではという感じかもしれません(笑)。

まず一番左はローカル環境です。自宅のデスクトップと持ち運びようのノートPCに、それぞれVMWareServerを稼働させ、VMでFedora11を動かしています。それぞれでgit によるktai-devの作業ディレクトリがあり、その右側にある非公開サーバ内にあるktai-devリポジトリに対してのみコミットしています。
ここについては、最初は非公開サーバにリポジトリを置かずにUSBメモリで作業ディレクトリを共有していたこともあるのですが、何か事故があってはいけないと思いやめてそれぞれでcloneするようにしました。また他の作業者が増えた場合にも対応に困る場合もあるので。
欠点もあり、「作業途中で続きをデスクトップとノートで行き来できない」点でUSBメモリ方式と比べて使い勝手が悪い点があります。当方は「電車開発」を常時行っていて、作業が未完のまま帰宅するのが当たり前なので。途中のままコミットするのが気持ち悪いので、仕方がないのでノートで作業を完結するようにしています(笑)。

次に非公開サーバなのですが、これは外にある専用サーバです。sshにてやりとりしています。例えば

git clone ssh://user@mydomain.com/home/user/git/ktai-dev

のように取得しておけば、次からここに対して更新を行えます。
git操作時(push/pull等)では、sshのパスワードを聞かれます。ここが面倒ですが、共有リポジトリを作るにはとても面倒な設定作業が必要になるのでとりあえずそのままです。

ここで注意するのは、サーバ内でリポジトリを作成する際、git initで「–bare」を付けないことです。何故かというと、ここに集められたコードを「KtaiLibrary」リポジトリに反映させる必要があるからです。このために、仮の作業ディレクトリを展開して実ファイルを取り出すことを行っています。
そして、必要なファイルを抜き出してKtaiLibraryリポジトリに反映させるための「デプロイツール」があります。これは単純なrmやらcpが列挙されているコマンドスクリプトです。これを叩いてファイルをKtaiLibrary作業ディレクトリに反映させます。その内容でgit commitを行い、その右のgithubリポジトリにpushします。また、ktai-devはそれで別途pushします。

ここの部分についてはもう一つポイントがあります。それは「ktai-devの作業ディレクトリを定期的に最新のものにする」必要があるのですが、自分のmasterに対してコミットが進んできたものに対して、自分に対して普通にgit checkout masterをすると、作業ファイル内に更新されたファイルがあると見なされてcheckoutがされないのです。ここで相当はまりました。結論から言いますと

git checkout -f master

で、作業ディレクトリの内容を問わずに最新のファイルが展開されます。ググってもなかなかこの情報が出てきませんでしたので、気づくのが遅すぎました(^^;。

そしてgithubですが…github内は特に何も行ってなくて、純粋な公開窓口です。多くを語ることもないでしょう。

リポジトリ公開はここまでですが、それとは別にBTSをRedmineにて行っていて、その中でgitリポジトリ(のリスト)を公開しています。これをやるためにはRedmine内にcloneをfetchする必要があり、さらにリポジトリを作っています。そして、cronでリポジトリを定期的にfetchしています(ちなみに、現在fetchを行っているのはKtaiLibraryリポジトリの方であり、図とはちょっと違います。kta-devに対して行うように修正予定です)。

現在非公開サーバ側からgithubにpushする行程は全て手動で行っています。ktai-devのpushについては当面ため込んでから行いたいというのもあるので非公開サーバ側でコマンドを叩く方式でいいのですが、KtaiLibraryに対しては、前述のktai-devに対してのcheckoutや、githubへのpushもデプロイツールに入れてしまおうと考えています。
また、Redmine側のリポジトリもある意味無駄なので、なんとか出来ないかなと思っています。github側にフックできる仕組みがあるみたいなのでそれを活用するか、そもそもgithubを見ずに非公開サーバ側で解決するべきかなとも考えています。

こんな感じで多少他のプロジェクトと比べて複雑かもしれませんが、このように別のリポジトリからの複製物に対してgit管理が出来るとか、間接的にgithub公開できるとか、多少なりともノウハウがお見せできたかなと思います。
何か他におもしろいアイデアがあるようでしたら是非教えてください!

追記(2010.05.01)
Twitterでいくつかアイデアをいただきました!
ありがとうございます。

●非公開サーバ側の.ssh/authorized_keysに公開鍵を登録すればパスワードは聞かれなくなる(@nojimageさん)
これは常識的なものでしたね。当方の技術力のなさが露呈しました(^^;;;

●「git remote add github (githubのURL)」とかすれば、サーバのコンソールからでなくてもgithubにpushできる(@kaz_29さん)
確かにその通りです。早速設定しました!

【KtaiLibrary】Ktai Libraryはテストに力を入れています!

まもなく新バージョンのKtai Libraryがリリースされる予定ですが、いよいよ最終段階に突入しております。

今回のリリースは「安定・信頼性向上」バージョンとも言え、大きな追加機能はないものの、より安心してライブラリを導入していただけるよう開発を進めております。

その中でも特に力を入れているのが「テスト」です。
今まではサンプルサイトが正常に動作するかのみでテストを行っていましたが、それでは不十分ということでCakePHPによる「テストケース」を走らせることにしました。しかしながら、これで十分と満足をしてはいません。Ktai Libraryはさらなる信頼性・安全性を得るために、「えっ、そんなことまで!?」というくらいにテスト項目を増やし、強固なライブラリを目指して頑張っております。

そんなわけで今回は、Ktai Libraryの開発風景の一部を垣間見ていただければと思います。

■システム安全性の確保

まず最初に強化を図っている点としては「システムの安全性」です。
良いサイトを実現するためには、安全なシステム内で稼働させることが重要になります。それはソフトウェアのバグを取り除いたり、サーバに冗長性を持たせるなどの措置を講じることが一般的に行われていますが、KtaiLibraryは「ソフトウェア開発で通常行う安全性テスト」を遙かに凌駕するテストを行っています。

Ktai Libraryの衝突安全テスト

これは、Ktai Libraryが予測不能の方向から急激な圧力が加えられてもシステムの安全性が保たれているかをテストしている写真です。ご覧の通り乗用車はぺちゃんこですが、Ktai Libraryは100%動作を確認しております。

■過酷な環境下での動作テスト

サイトを運用するサーバ…特に携帯サイトを運営するサーバは、データセンターなどで厳重に管理されている事が望ましいですが、時としてやむを得ない状況下での運用も考えられます。自宅に回線をひいて行う場合もあるでしょうし、一時的に野外に設置しなければならない状況になるかもしれません。特に日本は地震大国。地震や津波といった緊急時でもしっかり運用できるような環境を整えるべきです。これは、携帯サイトの宿命であります。ハードウェア面だけでなく、ソフトウェア面からも追求するべきであり、携帯ならではといった過酷な状況下でも不具合無く動作できるようなソフトウェアを目指す必要があるでしょう。
こんな事もあろうかと、Ktai Libraryは先を見越して「もっとも過酷な環境下」でのテストを行っています。それは「宇宙」。宇宙ステーションに実験棟が出来たことは記憶に新しいかと思いますが、Ktai Libraryは、現在宇宙ステーション内でも動作テストが行われている最中です。

宇宙飛行士によるKtai libraryのテスト風景(プライバシー保護により宇宙飛行士に目線を入れております)

現在Ktai Libraryは、89,300時間(暫定値)の宇宙空間での運用に耐えており、世界記録を更新しております。近い将来宇宙空間にて携帯サイトを運用することになっても、Ktai Libraryなら大丈夫です!

■性能テストによるパフォーマンス評価

Ktai libraryは、信頼性・安全性ばかりではなく、性能についてもちゃんと目を向けております。
あらゆるパラメータについて分析を行い、最適なパフォーマンスが得られるようにチューニングを行っております。

Ktai Libraryの計測グラフ。負荷をかければかけるほど未知なるポテンシャルを秘めている

これはktai Libraryの性能を表すグラフですが、一般的な負荷の許容量を超えたあたりから特徴的な波形を描いております。この波形を分かりやすく例えるのなら「スーパーサイヤ人」の状態。限界を超えても動作し続けるKtai Libraryは、他のどんな携帯向けライブラリにも負けません!

ちなみに、このデータを取得する最中、Ktai Libraryが想定を遙かに超えたパワーを生み出したため、そのエネルギーバンドに飲み込まれ、一人の開発者を失いました。しかしながら、この尊い犠牲があってKtai Libraryはここまで進歩することが出来ました。この場を借りてご冥福をお祈りいたします。合掌。

犠牲者の告別式の様子。アーメン

今回ご紹介しているのはほんの一部分ですが、さらに凄いものを目指してECWorksは日夜励んでおります。
今後のKtai Libraryの進化を生暖かく見守っていただけますと幸いです。

※本日はエイプリールフールであり、一部事実と異なるウソの情報が含まれていることがありますがご了承ください。なお新バージョン(0.3)は4月内リリースを目指して鋭意開発中です!