vicc blog

株式会社ヴィックの技術ブログです。

Rhinoでモデルのバージョン管理をするために

壁谷です。みなさん、Rhinoでモデルのバージョン管理ってどうしているでしょうか?

年単位の長いプロジェクトをやっていると一つの全体モデルを皆で一部更新、一部更新と繰り返すことでパッチワーク的にモデルが更新されていきます。これ自体は普通のことで全く問題ないのですが、後々に全体モデルを見た際に、個々の修正内容がいつ行ったものか、最新の形状に更新されているか、などがわかりにくくなります。

そして大抵の場合、プロジェクトの途中で問題が起こります(笑)。その際に原因究明と対応策を立てるために下記のような情報が必要になります。

  • この部分のオブジェクトはいつ修正作業が行われたものか
  • 〇月〇日の修正チェックは反映されているか
  • この部分のオブジェクトは「どの・いつ」のGHを使用したか
  • 参考にした受領モデルはなにか
  • 作業者

このあたりの情報がはっきりしないとモデルの状況の確認に時間を費やすことになり、さらにこれがかなり昔に作業したものだった場合、それだけモデルの履歴を追うのが難しくなります。

そこでどうすることにしたかというのを今回はご紹介しようと思います。

自作コマンド "Commit" をつくる

まずRhinoのコマンドの作り方について軽く触れておきます。スクリプト自体はpythonで、それを任意の名前でコマンド化することが出来ます。詳しいやり方はこちらをみてください。

では本題です。見出しの通り "Commit" というコマンドをつくり、選択したオブジェクトに対して下記のKey/Valueを書き込むようにしました。

  • CMT_DATE: yymmdd
  • CMT_GH: その時開いているGHファイル名_yymmdd
  • CMT_MSG: メッセージ、もしくは参照ファイルなど自由に
  • CMT_OPERATOR: PCのユーザー名
  • CMT_VER: オブジェクトのバージョン。更新されるたびに+1されていく

コマンドを実行した際、オブジェクト自体がこれらのKey/Value持ってない場合は自動的に生成され、すでに持っている場合はValueが上書きされるようになっています。

"Commit"コマンドの運用の仕方

"Commit"は一つの作業内容が終わったタイミングで、メッセージ ("CMT_MSG") に内容を記載し、情報を書き込む、というのがよいと思います。作業内容毎に"Commit"しておくことで、いくつかの作業内容を同じ日に行った場合でも、"CMT_MSG"と"CMT_GH"を見れば、オブジェクト単位でどのような修正を行ったかが識別できるようになります。

また、実行のたびに情報を書き込むオブジェクトを選択するようにしているので、他と別のメッセージを残しておきたい場合は、二回に分けて"Commit"すると別々のメッセージを残せるのでよいと思います。

そのオブジェクトに対して初めて"Commit"する場合、Key/Valueは自動的に生成され、書き込まれます

選択したオブジェクトがそれぞれ違うKey/Valueを持っている場合、"CMT_VER"はオブジェクト毎に+1され、その他の情報は新規の情報に上書きされます

これまでの経緯

モデルにこういった情報を書き込みたいということは、割と早い段階からチーム内でも共通認識としてありました。そのため「毎回作業をしたら、作業日とGHファイル名入れよう」だったり、「Key/Valueを書き込むGHをつくって修正作業後はこのGHを一度実行しよう」といったようにルール化してやっていましたが、忘れてしまうことがたびたびあり、あまり定着しませんでした。コマンド化しようと思ったのは、"Save"は誰もが絶対やる、それと同じようにしたらよいのでは、というのが発端でした。

すでに@naoki-yoshiokaと@daichi-masuda、彼らがKeyの種類を整理し、python化してくれていたので、コマンド化してひとまず運用してみることにしました。

コマンド化した結果

感触としてはかなり良いです。狙っていた通り、"Save"するのと同じ感覚で"Commit"を実行出来るので、実行する際の心理的ハードルがほとんどありません。これなら細かい単位で情報の更新ができそうなので、今までよりモデルの情報管理の精度が格段に上がりそうです。

今後の展望

この"Commit"コマンドですが、今は5つのKeyがありValueは上書きされていくようにしています。そのためモデルのバージョン管理という視点だと直前の情報しか持っていません。実施設計フェーズではその情報量が適切だと思いますが、生産設計フェーズではもう少し詳細に履歴を追えるようにする必要がありそうです。それは今後の展開として検討していきたいと思っています。

モデルのバージョン管理に必要な情報量もフェーズによって対応していきましょう

最後に

私達も通常業務をこなす中で、チーム内でこれは毎週月曜にチェックしようとか、絶対忘れないように習慣化しよう、というのをよくやります。それでうまくいくこともありますが、忙しさにかまけて後回しにしてしまうことも少なくありません。

必要なことが定着しないなら、やり方自体を疑って別のアプローチを考える、というのは大切な視点だなと改めて思いました。今回もコマンド化することで情報更新のアフォーダンスをもう少し促せるのでは、という視点からアプローチしてみましたが、悪くはなさそうです。

ひとまずこれで運用してみて様子を見ていこうと思います。

本日の"Commit"コマンドのスクリプトはこちらです。何かこれについてもっと良い案があればぜひ教えてください。あとは使った感想などもぜひ。

ではまた。