Nintendo MessageStudio ヘルプ

# ファイル管理の仕組み

## チェックアウトした直後の状況

すべてのユーザーは作業を始めるときに「チェックアウト」を行います (チェックアウトのやり方についてはチーム管理機能の利用ページをご覧ください)。 チェックアウトとは、サーバが持っているファイルを、作業者のPC上にダウンロードしてくる作業です。 チェックアウトを行うと下の図が示すような状態になります。

この図が示すように、チームには複数のユーザーが存在します。 この解説ではTranslator AとTranslator Bが作業を進めていくとどのようなことが起こりえるかを ケースバイケースで解説します。

## 同一ファイルに対して同時に作業が発生しなかった場合

同じファイルが同時に編集されなかった場合は、もっとも単純で分かりやすい状態です。 まずは、この状態について解説します。
チェックアウト処理を行ったあと、Translator Bがファイルを編集したとします。その結果、サーバのものとは内容が異なりました。

Translator Bは自分の作業が終わったので自分の編集したファイルの内容をサーバにコミットします。 (コミットとは自分の編集内容をサーバにアップロードする処理のことです。 コミットのやり方についてはチーム機能の基本操作をご覧ください。) この結果、サーバにはTranslator Bが編集した新しいファイルが最新版としておかれることになります。 このとき、Translator Aのファイルはサーバよりも古い状態といえます (ただし、Translator Aはサーバに新しいファイルがアップロードされていることを知ることは出来ません)。

Translator Aは、Translator Bが編集したファイルを編集することなく、 サーバに対してデータを更新することにしました。 (「更新」とはサーバに対して変更のあった部分だけ効率的にダウンロードしてくる処理です。 チェックアウトよりも高速に動作します。) このタイミングで、Translator Aも、Bが編集したファイルを手にすることになります。

この場合は何も問題なく作業が最後まで進みました。

## 同時に同じファイルを編集した場合

チェックアウトした直後、Translator AとBが同時に同じファイルでの作業を進めてしまいました。 Translator AとBが違う言語の担当者の場合はこのような状況も当然あり得ます。 二人が編集したファイルは、サーバの内容とはそれぞれが異なっています。

Translator Aは、先に作業が終了したのでデータをコミットすることにしました。 しかしBはまだ作業が終わっていません。

Translator Bがようやく編集作業が終わりました。 早速Bはデータをコミットしようとしますが、Translator Aが先にデータをアップロードしているので、 コミットはブロックされます(out-of-dateとエラー表示が出ます)。

Translator Bは、自分の作業内容をコミットする前に、データを取得しなければならないことに気づきます。 「チーム」メニューから「更新」を選択します （操作方法についてはチーム機能の基本操作をご覧ください。)

Translator Bはサーバからデータを取得します。 すると、Message Studioは、可能な限り自動的に作業内容をマージします。 たとえば、Translator AとTranslator Bはこのとき、違うセルを編集していたとします。 この場合、Message Studioは自動的にマージを行うことが出来ます。 Translator Bの手元には、最新版(Translator Aの作業内容)と共に、自分がチェックアウトしてから今までやってきた作業内容両方を持っていることになります。 まだこの段階ではサーバにはTranslator Bの作業内容は反映されていません。 Translator Bは、仕事をすでに終えていますので、サーバにデータをコミットします。

この結果、Translator Aの作業内容とTranslator Bの作業内容が両方ともサーバに入ったことになります。 Translator Aはこの段階ではサーバと内容が異なっていますが、Translator Aが「更新」を行えば、 このタイミングでTranslator Aのファイルも最新版となります。

## 同時編集の結果、競合が発生した場合

もしTranslator AとBが同時に作業を進めた結果、Message Studioが自動的にマージできなかった場合にどのようなことが起こるかを解説します。 たとえば、Translator AとBが同一のセルを編集してしまった場合などです。 この場合、先にコミットされたAのファイルを、Bが更新しようとしたときに、Bは競合が発生していることを知ります。

このケースでは、Translator Bは、Translator Aと自分が編集した内容を見比べた上で、どちらを採用するか判断するように求められます (詳しくは競合とマージをご覧ください)。 Translator Bが、自分のデスクの上でどちらを採用するかすべて決めることが出来れば、競合状態は解決されたことになります。 競合状態が解決された場合、プロジェクトエクスプローラから警告アイコンが消えます。

競合が解決された場合、Translator Bはサーバにデータをコミットできるようになります。

- はじめに
- Message Studioの基礎
  - ゲーム製作のフロー
  - プロジェクトファイルについて
  - プロジェクトエクスプローラの操作
  - ウインドウ操作
  - 言語設定
  - カラーの設定
  - 属性の設定
- メッセージ編集
  - 基本操作
  - テキストの種類
  - クリップボードを利用した操作
  - 言語セルステータス
  - 表示のカスタマイズ
  - メッセージ一覧画面のTips
- タグ
  - 概要
  - タグを用いた編集
  - タグのソース文字列
  - タグ比較について
- 検索機能
  - 概要
  - 簡易検索
  - 詳細検索
  - 正規表現
- スペルチェック
  - スペルチェックについて
  - スペルチェックの利用方法
- ロールとパーミッション
  - 概要
  - ロールの追加とパーミッションの設定
  - ロールの選択
- メッセージの統計情報
  - 統計情報について
  - 統計情報の利用方法
- スタイル機能と幅計算
  - スタイルと幅計算について
  - テキスト幅の全体チェック
  - レンダリング方式について
  - スタイルの設定方法
- フォント
  - フォント機能の概要
  - フォントに関するワークフローについて
  - フォントの設定
- チーム管理機能
  - 概要
  - ファイル管理のされ方
  - チーム管理機能を利用する
  - 基本操作
  - コミットログを表示する
  - 差分(diff)を表示する
  - 競合とマージ
  - プロキシサーバの設定
  - サーバーの設定
- メタ情報の設定
  - メタ情報の設定について
  - 設定可能なメタ情報一覧
- リソースファイル関連
  - リソースについての概要
  - リソースファイルを出力する
  - 出力設定を行う
  - ビルドイベントについて
  - 共通のバイナリフォーマット
  - メッセージバイナリフォーマット
  - フローチャートバイナリフォーマット
  - プロジェクトバイナリフォーマット
    - プロジェクトバイナリフォーマット
    - カラー情報
    - コンテンツ情報
    - 属性情報
    - タグ情報
    - スタイル情報
  - タグについて
- マクロ文字列展開機能
  - マクロ文字列とは
  - 利用可能なマクロ一覧
- コマンドライン関連
  - コマンドライン制御について
  - /convertスイッチについて
- プラグインについて
  - プラグインの概要
  - プラグインの種類について
- プラグインの作成方法
  - 単純なプラグイン作成チュートリアル
  - 開発環境を利用しない作成方法
  - サンプルについて
- Message Studioのアセンブリ設定
  - Caspol：アセンブリセキュリティ設定
  - Ngen：ネイティブイメージ生成
- XML仕様
  - 概要
  - プロジェクトファイル（.msproj）のXML仕様
  - メッセージファイル（.mstxt）のXML仕様
- libmsについて
  - 概要
  - コンパイルの仕方
- 共通の関数
  - LMS_SetMemFuncs
- メッセージに関する関数
  - LMS_InitMessage
  - LMS_CloseMessage
  - LMS_SearchMessageBlockByName
  - LMS_GetMessageBlockInfoByName
  - LMS_GetTextNum
  - LMS_GetTextIndexByLabel
  - LMS_GetText
  - LMS_GetTextSize
  - LMS_GetTextByLabel
  - LMS_GetLabelByTextIndex
  - LMS_GetTextStyle
  - LMS_GetTextStyleByLabel
  - LMS_GetAttributeSize
  - LMS_GetAttribute
  - LMS_GetAttributeText
- フローチャートに関する関数
  - LMS_InitFlowchart
  - LMS_CloseFlowchart
  - LMS_GetNodeNum
  - LMS_GetEntryNodeIndex
  - LMS_GetNodeDataPtr
  - LMS_GetFlowNodeIndex
  - LMS_GetCaseIndexesFromBranchNode
  - LMS_GetFlowParamText
- プロジェクトに関する関数
  - LMS_InitProject
  - LMS_CloseProject
  - LMS_SearchProjectBlockByName
  - カラー情報に関する関数
    - LMS_GetColorIndexByName
    - LMS_GetColor
    - LMS_GetColorByName
    - LMS_GetColorNum
  - コンテンツ情報に関する関数
    - LMS_GetContentsNum
    - LMS_GetContentPath
  - 属性情報に関する関数
    - LMS_GetAttrInfoIndexByName
    - LMS_GetAttrType
    - LMS_GetAttrTypeByName
    - LMS_GetAttrOffset
    - LMS_GetAttrOffsetByName
    - LMS_GetAttrListItemName
    - LMS_GetAttrListItemNameByName
    - LMS_GetAttrNum
    - LMS_GetAttrListItemNum
  - タグ情報に関する関数
    - LMS_GetTagGroupName
    - LMS_GetTagName
    - LMS_GetTagParamName
    - LMS_GetTagParamType
    - LMS_GetTagListItemName
    - LMS_GetTagGroupNum
    - LMS_GetTagNum
    - LMS_GetTagParamNum
    - LMS_GetTagListItemNum
  - スタイル情報に関する関数
    - LMS_GetStyleIndexByName
    - LMS_GetRegionWidth
    - LMS_GetRegionWidthByName
    - LMS_GetLineNum
    - LMS_GetLineNumByName
    - LMS_GetFontIndex
    - LMS_GetFontIndexByName
    - LMS_GetStyleNum
- 扱うファイルの拡張子一覧
- よくある質問