MATLABでソースコード管理 (Github編)

# MATLAB上でGithubを使う！
MATLABの公式ドキュメントではソースコード管理としてSubversionとGitを使用した例が紹介されています。今回は一般的に広く使われているGithubをつかったソースコード管理の方法について手順を説明していきます。

## ソースコード管理の事前準備
MATLABで作成したソースコードをGithubで管理するために事前にいくつかの設定が必要です。

* Githubアカウントを登録し、任意の新規リポジトリを作成します。

* ソースコードを管理するためのルートディレクトリを新規に作成します。

```
>> mkdir <ディレクトリ名>
```

* 現在のフォルダー ブラウザーの空白領域 (任意の空白領域) で右クリックし、[ソース管理] 、 [ファイルの管理] を選択します。

* [ソース管理を使用したファイルの管理] ダイアログ ボックスで、[ソース管理統合] リストから [Git] を選択します。

![スクリーンショット 2018-06-19 6.28.43.png](https://qiita-image-store.s3.amazonaws.com/0/264875/6c167277-c4d0-07a8-205c-ecdb8e92d05d.png)

* [変更] をクリックして手順１で作成したリポジトリURL( ＊注意　HTTPSのURLを使うこと )をコピし、検証をクリックします。

![スクリーンショット 2018-06-19 6.31.05.png](https://qiita-image-store.s3.amazonaws.com/0/264875/2b28e880-ce12-68ad-651a-84e61c1861a3.png)


![スクリーンショット 2018-06-19 6.28.43.png](https://qiita-image-store.s3.amazonaws.com/0/264875/db554ba9-422c-e120-b9b5-d6747d023e25.png)


* [ソース管理を使用したファイルの管理] ダイアログ ボックスで取得したファイルを配置するサンドボックス フォルダーを選択したら [取得] をクリックします。

![スクリーンショット 2018-06-19 6.28.43.png](https://qiita-image-store.s3.amazonaws.com/0/264875/a008ccd3-24f7-79fc-8d0a-4d7402d5da66.png)


* ( Windowsの方のみ )　Gitのコマンドラインツールのインストール
[こちら](https://jp.mathworks.com/help/matlab/matlab_prog/set-up-git-source-control.html)の公式ドキュメントの**コマンド ライン Git クライアントのインストール**を参考にインストールしてください。下記のコマンドでバージョンが表示されればOKです。

```
>> !git --version
```
>MATLABコマンドラインでの入力を想定しているため始めに`!`をつけています。

* バイナリファイルのGitへの登録をします。[こちら](https://jp.mathworks.com/help/matlab/matlab_prog/set-up-git-source-control.html)の公式ドキュメントの**バイナリファイルのGitへの登録**を参考に登録を行ってください。

以上でMATLAB上でGithubを使ったソースコード管理を行うための下準備が整いました。

## Githubを活用したソースコード管理

ここからはGithubをあまり使ったことがない初心者向けに簡単なソースコード管理の方法を説明します。既にGithubを使ったことがある方はどうぞ自由にMATLAB & Github生活をお楽しみください。

### Githubの使い方
簡単に言えば、Githubでソースコード管理をする際にやることは以下の４つをひたすら繰り返すことです。
1. コーディングする
2. 変更をgitに追加(add)する
3. 追加した変更に対してコミット(commit)する/コメントをつける
4. ローカルリポジトリの内容をGithubのリモートリポジトリに反映(push)する

１つ目はいいですね。まず好きにコーディングします。２つ目に出来たファイルをgitに追加します。これはリモートリポジトリに反映するために一時的にインデックスと呼ばれる場所に保存します。

```
>> !git add <作成したファイル名> or *(変更の全指定)
```

このとき*を指定すれば変更分がすべて追加されます。そして３つ目にcommitです。commitではその変更がどのような変更だったのか(バグの修正、新機能の追加など)を記録するために行います。

```
>> !git commit -m 'コメント'
```

最後に変更をGithubのリモートリポジトリに反映させるためにpushします。

```
>> !git push origin master
```

ここでoriginやmasterといった見慣れない単語が出てきましたので、それぞれについて解説します。

まずoriginですが、これはリモートリポジトリを指しています。今回は自身が作成したGithubのリポジトリです。つまりここに自分が作ったコードをpushすることでローカルの内容をGithub上に保存しておくことが出来る訳です。

そして、masterこれはbranchとよばれるバージョンを指しています。後述しますが、コーディングを進めていく際に新機能を追加していく場合があると思います。そんなときに昔のバージョンを取っておくことで、新機能の開発などで不具合が生じたときにすぐ元に戻すことが出来ます。つまりmasterとは大元のバージョンのことです。
___

### branchを活用したバージョン管理

コーディングを進めていくと、今の正常に動作するコードは残したまま、新機能を試しに追加して動作するか検証したいという状況が出てくると思います。そんなときに便利なのがbranchです。その名の通り、現状のコピーの枝分かれを作って、元の状態は残したままコピー先を編集して動作確認などをすることが出来ます。

#### branchの作成

まず、新規branchを作成します。

```
>> !git branch <新規branch名>　(ex. topic-branch)
```


次に、作成したbranch(topic-branch)に移動します。

```
>> !git checkout topic-branch
```

branchの確認をします。

```
>> !git branch -a
 master
*topic-branch
```

現在のbranchが米印で示されています。そして、このbranchでコーディングを進めます。

先ほどと同様に変更をadd, commitします。

```
>> !git add *
>> !git commit -m 'Add new functions'
```

これでローカルに変更が記録されたのでリモートにpushします。この際に現在のbranchを指定することで、masterを保持したままリモートにソースコードを保存しておくことが出来ます。

```
>> !git push origin topic-branch
```

このようにして複数のバージョンをbranchを作ることで保持しておくことが出来ます。

#### branchのマージ

開発が進んでいくと、masterに別のbranchで開発した新機能を追加して統合したいという状況も出てきます。そこで、行うのがmergeです。具体的には以下のようにします。

まず、masterにbranchを切り替えます。その後新機能を開発したtopic-branchとmergeします。

```
>> !git checkout master
>> !git merge --no-ff topic-branch
```

このときoptionで`--no-ff`を使っていますが、とりあえずおまじないみたいなものとしてつけておいてください。詳細は割愛しますが、簡単に言えばtopic-branchでの開発履歴を残しておくためにoptionをつけています。

そしてGithubにpushします。

```
>> !git push origin master
```

最後に不要になったbranchを削除します。

```
git branch -d topic-branch
```

## おわりに
本記事ではMATLAB上でGithubを使ったソースコード管理の方法について解説しました。MATLABでは今回コマンドで行った操作をUIでも出来るようになっていますが、個人的にはわかりにくいのと、これまでgithubを使ってきた方やこれからgithubを使っていく方、いずれにおいてもコマンドラインから操作できた方がいいであろうと思い、このようにいたしました。UIではbranchの変遷がグラフになっていたりと視覚的にわかりやすい部分もあるので適宜参照するようにするのが賢い使い方かなと思います。


## 参考
* [Mathworksドキュメンテーション ソース管理の統合](https://jp.mathworks.com/help/matlab/source-control.html)  
* [今さら聞けない！GitHubの使い方【超初心者向け】](https://techacademy.jp/magazine/6235)