ユニフィニティーのソースコード管理 前編

お役立ち豆知識

はじめに

ユニフィニティーではソフトウェア資産のソースコード管理にGitを使用しています。

著者が入社した2017年時点ではSubversionを利用しており、ブランチの運用は割とキレイに運用されてはいたものの、branch側のコミットが肥大化しtrunkやmasterへのマージ運用が破綻していました。

CTO氏の強い要望もあり、入社後の最初の仕事としてSubversionからGitへの移行を行いました。(著者が単にGit Loveという理由が一番大きいですが)

当ポエムではSubversionからGitへ移行する際に考慮すべき点などをまとめていきます。


 (せっかくなので)著者のSCM遍歴

CVS

著者が新入社員の頃はSubversionなんてものも存在せず、与えられたマシンはSPARCマシン。SCMとしてはCVSぐらいしか選択肢がありませんでした。

* like
  * 特になし
* dislike
  * リポジトリすぐ壊れる(うろ覚え)
  * ディレクトリの扱いがすごく面倒くさかった(うろ覚え)
  * CSVとよく間違えられる

Visual Source Safe

クラサバ(死語)開発黎明期。VB4.0,VB5.0,VB6.0,VC++6.0の開発でイヤイヤ使ってました。今はもうVSSは終わってTeam Foundation Serverになっているようですね。

* like
  * 特になし
* dislike
  * とにかくファイルがすぐ壊れる
  * とにかくリポジトリがすぐ壊れる
  * Unicodeをバイナリとして扱ってしまう

Subversion

今思い返すと、CVS,VSSと比べるとSubversionはエンジニアにとって神ツールでした。著者もSubversionを愛した時期があったことを思い出しました。

* like
 * 中央集権型リポジトリのため考え方がシンプル
 * master,trunk,branchesの考え方がシンプル
 * リビジョンが番号のためわかりやすい
* dislike
 * サーバーの構築がいちいち面倒
 * いまはSubversion用にApache+WebDAV環境を構築するようなことは無いかもしれませんが
 * そのお手軽さに起因し、きちんと運用ルールを決めないと巨大な物置きと化す

Git

Linusが開発したGit。単なるSCMだったGitをGithubが開発者向けプラットフォームとして昇華させたことにより爆発的にエンジニアの支持を得たのは皆さんご存知のことかと思います。

* like
 * Subversionからの移行パスがある
 * ブランチ運用のベストプラクティス(git-flow)がある
 * Subversionと比べてマージがだいぶ楽
 * 分散リポジトリという思想
 * Pull Requestという文化
 * GitというよりはGitHubの功績ですね
* dislike
 * 出始めのころはgit+sshのリポジトリを立てるのに難儀した
 * gitoliteとか
 * 2018年現在では、GitHub,GitLab,Bitbucket,gitbucket,Gitblit等々選択肢に困らない
 * リビジョンがコミットハッシュなので会話からリビジョンが消えた
 * GUIツール(主にSourceTree)が便利すぎてGUIで出来ることしかやれないエンジニアが続出する
 * エンジニアならコマンド使って基本思想を学べ
 * Subversion時代の悪習で「タグを切る」と言う奴がいる
 * タグは打て。切るな。

Gitリポジトリの検討

とりあえず10人ぐらいで使うことを想定してリポジトリのホスティング先を検討しました。

GitHub

先ず候補に上がるGitHub。

$9 x 10person x 12month = $1,080

まぁまぁの出費となるため更に検討。

BitBucket

開発者に人気を博しているAtlassian社が提供するBitBucket。

$2 x 10person x 12month = $240

安価なのでサインアップしました。

が、移行元のSubversionリポジトリが巨大すぎて、git-lfsを駆使してもGitのリポジトリサイズが6G超え。

BitBucketのハードリミットが2Gのため、残念ながら当社の巨大リポジトリは運用できず、断念。

GitLab

GitHubクローンとして進化しつつあるGitLab。

個人ユースには第一の選択肢として上げてもよいサービスですが、企業で使うにはStarterプランが

$4 x 10person x 12month = $480

でした。

迷った挙げ句、IaaS上にUbuntuを立て、Gitlab Community Editionを構築しました。著者が運用ノウハウを持っていたというのが大きいです。

(結局、運用費が¥9000/monthとなり、GitHubとランニングコストはあまり変わらない結果となってしましました。M社のIaaSでこの費用のため、A社G社ではもっと安価に運用できるはずです)

後編に続きます。後編のもくじ(予定)

 

* Gitリポジトリの比較
* SubversionからGitへの移行
 * 実際の手順
 * ハマりどころその1,2,3
* 運用ルール
 * 命名ルール・ブランチ運用ルール・コミット粒度など
* まとめと展望