More Related Content
More from Yuichi Tateno (6)
デブサミ2009 はてなの開発戦略
- 2. 自己紹介
舘野祐一
id:secondlife
はてなブックマークリードプログラマ
Perl, JavaScript ...
社内開発環境の整備
開発環境改善大好き!
Development Environment Conference 開い
たり
- 7. そもそも git とは
分散 VCS
好きなだけレポジトリの複製
どこからでもコミット
(svn と比べて)動作が高速
低コストなブランチ作成
賢いマージ
SHA1 によるデータ管理
リビジョン1000などという概念はない
- 11. しかし…
実際に業務で使うか?
cvs/svn に比べて操作難しい
たくさんのコマンド
分散の概念の理解
リモート?ローカル?はたまた別のレポジトリ?
windows の GUI クライアントがない
デザイナー・ディレクターに使ってもらうには酷
業務への導入はまだまだ先かな
- 24. git から svn へ
svn からのデータコンバート
git-svn で驚くほど簡単に
デプロイ
capistrano
にちょっと手を入れレシピ書き
svn と比べ、デプロイ速度が1000%ぐらい高
速に(当社調べ)
- 25. 構成の変更
svn
プロジェクトすべて一つのレポジトリ
git
プロジェクトごとに細かく作成
- 29. はてなでのgit 開発の流れ
git checkout -b example
コード書いて適宜 git commit
リモートにブランチ反映したい / git-publish-branch
リモートからブランチに反映 / git pull か git pull --rebase
git diff master...example
master に反映
git merge master # master からマージ, コンフリクト解決
git checkout master
git merge example # example から master へマージ
コンフリクト発生を防ぐ
- 30. git 運用はスムーズか?
やっぱり git 難しい
覚えるコストが svn と比べて高い
よく嵌る
誤った方法でリポジトリ変更・ push すると悲
惨に
master に merge するときコンフリクト祭り
windows クライアント無い
デザイナ・ディレクタが VMWare+Linux から..
TortoiseGit に期待
- 34. スクリプト例
社内IRCにコミットを知らせる
module Grit::Hooks
class PostIrc < Hook
def execute(refname, oldrev, newrev)
13:29:43 gittan:
commit = @grit.commit(newrev)
[projects/hatena-bookmark]
# ...
yuichi tateno: ヘッダ色固定
irc.post('git', message)
https://git.local.hatena.ne.jp/git/projects/ha
tena-bookmark/commit/71abae8949b
- 35. ブランチと連動したドメイン作成
git のブランチをリモートに push
開発サーバのドメインとブランチ
をひも付け
$ git checkout mobile
# カスタム capistrano タスクを実行
$ cap @vhost
vhost:auto_create:mobiletest
http://mobiletest.local.hatena.ne.jp/
- 41. git ブラウザ
URL を git コマンドっぽく
/bookmark/diff/HEAD..HEAD~
/bookmark/diff/e87bb6f3...81f0d24ec2b
- 44. git サーバ運用
git ユーザを作ろう
git@hostname:/projects/path
パーミション周りの問題のため
git ユーザ管理
~/.ssh/authrized_keys でユーザ管理
git ユーザのログインシェル
git-shell ・git 関係のコマンドのみ通してくれ
るシェル
- 45. まとめ
git 導入から始まり、とても便利に
git のブランチ最高
svn でも同じことができる・けど実運用に耐
えれるかどうかが重要
はてなアイデア・あしか・git
git の導入コストは高い
そんなにオススメはしない
けど、分散VCS の波はもう来ている
今のうちに使っておくのは吉
- 58. 既存の MVC の問題点
ORM に処理が集中
データソースが RDB だけならまだ良い
他のデータソースを扱う場合は?
適当にクラス作成?
コントローラに実装?
- 59. MVAC
MVAC
Model / View / Applicaiont / Controller
アプリケーションレイヤの作成
コントローラとモデルの間に挟んで抽象化
- 62. サービス層
ドメインロジックの実装
例:人気エントリーの取得
my $service = H::B::S::Hotentry->new;
$service->threshold(5);
$service->category('life');
my $entries = $service->entries(0, 10);
// 10件取得
- 70. 現在は
100 個以上のテストファイル
2000 個以上のアサーション
all tests successful.
files=103, tests=2077, 327 wallclock secs
( 1.81 usr 0.59 sys + 170.40 cusr 110.59
csys = 283.39 cpu)
result: pass
- 72. fixture の高速化
YAML -> ORM -> RDB
数百件のデータを ORM 経由で insert
遅い
テストメソッドごとに走る
テスト -> 実装 -> テスト -> 実装
テストの時間 MOTTAINAI !
- 73. 局所高速化
YAML -> ORM -> RDB ->
mysqldump
YAML のタイムスタンプが変更無い
mysqldump のデータ insert 一行
fixture テストが 10秒→4秒に
全体のテストも 10分→6分に
life-changing