システムアーキテクト 2010年 午前2 問13
問題文
構成管理ツールを使用して開発用のソースコードを取得する際に、リポジトリ上の位置やリビジョンなどの構成情報を保持したままでソースコードを入手したい。このとき、構成管理ツールに対して行う操作はどれか。
選択肢
ア:インポート
イ:エクスポート
ウ:コミット
エ:チェックアウト(正解)
🔒 解説は解答すると表示されます
作業コピーの取得【午前2解説】
正解の理由
リポジトリ上の位置(URLやパス)やリビジョン情報などの構成情報を保持したままでソースコードを入手する操作は、作業コピー(作業領域)を取得する操作に該当します。選択肢エの「チェックアウト」は、集中型バージョン管理システム(例: Subversion)ではリポジトリから作業コピーを取得してメタデータ(.svn 等)を保持する標準操作です。そのため、構成情報を保持したまま取得する要件に合致します。
分散型バージョン管理(例: Git)の場合、初回にリポジトリ全体を取得する操作は通常「clone(クローン)」です。クローンによりローカルにリポジトリ(履歴を含む .git ディレクトリ)が作成され、その後必要に応じて「checkout」を使って特定のブランチやコミットに作業ツリーを切り替えます。要点は「構成情報を残して取得する」という要件に対しては、集中型ではエ(チェックアウト)、分散型では初回はクローン(その後チェックアウト)である、という点です。
解法ステップ
- 「取得」と「構成情報を保持」の両方を満たす操作を考える。
- 各用語の意味を整理する:インポート(リポジトリへ登録)、エクスポート(履歴やメタ情報を取り除いた出力)、コミット(変更をリポジトリへ反映)、チェックアウト(作業コピーの取得/ブランチ切替)。
- 「構成情報を保持したまま取得」=メタデータを残す⇒チェックアウトが該当。したがって選択肢はエ。
選択肢別の誤答解説
-
ア: インポート
- 説明: ローカルのファイルやプロジェクトをリポジトリに登録・追加する操作です(初回投入など)。取得ではなく「リポジトリへ入れる」処理なので誤りです。
-
イ: エクスポート
- 説明: リポジトリからファイルを取り出しますが、通常はバージョン管理のメタデータ(例: .svn ディレクトリ)を含めない「クリーンなコピー」を作る操作です。問題の「構成情報を保持したまま」には合いません。
-
ウ: コミット
- 説明: ローカルでの変更をリポジトリに反映する(送る)操作です。取得する操作ではないため誤りです。なお、分散型(Git)では「commit」がローカルリポジトリへの記録を意味し、さらにリモートへ送るには「push」が必要です。
-
エ: チェックアウト
- 説明: リポジトリから作業コピーを取得し、リポジトリ位置やリビジョン(メタ情報)を保持する操作です。集中型では初回の取得もこの操作で行い、分散型では初回はクローンを行った上で必要に応じてチェックアウトを使います。以上より、本問の条件を満たす操作はエです。
よくある誤解
- 「Gitでも初回取得はチェックアウト」と考える誤り
- 実際は Git の初回取得は通常
git clone(クローン)で、これがリポジトリ全体をローカルに取得します。git checkoutは主にブランチやコミットの切替に使います。
- 実際は Git の初回取得は通常
- 「エクスポートでも履歴が残る」と思う誤解
- 多くのツールでエクスポートは履歴やメタ情報を除去した出力を作るため、履歴保持は期待できません。
- 「コミット=サーバへ反映(常に)」という混同
- 集中型ではコミットがリポジトリ反映そのものですが、分散型(Git等)ではコミットはローカル操作で、リモートへ反映するには push 等が別途必要です。
補足コラム
代表的なコマンド例
# Subversion (集中型)
svn checkout https://example.com/repo/project # 作業コピーを取得(メタデータを保持)
svn export https://example.com/repo/project # 履歴メタ情報なしのクリーンコピー
svn commit -m "change" # 変更をリポジトリへ反映
# Git (分散型)
git clone https://example.com/repo/project.git # リポジトリ全体を取得(初回)
git checkout feature-branch # ブランチやコミットに切り替え
git commit -m "change" # ローカルリポジトリへ記録
git push origin feature-branch # リモートへ送信
git archive --format=zip -o ../export.zip HEAD # 履歴メタ情報を含まないエクスポート的出力
・実務上は、要件に「履歴やメタデータを残す/残さない」を明確にして、適切な操作(checkout/clone か export/archive)を選ぶことが重要です。
FAQ
Q1: 「初回でもチェックアウトでよいケースはありますか?」
A1: 集中型(Subversionなど)では初回取得も
A1: 集中型(Subversionなど)では初回取得も
svn checkout が一般的です。一方で分散型(Gitなど)は初回に git clone を使います。要は使用しているバージョン管理の種類に依存します。Q2: 「エクスポートで取得したものに構成情報を後から付けられますか?」
A2: エクスポートされたコピーには通常メタデータが含まれないため、同じリポジトリとの関連情報を復元するには追加作業(新たにチェックアウト/クローンするなど)が必要です。
A2: エクスポートされたコピーには通常メタデータが含まれないため、同じリポジトリとの関連情報を復元するには追加作業(新たにチェックアウト/クローンするなど)が必要です。
Q3: 「ローカルでコミットしたら他人のリポジトリに反映されますか?」
A3: 分散型ではローカルコミットだけでは他人のリモートに反映されません。リモートへは push を行う必要があります。集中型ではコミット操作がそのままリポジトリ反映となることが多いです。
A3: 分散型ではローカルコミットだけでは他人のリモートに反映されません。リモートへは push を行う必要があります。集中型ではコミット操作がそのままリポジトリ反映となることが多いです。
関連キーワード: バージョン管理、チェックアウト、クローン、エクスポート、インポート、コミット、分散型、集中型、Git、Subversion

\ せっかくなら /
システムアーキテクトを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

