ソフトウェア

SQLiteがバージョン管理システムとしてGitを採用しない理由


GitはLinuxカーネルのソースコード管理に用いるために開発された分散型バージョン管理システムで、GitリポジトリをホスティングするGitHubのユーザー数は1億人を超えます。一方、軽量データベースのSQLiteの開発においてはGitではなくFossilというバージョン管理システムが利用されており、SQLiteの開発陣が「なぜGitを使用しないのか」という理由を公式サイトで説明しています。

Why SQLite Does Not Use Git
https://sqlite.org/whynotgit.html


なお、Fossilがどんな機能をもつバージョン管理システムなのかについては下記の記事を読むと分かります。

GitとGitHubの機能をひとつのバイナリに詰め込んだ「Fossil」レビュー - GIGAZINE


1:Gitは適切な状況認識を提供しない
SQLiteにどんな変更が加えられたのかを確認したい場合、タイムライン画面を見れば全てのブランチに関する変更の概要が表示され、必要に応じて好きなだけ詳細を開く事ができます。外出中にスマートフォンから確認する事も可能です。


一方GitHubやGitLabには同等の機能が存在しません。最も近いと言えるのはネットワークグラフですが、レンダリングが遅い上に詳細を確認できないという欠点があります。コミットビューではより詳細な情報が提供されるものの一度に1つのブランチしか表示できないため最近の変更を全て確認するには手間がかかります。


Gitのユーザーの中にはサードパーティー製のグラフィカルビューワーを導入して最近の変更点を表示させている人もいますが、サードパーティー製ということで個別にインストールして管理する必要があり、またローカルリポジトリを同期する必要があることからスマートフォンで簡単にプロジェクトの状況を確認することができません。

2:チェックインの後継者を見つけるのが困難
Gitを使用している場合、特定のコミットよりも前に何が起こったのかをさかのぼることは簡単ですが、逆に特定のコミットからどのようにコードが変更されていったのかを確認するのは一筋縄ではいきません。Fossilには特定のメジャーリリースから派生した全てのチェックインを表示する機能があり、ウェブ上で簡単に分岐の状況を確認可能です。


さらにFossilのチェックイン情報ページには「Context」という項目があり、前後のチェックイン情報が時系列で表示されるため、ユーザーが簡単に状況を認識できるようになっています。


3:Gitは複雑すぎる
Gitを使用して開発を行う場合、下記の全ての項目に注意を払う必要があります。

・作業ディレクトリ
・ステージング領域(index)
・ローカルhead
・リモートheadのローカルコピー
・本当のリモートhead


一方Fossilでは作業ディレクトリおよび作業中のチェックインについてのみ考えるだけですみ、開発者の脳のリソースをソフトウェアの開発作業により多く使用することが可能です。

4:Gitは過去のブランチ名を追跡しない
Gitはコミット履歴の完全な有向非巡回グラフ(DAG)を保持していますが、ブランチタグはローカル情報であり、ブランチが閉じた後は同期されなくなります。そのため過去のブランチのレビューが面倒になる場合があります。

例えば顧客に過去の「prefer-coroutine-sort-subquery」ブランチがどうなったのかを聞かれ、バージョン管理システムの履歴を調べて答える場合を考えてみます。

Gitの場合、2017年9月30日に最後のコミットがあったことを確認できますが、その後どうなったのかは表示されず、何が起きたのかを理解する際にはほとんど役に立ちません。


Fossilでは2017年9月30日のコミットの後、Gitでいうmainにあたる「trunk」ブランチにマージされていることが一目瞭然です。


サードパーティー製のツールを利用することでこうした情報を表示することが可能な場合もありますが、必要な情報を取得するのにサードパーティー製のツールを使用する必要があるという事実はコアシステムにとってあまり良くないとのこと。

5:Gitは管理の手間がかかる
Gitは複雑なソフトウェアであり、Gitをワークステーションに配置したり新しいバージョンにアップグレードしたりする際にはインストーラーが必要です。また、Gitサーバーの立ち上げは簡単ではないため多くの開発者がGitHubやGitLabなどのサードパーティー製のサービスを利用し、プロジェクトに依存関係を追加しています。

一方Fossilは単一のスタンドアロンバイナリで動作するため、インストールはPATHを通すだけでOK。一つのバイナリでGitの機能に加えてGitHubやGitLabの機能も含まれており、Wikiやバグ追跡、フォーラムなどを利用できます。数分でFossilのコミュニティサーバーを起動できるほか、GitLabなどのサーバーよりもスペックの低い環境で動作可能です。


管理の手間が少ないため、開発者がソフトウェアの開発作業により多くの時間を割けるようになります。

6:Gitはユーザー体験が悪い
Gitには非常に多くの機能があり、様々な状況に対応できるようになってはいるものの、実際のところそうした機能を使いこなせる開発者は一握りです。多くの開発者にとってGitが難しすぎることを誇張して表現した「Gitの使い方は数個のコマンドを暗記して打つだけ。エラーが出たら作業内容を別の場所に保存してプロジェクトをリセットする」という風刺マンガが存在しているように、使いにくさを感じている開発者は多いはずです。

ソフトウェアの開発は難しく、かなりの集中力が必要です。優れたバージョンシステムは開発者に不満を与えるのではなく支援を提供するものでなくてはいけません。Gitは登場以降改善され続いていますが、まだまだ道のりは長いとのこと。

なお、FossilとGitの詳細な比較についてはFossil Versus Gitのページで確認可能となっています。

この記事のタイトルとURLをコピーする

・関連記事
バージョン管理システム「Git」がどのように発展してきたのかを可視化した「Git: An Interactive Development History」 - GIGAZINE

Gitの操作を間違ってしまった時に簡単に元に戻せる「git undo」を使う方法 - GIGAZINE

混乱を引き起こしがちなGitの用語まとめ - GIGAZINE

私たちが何気なく使っているソフトウェアはどのように開発されているのか? - GIGAZINE

Metaの大規模ソースコード管理システム「Sapling」がオープンソース化 - GIGAZINE

in ソフトウェア, Posted by log1d_ts

You can read the machine translated English article here.