【サーバ関連】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月内リリースを目指して鋭意開発中です!

【KtaiLibrary】ktailibrary.orgを公開!

かねてからやろうやろうと思って先延ばししていましたが、現在準備しているものがいい感じになってきましたので、それに合わせてやることにしました。
というわけで、「ktailibrary.org」をいよいよ公開します!

現在バグ報告は、当ブログのコメント欄がメインで使用されていますが、そろそろとても長くなってきたことと、情報の整理やオープン性が求められてきているのかな? ということで、まず手始めとしてBTSを公開することにしました。まだ何もない状態ですが、以後はこちらの方で報告いただけますと幸いです。

実は「ktailibrary.org」ドメインはず~っと前から取得はしてあったのですが、放置状態でした(^^;。ようやくお披露目できて良かったです。

また、サイト内を進んでいただきますと「おや?」と思うことがあるかもしれません。先日の「Ktai Library勉強会」に参加された皆様、もしくは福岡遠征で「プチOFF会」に参加された皆様でしたらもうお分かりですよね! まもなく発表できると思われる「バージョン0.3」に併せて、「ktai-dev」というプロジェクトも公開いたします。

これは、Ktai Libraryの開発環境も公開してしまおうというもので、つまりどういう事かと言いますと早い話が「Ktai Library開発を皆様にご協力いただこう」というわけです(^^;。いずれは「コアデベロッパー」的な方を募集したい所ですが、そこまでのプロジェクトではないかもしれないですしこちらも準備が出来ていませんのでまだ先の話ですが(いや、「我こそは」という方は大歓迎です)、githubでpull requestしていただきやすい形になっていますので、是非コード修正をご協力いただきたいです。

また開発環境は、つまるところKtai Libraryのインストール済みCakePHPのわけで、携帯サイト制作のテンプレートとしても利用できます。おそらく無設定で最も簡単な携帯対応ページが表示できると思いますので、これをベースに開発しても良いかもしれません。

なおKtai Libraryのバージョン0.3の詳細に関してはまた後日ということで。
こちらの方も是非ご期待ください。

【KtaiLibrary】バージョン0.2.3公開

緊急で申し訳ございませんが、0.2.3版をgithubにて公開します。
1日に2回バージョンアップが行われることになってしまい大変に申し訳ございません。

app_controller.php.ktai内のリダイレクト処理を、現在開発中の0.3から持ってきたのですが、誤って開発途中のコードを挿入してしまいました。これでも一応動くのですが、urlをarrayで渡した場合にエラーが出ます。

それ以外は変更がありませんので、0.2.2ではなくこちらをご利用いただきますようお願いします。

【KtaiLibrary】バージョン0.2.2公開

バージョン0.2.2を公開しました。
githubよりダウンロードできます。

今回は3つの不具合修正を施しました。

1つ目は、SoftBank携帯の新機種でアクセスした場合、エラーが出てしまう問題を対処しました。
これは、最新機種の機種情報がテーブルに存在しないためで、本来ならdefaultの設定を読みに行くのですが、SoftBankのテーブルにはデフォルトも存在していなかったためにエラーが発生していました。最新機種の情報を追加するとともに、デフォルトの情報も追加しました。

2つめは、最近のCakePHPのバージョンアップでsessionの挙動が変わってしまい、session定義のファイルを2度読みするようになったため、中で行っている関数定義で不具合が出る件を対処しました。関数部分は2度読みを行わない処理を入れました。

3つめは、かねてから問題の出ていたredirectを修正しました。これは次期バージョンの0.3で作成していたものを反映させたもので、ルーティング情報にあるカスタムの遷移と外部サイトを正しくリダイレクトできるようにしました。

0.3のリリースに合わせようかと思っていたのですが、深刻気味の3つの不具合を今回緊急でアップしました。既にライブラリをご使用の方は、少なくとも「lib3gk_machine.php」を本バージョンのものと差し替えてご使用いただきますようお願いします。

【追記】(2010/03/21)
バージョン0.2.3を公開しました。リダイレクト処理の修正が不完全だったため、こちらは使わないようにしてください。

【KtaiLibrary】Ktai Library勉強会楽しかった!

昨晩、「Ktai Library勉強会@関東」がE2さんにて行われました。
まずはお集まりいただいた皆様&スタッフの皆様どうもお疲れ様&ありがとうございました!

CakePHP関連のイベントは色々ありましたが、1冊の本がベースで、しかもそれに準じて開発していく形式のイベントは今回初めてだったため、大変におもしろかったです。なんというか、従来のカンファレンス形式は「聞くだけ」なのに対し、自分で手を動かす「ワークショップ」形式は達成感のようなものが得られる点、そして本をベースにすることにより、解説を聞くことで作業が中断してしまうことが無く自分主導で進捗が得られる点にメリットがあるかなーと感じました。逆に、開催中は大変に静かになるため、個人的には全く落ち着かないのですが(笑)。

誤植関係が良く見つかってまあお恥ずかしい限りですが、それとは別に、また例によって環境依存系のトラブルが多発しまして、進捗がなかなか得られなかった方もいらっしゃいました。そのトラブルとは、「Firefox3.6 & FireMobileSimulator1.1.10でdocomo・au表示の際にバイナリ絵文字が表示されない」というもので、Windows, Mac関係なしに出ていました。バイナリではなくて数値表現にすると出てくるため、ブラウザ内で表示トラブルだと思うのですが…

まあ2時間では限界があり、結局セットアップで終わってしまった方が多かったのではないかと思いますが、とりあえず皆さん絵文字が表示できていたみたいなのでホッと胸をなで下ろした感じです。

後半は懇親会というか、ピザ&ビール片手に雑談会でした。
CakePHP1.3の新機能系の話や、symfonyやCodeIgniterとCakeとの思想の違いのような話、Cakeの未来はどうなる?的な話等々で盛り上がりました。
そして、当方でざっくりと「Ktai Libraryの今後について」をご紹介。
詳細についてはまたブログの方で書かせていただきますが、現在開発を進めている0.3の話などをさせていただきました。
そしてkaz_29さんの方から、現在目下制作中の「ExtJSプラグイン」ですがこれが大変に素晴らしい!ブラウザOSっぽいことが出来たりするのですが、Cakeのアプリのユーザインターフェースががらりと変わりそうなイノベーションを感じる!

気がつけば終電を気にしなければならない時間まで経過してしまいましたが、最後に記念撮影をして終わりました。

参加メンバー全員で記念撮影

まあ運営側にはいくつか課題点はあるのですが、こういった勉強会スタイルはもっと数が増えたらいいなと思いました。普通にCakePHP勉強会をやっても「さて何を勉強しよう」みたいになっちゃうと思いますが、ある程度的が絞れるので。スタッフ間で「Model勉強会、とかみたいにしても十分需要あるかもね」みたいな話とかもしました。まあ今回もたくさんある手法の1つだと思うのですが、いろいろなものを試してみたいと思います。

まあそんなわけで次もあると思うので、今回参加された方、逃した方も是非宜しくお願いします。

【KtaiLibrary】「Ktai Library勉強会」が開催されます!

当方で執筆しました「PHPで作る携帯サイト デベロッパーズガイド」をお手本にCakePHPで携帯サイトを制作するための勉強会が、来週月曜日(3/8)の19:30から開催されます!

▼Ktai Library for cakephp 勉強会@関東やります
http://yashio.wordpress.com/2010/03/02/ktai-library-for-cakephp-%E5%8B%89%E5%BC%B7%E4%BC%9A%E9%96%A2%E6%9D%B1%E3%82%84%E3%82%8A%E3%81%BE%E3%81%99/

▼Ktai Library for cakephp 勉強会@関東(申し込みはこちら)
http://atnd.org/events/3413

私の方からは、今後のKtai Libraryについて少ししゃべらせていただきます。
また進行にかかわらず、もし本書もしくはKtai Library、その他全般で分からない点等がありましたらご質問いただいて構いません。

Cakeの勉強会で、書籍をベースに勉強会を開催するのは初めてだと思いますが、携帯に限らずCakePHPを始めて間もない初心者の方でもお気軽に参加できる内容だと思います(一応参加条件としてCakeでの実装経験が必要ですが)。
是非ご参加いただけますと幸いです。

なお、勉強会の性質上、当書籍が必要になります。
お持ちでない方は、是非こちらからお買い上げいただけますと幸いです(宣伝)。

アマゾンのサーバでエラーが起こっているかもしれません。一度ページを再読み込みしてみてください。

【CakePHP/KtaiLibrary】「PHPで作る携帯サイト デベロッパーズガイド」刊行します!

icon_ktai以前に予告していたものなのですが、なんとか予定日に入稿されたようですので早速告知させていただきます。

CakePHPに、当方で発表しています「Ktai Library」を組み合わせて携帯サイトを制作する方法を解説した「携帯サイト制作本」が、いよいよ12/23頃に書店に並ぶことになりました!

PHPで作る携帯サイトデベロッパーズガイド_表紙

【書名】
PHPで作る携帯サイト デベロッパーズガイド

【出版社名】
秀和システム

【著者名】
滝下 真玄

【価格】
3,000円(本体価格)

【発売日】
2009年12月23日頃

内容は、前半は携帯サイト制作に必要な情報をまとめ、後半は「携帯ショッピングサイト」を題材にして制作過程を順に追って説明していく、という感じです。
今まで「フレームワークを用いた携帯サイト制作」を扱った書籍がなかったので、かなり冒険的な内容と言えますが、これも「Ktai Libraryがあってこそ」実現できたのではないかと思います。
また、サイト制作の実録を掲載したことで、今までフレームワークそのものの使い方を解説した書籍が多かった中で、より実践的な参考書籍として出せたかと思います。

価格が高くなってしまったのは、ページ数が600ページ弱と大変に多くなってしまったことで単価が上がってしまいました(ゴメンナサイ)。が、Ktai Libraryの使い方については勿論のこと(リファレンスマニュアル収録)、AuthコンポーネントによるユーザログインやセキュリティコンポーネントCakeShell(CakeSchema含む)等のCake機能の活用、MediaPluginQdmailといった有用なツールの活用、そして郵便番号データベースによる住所の省入力・空メールメールマガジンといった携帯ならではの機能の実現など、盛りだくさんの内容になっているのではないかと思います。
どちらかというと「携帯サイト制作をしたい」あるいは「これからCakePHPを使っていきたい」という方向けに書いていますが、日頃Cakeを使っている方でも、携帯サイト制作の実例としてお読みいただける本になったかと思います。サンプルサイトは「管理側」「公開側」とPCサイト、携帯サイト両方を同時に作っていきますので、それぞれの作り方の違いについても理解しやすいかなーと思います。

ちなみに、タイトルが「PHPで~」となっているため、CakePHPカテゴリで書店に並ばれないかもしれません(帯には一応書いて あります)。PHPコーナー、もしくは携帯コーナーでとびきりぶ厚い本がありましたらそれですので(汗)、お手にとって、できればそのままレジにお持ちく ださい(笑)。

個人的には、初めての書籍化ということで伝えきれなかった点、至らない点もあるかと思いますが、「CakePHPで携帯サイトはバッチリいけるぜ!」あるいは「CakePHPってなかなか良いぜ!」が伝われば、大変に嬉しいです。また、本書にて携帯サイト制作がより身近になってくれれば幸いです。

【追記】(2009/12/19)
Amazonで購入できるようになりました。
下記からお求めになれます。

アマゾンのサーバでエラーが起こっているかもしれません。一度ページを再読み込みしてみてください。

P1000035
紀伊國屋書店新宿本店の様子

【追記2】(2009/12/25)
紀伊国屋さんの店頭で並び始めているようです。
ネットショップでも購入できます。

■2009/12/25現在で「在庫有り」の店
札幌本店 仙台店 川越店 流山おおたかの森店 新宿本店
新宿南店 笹塚店 大手町ビル店 北千住マルイ店 ららぽーと豊洲店
横浜店 ららぽーと横浜店 梅田本店 本町店 京橋店
泉北店 堺北花田店 高槻店 加古川店 川西店
大津店 富山店 福井店 クレド岡山店

【追記3】(2009/12/25)
ジュンク堂池袋本店にも在庫があるようです。
ネットショップでも購入できます。

【追記4】(2009/12/26)
Amazonがようやく「在庫有り」になったようです。
発行部数の関係で、大手書店以外にはなかなか置かれないかもしれないそうです。

【追記5】(2010/2/19)
書評をいただきました。ありがとうございます!

▼[読書メモ]PHPで作る携帯サイトデベロッパーズガイド
http://go2childcare.blog95.fc2.com/blog-entry-403.html

【追記6】(2010/4/22)
書評をいただきました。ありがとうございます!
タイトルについては色々と大人の事情があった、とだけ言っておきます(笑)

▼余計なお世話かも知れないけれど、これタイトルで損してるんじゃね?「PHPで作る携帯サイトデベロッパーズガイド」
http://www.kantenna.com/info/2010/04/php_3.php#more

【CakePHP/Ktai】近日発表予定[CakePHP/Ktai]Coming soon…

icon_ktaiCakeMatsuriのワークショップ(実務者コース)にて、私のセッションに参加された皆様は既にご存じかと思いますが、近日中にちょっとした発表ができるかと思います。
現在最終段階まで来ていまして、それらが無事に終わり次第ブログで正式告知させていただきたいと思います。

ちなみに、Ktai Library0.3の件とは別件です。icon_ktaiThough everybody who participated in my session with a workshop of CakeMatsuri (a business person course) already knows it, I think that small announcement will be shown soon.
I come to a last stage now. If the work was over, I intend to inform you of it with this blog.

By the way, it is not Ktai Library0.3.