tokuhirom's Blog

Carton 1.0 時代の Web アプリケーション開発フロー

Carton 1.0 がでたところで、Web アプリケーション開発のフローを一度見直しておきたい、そんな人も多いでしょう。 そんな方のために僕のやりかたをまとめました。各社、議論の叩き台にしていただければよろしいかと存じます。

もっとも重要なことは、、

Carton を使うときに、僕が最重要だと思うことは、できるだけ本番環境と開発環境の環境をそろえるということです。CPAN モジュールが本番と開発でバージョンちがうから挙動がちがってた!! なんてのは時間の無駄ですし、よくないことですからね。

ですから、各開発環境と本番環境をできるだけそろえることを意識していきたいとおもいます。

DarkPAN は使ってない

そんなに DarkPAN 的なのを使うほど、DarkPAN 的なオレオレモジュールがないので、git submodule で管理しています。

【201308061241update】 @songmu さんから聞かれたのですが、submodule にいれてあるモジュールは、ln で lib/ にリンクはってます。

新規で開発を始めるとき

amon2-setup.pl なり oreore-setup.pl なりを実行して、cpanfile が生成されますよね。それを元に依存モジュールをインストールすればいいだけです。

% carton install

とするだけです。こうすると、local/ 以下に cpanfile に記述された依存モジュールたちがいい感じにインストールされます。

この際、cpanfile.snapshot というファイルが生成されます。このファイルにインストールされた tar ball のパスなどがすべて記述されておりますので、こちらのファイルを元に local/ は再生成することが可能です。再生成可能なものはレポジトリに保存する必要はありませんので、local/ は .gitignore に記述しておきましょう。

リポジトリをチェックアウトして開発を継続する場合

さらの状態から、リポジトリをチェックアウトして開発を継続するケースもままあります。とくに、複数の人が開発にかかわる場合には、local/ がない状態からはじめなければなりませんね。

そんな場合には、git clone した後で、

% carton install

とします。こうすると、cpanfile.snapshot に記述されている tar ball たちがインストールされます。

cpanfile を更新したい時の処理フロー

cpanfile を更新した場合など、cpanfile.snapshot の中身を更新したい時もあるでしょう。そんな時は

% carton install

とすれば、はいっていないものはひととおりインストールされます。

更新し終わったら cpanfile と cpanfile.snapshot をコミットすれば完成です。

【201308061238 update】 --deployment オプションはなくても大丈夫と @miyagawa さんから教えていただきました!

最新モジュールにアップデートしたいときの処理フロー

% carton update

とすれば、古くなってしまったモジュールがアップデートされます。

capnfile.snapshot を更新した後は、念のため

% carton check

をうってから、git commit するとよさそうです。 (不要かも)

本番環境にデプロイするときのフロー

git clone してから、

% carton install --deployment

とします。こうすることにより、cpanfile.snapshot にかかれている状態に local/ が復元されます。

デプロイ前に

% carton check

を実行しておくと安心感が増しますね。carton check は、失敗すると exit code が non-zero になりますので、deploy script の中でチェック走らせておくとよいかと存じます。

まとめ

過去のバージョンでは、いまいちバージョンの固定とかがうまくいってるかどうか確信がもてない、というユーザーもいたようにおもうのですが、1.0 では、ビシィッ! っとバージョンがきまっていて、使っていて気持がいいですね。

なお、今日は、くどいぐらい丁寧に説明してみました。