Android Studio最速入門~効率的にコーディングするための使い方

第28回バージョン管理 ─Subversion連携とGoogle Code

はじめに

今回はなんだかんだで未だ需要の多いSubversion連携についてです。リポジトリにはGoogle Codeを用いますが、GitHubと異なりAndroid StudioにはGoogle Code固有の連携機能はありません。単なるSubversionのリポジトリとして扱いますので、自分が試す環境に適時読み替えてください。

今回も第3回で紹介したサンプルコードを題材に説明していきます。

事前準備

Subversionは中央型リポジトリなので、何かしらのリポジトリサーバを準備しておいてください。

Subversion連携機能はAndroid Studioに組み込まれているため、Subversion1.7以下のリポジトリを扱うのであれば svnコマンドを準備する必要がありません。

企業ネットワーク内などプロキシを越えてインターネット上のリポジトリにアクセスする場合は「Preferences / Version Control / Subversion」のNetworkタブの「Use Android Studio general proxy settings as default for Subverion」をONにします。

図1 ⁠Preferences / Version Control / Subversion」設定画面(Networkタブ)
図1

この設定により、Subversion連携時にAndroid Studioのプロキシ設定が有効になります。一般にSubversionのリポジトリがインターネット上にある事は稀なので、多くの場合この設定は不要です。今回はGoogle Code上のリポジトリを利用するため必要な設定になります。

なお、Google Code上のSubversionリポジトリは初期状態で図2のような構成になっています。

図2 Google Code上のSubversionリポジトリの初期状態
図2

プロジェクトをリポジトリに登録する

Subversionの流儀にしたがえば、登録したいプロジェクトをリポジトリにインポートするところから始めるのですが、それは大変面倒なのでやめます。Android Studioでオススメの方法はメニューバーから「VCS → Import into Version Control → Share Project (Subversion)...」を実行することです。

コマンドを実行すると「Select Share Target」ダイアログが表示されます。Android Studioで初めてSubversionを使うときは「Point to repository location」には何も表示されていないので「+」アイコンを押してSubversionリポジトリを指定します。

図4 ⁠Select Share Target」ダイアログ
図4

「Define share target」には、リポジトリにどのようにプロジェクトを登録するかを指定します。Google Code上のリポジトリにはすでに/trunk, /braches, /tagsといったお決まりのディレクトリが作成済みですが、今回のプロジェクト用に改めてディレクトリを作成したいので、3番目のラジオボタンを選択します。

3番目のラジオボタンを選択すると「ついでに /tags, /branches も作るか?(Create /tags and /branches⁠⁠」というチェックボックスが選択できるようになるので、こちらもONにします。

なお「Define shara target」で指定したリポジトリURLがすでに存在している場合、その後の公開処理に失敗するので注意してください。図4の例だと https://masanobuimai.googlecode.com/svn/MyFirstAppProjectはリポジトリ上に存在してないことが条件になります。

「Commint Comment Prefix」は空欄でも構いません。ラベル名が「~ Prefix」と意味ありげですが、何の事は無い普通のコミットログのことです。

「Share」ボタンを押すと「Subversion Working Copy Format」ダイアログが表示されます。これから今のプロジェクトをSubversionの作業コピーとするのですが、そのフォーマットのバージョンを決定します。Google CodeのSubversionリポジトリは 1.6 なので、それにあわせて「1.6 format」を選択します(ここは各自の環境に合わせて好きなのを選んでください⁠⁠。

図5 ⁠Subversion Working Copy Format」ダイアログ
図5

その後、Subversionへの認証処理を経てプロジェクトの公開が完了します。この操作が内部的に行っている作業はおおよそ以下の通りです。

  1. 指定したリポジトリにプロジェクト用のディレクトリを作成する。
  2. 作成したディレクトリを、今のプロジェクトにチェックアウトする(これで、プロジェクトがSubversionのワーキングコピーになりました⁠⁠。
  3. プロジェクトにあるファイルをsvn addしてコミット候補にあげておく。
図6 "Share Project (Subversion)..."の概要
図6

結果、図7のようなお決まりの構造をもったプロジェクトをリポジトリに登録されます。

図7 リポジトリに登録したプロジェクトの構造
図7

余談になりますが、Gitの時に使った"Enable Version Control Integration..."はSubversionではほとんど役に立ちません。⁠Enable Version Control Integration」ダイアログの選択肢に「Subversion」はありますが、それを選択したからといって何がどうなるわけでもないです(ホントウは何からの変化はあるのですが、些細な話なので後の回で改めて説明します⁠⁠。

リポジトリ登録直後のプロジェクトの状態

"Share Project (Subversion)..."が完了すると「Projectツールウィンドウ」上でみえてる範囲のすべてのファイルがsvn addされた状態になっています。

図8 "Share Project (Subversion)..."実行直後の様子
図8
※すべてのファイルがコミット対象となっているため「Unversioned Files」が存在しない。

このままでは、リポジトリに登録して欲しく無いものもコミットしてしまうので、一旦すべてを無かった事にします。リポジトリ操作を無かった事にするsvn revertGitの"Revert"操作と全く同じで、⁠Changesツールウィンドウ」「Default」を選択して、ツールバーの「Revertを押すのがもっとも手っ取り早いです。

"Revert"を実行することで、未登録のファイルだけが存在しているワーキングコピーとなりました。

リポジトリにファイルを追加する(除外ファイルの設定)

Android Studioが作成するプロジェクトはSubversion用の除外ファイル設定がされていないので、ファイルを追加する前にまず除外ファイルの設定をします。

Subversionの除外ファイル設定svn:ignoreは気が遠くなりそうなほど面倒な作業なので、まず最初にAndroid Studioに対して除外ファイルの設定を行います。

除外ファイルに登録するファイルやディレクトリは .gitignore に準じますリスト1⁠。

リスト1 Android Studioが作成したプロジェクトに付属する.gitignoreの内容
.gradle
local.properties
.idea/workspace.xml
.DS_Store
MyFirstApp/build/

「Changesツールウィンドウ / Localタブ」「Configure Ignored Files⁠」アイコンをクリックして、除外ファイルやディレクトリを登録していきます。登録する内容は表1のとおりです。この設定ダイアログの内容は「Preferences / Version Control / Ignore Files」と同じものです。

図12 ⁠Configure Ignored Files」ダイアログ(クリックすると動きがわかります)
表1 ⁠Configure Ignored Files」ダイアログの設定例
タイプ設定値
Ignore specified file<MODULE_NAME>.iws(実際実際の値は MyFirstApp.iws
Ignore specified file.idea/workspace.xml
Ignore specified filelocal.properties
Ignore all files under.gradle/
Ignore all files under<MODULE_NAME>/build/(実際の値は MyFirstApp/build

正規表現によるパターンを指定できる「Ignore all files matching」はファイル名にしか有効になりません(ディレクトリを指定できない⁠⁠。複数のモジュールが存在するようなプロジェクトでは、モジュールごとに build/ディレクトリを除外設定する必要があります。

除外ファイルの設定が済んだのなら、プロジェクトの内容をリポジトリに追加します。Gitの時と同じく「Changesツールウィンドウ / Localタブ」「Unversioned Files」から追加してみます。"Share Project (Subversion)..."の後に"Revert"したので、おそらく「Unversioned Files」図13のようになっていると思います。

図13 ワーキングコピーの状態
図13

閾値は不明ですが「Unversioned Files」に属するファイル群がある程度以上の数になると、ファイルそのものは表示されず、ファイルの総数と「Click to browse」リンクが表示されます。これは連携するバージョン管理システムに関係なく、非バージョン管理下のファイルの数で決まりますが、リポジトリへの初期登録時以外にお目にかかる事はそう無いでしょう。

「Click to browse」リンクをクリックすると図14のような「Unversioned Files」ダイアログが表示されます。バージョン管理対象にしたいファイルやディレクトリを選択し、ツールバーの「+」アイコンをクリックして登録を行います。

図14 ⁠Unversioned Files」ダイアログからファイルを追加する(クリックすると動きがわかります)

リポジトリにコミットする

ファイルの登録が一通り完了したので、"Commit Changes"を実行して、それらをリポジトリにコミットします。

図16 ⁠Commit Changes」ダイアログ
図16

画面右側にある「Before Commit」はONにしておくと、コミット時にごちゃごちゃ言ってくるので、とりあえず全部OFFにしてコミットを実行します。

「Commit」ボタンのブルダウンが気になる方は「Preferences / Appearance」「Allow merging buttons on dialogs」をOFFにしてください。

図17 ⁠Allow merging buttons on dialogs」をOFFにした場合
図17

Subversionの除外ファイル設定をする(svn:ignore)

Android Studioの除外ファイル設定とバージョン管理システムごとに固有の除外ファイル設定は連動していません。Android Studioからしかリポジトリ操作をしないのであれば先ほどの設定で十分ですが、他のSubversionクライアントと併用するのであれば、Subversionの除外ファイル設定svn:ignoreを設定しておいたほうが良いでしょう。

Subversion側の除外ファイル設定はある程度ファイルをコミットしてからのほうが設定しやすいため、このタイミングで設定します。

除外ファイルの設定方法は2通りあります。ひとつは「Projectツールウィンドウ」上で除外したいファイルを選択し、コンテキストメニューから「Subversion → Ignore」を実行して登録していきます。ただし、この方法はどういうわけか感度が悪く、よくメニューが選択不能になります。

もうひとつが、同じく「Projectツールウィンドウ」のコンテキストメニューから「Subversion → Set Property」を実行して、直接 svn:ignoreプロパティを登録します。

図18 コンテキストメニューからSubversionのプロパティを設定する
図18

すでに登録済みのプロパティを編集したい場合は"Edit Properties"を実行します。このコマンドを実行すると、ダイアログではなく図19のような「SVN Propertiesツールウィンドウ」が表示されます。

図19 ⁠SVN Propertiesツールウィンドウ」
図19

このツールウィンドウ上でプロパティの追加・編集・削除ができるので"Set Property"より、こちらを覚えた方が便利かも知れません。

.gitignoreの設定に倣って svn:ignore を設定すると、図20 のようになります。

図20 svn:ignoreの設定例
図20

[補足]

svn:ignoreが設定していれば、Android Studioの除外ファイル設定がなくても「Changesツールウィンドウ」「Projectツールウィンドウ」上で、svn:ignoreの対象ファイルは「無視ファイル」として扱われます。その逆(Android Studioの除外ファイル設定だけで、svn:ignoreは設定してない)も然りです。

図21 svn:ignoreだけでも無視ファイルは有効になる
図21

そこまでできるのであれば、バージョン管理システム固有の除外ファイル設定とAndroid Studioの除外ファイル設定を相互変換できるようにして欲しいのですが、そこまでには至ってないようです。実にもどかしい話です。

リポジトリのコミットログをみる

無事にコミットができたなら、そのログを確認してみましょう。コミットログは「Changesツールウィンドウ」「Repository」タブで確認することができます。

図22 ⁠Changesツールウィンドウ / Repositoryタブ」
図22

何も表示されていない/内容が古いなどの場合は、ツールバーのRefreshボタンを押してください。場合によっては「VCS History Cache Settings」ダイアログが表示されますが細かい事は気にせず「OK」ボタンを押せば、コミットログが表示されます。

図23 ⁠VCS History Cache Settings」ダイアログ
図23

Subverion連携時の「Changesツールウィンドウ」はまた独特のインターフェイスを持ちます。詳しくは次回紹介します。

リポジトリからチェックアウト

すでにプロジェクトはSubversionリポジトリのワーキングコピーになっているので、わざわざチェックアウトする必要はないのですが、別のPCもしくは別のディレクトリにワーキングコピーを作るために、リポジトリからチェックアウトする方法を紹介します。

Subversionリポジトリのチェックアウトは、Android Studioのウェルカム画面の「Quick Start」にある「Checkout from Version Control」から「Subversion」を選択して実行します。すでにプロジェクトを開いている場合は、メニューバーの「VCS → Checkout from Version Control → Subversion」を実行してください。

図24 ⁠Checkout from Version Control」からチェックアウト
図24

この頃にはすでにリポジトリURLはAndroid Studioに登録済みになっているはずなので「Checkout from Subversion」ダイアログからチェックアウトしたい対象を選択して「Checkout」ボタンを押します。

図25 ⁠Checkout from Subversion」ダイアログ
図25

その後チェックアウト先(⁠⁠Destination Directory」ダイアログ⁠⁠、チェックアウト方法(⁠⁠SVN Checkout Options」ダイアログ⁠⁠、ワーキングコピーのフォーマット(⁠⁠Subversion Working Copy Format」ダイアログ。プロジェクト登録時に紹介したものと同じ)と立て続けに問い合わせてきます。

図26 ⁠Destination Directory」ダイアログ
図26
図27 ⁠SVN Checkout Options」ダイアログ
図27

チェックアウトするディレクトリ名は選択可能ですが、図28のようにプロジェクト名と同じにしておいてください。理由は2つ先の第30回で説明します。

[注意事項]リポジトリの選択で「unknwon host」になる場合

図28 ⁠Checkout from Subversion」ダイアログで"unknown host"
図28

Subversonにプロキシを設定しましょう。⁠Preferences / Version Control」プロジェクトごとに保存されるため、ウェルカム画面からチェックアウトを実行する場合、デフォルトプロジェクトの設定が適用されます。

デフォルトプロジェクトの設定は、ウェルカム画面から「Configure → Project Defaults → Settings」もしくは、メニューバーの「File → Other Settings → Default Settings...」で行います。

まとめ

とりあえず、Subversion連携の流れをひととおり眺めてみました。次回は、もうすこし踏み込んだSubversion連携の機能について紹介します。

おすすめ記事

記事・ニュース一覧