バージョン管理におけるブランチ・マージ機能

プロジェクトの状況上もあるのですが、今現在でやるべき仕事はあまりない状態です。Excelについて(ちょっとだけ)本気出して考えてみた - @ikikko のはてなダイアリーとかやったり、手が空いている時だからこそできることをやってはいるのですが。

で、どうすればこの状況下でももう少し効率がいい作業ができるかなと考えたところ、バージョン管理について思い当たったわけです。Head Firstソフトウェア開発読了! - @ikikko のはてなダイアリーで「後で書きたいな」と言ったところにも関連。


SAPのバージョン管理システム

当ブログで何度か述べてきていますが、私は普段SAPのアドオン開発に携わっています。で、SAPの開発環境にバージョン管理が内蔵されているのですが、これが中々の曲者でして。(デプロイに相当する)移送システムと連携しているのはメリットだと思うのですが、ちょっと他のデメリットが強過ぎるんですよね…。ざっと思いつくだけでも、こんな感じ。

  • SAPシステムの中で閉じており、(Tracなどの)他システムとの連携ができない
  • UIがあまりよろしくない
    • (環境にもよるけど)ホイールスクロールで毎回1秒くらいかかる
    • 比較エディタがあまり賢くない
  • ブランチ・マージ機能がない

上記2つの欠点が目に付いたのでSap2SvnPluginリリース! - @ikikko のはてなダイアリーとかやってみたのですが、今回は3つ目の欠点である「ブランチ・マージ機能」についてちょっと触れてみようかと。

プロジェクトの現状

さて、冒頭でちょっと述べていますが、現在携わっているプロジェクトは運用・保守フェーズでユーザ側でのバグや仕様変更の洗い出しという段階です。この状況下で、開発側で実際に稼動しているプログラムに影響を与えずに修正をかけたいというときがあります。

  • タスクの対応工数を測るために、ある程度まで実装を進めたい
    • 対応工数を踏まえてタスクの優先順位を付けていくため
  • 空き時間を利用して、分かっている範囲で先行着手しておきたい

Subversionなどの一般的なバージョン管理システムでは、ブランチを切って対応する状況と思います。ただ、SAP内蔵バージョン管理システムでは、ブランチ機能が搭載されていません。このため、上記のような状況に対応しようとすると↓のような方法を取らざるを得ません。

  • プログラムをコピーしてそちらを修正する
    • (マージ機能もないために)人間が手動マージをする必要があり、ミスを誘発しやすい*1
  • 本プログラムを他のユーザでは動かないように設定した上で修正をかける
    • 同じソースコードに複数の対応が入って、どれか一つだけリリース(コミット)したいとなるとお手上げ
    • そもそも、本プログラムの修正はあまり好ましいことではない

結局、開発側としてはやろうとしても手を出しにくいという、もどかしい状況となっています・・・><


こんな感じで、ブランチ・マージ機能がプロジェクトの生産性に影響を与えている例を示しました。マージ作業は確かに面倒で煩雑になりがちですが、まったく無いのは困りものなんですよね。。。

*1:現状、私はSubversionでSAPとは別に管理しており、そちらでマージ作業をやっていますが