Bazaar

バージョン管理分散型PythonCanonicalUbuntu開発終了レガシーbzr

バージョン管理ツール

Bazaar

概要

Bazaar(通称:bzr)は、Canonicalが開発した分散型バージョン管理システムで、2005年から2016年まで活発に開発されました。Pythonで実装され、UbuntuやLaunchpadの開発において中核的な役割を果たしていました。GitやMercurialと同時期に開発された第二世代DVCSの一つとして、シンプルで直感的な操作性を重視した設計が特徴でした。しかし、GitとMercurialの普及に伴い利用者が減少し、2016年を最後に新しいリリースが停止。2025年にはCanonicalがLaunchpadからのサポート終了を発表し、歴史的な役割を終えた技術として位置づけられています。

詳細

Bazaar 2025年版は、開発終了により0.1%の最小マーケットシェアとなり、歴史的な意義を持つプロジェクトとして記録されています。Python 2.7依存という技術的制約により、Python 3移行の波に乗れずに取り残されました。Ubuntuディストリビューションの初期開発で重要な役割を果たし、Launchpadコードホスティングプラットフォームでの中央集権的なオープンソース開発モデルを支えていました。現在はBreezyというコミュニティフォークが存在し、Python 3対応と最新機能追加が継続されていますが、新規プロジェクトでの採用は推奨されません。

主な特徴

  • Python実装: 拡張性の高いアーキテクチャとスクリプト連携
  • Ubuntu開発の歴史: Canonical/Ubuntuプロジェクトでの中心的役割
  • 分散型VCS: GitやMercurialと同世代の分散型アーキテクチャ
  • シンプルな操作: 学習しやすいコマンド体系
  • Launchpad統合: Canonicalサービスとの深い連携
  • 開発終了: 2016年以降の開発停止、2025年Launchpadサポート終了

メリット・デメリット

メリット

  • Ubuntu開発での歴史的役割を果たした実績あるシステム
  • Python実装による高い拡張性とカスタマイズ性
  • シンプルで理解しやすいコマンド体系
  • 分散型VCSの初期実装として教育的価値
  • オープンソースとしての透明性と自由度
  • Breezyフォークによる現代的な継続開発

デメリット

  • 開発終了により0.1%の最小マーケットシェア
  • 2025年Launchpadサポート終了で利用継続困難
  • Python 2.7依存による技術的制約
  • 新規採用は推奨されず、移行が必要
  • GitHubやGitLabとの統合は実質不可能
  • セキュリティアップデートやバグ修正の停止

参考ページ

書き方の例

Bazaarのインストール(歴史的参考)

# Ubuntu/Debian での最終版インストール
sudo apt-get install bzr

# Python pip での最終版インストール(非推奨)
pip install bzr  # Python 2.7 が必要

# バージョン確認
bzr version

# 基本設定
bzr whoami "Your Name <[email protected]>"

# 設定確認
bzr config

リポジトリの基本操作(歴史的参考)

# 新しいリポジトリの初期化
bzr init myproject
cd myproject

# Launchpadからのブランチ取得(サービス終了予定)
bzr branch lp:ubuntu
bzr branch lp:~user/project/branch-name

# 他のBazaarリポジトリからブランチ
bzr branch bzr://server.example.com/project
bzr branch http://example.com/bzr/project

# ファイルの追加
echo "Hello Bazaar" > hello.txt
bzr add hello.txt

# すべてのファイルを追加
bzr add .

# ファイルの状態確認
bzr status

# 変更差分の確認
bzr diff
bzr diff hello.txt

# コミット実行
bzr commit -m "Initial commit with hello.txt"

# ログの表示
bzr log
bzr log --line  # 1行表示
bzr log -r 1..5  # リビジョン範囲指定

ブランチ操作とマージ

# 新しいブランチの作成
bzr branch . ../feature-branch
cd ../feature-branch

# または既存ディレクトリでブランチ
bzr init-repo my-project
cd my-project
bzr branch bzr://source.example.com/project main
bzr branch main feature-branch

# ブランチでの開発
cd feature-branch
echo "Feature implementation" > feature.txt
bzr add feature.txt
bzr commit -m "Add new feature"

# メインブランチでの並行開発
cd ../main
echo "Main branch update" > update.txt
bzr add update.txt
bzr commit -m "Update main branch"

# ブランチのマージ
bzr merge ../feature-branch
bzr commit -m "Merge feature branch"

# マージ競合の解決
bzr conflicts  # 競合ファイルの確認
# 手動でファイルを編集
bzr resolve filename.txt
bzr commit -m "Resolve merge conflicts"

Launchpad連携(サービス終了予定)

# Launchpadでの認証設定
bzr launchpad-login your-username

# プロジェクトの登録
bzr push lp:~your-username/project-name/branch-name

# バグトラッキング統合
bzr commit --fixes lp:123456 -m "Fix bug #123456"

# プロポーザルの作成
bzr push lp:~your-username/project/proposed-fix
# Web UIでマージプロポーザル作成

# 他の開発者のブランチ確認
bzr branches lp:project-name

現代的な移行手順(推奨)

# BazaarからGitへの移行
# 1. bzr-fastimport のインストール
sudo apt-get install bzr-fastimport

# 2. Bazaarリポジトリの準備
cd bzr-repository
bzr fast-export --export-marks=marks.bzr --git-branch=master | \
  git fast-import --export-marks=marks.git

# 3. Gitリポジトリの確認と最適化
git log --oneline  # コミット履歴確認
git gc  # ガベージコレクション

# 4. リモートリポジトリへプッシュ
git remote add origin https://github.com/user/repository.git
git push -u origin master

# BazaarからMercurialへの移行
# hg convert 拡張を使用
hg convert bzr-repository hg-repository

# 移行の確認と検証
cd hg-repository
hg log --template '{rev}: {desc}\n'

Breezy VCS(現代的な後継)

# Breezy のインストール(Python 3 対応)
pip3 install breezy

# Bazaarリポジトリの現代化
brz init new-project
cd new-project

# 既存Bazaarリポジトリのアップグレード
brz upgrade bzr-repository
cd bzr-repository

# Breezy での基本操作(Bazaarコマンドと互換)
brz add filename.txt
brz commit -m "Updated with Breezy"
brz log --line

# Git互換モード(実験的)
brz init --git
brz add .
brz commit -m "Breezy with Git backend"

歴史的なワークフロー例

# Ubuntu開発での典型的なワークフロー(歴史的参考)

# 1. Ubuntuパッケージのブランチ取得
bzr branch lp:ubuntu/package-name
cd package-name

# 2. パッチ適用用ブランチ作成
bzr branch . ../package-name-fix
cd ../package-name-fix

# 3. パッチの適用
patch -p1 < fix.patch
bzr add .
bzr commit -m "Apply security fix

LP: #bug-number
"

# 4. プロポーザル作成
bzr push lp:~username/ubuntu/package-name/fix
# Web UIでマージプロポーザル

# 5. レビューとマージ
# Ubuntu開発者によるレビュー
# bzr merge lp:~username/ubuntu/package-name/fix
# bzr commit -m "Merge fix from username"

レガシーシステムでの保守

# 既存Bazaarシステムの保守(最終手段)

# 1. 現状の評価
bzr info  # リポジトリ情報
bzr check  # 整合性チェック
bzr reconcile  # データ修復

# 2. バックアップ作成
bzr export --format=tar ../backup-$(date +%Y%m%d).tar
bzr branch . ../backup-branch

# 3. 最小限の継続利用
# - セキュリティアップデート停止を理解
# - Python 2.7 依存環境の維持
# - 移行計画の策定

# 4. 段階的移行
# a) 新規機能はGitで開発
# b) 重要機能から順次移行
# c) Bazaarは読み取り専用として保持

移行支援ツールとスクリプト

# Bazaar → Git 移行支援スクリプト
#!/usr/bin/env python3
import subprocess
import os
import shutil

def migrate_bzr_to_git(bzr_path, git_path):
    """Bazaar リポジトリを Git に移行"""
    
    # 1. Bazaar リポジトリの確認
    if not os.path.exists(os.path.join(bzr_path, '.bzr')):
        raise ValueError("有効なBazaarリポジトリではありません")
    
    # 2. Git リポジトリの初期化
    os.makedirs(git_path, exist_ok=True)
    subprocess.run(['git', 'init'], cwd=git_path, check=True)
    
    # 3. bzr-fastimport による変換
    export_cmd = ['bzr', 'fast-export', '--export-marks=marks.bzr']
    import_cmd = ['git', 'fast-import', '--export-marks=marks.git']
    
    with subprocess.Popen(export_cmd, cwd=bzr_path, stdout=subprocess.PIPE) as export_proc:
        subprocess.run(import_cmd, cwd=git_path, stdin=export_proc.stdout, check=True)
    
    # 4. Git リポジトリの最適化
    subprocess.run(['git', 'gc'], cwd=git_path)
    
    print(f"移行完了: {bzr_path}{git_path}")

# 使用例
if __name__ == "__main__":
    migrate_bzr_to_git('./old-bzr-project', './new-git-project')

教育的価値としての学習

# 分散型VCSの歴史学習としてのBazaar

# 1. 第二世代DVCSの比較
# - Git: Linux Kernel のため、高性能重視
# - Mercurial: シンプルさと使いやすさ
# - Bazaar: Ubuntu エコシステムとの統合

# 2. 設計思想の理解
# - ディレクトリベースのリポジトリ
# - 柔軟なワークフロー対応
# - Python による拡張性

# 3. オープンソース開発の教訓
# - 技術的優秀性だけでは不十分
# - エコシステムとコミュニティの重要性
# - レガシー技術の移行課題

# 4. 現代への応用
# - Git の理解を深める比較対象
# - VCS 選択の意思決定要因
# - 技術移行プロジェクトの計画