Caché/Ensemble のソース管理 インターシステムズジャパン テクニカルコンサルティング部コンサルタント古薗知子 セッションの目的 Caché/Ensemble におけるソース管理の概要をご理解頂く Subversion スタジオフックの使 法をご理解頂く 2
アジェンダ Caché スタジオソースコントロールフックの概要と仕組み チーム開発形態 Subversion ソースコントロールフックの設定 Subversion ソースコントロールフックの使 法 ( デモ ) 3 スタジオソースコントロールフック 4 スタジオには カスタムフック ( ドキュメントがロードまたは保存されるときに 必ず実 されるコード ) を実装するメカニズムが備わっています %Studio.Extention.Base %Studio.SourceControl.Base : 基本的なドキュメント管理のためのメソッドや ソースコントロールツールを操作するためのベースとなる要素を提供 これらを拡張して独自のソースコントロールフック機能を作成できます http://localhost:<port>/csp/docbook/docbook.ui.page.cls?key=gstd_hooks
ソースコントロールの対象と範囲 ソース管理の対象 : クラス定義 ルーチン インクルード ファイル CSP をエクスポートした xml ファイル ソースコントロールはネームスペース毎に設定 5 スタジオフックを使用したソースコントロールの動き 保存 ( コンパイル ) リポジトリ ( ロード ) エクスポート ローカルワークスペース コミット Checkout/ Update 6
サンプル Subversion(SVN) フッククラス VSS(6.0 及び 2005) フッククラス Samples ネームスペースのサンプル Studio.SourceControl.Example.cls : ソースコントロールシステムの呼び出しを実 しない部分的な例 7 Ensemble 管理ポータル 8
Caché/Ensemble のチーム開発形態 中央開発型 分散開発型 9 Caché/Ensemble のチーム開発形態 中央開発型 ユーザ ( 開発者 ) は 中央の Caché サーバにログインして そこで開発を う ワークスペースも中央サーバに 1 か所存在し そこからリポジトリに登録 コンフリクトは起こらない 単純なリビジョンの管理に使 ユーザ :Caché インスタンス ( ネームスペース ): ワークスペース : リポジトリ = N:1:1:1 開発 / テストサーバ ワークスペース リポジトリ Caché 10 ユーザ / 開発者
Caché/Ensemble のチーム開発形態 分散開発型 (1) ユーザ ( 開発者 ) は それぞれローカルに Caché インスタンス及びワークスペースを持ち 各ローカル環境から 中央サーバ上のリポジトリに登録 ソース配布は権限を持つ代表ユーザが う ユーザ :Caché インスタンス ( ネームスペース ): ワークスペース : リポジトリ =N:N:N:1 開発 / テストサーバ リポジトリ Caché ( ソース配布 ) ワークスペース 11 Caché ユーザ / 開発者 Caché/Ensemble のチーム開発形態 分散開発型 (2) ユーザ ( 開発者 ) は それぞれローカルにCachéインスタンス及びワークスペースを持ち 各ローカル環境から 中央サーバ上のリポジトリに登録 ソース配布 に 中央 Cachéサーバ上にもSVNクライアントとワークスペースをセット ( リポジトリへの更新はしない ) ユーザ :Cachéインスタンス( ネームスペース ): ワークスペース : リポジトリ=N:N:N:1 開発 / テストサーバ ( ソース配布 ) リポジトリ ワークスペース Caché ワークスペース 12 Caché ユーザ / 開発者
SVN 用ソースコントロールフック kutac.svn.sourcecontrol.cls : Subversion のソースコントロールフッククラス ( 現在の最新 =SVN Hook 312xml) 3.1.2.xml) 1. InterSystems 製品やその 部ではなく サンプルとして提供しています これをテンプレートとして 由に変更し 独 のソースコントロールフック機能の作り込みにお役 てください 2. 使 するには Subversion 及びソース管理に関する知識が前提となります 13 設定 SVN サーバの設定 SVN サーバアプリケーションのインストールと設定 SVNクライアントの設定 SVNクライアントアプリケーションのインストール Caché/Ensembleの設定 SVNフックツールの設定 以下の例では Visual SVN 使 14
SVN サーバの設定 SVN サーバアプリケーションのインストール 設定内容 Location : インストール先 Repositories : リポジトリの場所 Server Port : サーバポート Authentication : 認証 法 15 SVN サーバの設定リポジトリの作成 管理コンソールよりリポジトリを作成例 )Repository Name : CACHE 16
SVN サーバの設定 SVN ユーザの作成とアクセス権限の設定 管理コンソールよりユーザを作成し リポジトリに対するアクセス権限を設定例 )User Name : cacheuser 1. ユーザ名 パスワードは後で設定する Caché ユーザと同じ 2. 各開発者を識別できる分のユーザを登録 ( 推奨 ) 17 SVN クライアントの設定 SVN クライアントアプリのインストール svn.exeが含まれるsvnクライアントアプリをインストール例 ) Visual SVN Management Console Only Tortoise SVNは svn.exeを含んでいないので 別途 svn.exeをインストールする必要があります svn.exeのパスをpath 環境変数に設定 ( 推奨 ) 例 ) "C: Program Files (x86) VisualSVN Server bin 18
SVN クライアントの設定 Caché/Ensemble の設定 ユーザの作成 : 管理ポータルのセキュリティメニューから SVN サーバに作成したものと同じユーザ名 パスワードでユーザを作成 スタジオに って開発 リポジトリ登録を実 するユーザ 権限は %Developer 以上が必要 SVN フックソースのインポート & コンパイル : SVN Hook.xmlを ソース管理する対象のネームスペースにインポート & コンパイル 19 SVN クライアントの設定 Caché/Ensemble の設定 ソースコントロールを有効に設定管理ポータル : [ システム管理 ] > [ 構成 ] > [ 追加の設定 ] > [ ソースコントロール ] 20
SVN クライアントの設定 SVN フックの設定 Caché スタジオに Subversion メニュー追加 21 SVN クライアントの設定 SVN フックの設定 [Subversion] [Setting] より各設定項 を 22
SVN クライアントの設定 SVN フックの設定 設定内容 SVN command: svn.exe のパス Workspace タブ >Local Folder: ワークスペースフォルダのパススフォルダのパス Repositoryタブ >Repository: リポジトリのパス Eventsタブ >Perform automatic checkout/update on project load : プロジェクトロード時の 動 checkout/update Eventsタブ >Perform automatic commit on item deletion : アイテム削除時の 動コミット Eventsタブ >Pass credentials: パスワード認証するか Otherタブ >Test Machine URL: ソース配布先のURL(CSPアプリ名 ) Otherタブ >Command for Merge Tool: マージツールexeのパス 23 SVN フックのメニュー メインメニュー ポップアップメニュー 24
SVNHook の使用方法 分散開発型でチーム開発をしていることを前提 デモで使 する設定 SVN command: C: Program Files VisualSVN Server bin svn.exe Workspace タブ >Local Folder: C: sandbox projectname Repository タブ >Repository: https://v-st1:8443/svn/cache/ projectname / Events タブ >Perform automatic checkout/update on project load: ON Events タブ >Perform automatic commit on item deletion: ON Eventsタブ >Pass credentials: ON Otherタブ >Test Machine URL: http://v-st1:57772/csp/test Otherタブ >Command for Merge Tool : C: Program Files TortoiseSVN bin TortoiseMerge.exe 25 SVNHook の使用方法 使 例 1: 新規プロジェクトを作成し 登録する 使 例 2:Subversion 管理下にある既存プログラムを編集し 変更を保存する 使 例 3: 既存のプロジェクトソースを Subversion 管理下に追加する 使 例 4: 新しい開発者がプロジェクトに参 する 使 例 5: コンフリクト ( 衝突 ) が起きてしまった 26
SVNHook の使用方法 使用例 1: : 新規プロジェクトを作成し 登録する <STEP> 1. 新規プロジェクトを作成 保存 2. 設定内容に合わせて リポジトリにフォルダと Project Structure を作成 3. プロジェクトを 旦閉じ 再度開く 4. 新規プログラム ( クラス ルーチン ) を作成しコンパイル 5. Pre-Commit Check: コミット前の状態チェック 6. Commit File: コミット 27 SVNHook の使用方法 使用例 2:Subversion 管理下の既存プログラムを編集既存プログラムを編集 保存する <STEP> 1. 編集するプログラムを開く 動的に svn status t u v が実 される バージョンに相違があり 最新バージョンに updateする場合は [Update to Head Revision] を実 2. プログラムを編集し コンパイル 3. Pre-Commit Check 4. Commit (5. リポジトリに登録されたソースを確認 ) 28
SVNHook の使用方法 使用例 3: 既存のソースを Subversion 管理下に追加する <STEP> 1. スタジオのSubversionメニューの [Import Project to Subversion] を選択 実 2. 設定画 で import するプロジェクト エクスポート先のフォルダを して実 ソースは ここで指定するフォルダに 旦エクスポートされ リポジトリにインポート (svn import) される 3. Check out を実 し リポジトリとローカルワークスペースを同期 リポジトリからローカルワークスペースにxmlファイルがロードされる 29 SVNHook の使用方法 使用例 3: 既存のソースを Subversion 管理下に追加する < 図解 > Import Project to Subversion ( ロード ) ローカルワークスペース エクスポート Checkout/ Update 反映 エクスポート フォルダ リポジトリ svn import 30
SVNHook の使用方法 使用例 3: 既存のソースを Subversion 管理下に追加する <Import 設定画 > 31 SVNHook の使用方法 使用例 4: : 新しい開発者が既存プロジェクトに参入する <STEP> 1. 対象プロジェクト名で新規プロジェクトをローカルネームスペースに作成 保存スに作成 2. プロジェクトを再オープンし Checkout を実 これにより ローカルワークスペースにリポジトリから xml ファイルがロードされる 3. 必要なプログラムソースを ローカルワークスペースから ネームスペースにインポートスにインポ この場合の インポート は svn importではなく 通常のxmlソースのインポート ( ツール ローカルからインポート ) 32
SVNHook の使用方法 使用例 4: : 新しい開発者が既存プロジェクトに参入する < 図解 > プロジェクトの作成 保存リポジトリ ロード インポート ローカルワークスペース 反映 Checkout 33 SVNHook の使用方法 使用例 4: : 新しい開発者が既存プロジェクトに参入する 他ユーザが新規にリポジトリに登録したソース つまり 環境のインスタンスに存在しないソースは スは checkout および update だけでは ローカルネームスペースに反映されません 旦ローカルワークスペースに反映されたものを ネームスペースにロードスにロ ( 通常のインポート ) する 必要があります 34
SVNHook の使用方法 使用例 5: : コンフリクト ( 衝突 ) が起きてしまった Subversion はコンフリクトを検出した際 コンフリクトが発 したファイルに 衝突場所を す特殊なマーク付けを います また 同時に 次の 3 つのファイルを作成します filename.mine ( 例 )Test1.mac.xml.mine : 更新を う前に作業コピーにあったファイル このファイルには作業コピーで った最後の変更が含まれている filename.roldrev ( 例 )Test1.mac.xml.r10 : 作業コピーを変更する直前のリビジョン ( チェックアウトもしくはコミット時 ) のファイル filename.rnewrev ( 例 )Test1.mac.xml.r12 : 作業コピーを更新したときにリビジョンから受け取ったファイル リポジトリのHEADリビジョンに対応している コンフリクトを解消するには 正しく修正 マージを い その後 svn resolved を実 して 解決されたことをSubversionに通知し 35 ます ( これにより上記 時ファイルは削除されます ) SVNHook の使用方法 使用例 5: : コンフリクト ( 衝突 ) が起きてしまった <STEP> ( 法 1) マージツールを使 して解決する 1. Subversion メニューより [Merge] を実 し マージツールを起動 Subversion メニューから Merge を実 するには スタジオの Subversion 設定 (Other タブ ) で マージツールのパスが設定されている必要があります 2. 各マージツールの使 法に従い 差分のあるソースをマージ ファイルをマージする 法は ツールによって異なります 3. コンフリクトが解決されたら Subversionメニューの [Resolved] を実 これにより マージ処理に使 されたワーク ファイルが削除 36 され ワークスペースがクリアされます
SVNHook の使用方法 使用例 5: : コンフリクト ( 衝突 ) が起きてしまった 37 <STEP> ( 法 2) 動で ( マージツールを使わずに ) 解決する 1. 差分のあるファイルの内容を確認し 修正 2. コンフリクトが解決されたら Subversion メニューの [Resolved] を実 SVN Hookを利 してSVN 管理される対象が Cachéプログラムをエクスポートしたxmlファイルであるため マージツールで 較 修正する対象も 当然 xml ファイルとなります そのため マージツール上で修正を うのは 常に分かりづらくなる場合がありますので 注意が必要です 複雑なマージを う場合には 差分のみをマージツールやその他のクライアントツールで確認し 修正は直接スタジオで うという 法をお勧めいたします SVNHook の使用方法 使用例 5: : コンフリクト ( 衝突 ) が起きてしまった <TortoiseMerge の画 > 38
ご参考 スタジオメッセージと SVN ステータス 各 SVN 処理の実 時 スタジオ出 には コマンドの実 結果 (SVNからの出 内容) がそのまま表 されます 処理結果や出 ステータスによっては その後にしかるべき対応をする必要があります 各ステータスの す内容 svn updateの結果の内容については SVNのマニュアルをご確認ください ( 下記サイトは 例です ) http://www.caldron.jp/~nabetaro/svn/svnbook-1.4- nabetaro/svn/svnbook final/svn.ref.svn.c.status.html http://www.caldron.jp/~nabetaro/svn/svnbook-1.4- final/svn.ref.svn.c.update.html 39 最後に SVN Hook を使 するには Subversion の知識があることが前提です 実運 に る前に SVN Hookの動きを 分に確認してご使 ください コマンドラインからの実 や Tortoise 等のクライアントツールも適宜併 してご利 ください 実際にご使 される 向けに より詳細を記載したマニュアルをご 意しております 40
ご質問 41 ありがとうございました 42