同時編集しよう


IT地方エンジニア Advent Calendar 2018 25日目の記事ですが、地方関係ないです。最終日に穴が空いていると締まらないかな~と思って書きます。

先日Visual StudioのLive Shareに感動したので、ちょっとエモいことを書きたいと思います。私はアジャイルとかモダンな開発経験がないので、「そんなん当たり前やろ」みたいなアレかもしれませんが、ご容赦ください。

バージョン管理システムの歴史はチーム開発の歴史、同時編集はチーム開発の未来像

私はこれまでに4つのバージョン管理システムを使ってきました。「VSS」「CVS」「Subversion」そして「Git」です。思うに、チーム開発の歴史はバージョン管理システムの歴史であったように感じます。

私が最初に触れたのはVSSです。VSSではソースコードのロックを取得し、排他した上でコーディングします。つまり、チーム開発でありながら、ソースコード単位・機能単位に担当者が明確に別れており、独立して開発していました。ついでに変更履歴も管理されていなかったような記憶があります。

CVSでは変更履歴こを管理されていますが、ファイルごとにバージョンが積み上がっていくスタイルです。ある時点であっちのファイルは「バージョン2」、こっちのファイルは「バージョン10」みたいな感じですね。リポジトリの状態を横断的に保存するためにはタグを打つ必要があります(このため、リリースの際にタグを打ち忘れるとえらいことになります)。このため、まだまだソースコード単位に担当が別れていたイメージがあります。

Subversionではリポジトリ全体をひとつの「リビジョン」で管理するようになりました。ようやく「俺のソース」と「お前のソース」が一つの時間軸を共有するようになったわけです。しかし、Subversionは集中型バージョン管理システムですので、コミットするにはそれなりのモノになっている必要があります。開発途中の、コンパイルエラーになるようなファイルをコミットすると他の開発者に迷惑がかかります。このため、一つの改修が終わるまで(コミットするまで)はそのソースコードは担当者のものでした。

分散型バージョン管理システムであるGitは、「俺のユニバース」と「お前のユニバース」がなんか…こう…複雑に入り組んでいる感じですね。「俺のユニバース」であればコンパイルエラーになるソースコードをコミットしても何ら差し支えないですし、それをGitHubやGitLabなどのWebUIを持つリポジトリにPushすれば、他の開発者からフィードバックを得ることができます。また、強力なマージ機能とPullRequestベースの開発フローによって、一つのファイルに対して複数人がコミットすることも可能です。このため、開発途中のソースコードであっても「チーム開発」の恩恵を受けることができます。でも、この恩恵を受けるためには「コミット」が前提にありました。

それに対して、同時編集はコミット以前から「チーム開発」の恩恵を受けることができます。それはペアプログラミングかもしれないし、モブプログラミングかもしれないし、はたまた、一つのクラスを複数人で分担して作り上げていくことだってできます。複数のリソースを使って一つのことを成すなんて、まるでグリッドコンピューティングです。Cellです。ぶるぁぁぁぁ!!!!!

ただし、コミットやPRとの棲み分けをルール化する必要があると感じます。コミットログとして残し、PRで指摘されるべきものもあるはずですから。

Live Shareがあればリモート勤務できるか

私は「プライバシーなど不要!人類補完計画!液体人間!けるる~!」派なので、開発メンバ全員が常時Live Shareでお互いにシェアしていれば地理的な制約はなくなるんじゃないかと考えたのですが、そう簡単にはいかないようです。

ガシガシカーソルが動いているときはあたかもそこに居合わせている感覚になり、「もう明日から出社する必要なんてないんじゃあ~^^」と思うのですが、ちょっとカーソルが止まると「みんなどこに行ってしまったの…?(´;ω;`)」という不安感がこみ上げてきます。正に リモートワークやってたら鬱っぽくなった 状態。

でもまだまだ始まったばかり、可能性は確実に感じます。地理的に恵まれていない「地方エンジニア」だからこそ積極的に使っていくべき、そんなこじつけで終わります。