モノノフ日記

普通の日記です

Developers Summit 2009 株式会社はてなの開発戦略 1/2

昨日、最後のセッションだけ聞いてきました。トピックは下の2つでした。

ちょっとメモが長くなったのでトピックごとに記事を分けています。

まずgitの話から。最初はgitってこんなモノだよ、という解説。はてなは完全にgitへ移行したらしいけど、その理由がsvnリポジトリがぶっ壊れたからってのにワロタ。でもそういう機会でも無いとなかなか現存の環境からの移行は進まないだろうな、とも思います。しかしRAID1で組んでて両方のHDDが逝ってたとかなかなか無いような。

はてなのgitの運用はsvnみたいな全員に共通のコミット用レポジトリにpushする方式みたいでした。そりゃ直接各人のツリーをpush/pullするのは運用が難しすぎるよね。

後半の方はgitをこんな感じに使ってます、という事例だったんですがあれはgit触ったこと無い人は意味わからんと思った。特に気になったのはgit-shellで適切なパーミッション設定してあげるのと、ネオあしかの運用周りの話。自分も便利な社内ツール欲しいなと思ってたので参考になりました。Tracがプラグインでgitに対応してるってのは初耳でした。あとデザイナーにどうやってgitを使わせてるんだろうかと考えてたらVMWare+LinuxでWindowsからアクセスさせるという荒業でしたw それでもインターフェースは結局CUIだと思うんだけど更新スクリプトを組んでて「これダブルクリックしてね」とかっていう運用なんだろうか。。

以下、講演時にとったメモ書きです。

Git

  • ブランチ作成低コスト
  • (svnより)動作が高速
  • 賢いマージ
  • SHA1

単一と分散の違い

単一レポジトリ
  • 中央型
  • 基本的には誰でもチェックアウト可能
  • コミットには権限が必要
分散

2008年初頭

  • Railsがgitに移行
  • github

gitを使ってみた

  • コミットしてリモートに即反映とか怖い
  • ブランチ作成一瞬
    • サクっと作れるので便利
  • ちょくちょくコミット
  • 仕事でもgit-svnを利用
  • git厨
  • 数年先にはVCSが主流な予感

実際の業務で使う?

  • cvs/svnに比べて操作がムズイ
    • たくさんのコマンド
    • トレーニングコスト高
  • 分散の概念の理解
  • WindowsのGUIクライアントがない
    • デザイナー、ディレクターに使ってもらうには酷
  • 業務へはまだまだ先かな

gitへ移行できた1つの方法

svnレポジトリが壊れた
  • r35000
  • チェックアウト、コミットできない
  • デプロイできない
  • ssh + rsyncで転送

復旧

  • RAID1で運用
    • HDDが物理的に壊れてた
    • もう片方のFSFSも一部壊れてた

どうしよう

  • もういちどSVNを構築?
  • gitに移行すべき?
    • 運用できそうならgitで
    • 現在のsvnシステムを移行できるか調査

gitへの移行は可能?

  • deploy
    • capistrano2.2でgit対応
    • レシピ書き換えればできる
  • svnからの移行
    • git-svnでディレクトリ単位のコンバートが可能
    • リビジョン指定して取り出せる

gitからsvn

  • データコンバート
    • git-svnで簡単
  • deploy
    • capistranoにちょっと手を入れレシピ
    • svnと比べて速度が1000%くらい高速になった
構成の変更
  • svn
  • git
    • プロジェクトごとに細かく作成

開発のメリット

  • ブランチ
    • ブランチ作成一瞬
    • ディレクトリ変更無しにブランチきりかえ
      • シェルのファイルパスの変更とか気にしなくていい
    • svnの頃は作成が面倒+切り替え重い
      • 実用的でない

作成ポリシー

  • origin/master
    • 本番のデプロイファイルのみ
  • origin/機能ごとのブランチ名
    • 機能ごとにブランチを作成
  • ローカルでは適宜ブランチ作成

ブランチとコードレビュー

  • 適宜レビュー
    • ブランチで簡単においかけれる
  • gitでのコードレビュー
    • git diff master ..barnchname

開発の流れ

  • masterからローカルに同期させて、コンフリクトを解決してからmaster更新する

運用はスムーズか?

  • git難しい
Windowsクライアント無い
  • デザイナ、ディレクターはVMWare+Linuxから
  • TortoiseGit期待

Gitを利用した社内ツール

gitフックフレームワーク
  • コミット時に実行させる
  • プロジェクトごとに別
    • gitから
  • 使用例
    • 社内IRCにコミットを知らせる
ネオあしか
  • タスク管理
  • Rails + git
gitブラウザ
  • チケット管理
  • 社内用途にマッチした機能で実装
gitサーバ運用

まとめ

  • ブランチ最高
  • 導入コスト高い
    • 現状ではそんなにオススメできない