BlogCakePHPを中心としたサイト開発情報をメインに公開。新しもの好きなので時々製品レポートなんかも。Library」周りで整備をした、ソースコードの公開方法について晒してみようと思います。Library」は少々特殊かもしれませんが「主にCakePHP内で利用されているライブラリ」ではありますが一応PHP全般で利用が可能な携帯サイト向けライブラリです。それぞれのCakePHP環境に「上書きコピー」で適用していただく方が利便性が高いと思い、CakePHPに実装した形ではなく、必要なファイルのみをアーカイブにまとめて公開していました。ところが、当方では基本的にCakePHP内に実装した形で開発を行い、そこから必要なものを抜き出して公開イメージを作っていました。この作業が非常に面倒で、そのうちバージョン管理ミス等も起きるだろうと考え、なんとかしたい要因の一つとして前々から方法を模索していました。Libraryを生成するような仕組みが必要になってきました。共にgithabにて公開するつもりでしたので、つまりgitでバージョン管理されたものについて、いくつかの操作を行って連携していく必要があります。そんなわけで、どうしようかとずっと悩んでいた開発環境とリポジトリ周りの構築についてようやく実用的なものが出来たので、「ktai-dev」のリリースと共に運用を始めた次第です。簡単に図にしたものをご覧ください。ご覧の通り、gitリポジトリがた~くさんあるのですが、分散管理できるgitならではという感じかもしれません(笑)。左はローカル環境です。自宅のデスクトップと持ち運びようのノートPCに、それぞれVMWareServerを稼働させ、VMでFedora11を動かしています。よるktai-devの作業ディレクトリがあり、その右側にある非公開サーバ内にあるktai-devリポジトリに対してのみコミットしています。ここについては、最初は非公開サーバにリポジトリを置かずにUSBメモリで作業ディレクトリを共有していたこともあるのですが、何か事故があってはいけないと思いやめてそれぞれでcloneするようにしました。他の作業者が増えた場合にも対応に困る場合もあるので。欠点もあり、「作業途中で続きをデスクトップとノートで行き来できない」点でUSBメモリ方式と比べて使い勝手が悪い点があります。当方は「電車開発」を常時行っていて、作業が未完のまま帰宅するのが当たり前なので。途中のままコミットするのが気持ち悪いので、仕方がないのでノートで作業を完結するようにしています(笑)。次に非公開サーバなのですが、これは外にある専用サーバです。sshにてやりとりしています。ssh://user@mydomain.com/home/user/git/ktai-devのように取得しておけば、次からここに対して更新を行えます。git操作時(push/pull等)では、sshのパスワードを聞かれます。ここが面倒ですが、共有リポジトリを作るにはとても面倒な設定作業が必要になるのでとりあえずそのままです。initで「–bare」を付けないことです。いうと、ここに集められたコードを「KtaiLibrary」リポジトリに反映させる必要があるからです。このために、仮の作業ディレクトリを展開して実ファイルを取り出すことを行っています。必要なファイルを抜き出してKtaiLibraryリポジトリに反映させるための「デプロイツール」があります。これは単純なrmやらcpが列挙されているコマンドスクリプトです。これを叩いてファイルをKtaiLibrary作業ディレクトリに反映させます。commitを行い、その右のgithubリポジトリにpushします。ktai-devはそれで別途pushします。ここの部分についてはもう一つポイントがあります。masterをすると、作業ファイル内に更新されたファイルがあると見なされてcheckoutがされないのです。ここで相当はまりました。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さん)これは常識的なものでしたね。(githubのURL)」とかすれば、サーバのコンソールからでなくてもgithubにpushできる(@kaz_29さん)確かにその通りです。他の方のプロジェクトにforkを刺したりするのですが、そのまま放置されていて知らない間に本家の方でバージョンが上がっていたりして、自分のリポジトリが古いままって事があります。gitの事を全く知らなかった頃、やり方が分からなくて結局removeしてしまったりしたのですが、やっと更新方法が分かったのでmemo書きです。仮にhogeさんのfugaプロジェクトをgithub内でforkしたとしましょう。hogeさんがpushして、本家の方は最新版、ところが自分のfork刺したやつは古いまま、という状況です。この場合、次のようにすることで最新版にすることが出来ます。pushまあ、よくよく考えてみればごく当たり前なのかもしれませんが(^^;;;。(木)【KtaiLibrary】githubにて開発ソースコードを公開!前々からやりたかった、開発コード公開を試しにしてみました。githubにて、現状の最新ソースをダウンロードできます。KtaiLibraryhttp://github.com/MASA-P/KtaiLibrary/tree/master自分も実はgitを使うのが初めてでして、きっかけとしてはgit習得目的があるんですけど(笑)。今後のKtaiLibraryの方向性として、完全オープンなプロジェクトとしてやっていきたいと思っていますので、まーその先取りも兼ねています。requestしていただけますと幸いです(でも反映させる方法がまだわかりません。勉強しておきます...)。