目次


Rational ClearCase ベスト10トリガー

第1回 「ベスト10トリガーの使用方法・予防トリガー・操作後トリガー(前編)」

Comments

はじめに

Rational® ClearCase®(以下、ClearCase)は、小規模〜大規模なソフトウェア開発チーム向けのソフトウェア構成管理ツールです。 ツールが複雑であるだけでなく、使用法が各開発者によって異なることから、ソフトウェア構成管理者には難題が課せられます。

この数年の間に、私はClearCaseを使って多くのインプリメンテーションやプレゼンテーションを行いました。この経験で私が認識したことは、各プロジェクトは固有であること、各組織が独自のアプローチで問題の解決にあたっているということ、そして、ClearCaseの使用法について、常に同じ質問が発せられるということです。

私は、どのプロジェクトも一からやり直すつもりはなかったので、インプリメンテーションで自分が使った有益なトリガーをいくつか収集しておきました。さまざまなプロジェクトでの適用性を高めるため、これらのトリガーは、できるだけ一般的なものにしておきました。

この習慣は大いに役立ちました。今では、ClearCaseの使用法について繰り返し発せられる質問にも、このトリガーのコレクションを使って、簡単に答えることができるようになりました。

本記事では、ソフトウェア構成管理者の日常業務を支援する10種類の最も有益なトリガーについて説明します。

使用法

注意:本記事のトリガーは、すべて「現状のまま」提示してあります。これらのスクリプトやトリガーに対して、IBMから正式なサポートは提供されません。

ClearCaseマニュアルに説明されているように、トリガーは常にクライアント・コンピューター上で、ClearCaseコマンドを開始したユーザーIDを用いて開始します。

私のトリガーは、すべてshell/バッチ、Perlの3言語のいずれかで直接開発したものか、またはClearCase API(CAL)を使用して開発したものです。

私はPerlのエキスパートではないので、Perl言語に関する知識も限られていますが、これらのスクリプトは理解しやすいと思います。私はVisual Basicのエキスパートでもありません。私のVBプログラムをより最適化された方法で書き直せると思われる方もいらっしゃるかもしれません。

ともあれ、これらのスクリプトに関するご意見や、改善のための助言をお寄せくだされば幸いです。

ベスト10トリガー

以下に、Rationalコンサルタントとしての日常業務の中から私が厳選した、ClearCaseで使用するトリガーのベスト10を示します。これらのトリガーは、Christian BuckleyとDarren Pulsipherによる記事Trigger happy: Overcoming entropy in software engineering(英語)で推奨されていた通りに分類してあります。

これらのトリガーを使用するには、VOBオーナーであることが条件で、コマンドの実行先であるVOBにアクセスしている必要があります。各トリガーには、VOBにアタッチするためのコマンドが関連付けられています。

トリガー・スクリプトは、共有ディレクトリー(UNIXで共有する場合はNFS、Microsoft Windowsで共有する場合はSMB) に保存する必要があります。ClearCaseトリガーとスクリプトの保存に最適な中央領域は、VOB storage shareです。この領域が利用できない場合は、VOBへのアクセス権がないことが考えられるため、トリガーも必要ありません。

大きな組織の場合は、ClearCaseトリガーとスクリプトをバージョン管理下に置き、以下のようなパスを用いてアクセスすることができます。

  • /view/administration_view/VOB/trigger_VOB/directory (UNIX)
  • \\view\administration_view\trigger_VOB\directory (Windows)

いずれの場合も、クライアント・コンピューター上でadministration_viewを表示できなければなりません。 たとえば、本記事で紹介するすべてのトリガーは、以下のディレクトリーに保存されています。

  • /net/titeuf/triggers/(UNIX)
  • \\mw-ddiebolt\triggers\(Windows)

予防トリガー

ClearCaseには、非常にパワフルなコマンドが備わっているため、特定のClearCaseインストールでは、これらのコマンドへのアクセスを制限する必要があるかもしれません。以下のトリガーは、一部のプロジェクト・ユーザーによって特定のClearCaseコマンドが開始されないようにする方法を示しています。

1. Rmelem トリガー

cleartool rmelemコマンドは、ClearCaseにおける最もパワフルなコマンドの1つです。このコマンドは、バージョン管理からエレメントを完全に削除します。このコマンドによって損失した情報は回復できません。このコマンドを不注意に使用すると、組織が以前のリリースをサポートできなくなる場合があります。

このコマンドは使用を誤ると壊滅的な状況になりかねないため、たいていの場合は、cleartool rmnameコマンドを代わりに使用することをお勧めします。

まず、このコマンドにトリガーを施しておきたいと私が考えるのも、おわかりいただけるでしょう。

【トリガーのインストール/トリガー・スクリプト】

トリガーの定義:
cleartool mktrtype -c "Trigger to avoid rmelem command"
-element -all -preop rmelem -execwin "ccperl -e \"exit 1\""
-execunix "Perl -e \"exit 1 \"" NO_RMELEM

トリガー・スクリプトは極めて単純です。このスクリプトにより、ClearCaseの埋め込みPerlインタープリタが開始され、false状態で終了するため、ClearCaseコマンドrmelemが実行できなくなります。

【使用法】

ユーザーがrmelemコマンドを実行しようとすると、次のメッセージが表示されます。
Z:\rdn>cleartool rmelem test.txt
CAUTION! This will destroy the element, all its branches and
versions, including all data, meta-data and history, and will
remove the element from all directory versions that now
contain it. Once you destroy the element, there will be no
way to restore it to its current state.If you want to
preserve the element, but remove references to it from future
directory versions, use the "rmname" command.

Element "test.txt" has 1 branches, 4 versions, and is entered
in 1 directory versions.
Destroy element?  \\\\\[no\\\\\] yes
cleartool: Warning: Trigger "NO_RMELEM" has refused to let
rmelem proceed.
cleartool: Error: Unable to remove element "test.txt".

Z:\rdn>

操作後トリガー

ClearCase操作の後、操作後トリガーを実行することにより、操作と後処理が確実に連動して実行されます。たとえば、チェックインやチェックアウトの後、e-mail情報が送信されるようにしたい場合があります。一般的な後処理を実行するトリガーを以下に示します。

2. コメント確認トリガー

\\\\\
[エラー・メッセージを作成してくれたRob Platt氏に感謝します。
\\\\\]

【トリガーのインストール/トリガー・スクリプト】

トリガー・スクリプトのインストール・コマンド:
cleartool mktrtype -c "Trigger to check comment" -element
-all -postop checkin -execwin 
"ccperl \\mw-ddiebolt\triggers\check_comment.bat" 
-execunix "Perl /net/titeuf/triggers/check_comment.pl" 
CHECK_COMMENT
トリガー・スクリプト:
@rem = ' PERL for Windows NT - ccperl must be in search path
@echo off
ccperl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
goto endofperl
@rem ';

$CLEARCASE_COMMENT      = $ENV{CLEARCASE_COMMENT};
$CLEARCASE_FILE1        = $ENV{CLEARCASE_PN};
$CLEARCASE_FILE2        = $ENV{CLEARCASE_XPN};

if ( $CLEARCASE_COMMENT eq "" )
        {
        $text = "Caution : We kindly ask you to put comments
		in the future...";

        $status = system("clearprompt proceed -prompt \"
		$text\"-prefer_gui");
        }

__END__
:endofperl

このスクリプトで、コメントが追加されているか否かを確認します。コメントが残されていない場合は、"clearprompt"が開始され、事前に設定したメッセージがユーザーに表示されます。

3. 空ブランチの削除

開発者は、多数のブランチを有する複雑な構成仕様を作成しがちです。変更の必要性に備えてファイルをチェックアウトし、結局、気が変わってチェックアウトを取り消すということもあります。

これにより、空のブランチを有するエレメントが作成されてしまいます。これらのブランチには、バージョン0が含まれています。

空のブランチによって障害が発生したり、性能が劣化したりすることはありませんが、不必要なブランチは削除しておく方が整理できます。

不要な空のブランチを削除するためのトリガーは、次の通りです。

【トリガーのインストール/トリガー・スクリプト】

トリガーのインストール:
cleartool mktrtype -c "Automatically remove empty branch" 
-element -all -postop uncheckout -execwin "ccperl 
\\mw-ddiebolt\triggers\test_empty_branch.bat" 
REMOVE_EMPTY_BRANCH
トリガー・スクリプト:
@rem= 'PERL for Windows NT - ccperl must be in search path
@echo off
ccperl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
goto endofperl
@rem ';

###########################################
# Begin of Perl section

use strict;

my $idstring = $ENV{CLEARCASE_ID_STR};
my $element  = $ENV{CLEARCASE_XPN};
my $count = 0;
my $nidstring = $idstring;
my $string;

#printf "\n Trigger is fired $idstring...\n";
$nidstring =~ s/\\0/XXXXXXXXXX/g;
$count = ($nidstring =~ tr/X//);
#printf ("\n $nidstring Count : $count \n");

if ($count == 10)
        {
        # printf "\n Only version 0 \n";
        $nidstring = $idstring;
        $nidstring =~ s/\\main\\0/XXXXXXXXXX/g;
        $count = ($nidstring =~ tr/X//);
        # printf ("\n $nidstring Count : $count \n");
        if ($count != 10)
                {
                $element =~ s/\\0//g;
                $string = "cleartool rmbranch -force 
				$element";
                system($string);
                #printf "\n ToDo : $string \n";
                }
        else
                {
                # We cannot delete branch main !!!
                }
        }
else
        {
        # There is not only version 0 !!!
        }

# End of Perl section

__END__
:endofperl

このスクリプトは、バージョン0のみを含むブランチを自動的に削除します。

注意: バージョン0にラベルが付いている場合や、チェックアウトを取り消したチェックアウト・バージョンの場合も、ブランチは削除されます。

【使用法】

使用例を以下に挙げます。
Z:\rdn>cleartool mkbranch test_branch test.txt 
Creation comments for "test.txt@@\main\test_branch":
.
Created branch "test_branch" from "test.txt" version 
"\main\1". cleartool: Warning: Version checked out 
("\main\test_branch\0")is different from 
version selected by view before checkout ("\main\1
").
Checked out "test.txt" from version "\main\test_branch\0".

Z:\rdn>cleartool unco test.txt
Save private copy of "test.txt"?  \\\\\[yes\\\\\] no
Removed branch "Z:\rdn\test.txt@@\main\test_branch".
Checkout cancelled for "test.txt".

4. オーナー変更トリガー

\\\\\[この便利なトリガーについて教えてくれた
SwissLife/Urs Winkenbachに感謝します。\\\\\]

通常、ファイルをバージョン管理しているユーザーがそのファイルのオーナーとなります。エレメント・オーナーには、エレメントやバージョンの削除権など、当該ファイルに対する特殊な権限が与えられます。

すべてのエレメントが同じオーナー(VOBオーナー)に属しているというのが良い慣習です。通常、VOBオーナーはClearCase管理者でもあるため、普通のユーザーは多くの権限から除外されますが、多くの場合、これらの権限は普通のユーザーにはアクセスする必要のないものです。

【トリガーのインストール/トリガー・スクリプト】

トリガーの作成スクリプト:
cleartool mktrtype -c "Trigger to change element ownership"
-element -all -postop mkelem -execwin "ccperl \\mw-ddiebolt
\triggers\change_owner.bat" CHANGE_OWNER
トリガー・スクリプト:
@rem= 'PERL for Windows NT - ccperl must be in search path
@echo off
ccperl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
goto endofperl
@rem ';

$COMPUTERNAME           = $ENV{COMPUTERNAME};

$VOB            = $ENV{CLEARCASE_VOB_PN};
$filename       = $ENV{CLEARCASE_PN};

$owner = `cleartool describe -long VOB:$VOB | findstr owner
     | findstr \/v ownership`;
$owner =~ s/owner //g;
$owner =~ s/ //g;
chop $owner;

if (!($owner eq ""))
        {
        $status = system("cleartool protect -chown $owner 
		\"$filename\"");
        exit $status;
        }
fi

# End of Perl section

__END__
:endofperl

【使用法】

cleartool mkelemコマンドを用いて(GUIをコマンド・ラインから)新規ファイルをバージョン管理する場合、このスクリプトによって、ファイルのオーナーが自動的にVOBオーナーになります。

第2回 「操作後トリガー(後編)」


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Rational
ArticleID=312347
ArticleTitle=Rational ClearCase ベスト10トリガー
publish-date=10112006