バージョン管理にgitを使っていて、そのリポジトリを公開するのにGitHubがとても便利です。ただ、GitHubは無料アカウントだとPrivateなリポジトリを作成することが出来ないので、個人でごにょごにゅしているものや、一般公開したくないソースコードをあげるのには不向きです(有料アカウントならPrivateも作れる)。
個人的には非公開にしたいプロジェクトのリポジトリもオンラインバックアップを兼ねてGitHubに上げたいなぁと思っていたので探してみると、GitHubライクなUIを持つgitlabだとPrivateリポジトリも無料で作り放題というのを見つけました。
これを使えばAndroid Studioで作ったなんやかんやのお試しプロジェクトもリモートにあげられそうです。
ここではAndroid Studioとgitlabを連携させる設定について記載します。
作業環境
- OS:Windows10
- Android Studio 2.1.3
- GitLab Projects Plugin 1.3.1
- git 2.10.0
環境を構築する
Android Studioはすでにインストール済みと考えて、そのあとの手順を記載します。
gitのインストール
まずはgitをインストールする必要があります。すでにインストール済みの方は読み飛ばしてください。
以下のURLからgitをダウンロードします。
インストールオプション等は変更せず、デフォルトのままで問題ないと思います。
- git - Downloads
https://git-scm.com/downloads
gitによるバージョン管理については以下のサイトが参考になるかと思います。
- サルでもわかるGit入門
http://www.backlog.jp/git-guide/ - Git の基礎勉強 〜Git によるバージョン管理を使う〜
http://tracpath.com/bootcamp/learning_git_firststep.html#
gitlabアカウントの作成
gitlabアカウントを作成します。以下のURLからサインアップしてください。
- gitlab
https://about.gitlab.com/
gitlabにSSH鍵を登録する
次にgitlabにリポジトリをpushする準備として、SSH鍵の生成と登録を行います。gitlabとの接続認証と暗号化はこのSSH鍵を使って行われます。手順としては以下のようになります。
- Git bashを起動する
- SSH鍵を生成する
- gitlabにSSH鍵を登録する
まず、Git bashを起動します。
- Windowsスタートメニュ > Git > Git bash
ここからコマンドラインで操作してSSH鍵を生成します。どう入力すればよいかはgitlabに記載されていますので、ログインして以下のページを参照してください。
- gitlabのメニューを開く > Profile Settingsを選択 > SSH Keysを選択 > ページの"generate it"とあるリンクを開く
例えばSSH鍵を生成するのに以下のように入力していきます。
[BASH]
ssh-keygen -t rsa -C "あなたのメールアドレス"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/ユーザ名/.ssh/id_rsa): (何も入力せずEnter)
Created directory '/c/Users/kiri/.ssh'.
Enter passphrase (empty for no passphrase): (何も入力せずEnter)
Enter same passphrase again: (何も入力せずEnter)
Your identification has been saved in /c/Users/ユーザ名/.ssh/id_rsa.
Your public key has been saved in /c/Users/ユーザ名/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx あなたのメールアドレス
The key's randomart image is:
+---[RSA 2048]----+
| R oo xxxx |
| . . oBoo.*B |
| . + x+x++ o x |
| .. * o.o = |
| . oo xxx . o |
| + +. . . |
| B . |
| + . |
| .. |
+----[SHA256]-----+
[/BASH]
これでSSH鍵が生成されました。ここで以下のように入力すると鍵がクリップボードにコピーされます。
[BASH]
cat ~/.ssh/id_rsa.pub | clip
[/BASH]
あとはこの鍵をgitlabに登録します。
- gitlabのメニューを開く > Profile Settingsを選択 > SSH Keysを選択
- KeyにSSH鍵を張り付ける(Titleは適当に"WindowsPC"とか日付とかを入力しておく)
- Add keyボタンを押下
これでSSH鍵の登録は完了です。
Android Studioにプラグインをインストールする
Android StudioにGitLab用のプラグイン(GitLab Project Plugin)をインストールします。無くても使えると思いますが、あると便利です。
以下のようにしてプラグインをインストールします。
- Android Studioメニュー > Settings > Plugins > Browse repositories...ボタンを押下
- 一覧から"GitLab Projects"を探して選択 > "Install"ボタンを押下


次にプラグインの設定を行います。
- Android Studioメニュー > Settings > Other Settings > GitLab Settings
以下のように設定します。
GitLab Server Url | https://gitlab.com/ |
GitLab API Key | (入力欄横にある"?"ボタンを押下、表示されたページにある"Private Token"を入力) |
既存プロジェクトでGitを使用する
ここではすでに作成済みのAndroid StudioプロジェクトをGitでバージョン管理したいと思います。以下のような手順になります。
- プロジェクトのバージョン管理を有効にする
- 必要なファイルをすべてリポジトリに追加/コミットする
- gitlabにリポジトリをpushする
まず対象のプロジェクトを開いてください。その後、バージョン管理を有効にします。
- メニュー > VCS > Enable Version Control Integration...
- プルダウンメニューから"git"を選択して"OK"ボタンを押下

これでローカル環境にリポジトリが生成され、バージョン管理が有効になりました。
Projectツリーを確認すると、ファイル名が赤色で表示されていると思います。これはバージョン管理の対象外を意味しています。ファイルをバージョン管理に追加したい場合は以下のいずれかの操作をします。
- Projectツリーの対象ファイルを右クリック > Git > Add
- Projectツリーの対象ファイルを選択 > Ctrl + Alt + Aキーを押す
プロジェクトのファイルを全部追加する場合は、ツリーのトップ("app"の部分)を選択して"Ctrl + Alt + A"を押せば全部追加されます。
この操作をするとファイル名が緑色で表示されるようになったと思います。この段階ではまだリポジトリに反映されていません。必要なファイル一式を追加した後にコミットします。
- Projectツリーの"app"を選択し右クリック > Git > Commit Drectory
Commit ChangesウィンドウのAuthor欄に名前とメールアドレスを入力し、Commitボタンを押下
Authorに入力した名前とメールアドレスがリポジトリに保存されます。
Authorには名前とメールアドレス両方を入力してください。名前だけだったりメールアドレスだけだったりするとCommitに失敗します。以下は入力例です(あ、画像の入力内容は間違っていますね、すみません)。
- 名前 'Emailアドレス'
(例) taro 'taro@suke-blog.com'
Commitすると緑色だったファイル名が白色になっていると思います。緑色はなんらかの変更が加わったファイルを示しています(リポジトリと作業中のファイル内容が違う)。


gitlabにプロジェクトを作成する
上記まででローカル環境にgitリポジトリが作成されました。これをgitlabにあげたいと思います。
次のように操作すると、自動的にgitlabにプロジェクトを作成して内容をpushしてくれます。
- メニュー > VCS > Import into Version Control > Share on GitLab
- プロジェクト名とプロジェクトを公開するか(Privateを選ぶと非公開)を選択して"Share"ボタンを押下
(途中でSSHキーを保存するか聞いてくるので、"Yes"を選択)

ここで失敗する場合はAPI KeyやSSH鍵の登録が上手くいっていない可能性があります。gitlabにログインしてみると、何か参考になるエラーメッセージが表示されるかもしれません。例えばSSH鍵を登録していないと以下のようなエラーメッセージが表示されます。
gitlabエラーメッセージ
You won't be able to pull or push project code via SSH until you add an SSH key to your profile
また、リポジトリにCommitをしないままで上記操作を行った場合、gitlabにプロジェクトは作成されますがリポジトリはアップロードされません。以下のようなエラーメッセージが表示されるはずです。

これでgitlabにプロジェクトが作成されました。gitlabにログインしてプロジェクトが作成されてファイル内容が参照出来るか確認してみてください。
この後は通常のgitと同じ動作で、コード変更->commit、gitlabのリポジトリに変更内容を反映したいタイミングでpushを行ってください。
- メニュー > VCS > Git > Push
ところで、私の場合はPushするときになぜか以下のようなエラーメッセージが出力されました。gitlabを確認すると問題なく更新されているようなのですが、なぜかIOExceptionが出ています(一応は動いているようなのでそのままにしています)。
11:33:06 6 files committed: first commit 11:33:24 IOException: 既存の接続はリモート ホストに強制的に切断されました。 11:33:25 Push successful: Pushed 1 commit to Android1.6_sample/master
もしかすると、OpenSSHをインストールしてから、SSH "Settings > Version Control > Gitの"SSH executable"をNativeにするとなにか変わるかも(未確認です)。
所感
以前はGoogle Driveをバックアップ用途として使っていましが、プロジェクトを試しにぽこぽこ作るとデータ量が多くなるのと、AndroidStudioでファイルが保存出来なくなったことがあって止めました。
gitlabならば容量を気にしなくていいし(そのハズ)、任意のタイミングでリモートにリポジトリを反映出来ます。既存プロジェクトの追加もお手軽に出来て、一度設定してしまえば操作で迷うことはあまり無くいい感じでした。
ソースコードを公開する場合もプロジェクトをPublicにしてURLを張るだけなので、これからはgitlabを活用していきたいと思います。
参考
- GitLab
https://about.gitlab.com/ - gihyo.jp - Android Studio最速入門~効率的にコーディングするための使い方
http://gihyo.jp/dev/serial/01/android_studio/0024 - Qiita - WindowsでSSHの鍵を作る
http://qiita.com/digdagdag/items/9e5c061e7d86e0af9a57 - Yuichi Goto's page - GitLabへの公開鍵の登録
http://www.aise.ics.saitama-u.ac.jp/~gotoh/SetPublicKeyInGitLab.html