リポジトリのアーカイブとバックアップ
プロジェクトの終了、保守終了、長期保存――リポジトリのライフサイクルには必ず「その後」があります。今回は、GitHubが提供するアーカイブ機能とバックアップ手法について、実務で使える知識を整理します。
1. リポジトリアーカイブの基本
1.1 アーカイブとは何か
リポジトリをアーカイブすると、すべてのコンテンツが読み取り専用になります。これは単なる「フラグ」ではなく、実際の動作が変わります。
読み取り専用になる要素:
- issue、Pull Request
- コード、タグ、ブランチ
- ラベル、マイルストーン
- Wiki、リリース
- コメント、リアクション
- Code Scanningアラート
- 権限設定
フォークとスターは引き続き可能です。つまり、コードの再利用は妨げません。
1.2 アーカイブの実行手順
1.3 アーカイブ前の推奨作業
アーカイブは技術的な処理ですが、その前に人間系の整理が重要です。
-
すべてのissueとPull Requestをクローズする
- 未解決の議論を明確にする
- 後継プロジェクトへの誘導を記載する
-
READMEとDescriptionを更新する
# プロジェクト名 [アーカイブ済み] このプロジェクトは20XX年X月にアーカイブされました。 メンテナンスは終了しています。 後継プロジェクト: [リンク] 最終安定版: v1.2.3 -
ドキュメントに保守終了の旨を記載する
1.4 アーカイブ解除
アーカイブは可逆的な操作です。同じくDanger Zoneから「Unarchive this repository」を実行できます。
2. GitHub Archive Program:1000年の保存計画
GitHubは単なるコードホスティングサービスではありません。人類のソフトウェア資産を後世に残すプロジェクトを進めています。
2.1 プログラムの概要
パブリックリポジトリはデフォルトで「GitHub Archive Program」に参加します。これは複数の組織と連携した長期保存プロジェクトです。
提携組織:
- Software Heritage Foundation
- Internet Archive
- Arctic Code Vault(北極圏のデータ保管庫)
2.2 Arctic Code Vaultの仕組み
最も興味深いのは、スヴァールバル諸島の永久凍土層に保管される「Arctic Code Vault」です。
保存方法:
- フィルムベースのアーカイブ技術
- 最低1000年の保存を想定
- 電力不要、物理的に安定
つまり、あなたのコードが文字通り「未来の遺産」になる可能性があります。
2.3 プライバシーとアーカイブ
アーカイブプログラムは、ユーザーのプライバシーを尊重した責任ある利用が求められます。
2.4 オプトアウト方法
プライバシーや方針上の理由でプログラムから除外したい場合、リポジトリ設定から変更できます。
3. バックアップ戦略:実践的アプローチ
GitHubへの依存度を下げたい、災害復旧のために手元に持っておきたい――そんなニーズに応える複数の方法があります。
3.1 Git CLIによるミラークローン
最もシンプルで確実な方法です。リビジョン履歴を含むすべてのGitデータを取得します。
# ミラークローンを実行
git clone --mirror https://github.com/yamada-taro/my-project.git
# Git LFSオブジェクトがある場合は取得
cd my-project.git
git lfs fetch --all
# アーカイブを作成
cd ..
tar -czf my-project-backup-$(date +%Y%m%d).tar.gz my-project.git/
# または zip形式で
zip -r my-project-backup-$(date +%Y%m%d).zip my-project.git/
含まれるもの:
- すべてのブランチとタグ
- コミット履歴
- Git設定
含まれないもの:
- issue、Pull Request
- Wiki(別途クローンが必要)
- GitHub Actions の実行履歴
- Discussions
3.2 Wikiのバックアップ
WikiもGitリポジトリとして管理されているため、同様にクローンできます。
# Wikiのクローン
git clone https://github.com/yamada-taro/my-project.wiki.git
# 圧縮
tar -czf my-project-wiki-backup-$(date +%Y%m%d).tar.gz my-project.wiki/
3.3 Migration APIによるメタデータ込みバックアップ
REST APIを使うと、一部のGitHubメタデータも含めてアーカイブできます。
# アーカイブの生成をリクエスト(組織の場合)
curl -L \
-X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/orgs/組織名/migrations \
-d '{"repositories":["リポジトリ名"]}'
# アーカイブのダウンロード
curl -L \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/orgs/組織名/migrations/MIGRATION_ID/archive \
-o migration-archive.tar.gz
含まれるもの:
- Gitリポジトリデータ
- issue、Pull Requestの一部
- リリース情報
- マイルストーン
含まれないもの:
- Git LFSオブジェクト
- Discussions
- Packages
- GitHub Actions の成果物
重要な注意: Migration archiveには、GitHubへの公式な復元機能がありません。あくまでアーカイブ目的での使用となります。
3.4 サードパーティツールの活用
GitHub Marketplaceには、バックアップを自動化するツールがあります。
代表的なツール:
- BackHub
- Rewind
- その他Backup Utilitiesカテゴリのツール
これらは定期実行、差分バックアップ、複数リポジトリの一括処理などをサポートします。
3.5 バックアップ戦略のフローチャート
4. 学術研究での利用:DOIの発行
オープンソースプロジェクトを論文で引用可能にする仕組みがあります。
4.1 Zenodoとの連携
Zenodoは学術データアーカイブサービスで、GitHubリポジトリに永続的な識別子(DOI)を発行できます。
設定手順:
- Zenodoにログイン(GitHubアカウントで認証可能)
- GitHub連携を承認
- Zenodoの設定ページでリポジトリを有効化
- GitHubでリリースを作成
- 自動的にDOIが発行される
利点:
- リポジトリが削除されても、Zenodoにアーカイブが残る
- 学術論文の引用要件を満たす
- バージョンごとに異なるDOIが発行される
4.2 Figshareでの研究材料公開
Figshareは研究データ管理サービスです。コードだけでなく、実験データ、図表、プレゼンテーションなども公開できます。
5. 実務での運用パターン
5.1 プロジェクト終了時のクリーンアップ
# プロジェクト終了チェックリスト
tasks:
- name: "ドキュメント更新"
items:
- README に終了告知を追記
- CHANGELOG を最終更新
- ライセンス情報の確認
- name: "issue/PR の整理"
items:
- 未解決 issue をすべてクローズ
- クローズ理由をコメント
- 代替案や後継プロジェクトを案内
- name: "バックアップ"
items:
- ミラークローンを実行
- Wiki もクローン
- ローカルとクラウドに保存
- name: "アーカイブ実行"
items:
- Settings → Archive
- リポジトリ名を確認して実行
5.2 定期バックアップの自動化
GitHub Actionsで定期的にバックアップを取る例:
name: "定期バックアップ"
on:
schedule:
# 毎週日曜日 3:00 UTC に実行
- cron: '0 3 * * 0'
workflow_dispatch:
jobs:
backup:
runs-on: ubuntu-latest
steps:
- name: "ミラークローンを作成"
run: |
git clone --mirror ${{ github.repositoryUrl }} backup.git
- name: "LFSオブジェクトを取得"
run: |
cd backup.git
git lfs fetch --all
- name: "アーカイブを作成"
run: |
tar -czf backup-$(date +%Y%m%d).tar.gz backup.git/
- name: "クラウドストレージにアップロード"
# Azure/AWS/GCP への転送処理
run: |
# 実際のアップロードコマンドをここに記述
echo "バックアップをアップロード中..."
5.3 組織全体のアーカイブポリシー
6. 注意すべきポイント
6.1 課金について
アーカイブしても、レガシーの per-repository 課金プランでは料金が発生し続けます。課金を停止するには、新しいプランへの移行が必要です。
6.2 パブリックリポジトリの永続性
GitHubはパブリックリポジトリを、ユーザーが削除しない限り利用可能な状態で保持する方針です。ただし、以下の場合は例外となります。
- DMCA Takedown Noticeを受けた場合
- コミュニティガイドラインや利用規約に違反する内容が含まれる場合
学術研究者やデータ管理計画では、この情報を参照できます。
6.3 Secret Scanningとの併用
GitHub Secret Protectionを使用している場合、アーカイブされたリポジトリでもシークレットスキャンを有効にできます。過去のコミットに含まれる認証情報の検出に有効です。
6.4 オープンソースライセンスの重要性
アーカイブやバックアップを他者が利用する場合、適切なライセンス表示が必要です。MIT、Apache 2.0、GPLなどのライセンスを明示することで、法的保護を受けながらアーカイブの作成が可能になります。
7. まとめ
GitHubのアーカイブとバックアップは、プロジェクトのライフサイクル管理における重要な要素です。
使い分けの指針:
| 目的 | 推奨方法 | 実行タイミング |
|---|---|---|
| プロジェクト終了の明示 | リポジトリアーカイブ | プロジェクト完了時 |
| 災害復旧用のバックアップ | Git ミラークローン | 定期的(週次・月次) |
| 学術的引用の準備 | Zenodo連携 | 論文投稿前 |
| 組織の資産管理 | Migration API + 定期実行 | 四半期ごと |
| 長期保存(自動) | GitHub Archive Program | デフォルトで有効 |
技術的には単純な操作ですが、適切なタイミングと方法を選ぶことで、コードの価値を長期的に保ち、チームや社会への説明責任を果たせます。
保存すべきものは、コードだけではありません。プロジェクトの意思決定、議論、変遷――それらすべてが、未来の開発者への貴重な知見となります。