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

Simulinkモデルのバージョン管理システムを構築しよう企画の2回目です。

Simulinkモデルのバージョン管理(1)では、バージョン管理システムの基本について、ものすごくざっくり書きました。

これをベースに、もうちょっと突っ込んだ内容を確認しましょう。

今回のテーマは、「中央型」と「分散型」の違いについてです。

リポジトリをどこに置くのか?

リポジトリとは、バージョン管理システムが、過去のバージョンを保存するための場所でした。では、これをどこに置いたらいいのでしょう?

  • 中央型リポジトリ - 1つのサーバーに置きます
  • 分散型リポジトリ - 複数のサーバーに置きます

2つの考え方があって、「中央型」では、1つのサーバーで集中管理します。一方、「分散型」では、複数のサーバーに分散させます。

といっても訳が分からないですから、もうすこし詳しく見てみましょう。

中央型リポジトリ

CVS、Subversionなどが、これに属します。

中央型では、すべての開発者が1つのサーバーにアクセスします。リポジトリは中央サーバーに置かれ、この1つのリポジトリに対して、みんながそれぞれに保存したり(=コミット)、取り出したり(=チェックアウト)します。

中央リポジトリに、全員がアクセスする

とても分かりやすい形ですね。この方式のいいところは、中央でしっかりと管理できるという点です。

たとえば、ecVERSIMを使うと、Simulinkモデルをロックする事ができます。ロックとは、他人がファイルを編集できないようにするという事です。(ただしくは、コミットできなくする)

Simulinkモデル全体だけでなく、とあるSimulinkのサブシステムを1つだけロックする事も出来ます。他のサブシステムはいじってもいいけど、このサブシステムは編集したらダメよ、と。

このアイデアは、とても素晴らしいものです。Simulinkモデルが巨大になってくると、一人でメンテナンスする事が難しくなります。そんな時、なるべく分業を楽にするよう、サブシステム単位でロックを掛けられると、とても便利です。

分散型リポジトリ

Git、Mercurial、Bazaarなどがこれに属します。

分散型リポジトリでは、リポジトリのコピーをあちこちのマシンにばらまきます。それぞれ、好き勝手なリポジトリにアクセスするわけです。

リポジトリのコピーがいっぱいあり、めいめいにアクセスする

そうすると・・・最初は内容がおなじだった各リポジトリが、あっという間に食い違ってきます。ですから、適当な所で同期をとらないといけません。その作業をマージといいます。分散型で開発を行うと、バージョングラフは次のようになります。

枝分かれするバージョン

途中で枝分かれしているのは、別々のリポジトリに分かれて、それぞれ個別にコミットしていたためです。そして、ある程度作業がまとまったところで、マージしてVer1.05という1つのバージョンに戻っています。

分散型では、このようにバラバラのリポジトリに、バラバラにコミットしつつ、たまーにマージして1つのバージョンにまとめる、というような作業を行います。

ちなみに、リポジトリは開発PC内に置いても構いません。開発PCの中に、リポジトリをごっそりコピーしてくる事も普通にできます。

開発PC上のリポジトリ

こうすると、バージョン管理用サーバーとつながっていなくても、開発PC単体でバージョン管理が出来ます。開発PC上でコミットした内容は、あとからサーバー上のバージョン管理システム内リポジトリに反映させる事もできます。

分散型リポジトリのメリット

一般的なソフトウェア開発の場合

一般的なソフトウェア開発において、分散型リポジトリのメリットで良く言われるのが、規模の問題です。1つのサーバーに1000人とかがアクセスしだすと、収集がつかなくなります。ですから、分散型でもって階層構造をつくることで、1つのサーバーに対するアクセスを減らします。

これは、会社組織と同じです。社長の下に部長がいて、部長の下に課長、係長、主任がいて、という階層構造。この階層構造のおかげで、社長が何万人もの社員に1人1人指示を出さなくても済みます。これと同じ事です。

モデルベース開発の場合

ただし、モデルベース開発において、1つのモデルを数千人とかがアクセスするなんて、まず考えられません。そういう意味では、分散型リポジトリのメリットはありません。

そのかわり、こと自動車業界向けのモデルベース開発においては、別のメリットが出てきます。それは、中央サーバーと必ずしも繋がっていなくてもいい、という点です。

まず、中央サーバーとの通信が何らかのトラブルで断絶してしまった場合。そんな場合でも、お客様は待ってはくれません。分散型であれば、耐障害性はかなり高くなります。

そして何より、モデルは車載で動かす事があります。実際の車両に乗り込み、ラピッドプロトタイピングのためのECUを配置し、その1部あるいは全部のアルゴリズムを、Simulinkモデルで置き換えます。そして実際に試験をしてみて、具合がわるければ、その場でパラメータを書き変えます。

書き換えているうちに、あれ・・・おかしいな・・・さっきはうまくいったのに?という事になった場合。中央型サーバーを車に持ち込むことは非現実的です。ですから、中央型の場合はバージョン管理が効きません。しかし、分散型の場合は開発用のノートPCにリポジトリをまるごと入れておけますので、普通にバージョン管理が出来ます。過去のバージョンと比較して、どこのパラメータがどう書きかえられたのか?という事が簡単に見られます。これは大きなメリットと言えます。

車載でもバージョン管理ができる

まとめ

バージョン管理システムには、中央型と分散型があります。

中央型のメリット: ecVERSIMなどのツールと組み合わせて、きめ細かいモデル管理が出来る

分散型のメリット: 耐障害性が高く、車載でのプロトタイピングなどにも対応できる

中央型は既にecVERSIMという素晴らしいツールがありますので、今回の企画では分散型でもって環境構築をおこなう事にします。

おまけ

開発PC内にリポジトリが置ける事を、あたかも分散型の特権のように書いてしまいました。

しかし、実は中央型であっても、リポジトリを開発PC上に置く事は可能です。たとえばSubversionの場合、リポジトリはサーバー上だけでなく、ローカルフォルダ上に作成する事もできるようになっています。ですから、一人でやる分には、中央型だろうが分散型だろうが、開発PC単体でのバージョン管理は可能です。

ただし問題になるのはマージという作業です。分散型の場合、マージを頻繁に行う事になるため、マージ機能がとてもよく出来ています。一方、中央型ではマージのための機能がプアで、ちょっと難しい事をしようとすると、すぐにエラーになります。

そんなわけで、開発PC単体でのバージョン管理は中央型、分散型ともにできるのですが、その内容を他のリポジトリに簡単に伝搬できるか?という話になると、圧倒的に分散型が有利になります。

2 thoughts on “Simulinkモデルのバージョン管理(2)”

  1. スムーズ・ワークス 吉武様

    お世話になっております。
    コードファインの森川です。

    :
    のメールアドレスがエラーになってしまったので
    こちらでご連絡させていただきました。

    ブログを時々拝見しております。
    そろそろ前にお話しいただいていた、medini uniteの
    紹介になりそうかな、と思っておりましたが、
    お忙しくなったということで、掲載が遅くなって
    待ち遠しいです。
    年度末の受注おめでとうございます。

    さて、この度弊社では、ホームページを刷新することになりました。
    会社概要の中にビジネスパートナー欄を設け、日頃よりご協力や
    アドバイスをいただいている会社様を掲載し会社HPへリンクを貼らせて
    いただければ考えております。
    是非、御社にもご了解を賜りますよう、よろしくお願い致します。

    <新HP案>
    http://codefine.co.jp/codefile_html0215/

    <掲載概略>
    会社名のみ掲載
    会社名クリックで御社HPへリンク

    <ご依頼予定の会社様>
    NEAT様
    VMC様
    サンミン様

    コードファイン 森川

  2. コメントありがとうございます。リンクの件は全く問題ございません。内容確認いたしましたが、とても立派な作りですね、さすがです。

    medini uniteのご紹介は、4月以降になってしまいそうです。素晴らしいツールなので、ぜひじっくり準備してからご紹介させていただきたいと思います。3月末の納品を乗り越えればほっと一息ですが、実は4月以降も作業予約が入っているため、記事の方は少しのんびりペースになるかも分かりません。

    あと、メールアドレスの件ですが、 yositake ではなく yoshitake と、Hを余分に入れられているのが原因という事も考えられます。ご確認いただければ幸いです。

    今後とも、よろしくお願い致します

Comments are closed.