Simulinkモデルのバージョン管理(4)

Simulinkモデルのバージョン管理(3)からの続きです。今回はテキストファイルのバージョン管理を行います。

分散型バージョン管理システムとして、MercurialベースのKiln(FogCreek社)を採用しました。

やることは、次の5つです。

  • リポジトリを作る
  • リポジトリにファイルを保存する
  • コードレビューする
  • バージョンを戻したり、差分を見たりする
  • 複数の人が別々に行った変更を、統合する

前回は上2つをやりましたので、今回は続きの2つをやります。

コードレビューする

Kilnには、コードレビュー機能があります。残念ながらSimulinkモデルのレビューはできません。しかし、m-fileや、S-Functionのソースコードなど、テキストファイルであればレビュー対象とする事が出来ます。

レビューを行うには、次の2つの条件が必要です。

  • リポジトリが存在すること
  • リポジトリに対し、HG Commit が行われていること

(他のレビューシステムをご存じの方へ: オープンソースのレビューシステムは、コミット前のパッチに対してレビューを行うものがほとんどです。一方このKilnは、コミット後のChangesetに対してレビューを行います。)

レビュー開始

(中央サーバーに、任意のマシンのWebブラウザでアクセス)

Kilnでは、リポジトリに対して行われた Commit 単位でレビューを実行します。レビュー開始は、New Review ボタンをクリックするだけです。

リポジトリのHistoryページにある、New Review ボタン

対象となるCommit、およびレビューアを指定

この結果、1つの「レビュー」が生成されました。

生成されたレビュー

左半分には、レビューアが記入したコメントが表示されます。右半分には、どのファイルがどう変更されたのか?が表示されます。

レビューコメント記入

(中央サーバーに、任意のマシンのWebブラウザでアクセス)

Kilnのレビュー画面では、各ファイルの変更箇所が色分けされて表示されます。

レビューアは、特定の行についてのコメントを記述することができます。そのためには、コメント入れしたい行を選択状態にします。

行を選択すると、コメント入力欄がポップする

ここで現れたコメント入力欄に、なにかコメントを入れましょう。コメントを入れた結果、次のようになります。

入力したコメントが反映された

レビューを終了する

(中央サーバーに、任意のマシンのWebブラウザでアクセス)

レビューを行ったら、結局これは良かったのか?悪かったのか?結論をださないといけません。

レビューの結果を選択する

レビュー結果は、以下の3つから選べるようになっています。

  • Approved    オッケーです。
  • Rejected     ダメです。修正しましょう。
  • Won’t Review  レビューしません。他の人に頼んで。。。

結果を選択すると、レビュー画面は次のようになります。

終了したレビューの画面

StatusとしてはClosedになっていますが、閲覧はいつでも出来ます。もしもRejectされた場合には、これを見ながら悪い点を修正していきます。

バージョンを戻したり、差分を見たりする

以前はちゃんと動いていたのに、いろいろ触ってたら動かなくなった!

こういう場合には、バージョンを戻してみたり、差分を見てみたり、いろいろしたくなる事でしょう。

分散型バージョン管理システムでは、リポジトリは開発PCに丸ごとコピーされます。ですから、これらの作業はすべて開発PCのみで行えます。車載試験のために中央サーバーと切り離されていても大丈夫です。

特定のバージョンを取り出す

(開発PCのみを使用する)

今つかっているフォルダから別のフォルダへ、特定のバージョンを取り出すことができます。以前動いていたのに・・・?という場合、その動いていた頃のバージョンを取り出して実験してみると良いでしょう。

別のフォルダへ特定バージョンを取り出す

まずは、どんなバージョンがあるか確認するため、TortoiseHGのHg Repository Explorerを起動します。

Mercurialでは、バージョンを Changeset と呼ぶ

1回Commitする度にChangesetというのが出来ます。これにはIDがついていて、これを指定することで特定バージョンを取り出せます。

試しに、バージョン0を取り出す場合、TortoiseHGのclone画面で次のような指定をします。

TortoiseHGのcloneコマンド

Source path には、今まで使っていたフォルダを指定します。

Destination pathには、新しく取り出すフォルダを指定します。

Advanced optionsの Clone to revisionにチェックを入れ、ここに先ほどのChangesetのIDを入力します。上図のように 0 と入力しても構いませんし、長いIDである23f584c1e1a0を指定しても構いません。

この作業を行った結果、あらたなフォルダに特定のバージョンを取り出すことができました。

バージョン0を取り出した

特定のバージョンとの差分を見る

(開発PCのみを使用する)

さて、特定のバージョンを取り出して動いていることを確認しました。でも、今のバージョンでは動きません。じゃあ、何が違うというのでしょうか?

こういった場合には、特定のバージョンと、現在のバージョンの違いを確認しましょう。

特定のバージョンとの違いを見る

そのためには、TortoiseHGのHg Repository Explorerを使用します。比べたいバージョンを選択して右クリックし、Diff to local を選択します。

Diff to localコマンド

すると、変更のあったファイル名の一覧が表示されます。

ためしに、my_mfile.mをダブルクリックしてみましょう。

その結果、次のようなdiffが表示されます。

特定のバージョンとの違いが見られる

この画面で、何がどう違っているかを確認できます。

ちなみに、今回はテキストの比較のみをあつかっています。次々回はSimulinkモデル同士をグラフィカルに比較する方法をご紹介します。

特定のバージョンに名前を付ける(=タグ)

(開発PCのみを使用する)

こまごまとした変更を加えていくと、履歴がいっぱいになります。とあるバージョンを出荷したのであれば、ぜひそのバージョンは覚えておきたいところです。その場合、タグを打つことで解決出来ます。

そのためには、TortoiseHGのHg Repository Explorerを使用します。タグを打ちたいバージョンを選択して右クリックし、Add / Remove Tagをクリックします。

Add / Remove Tagコマンド

ここでタグを打った結果、バージョン履歴は次のようになります。

特定のバージョンに、タグがついた

ここで付けたタグは、TortoiseHg でcloneする時に指定することができます。

まとめ

今回は、Kiln上でレビューをしたり、以前のバージョンと比較を行ったりしました。

一人で開発しているのであれば、ここまでの作業で十分です。しかし、複数人で作業をしていると、これだけではすみません。次回は、複数人で開発している場合に特有の問題を解決します。