はじめに
今回から具体的なバージョン管理システムを用いたAndroid Studioの連携を紹介します。第3回 で紹介したサンプルコードが手頃なので、このプロジェクトをそれぞれのバージョン管理システムに対応させていきます。
手始めに最近もっとも人気があるGitとGitHubについてです。GitやGitHubについては多くを説明しませんので、他の記事やWebリソースで学習しておいてください。
事前準備
Android Studioは標準でGitやGitHubをサポートしていますが、最低限以下の準備を行っておいてください。
Gitのコマンドラインツール(git
)を導入しておく
GitHubのアカウントを用意しておく
コマンドラインツールはGitの公式サイト から、それぞれのプラットフォームに対応したものをダウンロードしてインストールしておいてください。
環境変数 PATH
に git
コマンドが登録されていればAndroid Studio側は特に設定は要りません。このあたりの説明を読んでも「?」と思う方は「Preferences / Version Control / Git」の「Path to Git executable」に git
コマンドの場所を指定しておいてください。
図1 「 Preferences / Version Control / Git」設定画面
Android StudioのGitサポートの実態は「Android Studioからgit
コマンドを実行して、あたかもシームレスに連携できているようにみせる」です。Android Studio自体にGitクライアントの機能はありません。そのため、GitクライアントとしてのさまざまなオプションはAndroid Studioではなく、git
コマンドに対して行います。
たとえば、企業ネットワーク内などプロキシを経由しないとインターネットに接続できない環境で使用する場合は、リスト1 のように<HOME>/.gitconfig
にプロキシサーバの設定を行います(Android Studioのプロキシ設定はgit
コマンドに影響しません) 。
リスト1 .gitconfigにプロキシサーバの設定を行う
[http]
proxy = http://proxy.example.com:8080
事前準備はこれでおしまいですが、git
コマンド、Android Studioの他にもうひとつGitクライアントを用意しておきましょう。Android StudioのGitサポートは万能ではないので、代替として専用のクライアントを用意しておいたほうが断然良いです。なんでもかんでもAndroid Studioで済まそうとするとストレスの元なので「面倒だな」と思った操作はとっとと見切りをつけてコマンドラインか専用クライアントで作業したほうが簡単です。
GitのせMacの場合はSourceTree 、Windowsの場合はSourceTreeかTortoiseGit あたりがオススメです。
プロジェクトをGit連携する
Git連携するプロジェクトが無い場合はまずはそのプロジェクトを作成しましょう。Git連携は望んだときにいつでもできるので、すでに作成済みのプロジェクトがあればそれを用いても構いません。
メニューバーから「VCS → Enable Version Control Integration...」を実行し「Git」を選びます。
図2 "Enable Version Control Integration..."の実行例
「VCS → Import into Version Control → Create Git Repository...」でも同じ結果になります。
図3 "Create Git Repository..."の実行例
こちらを実行した場合は、図4 のように任意のディレクトリをGitリポジトリにできます(先ほどの"Enable Version Control Integration "は必ずプロジェクトルート(<PROJECT_HOME>
)がGitリポジトリの場所になります) 。
図4 "Create Git Repository..."ではリポジトリの場所を指定する
これで、プロジェクトがGit連携状態になりました。ツールバーにVCS関連のアイコンが追加され、「 Changesツールウィンドウ」と「Version Controlツールウィンドウ」が表示されます。
図5 Git連携状態のAndroid Studio
Git連携の場合、ステータスバーの右端にブランチ名が表示されます。この地味ぃなインターフェイスは意外に便利なので、存在を覚えておいてください。
細かい設定の話はあとでまとめて紹介しますが、この一連の操作で登録したGit連携の情報は「Preferences / Version Control」で確認することができます(<PROJECT_HOME>
がGitに設定されていることがわかります) 。
図6 「 Preferences / Version Control」設定画面
※<PROJECT_HOME>
が絶対パスになっているのが気に入りませんが、内部的には相対パスで管理しているようです。
ちなみに、この状態はまだ何もGitリポジトリにAddされていませんが、プロジェクト自体はGitリポジトリになっています。
図7 プロジェクトとGitリポジトリの状態
Gitリポジトリに対する操作
先ほどの操作でプロジェクトがGitリポジトリと連携されたので、実際にファイルを追加し、それをリポジトリにコミットしてみましょう。
リポジトリにファイルを追加する
方法はいくつかあります。筆者が気に入っているやり方は「Changesツールウィンドウ」で「Unversioned Files」を「Default」にドラッグ&ドロップするやり方です。
図8 「 Changesツールウィンドウ」からファイルを追加する(クリックすると動きがわかります)
その他のやり方だと「Projectツールウィンドウ」や「Navigation Bar」で<PROJECT_HOME>
を選んだ状態で以下の操作を行う方法があります。
"VCS Operations Popup" から "Add to VCS" を実行する
コンテキストメニューから「Git → Add to VCS」を実行する
図9 「 Projectツールウィンドウ」のコンテキストメニューからファイルを追加する
Git連携の設定直後のように、すでにある程度ファイルができている場合は、上記のような操作をしますが、Git連携後にAndroid Studio上でファイルを作成した場合、都度「Gitリポジトリにも追加するか?」といった旨のダイアログが登場するようになります(削除や移動、コピーなども同様です) 。
図10 ファイル作成時に登場するVCS連携するかどうかの確認ダイアログ
※ダイアログの「Remember, don't ask again」をONにすると、以降問い合わせてこなくなります。筆者は小心者なので、ここをONにしたことはありません(ONにしてしまった場合、「 Preferences / Version Control / Confirmation」で元に戻せます) 。
[コラム]リポジトリに登録するファイル/しないファイル
Android Studioが作成するプロジェクトは、Git連携することを想定してか初めから .gitignore
ファイルが付いてきます。このファイルの内容はリスト2 の通りです。
リスト2 <PROJECT_HOME>/.gitignoreの内容(初期設定)
.gradle
/local.properties
/.idea/workspace.xml
.DS_Store
リスト3 <PROJECT_HOME>/<MODULE_HOME>/.gitignoreの内容(初期設定)
/build
少なくとも今回は、この.gitignore
に従ってそれ以外の全てのファイルをリポジトリに登録します。むろん、Android Studioのプロジェクト設定ファイル群(<PROJECT_HOME>/.idea/
)も登録します。
「IDE固有のプロジェクト設定ファイルをリポジトリに登録するか否か」はそれだけでも宗教戦争を起こす重大なテーマですが、今回はあまりこだわらず登録可能なファイルは素直に登録していきます。プロジェクト設定ファイルの扱いについては、この.gitignore
の内容と合わせて、後の回で考察します。
.gitignore
の他にAndroid Studioが認識している無視ファイル(やディレクトリ)というものが存在します。
除外ディレクトリ(Excluded Folders)
Project Structureで除外ディレクトリ(Excluded Folders)に指定しているディレクトリはAndroid Studioに「存在しない」と認識されているため、Android StudioからのVCS操作の対象になることはありません。
v0.2.10あたりから、またProject Structureが封印されましたが、以前調べた除外ディレクトリは第5回 を参照してください。
無視ファイル(Ignored Files)
「Preferences / Version Control / Ignored Files」に登録されているファイルやディレクトリはVCS操作の対象から外れます。ちなみに、この設定はプロジェクトごとに保有できます。
図11 「 Preferences / Version Control / Ignored Files」設定画面
※この画面は「Changesツールウィンドウ」の「Configure Ignored Files」と同じものです。
ここの初期設定の内容と.gitignore
の内容が一致していないのが気になるのですが、今は深くは考えずに進みます。
IDEレベルでの無視ファイル
前述した無視ファイル(Ignored Files)はプロジェクト単位に定義するファイル群でしたが、その他にIDEレベル で定義している無視ファイルというのがあります。設定箇所は「Preferences / File Types」の一番下にある「Ignore files and folders」です。
図12 「 Preferences / File Types」設定画面
脈絡のない設定箇所でかつ非常に目立たない場所にあるため、気付くほうが珍しいくらいの設定項目です。ここに定義されたファイル(やディレクトリ)もAndroid Studioにとっては存在しないものと見なされます。
これらの無視ファイル群はAndroid Studioが認識しているだけで、特定のバージョン管理システムの無視ファイル設定とは連動しません。たとえば、コマンドラインやAndroid Studio以外の専用クライアントからGitリポジトリを操作する場合は、.gitignore
に定義している情報だけが無視する対象になります。
リポジトリの変更を取りやめる
リポジトリへのファイルの追加や変更、削除を取りやめ元の状態に戻したい場合は"Revert "を実行します。"Revert "の実行方法は次の3通りほどありますので、各自使いやすい方法を選択してください。
「Changesツールウィンドウ」で「Default」を選んで、"Revert "を実行する
「 Projectツールウィンドウ」で<PROJECT_HOME>
を選んだ状態で、
"VCS Operations Popup... "から"Revert "を実行する
コンテキストメニューから「Git → Revert」を実行する
図13 「 Changesツールウィンドウ」の「Revert」アイコン
"Revert "を実行すると図14 のようなダイアログが表示されます。
図14 「 Revert Changes」ダイアログ
このダイアログでチェックが付いているファイル(やディレクトリ)が取りやめ(Revert)の対象になります。このチェックボックス付きのファイル一覧は、VCS連携操作でちょくちょく出てくるので、使い方を覚えておいてください(要するにチェックが付いたものだけが処理対象となります) 。
リポジトリにコミットする
リポジトリに対する変更をコミットしてみましょう。コミットの方法も多岐にわたります。ざっと思いついただけで、これだけありますので、使いやすそうな方法を覚えてしまいましょう。
「Changesツールウィンドウ」で「Default」を選んで、"Commit Changes "を実行する
メニューバーの「VCS → Commit Changes」を実行する
ツールバーの「Commit Changes」を実行する
"VCS Operations Popup... "から"Commit Changes "を実行する
「Projectツールウィンドウ」で<PROJECT_HOME>
を選んだ状態でコンテキストメニューの「Git → Commit Directory」を実行する
コミットを実行すると図15 のようなダイアログが表示されます。コミットコマンドを実行した場所によって、ファイル一覧のチェックボックスが一部のファイルにしか付いてない場合がありますのでご注意ください(意図的に特定のファイルだけをコミットすることができます) 。
図15 「 Commit Changes」ダイアログ
この「Commit Changes」ダイアログの詳細については後の回で紹介するので、とりあえずコミットしてみましょう。画面下側にある「Comment」欄にコミットログを記述します。画面右側にある「Before Commit」はコミット前処理を指定します。いろいろできて便利なのですが、面倒も多いので当面は全部OFFにしておいてください。
コミットログを記述したならコミットを実行しましょう。コミット実行は画面右下にある「Commit」ボタンから行います。が、このボタン、なんかちょっとおかしいです。
図16 ちょっと不思議なCommitボタン
この「Commit」ボタン、ボタンでありながらプルダウンメニューとして振る舞います。もともとCVSやSubversionといった中央型のバージョン管理システム向けのインターフェイスを分散バージョン管理システム向けにも無理矢理使い回したため、このようなトンデモなインターフェイスができあがりました。
ちなみに「Preferences / Appearance」の「Allow merging buttons on dialogs」をOFFにすることで、この変なインターフェイスを解除することができます。
図17 「 Preferences / Appearance」設定画面
「Allow merging buttons on dialogs」をOFFにした場合の「Commit Changes」ダイアログのボタン群は図18 の通りです。ひいき目に見てもこちらのほうがわかりやすいです。なにより「Allow merging buttons on dialogs」が、この「Commit」ボタンのためだけにあるオプションというのが可笑しくもあります。
図18 「 Allow merging buttons on dialogs」をOFFにした場合
リポジトリのコミットログをみる
無事にコミットができたなら、そのログを確認してみましょう。コミットログは「Changesツールウィンドウ」の「Log」タブで確認することができます。
図19 「 Changesツールウィンドウ」の「Log」タブ
「Projectツールウィンドウ」などで<PROJECT_HOME>
を選び、"VCS Operations Popup... "やコンテキストメニューの"Show History "を実行してもコミットログを確認できますが、そちらは「Changesツールウィンドウ」ではなく「Version Controlツールウィンドウ」に表示されます(若干、機能が劣ります) 。
リポジトリをGitHubに公開する
このままではプロジェクトが単にGitリポジトリになっただけなので、このリポジトリをGitHubに公開してみましょう。GitHubに公開するにあたり、事前にGitHubに該当リポジトリを作成しておく必要はありません。必要なのはGitHubのアカウントだけです。
図20 ローカルのGitリポジトリをGitHubに公開する
メニューバーから「VCS → Import into Version Control → Share project on GitHub」を実行します。
図21 「 VCS → Import into Version Control → Share project on GitHub」を実行
Android Studioから初めてGitHubにアクセスする場合は、図22 のような認証ダイアログが表示されるので、適切なアカウントでGitHubにログインしてください。
図22 「 Login to GitHub」ダイアログ
認証が成功した場合、入力したパスワードをAndroid Studioのキーストアに格納するためマスターパスワードを問い合わせてきます。このマスターパスワードは次回以降のアクセスの際に用いますので、忘れずに覚えておいてください。
図23 「 Master Password」ダイアログ
※パスワードをどう保存するかは「Preferences / Passwords」で設定します。
参考までに、次回以降GitHubにアクセスすると図24 のようにマスターパスワードの問い合わせだけで、それ以外のダイアログは省略されます。
図24 「 Master Password」ダイアログ(確認用)
初回は長い道のりを辿りますが、ここまできてやっとプロジェクトをGitHubに公開するダイアログが表示されます。
図25 「 Share Project On GitHub」ダイアログ
プロジェクト名(New repository name)はプリセットしてありますが、後でチェックアウト(クローン)することを考慮すると、今のプロジェクトと同じ名前にしておくのが無難です。
プロジェクト名と概要(Description)を入力し終えたなら「Share」ボタンを押すとGitHubに公開されます。具体的には以下のことを行います。
GitHubに該当リポジトリを作成し、
ローカルのリポジトリにGitHubのリポジトリを登録(add remote)し、
GitHubのリポジトリにpushします。
これでGitHubへの公開はおしまいです。うまくいくと、このようにものすごく簡単にできます。
[コラム]GitHub連携がうまく行かない場合
Windows版だからなのか、ファイアウォール内で実行したためか切り分けできていませんが、Android StudioからGitHub連携がうまくいかないケースというがあります。
うまくいかないのがAndroid Studioだけで、コマンドラインからは問題無くGitHubにアクセスできている場合は、Android StudioのGitHub連携はとっとと見切りを付けてコマンドラインから連携することです。
裏技というか反則技と言ってもいいのですが、Android Studio v0.2.10あたりから「Terminalツールウィンドウ」が登場し、Android Studioからターミナル操作ができるようになりました(Windows版ではコマンドプロンプトが使える) 。
これを利用して、まずGitHubに該当プロジェクトを作成します(仮に「MyFirstAppProject」としましょう) 。その後、Android Studioの「Terminalツールウィンドウ」からリスト4 のようなコマンドを実行するだけでいいです。
リスト4 リモートリポジトリの追加の例
$ git remote add origin https://github.com/masanobuimai/MyFirstAppProject.git
リモートリポジトリさえ設定できてしまえば、あとは普通にpush/pullができるようになります。別に「Terminalツールウィンドウ」を使わず、SourceTreeなどの専用クライアントから実施しても同じですけど……(気分の問題ですね) 。
この補足からも分かると思いますが、Android Studioから Gitのリモートリポジトリを設定する機能はありません 。唯一、リモートリポジトリを設定できる機能が"Share project on GitHub "だけだったのです(それもそれで変な話ですけどね) 。
別の言い方をすると、GitHub以外の中央リポジトリを登録したい場合は、このようにAndroid Studio以外のGitクライアントの力を借りるしかないとも言えます。
GitHubからプロジェクトをチェックアウト(クローン)する
ようやっとGitHubにリポジトリを公開できました。今度はGitHubのリポジトリからローカルにチェックアウト(クローン)してみましょう。たとえば、自宅のPCと会社のPCとでリポジトリを共用する、といったケースを想定するとわかりやすいと思います。
図26 Gitリポジトリを別のPCにチェックアウトする
GitHubからリポジトリのチェックアウトは、Android Studioのウェルカム画面から行います。左側のメニューから「Check out from Version Control」を選び、ポップアップから「GitHub」を選択します。すると「Clone Repository」ダイアログが表示されるので「Git Repository URL」からチェックアウトしたいリポジトリURLを選択します。
GitHub連携の場合、この「Git Repository URL」のプルダウンリストに既存のGitHubリポジトリが一覧表示されるので、そこから任意のリポジトリURLを選択するだけで済みます。図27 のムービーではさほど時間がかかってないように見えますが、ネットワークなどの条件によっては「Clone Repository」ダイアログが出るまでものすごく時間がかかります(気長に待ちましょう) 。
図27 GitHubチェックアウトの流れ(クリックすると動きがわかります)
「Clone」ボタンを押すとチェックアウト(クローン)を開始します。それが済むと、そのままプロジェクトを開くかと聞いてくるので、指示に従ってプロジェクトを開きましょう。リポジトリにAndroid Studioのプロジェクト設定ファイルも登録してあるので、諸条件が満たされていれば(?)難なくプロジェクトを開くことができると思います(この「諸条件」も後の回で説明します) 。
GitHubに公開する時と同じく、ファイアウォール内だとGitHubのリポジトリ一覧取得に失敗する事があります。その場合も慌てず騒がすGitHub連携を止め、ウェルカム画面の「Check out from Version Control」で「Git」を選択しましょう。
「Check out from Version Control」で「GitHub」ではなく「Git」を選択した場合も「Clone Repository」ダイアログが表示されます。「 GitHub」選択時との違いは「Git Repository URL」のブルダウンリストに何も表示されない事だけです。
図28 「 Check out from Version Control」で「Git」を選んでも同じダイアログが表示される
次回の予定
今回紹介した内容はGitとGitHub連携の初歩の初歩だけなので、次回はもう少し踏み込んだGit/GitHub連携の使い方について紹介します。