# バックアップ

> 動かしたまま取る構成のスナップショット、保存済みのパスワードを別のコンピューターへ持っていくエクスポート、その場ではなく次の起動に予約される復元、そして実行履歴の索引の再構築です。

バックアップは、設定のページのデータの組のただ 1 つの行です。このカードは、すべてを動かしたままステーションの構成の写しを取り、保存済みのパスワードも一緒に別のコンピューターへ持っていく 1 つのファイルを書き出し、持っているものを並べ、その写しの 1 つを次の起動で構成と置き換えるよう予約し、その一覧が正しくなく見えるときに、記録された実行の索引を作り直します。カードは「アプリの構成（機器、タグ、ロジック、ダッシュボード、設定、そしてライブラリの画像、アイコン、シンボル）のスナップショットを取って、元に戻せるようにします。記録した実行記録とその履歴は別に保存され、バックアップや復元の影響を受けません。」から始まります。このページには **設定の変更** の権限が要ります。

## バックアップに何が入るか {#what-a-backup-contains}

バックアップは、構成のデータベースを動かしたまま取った写しです。SQLite のバックアップの仕組みで取るので、アプリが書き込んでいる間でも一貫しています（先行書き込みのログも含みます）。そのデータベースが持つものすべてが入ります。ドライバーの機器とタグ、Logic のアドレス空間（保持する値を持つ変数、アクション、トリガー、警報）、ダッシュボード、Process のモデル、ユニット、手順、レシピ、判定、テンプレート、ローカルユーザーとロール、OPC UA サーバーの構成、そしてこのページの設定です。データベースのファイルの隣に、ステーションは利用者の素材のフォルダー（ライブラリの画像、アイコン、シンボル）を兄弟のフォルダーへ写すので、復元は写真も連れ戻します。任意のメモは、脇のファイルに入ります。

ファイルは、ステーションのデータの根の `backups` のフォルダーにあります。`config-20260902-141500.db`（その秒がすでに使われていれば `-2` の接尾が付きます）、`config-20260902-141500.assets`、そして `config-20260902-141500.db.note.json` です。エクスポートはその隣に置かれる 1 つのファイル、`config-export-20260902-141500.glabconfig` です。

バックアップに、記録された実行記録とそのファイル、実行履歴の索引、永続するイベントの記録簿、クラッシュの印、ログのファイル、ウィンドウの位置と表示倍率、アカウントのトークンの保管、OPC UA サーバーの証明書の保管が入ることはありません。データベースの中の資格情報（機器の秘密、OPC UA サーバーのパスワード）は、それを入力した Windows のユーザーと機械に結び付いた暗号文として保存されます。ですから、よそで開いたバックアップは構成の全体を復元しますが、それらはどれも未設定として読まれ、もう一度入力することになります。それらを一緒に持っていける唯一のファイルが、下のエクスポートです。

## バックアップを作る {#creating-a-backup}

| 欄 | 何であるか | 値と既定 | 効き方 |
| --- | --- | --- | --- |
| メモ | ボタンの隣の欄で、「バックアップまたはエクスポートと一緒に保存する任意のメモ」です。 | 200 文字までです。既定は空で、バックアップやエクスポートのたびに消えます。 | バックアップではメモの脇のファイルに、エクスポートではその見出しの中に書かれ、そのファイルの行の下に出ます。 |

| コマンド | 何をするか | 灰色になるとき（状況） | 描かれないとき（ロール） |
| --- | --- | --- | --- |
| フォルダーを開く | バックアップのフォルダーをエクスプローラーで開き、なければ作ります。この求めに答えるのはステーションのウィンドウ自身で、この導入にある実在のフォルダーにだけ答えます。それ以外は「これは、このステーションが開くフォルダーではありません。何も開いていません。」と伝えます。フォルダーが導入の外にあるときも、単に無いときも、同じ言葉なので、答えは尋ねた側がまだ知らないことを何も明かしません。Windows が開けないフォルダーは「オペレーティングシステムが開けませんでした。」と伝えます。 | 別の端末のブラウザーでは「ステーションのローカルのデスクトップでだけ使えます。」 | ありません。 |
| バックアップを作成 | スナップショットを取り、そのあとステータスバーで「バックアップ「config-….db」を作成しました。」または「バックアップに失敗しました：…」と伝えます。 | 別のバックアップのコマンドが動いている間（カードが薄くなります）。 | ありません。 |

バックアップを作ることは、読み取りだけのエンジニアリングの作業です。ユニットが動いている間も走り、構成の変更と重なることは決してありません。ランタイムが止まっている間、このページはそもそも描かれないので（[設定](settings) を参照）、ランタイムが戻るまでバックアップのコマンドには届きません。構成のデータベースがまだ存在しないステーションは、「構成のデータベースはまだ存在しません。」で拒否されます。

## 別のコンピューター向けのエクスポート {#export-for-another-machine}

バックアップのボタンの下に、自分の見出しを持つ 2 つ目のまとまり、**別のコンピューター向けのエクスポート**があり、それが在る理由から始まります。「バックアップには、保存済みのパスワードが入りません。機器のパスワードと OPC UA サーバーのパスワードは、このコンピューターのこの Windows アカウントでしか開けないためです。エクスポートはそれらも含む 1 つのファイルで、ここで決めたパスワードで封をするので、新しいコンピューターがステーションをそのまま引き継げます。そのパスワードは安全な場所に保管してください。ファイルを開けるのはそれだけで、ここから取り戻すことはできません。」

| 欄 | 何であるか | 値と既定 | 効き方 |
| --- | --- | --- | --- |
| エクスポートのパスワード | ファイルに封をするパスワードで、そのあとファイルを開けられる唯一のものです。下の **パスワードを表示** のチェックボックスは、この欄に入力したものだけを見せます。 | 8 文字以上です。既定は空で、エクスポートのたびに消えます。 | 保存済みの資格情報を封じ直す鍵を、ここから導きます。パスワードはどこにも残らないので、誰も覚えていないエクスポートは誰にも開けません。このアプリにも開けません。 |
| パスワードをもう一度入力 | 同じパスワードをもう一度入れて、ファイルが書かれる前に打ち間違いを見つけるためのものです。この欄には **パスワードを表示** のチェックボックスがなく、常に伏せられたままです。 | 隣の欄と同じでなければなりません。 | それ自体は何もしません。2 つが違う間、エクスポートは断られたままです。 |

上のメモの欄は同じものです。メモはエクスポートの中にも入り、その行の下に出ます。

| コマンド | 何をするか | 灰色になるとき（状況） | 描かれないとき（ロール） |
| --- | --- | --- | --- |
| エクスポート | 同じ `backups` のフォルダーに `config-export-20260902-141500.glabconfig` を 1 つ書き、「エクスポート「…」を作成しました（保存済みの資格情報 N 件）。」と伝えます。この Windows アカウントで読めなかった資格情報は、誤りの調子で別に数えられます。「エクスポート「…」を作成しました（保存済みの資格情報 N 件）。保存済みの資格情報 M 件 はこの Windows アカウントでは読み取れず、含まれませんでした。新しいコンピューターでもう一度入力してください。」 | 別のバックアップのコマンドが動いている間（「別のバックアップのコマンドがまだ実行中です。」）、パスワードが 8 文字より短い間（「エクスポートのパスワードは 8 文字以上にしてください。」）、そして 2 つの欄が違う間（「2 つのパスワードが一致しません。」）。 | ありません。エクスポートを書くのに要るのは、このページがすでに要る **設定の変更** と同じ権限です。出来上がるファイルは、ステーションが持つ資格情報のすべてを、書いた人が決めたパスワードの下に収めたものだからです。 |

エクスポートは、構成のデータベースの一貫した写しと、その隣の利用者の素材と、見出しを運ぶ 1 つの書庫です。構成が守るすべての列は、出ていくときにこのコンピューターの保管庫を通して読まれ、エクスポートのパスワードで封じ直されます。見出しには塩と作業係数、そして導いた鍵で封じた定数が入っていて、正しいパスワードかどうかを見分けるにはそれで足り、それ以上は何も分かりません。どの列が旅をするかは構成そのものから読まれるので、あとから増えた資格情報も、誰かが一覧を覚えていなくても一緒に旅をします。エクスポートを書くことは、バックアップとまったく同じで読み取りだけのエンジニアリングの作業なので、ユニットが動いている間も走ります。そして記録簿に残ります。ステーションが持つすべての資格情報の写しが、たった今、保管庫を出たからです。

エクスポートは下の一覧から、その行の **復元** で戻します。すると「エクスポートから復元」とたずねます。「「…」には、それを書き出したコンピューターの構成と、そこに保存されていたパスワードが入っています。書き出したときのパスワードを入力してください。パスワードはこのコンピューターの保管庫に入り、構成はアプリを再起動したときに現在のものと置き換わります。現在の構成は先に自動で保存され、記録した実行記録は影響を受けません。」で、**エクスポートのパスワード** の欄と **パスワードを表示** のチェックボックスが付きます。空の間、復元は断られたままです（「このエクスポートを書き出したときのパスワードを入力してください。」）。パスワードが違うときは何も書かれず、ダイアログも開いたままで、理由はステータスバーに出ます。次の一手がそこにあるようにするためです。「そのパスワードでは、このエクスポートは開きません。エクスポートを書き出したコンピューターで決めたパスワードであり、ここで取り戻す方法はありません。」正しいときは、エクスポートをこのコンピューターのふつうのバックアップとして開き、運ばれてきた資格情報をこのコンピューターの保管庫に入れ、そのバックアップを次の起動に予約し、「「…」を開き、そのパスワードをこのコンピューターに保存しました。構成は次回の起動時に復元されます。」と伝えます。ここから先は下に書いたふつうの復元で、一覧に残るバックアップが届いたものの記録なので、同じ復元はあとから、エクスポートもそのパスワードもなしに繰り返せます。エクスポートのファイル自体は決して変わらないので、同じファイルは 3 台目のコンピューターでも開けます。

この 2 つの半分は、どちらもエージェントのものではありません。エクスポートの道具はなく、[エージェント](agent) のページからエクスポートを復元する方法もありません。パスワードは操作する人のものであり、エージェントが作ったり渡されたりしたパスワードは記録に残ってしまうからです。`backup_list` はエクスポートに印を付け（`portableExport`）、`backup_restore` はこのページを名指しして断ります。「「…」は別のコンピューター向けの構成のエクスポートです。保存されたパスワードは、書き出したときに決めたパスワードで封じられているため、そのパスワードを入力できる「設定」の「バックアップ」から復元します。」

## 一覧 {#the-list}

バックアップとエクスポートは 1 つの一覧を分け合い、新しい順に並びます。どちらについても問いは同じで、どれを戻すか、だからです。各行は、そのファイルが作られた日時をステーションの日付と時刻の形式で、次にそれが何であるか（**バックアップ** か **別のコンピューター向けのエクスポート** か）、名前とその大きさを、そしてメモがあればメモを見せます。大きさは、そのファイルが占めているすべて、つまり削除すれば空くすべてです。バックアップならデータベースの写し、そのメモ、そして素材のスナップショットで、それを使っているステーションでは画像の方が大きい半分になります。エクスポートなら、その 1 つの書庫です。一覧はページが開いたときに読まれ、その後はステーション自身の操作に追従します。ここで、または別のウィンドウで作ったバックアップやエクスポート、[エージェント](agent) のページを通してエージェントが作ったバックアップは、すぐに一覧に現れます。アプリの外から `backups` のフォルダーに置かれたファイル、たとえば手でコピーしたファイルは気づかれず、ページを開き直したときに現れます。

| コマンド | 何をするか | 灰色になるとき（状況） | 描かれないとき（ロール） |
| --- | --- | --- | --- |
| 復元 | バックアップでは「構成を復元」とたずねます。「「…」を、アプリの再起動時に現在の構成と置き換えるよう予約しますか？ 現在の構成は先に自動で保存されます。記録した実行記録は影響を受けません。」で、はいといいえが付きます。はいで復元を予約し、「「…」は次回の起動時に復元されます。」と伝えます。エクスポートでも決めることは同じで、代わりに上で述べたダイアログでパスワードをたずねます。 | ユニットが実行中のとき（「ユニットが実行中の間は構成がロックされます。」）。 | ありません。 |
| 削除 | 「バックアップを削除」とたずねます。「バックアップ「…」を完全に削除しますか？この操作は元に戻せません。」はいで、データベースの写し、そのメモ、素材のスナップショットを取り除き、「バックアップ「…」を削除しました。」と伝えます。エクスポートは、それが何であるかと、一緒に消えるものとで呼ばれます。「エクスポートを削除」、「エクスポート「…」を完全に削除しますか？中のパスワードも一緒になくなります。この操作は元に戻せません。」、そのあと「エクスポート「…」を削除しました。」 | そのバックアップの復元が予約されているとき（「「…」は復元が予約されています。先に予約を取り消してください。」）。 | ありません。 |

復元は、理由をステータスバーに添えて拒否されることがあります。記録が動いているとき（「記録が動いています。構成の復元を予約する前に止めてください。」）、そのファイルがそもそも構成のバックアップでないとき（「「…」は Ganter Lab の構成のバックアップではないので、復元できません。」）、そしてこのバージョンが知らないデータベース、たとえば新しいリリースが書いたものであるとき（「「…」は、このバージョンの Ganter Lab が復元できる構成のバックアップではありません。別のデータベースのもの、またはこのアプリケーションの新しいバージョンのものかもしれません。」）です。削除は、予約されているバックアップを拒みます。「「…」は復元が予約されています。先に予約を取り消してください。」どれだけ残すかはあなた次第です。ここが自分からバックアップを消すことはなく、エージェントはバックアップを作って一覧にできますが、削除することは決してできません。

## 復元を予約しました {#restore-scheduled}

予約すると、データの根に印が書かれ、カードは注意の通知バー **復元を予約しました** を見せます。「「…」は、アプリを再起動したときに復元されます。現在の構成は先に自動で保存されます。」その **キャンセル** のボタンが印を取り除き、「予約していた復元を取り消しました。」と伝えます。アプリがもう一度起動するまで、何も変わりません。別のウィンドウで、あるいはエージェントが [エージェント](agent) のページを通して予約した復元は、すでに開いているページにもこの通知バーを出し、別の場所で取り消すと通知バーは消えます。

次の起動では、構成を開くものが動く前に、アプリがそのファイルをもう一度確かめ、置き換えられる構成を `config-pre-restore-<日時>.db` として、メモ「「…」を復元する前に自動で取ったスナップショットです。」と自分の素材の写しとともに保存し（ですから復元そのものも元に戻せます）、データベースのファイルを入れ替え、バックアップが素材の写しを持っていればそれを戻し、印を消します。ステーションが立ち上がると、結果を通知が伝えます。

| 結果 | 通知 | メッセージ |
| --- | --- | --- |
| 適用した | **構成を復元しました** | 「起動時にバックアップ「…」を適用しました。直前の構成は「…」として保存しています。」 |
| 適用したが、バックアップの画像を戻せなかった | 上の通知のあとに **警告付きで構成を復元しました** | 「構成は復元しましたが、その画像ファイルは一緒に復元できませんでした。以前の画像は「…」の横に保存しました。」 |
| Process の実行を今の構成のまま再開しなければならない。復元は予約されたまま残り、あとの起動で当たる | **構成の復元を延期しました** | 「再開した Process の実行記録をすべて終えてから再起動すると、予約した復元が適用されます。」 |
| バックアップのファイルが消えている | **構成の復元に失敗しました** | 「バックアップ「…」は適用されませんでした：…」。理由は「「…」という名前のバックアップはありません。」です。 |
| ファイルが確かめに落ちる | **構成の復元に失敗しました** | 「バックアップ「…」は適用されませんでした：…」。理由は、そのファイルに対して復元が示すもの（上記）です。 |
| ファイルをコピーまたは置き換えできなかった | **構成の復元に失敗しました** | 「バックアップ「…」は適用されませんでした：…」。理由は「構成のファイルをコピーまたは置き換えできませんでした。原因は診断ログに残っています。「設定」の「バックアップ」から、もう一度復元を予約してください。」です。 |

失敗した復元は印を消すので、あとの起動が引っかかることはありません。データベースがいったん入れ替われば、後の段が失敗しても、復元は当たったものとして数えられます。印そのものを消せなかったときは、メッセージの最後に「予約した復元の記録を Ganter Lab が消せなかったため、次回の起動で復元がもう一度実行されることがあります。」が付きます。どの場合も、原因はサポート向けに英語で診断ログに残ります。

## 構成を復元しました：確認が必要です {#configuration-restored-review-required}

復元が当たったあと、カードは 2 つめの注意の通知バー **構成を復元しました：確認が必要です** を見せます。「復元された設定、モデル、ユニット、手順、コード、カウンター、ラベルのプリンターキューを確認し、履歴を検証してください。実行記録の索引は、履歴の一覧が欠けているか食い違っているときだけ再構築してください。」**閉じる** を押すまで残ります。復元は、自分では何のつじつま合わせもしません。キューの名前は構成として戻りますが、Windows のプリンターが見つけ直されたり直されたりすることはなく、カウンターはバックアップが持っていたものです。

## 実行履歴の索引を再構築 {#rebuild-run-history-index}

| コマンド | 何をするか | 灰色になるとき（状況） | 描かれないとき（ロール） |
| --- | --- | --- | --- |
| 再構築 | 「実行記録ファイルを走査して、記録済みの実行の一覧を作り直します。復元やファイルの移動のあとで履歴の一覧が欠けて見えるときに使ってください。もとになるのは実行記録ファイルそのものです。」「履歴の索引を再構築しました：復旧 N 件、削除 N 件（実行記録ファイル N 件）。」と伝え、実行記録ファイルが 1 件なら「履歴の索引を再構築しました：復旧 N 件、削除 N 件（実行記録ファイル 1 件）。」と伝えます。読み取り不能の件数は、読めないファイルがあったときだけ加わります：「履歴の索引を再構築しました：復旧 N 件、削除 N 件、読み取り不能 N 件（実行記録ファイル N 件）。」 | 別のバックアップのコマンドが動いている間。 | ありません。 |

この走査は、索引の項目のない実行記録ファイルにその項目を返し（その実行自身の固定したスナップショットから、あるいは実行の途中でアプリが落ちていれば失敗した実行として）、ファイルが消えた項目を落とし、読める全ファイルから生産性の投影を作り直し、よそのものや壊れた `.db` は読み取り専用で見分けたうえで飛ばし、変えずに読み取り不能として数えます。そのあと、Process のページが見せる生産性のスナップショットを読み直します。実行記録ファイルに記録された証跡に触れることは決してありません。

この走査は、読める実行記録それぞれについて、開始時に入力されたメタデータの値（シリアル番号やロットなど）も読み直すので、[履歴](histories-list)の一覧の検索でその値から実行記録を見つけられます。索引がそれらの値を持つ前に記録された実行記録のうち、更新後に一度だけ裏で走る読み込みがファイルを読めなかったものも、これで取り戻せます。そうした実行記録は、この走査が読み直すまでは名前でしか見つかりません。

## この節がしないこと {#what-this-section-does-not-do}

自動のバックアップも予定したバックアップもなく、どれだけ残すかの方針もなく、別の場所へのバックアップもなく（フォルダーからファイルを写してください）、一部だけの復元もなく、実行の履歴の復元もありません。記録された実行記録はデータの根の下の自分のファイルであり、索引はそこから作り直されます。エクスポートも別の場所へのバックアップではありません。同じフォルダーに書かれるので、それを必要とするコンピューターまで運ぶのは、やはりあなたの仕事です。実行記録の取り込みと書き出しは [履歴](histories) のページで行います。
