苦労して進めてきた作業をコンピュータのクラッシュで一瞬にして失ったことはありませんか。こういうときに限って、作業内容を保存していないものです。しかし、Lotus Notes/Domino 7 で導入された自動保存機能を使用すると、このようなことはなくなります。

Alaa Mahmoud, Software Engineer, IBM

Alaa Mahmoud is a Software Engineer who has been with IBM since the mid-1990's. He has served as Technical Lead with the Lotus Notes Core Services team and the Editor team, working with Lotus Notes since R5. Currently Alaa is a Team Lead for the Lotus iNotes Total Cost of Ownership (TCO) team, which oversees administration, server performance, server infrastructure, and customization initiatives. Alaa is an expert in software internationalization, especially for bidirectional languages (Arabic and Hebrew).



2005年 11月 25日 (初版 2005年 8月 23日)

たとえば、上司に提出するレポートをギリギリのタイミングで作成しているものとします。タイピング、書式設定、最終チェックに何時間もかかりました。このとき突然マシンのフリーズや他の予期せぬ事態が発生して、作業内容をすべて失ってしまったら・・・。その瞬間、「しまった、文書の保存を忘れていた」と気づきます。そして、「レポートを最初から作成し直すか、あるいは履歴書の更新でも始めるべきか」と自問します (時間は午前 2 時。まわりには誰もいないのに、思わず問いかけてしまいます)。もし、このようなことが発生したら、「自分には守り神がいて、ときどき作業を保存してくれないかなぁ。そうすれば、予期せぬ事態が起きても作業内容を失わずに済むのに」と思うのではないでしょうか。

自動保存こそ、この守り神なのです!自動保存は Notes 7.0 で導入された多くの優れた機能の中の 1 つです。自動保存を有効にすると、ユーザーが指定した間隔で Notes 文書がローカルデータベースに保存されます。これによって、もし、Notes またはコンピュータが何らかの原因でクラッシュしても、最新の作業内容が保持され、文書を復旧することができます。

この記事では自動保存機能を取り上げ、それがどのように設計されたのかを紹介します。また、自動保存機能の使い方についても説明します。準備はよいでしょうか。この記事は、熟練した Notes ユーザーの方を対象に書かれています。Notes 7.0 の各機能の詳細については、developerWorks: Lotus 記事『Lotus Notes と Domino Designer 7.0 の新機能』を参照してください。

自動保存の設計

私たちが自動保存の開発を始めたとき、次のような目標を念頭に置きました。

  • ユーザーは、指定した間隔で文書を自動保存できる。
  • 何らかの原因で障害が発生した後、ユーザーは Notes Client を起動するときに、保存されている文書を復旧できる。
  • すべてのユーザー情報を暗号化することにより、自動保存のセキュリティを維持する。
  • 自動保存を高速で行い、サーバーへの余分な負荷を避ける。
  • ユーザーは自動保存のオンとオフを切り替えられる。同様に、システム管理者もポリシーを使用して自動保存のオンとオフを切り替えられる。

一般的なシナリオ

自動保存の設計を開始するにあたり、私たちは次のようなシナリオを考慮しました。「文書での作業中に予期せぬ事態が発生し、作業内容を失うことがある。このような場合に、何をすればよいのか」

いくつかのアイデアが浮かびました。たとえば、タイマーをスタートさせ、ユーザーが作業している文書を一定の間隔で保存するというアイデアです。しかし、この方法には多くの問題があることに気づきました。たとえば、1,000 人のユーザーがいて、みんなが 1 分間隔の自動保存を選択するとどうなるでしょうか。1,000 人が 1 分ごとにサーバーにアクセスすることになります。これでは、パフォーマンスが大幅に低下し、サーバーの応答時間が遅くなってしまいます。次に、文書が完成していない場合はどうなるでしょうか。文書は推敲中であり、この状態は誰にも見られたくありません。ユーザーが作成者のアクセス権しか持たず、文書を削除できない場合もあります。データベースに検証用のコードがあり、文書の保存前にいくつかのフィールドに値の入力が必要な場合はどうなるでしょうか。この値を入力せずに文書を保存しようとすると、あらゆる種類のエラーが生成されてしまいます。フォームの Post Save イベントまたは Query Save イベントにコードが記述されていて、文書をレビューする準備が整ったことを示すメールを他のユーザーに送信することになっている場合は、どうなるでしょうか。こう考えていくと、かなり多くの問題があるように思われます。そこで、この方法は採用しないことにしました。

次の方法は最初の方法に似ていますが、暗号化されたローカルデータベースに、文書の「静的な (quiet)」保存を行います (つまり、イベントを発生させずに文書を保存します)。障害後、ユーザーが Notes Client を起動するときに、このデータベースで利用可能な文書があるかどうかをチェックします。文書が存在する場合はユーザーにそれを示し、文書を復旧するかどうかを確認します。これが私たちが採用した方法で、正しく機能させることができました。

この方法ではローカルデータベースを使用するので、サーバーへの負荷は増加しません。また、暗号化されたデータベースによってセキュリティが維持され、保存時にエラーの表示やメールの送信は行われません (イベントを発生させないからです)。作業していた文書を復旧するかどうかを決めることもできます。


自動保存の使い方

自動保存を使用するには、次のことを考慮する必要があります。

  • クライアントで自動保存を有効にする
  • フォームで自動保存を有効にする
  • 自動保存の正常な動作
  • 自動保存された文書を復旧する

それぞれについて、次のセクションで詳しく見ていきましょう。

クライアントで自動保存を有効にする

Notes 7.0 をインストールしたとき、自動保存はデフォルトで有効にはなりません。有効にしていない理由は、ユーザーが初めて自動保存機能を経験するときに、何が起こっているかを理解できない可能性があるからです。また、低速のマシンを使用するユーザーもいて、このようなマシンで大きな文書を自動保存すると、長時間かかることがあります。このため、自動保存を使用する場合は、[ユーザープリファレンス] ダイアログの新しいオプション (図 1 参照) を有効にする必要があります。

図 1. [ユーザープリファレンス] ダイアログ
[ユーザープリファレンス] ダイアログ

私たちは、自動保存の有効/無効を切り替えるチェックボックスと保存間隔を設定するフィールドを追加しました。間隔は 1 ? 999 分の範囲で設定できます。自動保存に関するこれらのユーザープリファレンスオプションは、クライアントの Notes.ini ファイルの 3 つの変数に対応しています。オプションと Notes.ini 変数との対応は次のとおりです。

Notes.ini 設定ユーザープリファレンス設定
AUTO_SAVE_ENABLE = n 1AUTO_SAVE_ENABLE = n 1 に設定すると、自動保存が有効になります。 0 に設定すると、自動保存が無効になります。
AUTO_SAVE_INTERVAL = <分数>自動保存の間隔を設定します。
AUTO_SAVE_USER, <短縮ユーザー名>=<データディレクトリからの相対パスでのデータベース名>名前の競合を解決します (後で説明します)。

フォームで自動保存を有効にする

前述のように、静的保存を行うとイベントはまったく発生しません。自動保存で静的保存を使用するのは、自動保存を「シームレス」な動作にするためです。つまり、ユーザーは自動保存を有効にした後、予期せぬ事態が発生するまでそのこと忘れていてもかまいません。復旧する文書があることを自動的に知らせてくれます。イベントを発生させると (通常は、一部のケースでイベントが発生します)、文書が完了していない場合、エラーが生成されることがあります。また、イベントによってメールが送信され、予想外の結果となる可能性もあります。このため、文書を自動保存するときは、これらのイベントを発生させないようにしています。このことから、もしフォームがこれらのイベントに依存していたらどうなるのか、という疑問が生じるかもしれません。答えは簡単で、自動保存は機能しません!

これを解決するために、私たちは、フォームの自動保存を有効にするかどうかを決める新しいオプションをフォームのプロパティに追加しました。このオプションを使用することで、テンプレートの開発者またはアプリケーションの設計者は、アプリケーションで自動保存および復旧を行っても安全かどうかをテストできます。フォームで自動保存を有効にするには、[フォーム] プロパティボックスの最初のタブで、[自動保存を許可する] チェックボックスをオンにします (図 2 参照)。

図 2. [自動保存を許可する] オプション
[自動保存を許可する] オプション

自動保存が行われるのは、[自動保存を許可する] オプションが有効なフォームから作成された文書だけです。つまり、この方法を用いた場合にのみ、自動保存後に文書を復旧できます。多くの Notes/Domino アプリケーションでは、アイテムを作成したり、ロード時に検証を行うコードが Save イベントや Post Save イベントに定義されています。文書の自動保存時にはこれらのイベントが発生せず、イベントで定義されたアクションも実行されません。このため、自動保存された文書が「異常な」状態になることがあります。これによって、復旧後に文書のロードが失敗する可能性もあります。

保存時のイベントでアイテムに書き込むコードが定義されていて、アプリケーションがこれらのアイテムに依存する場合は、これらのアイテムにデフォルト値を生成するコードを Query Open イベントに追加してください。$AutoSaveRecovered というアイテムを検索することにより、復旧した文書だけを特別に処理することもできます。このアイテムは、復旧した文書において、Post Open イベントが発生するまでの間に利用できます。これ以降、このアイテムは削除されます。

プログラムから個々の文書の自動保存を無効にする別の手法として、$DontAutosave アイテムを追加する方法があります。このアイテムによって、文書の自動保存が無効になります。$DontAutosave を削除すると、文書は再び自動保存されるようになります。

メモ: Notes/Domino 7.0 では、製品に含まれるテンプレートのフォームで自動保存が有効になっているのは、Memo フォームだけです。

自動保存の正常な動作

Notes Client とフォームで自動保存を有効にすると、自動保存を使用する準備が整います。文書を開いて入力を開始するとタイマーがスタートし、ユーザーが設定した時間が経過するのを待ちます。このタイマーが開始するのは文書を保存する場合だけで、文書を表示するだけでは無効です。

指定した間隔が経過すると、自動保存はイベントを発生させずに静的保存を行います (前述のとおりです)。ローカルディスク上の自動保存データベースには、保存された文書のコピーが保管されています。このコピーには、障害発生後の文書の復旧に使用するいくつかのフィールドが追加されます。これらのフィールドを下表に示します。

フィールド名 説明
$AutoSaveDataBase 文書が保管されているデータベースの名前。
$AutoSaveDocTitle文書のタイトル。
$AutoSaveNoteID文書の Note ID。
$AutoSaveOrgDocRL文書を開くときに使用するリソースリンク。
$AutoSaveServerデータベースのレプリカが置かれているサーバー名。
$AutoSaveTime文書の最終更新時刻。

自動保存が開始されると、次のメッセージがステータスバーに表示されます。

文書の自動保存中: <文書名>...

自動保存が完了すると、次のメッセージがステータスバーに表示されます (図 3 参照)。

自動保存完了 : <文書名>...

図 3. 自動保存のメッセージ
自動保存のメッセージ

自動保存が完了すると、データが保存され、障害後に Notes を起動するときに、データを復旧できます。しかし、自動保存によって、大量の文書がローカルデータベースに保存されてしまうことはないでしょうか。この点についても考慮されています。保存された文書に対し、ユーザーが復旧、キャンセル、または送信を行うと、自動保存された文書が自動保存データベースから削除され、スペースが確保されます。また、ユーザーは復旧したい最新の文書だけを簡単に表示できます。

自動保存を有効にすると一定の間隔で文書が保存されるので、ユーザーは障害の発生時に救われます (障害発生の少し前に、自動保存が行われているはずです)。しかし、文書の編集時にコンピュータの調子が悪くなった場合はどうすればよいでしょうか (たとえば、画面がちらつく、カーソルがフリーズする、青いボックスが点滅するなど)。このような場合は、いつでも自動保存を強制的に実行できます。これを行うには、[ファイル] メニューで [自動保存] を選択し、[すぐに自動保存] をクリックします。これによって、自動保存がすぐに実行されます。

自動保存された文書を復旧する

障害の発生後、Notes Client を再起動したときに、何が行われるのかを順を追って説明します。まず、クライアントの起動時に、ユーザーの認証が行われた後、自動保存データベースに文書があるかどうかをチェックします。文書がある場合は、保存していない作業を復旧するかどうかを確認するプロンプト (図 4 参照) がユーザーに表示されます。

図 4. [未保存文書の確認] ダイアログボックス
[未保存文書の確認] ダイアログボックス

ユーザーが [はい] を選択すると、復旧する未保存の文書を指定するよう求められます。図 5 のようなダイアログボックスが現れ、復旧可能なすべての未保存文書のリストが表示されます。ユーザーは、次の復旧オプションを選択できます。

オプション説明
[復旧] 選択した文書を復旧し、リストから削除します。
[すべて復旧]各文書ごとに確認せずに、すべての文書を復旧します。エラーが発生しない場合は、このダイアログを閉じます。
[削除]この文書をローカルの自動保存データベースから削除します。オリジナルの文書は変更されません。
[すべて削除]すべての文書をローカルの自動保存データベースから削除します。オリジナルの文書は変更されません。
図 5. [未保存文書の復旧] ウィンドウ
[未保存文書の復旧] ウィンドウ

[未保存文書の復旧] ウィンドウのフィールドには、文書が自動保存された時刻、文書のタイトル、オリジナルデータベースのパス名/ファイル名、データベースが保存されているサーバー名の各情報が表示されます。

オリジナルの Notes データベースのどのレプリカにもアクセスできない場合は、文書を復旧できないので、文書はそのままの状態で残されます。後で、復旧を再び試みることができます。最後の自動保存後に文書が変更されている場合は、クラッシュ後にオリジナルの文書が更新されていることがユーザーに示されます。ユーザーは、自動保存した内容で上書きするか、最新の内容を保持するかを選択できます。文書の復旧を選択すると、Notes で文書が開かれ、変更内容を破棄するか、保存するかを問われます。自動保存は、復旧後、ユーザーの代わりに自動的に文書を保存しない点に注意してください。


自動保存データベース

私たちは当初、自動保存機能は Autosave.ntf から作成された単一のデータベース (Autosave.nsf) を使用するよう設計しました。これは暗号化されたデータベースです。しかし、このために潜在的な問題に遭遇してしまいました。初期のテスト中に、多くの Notes/Domino 環境で、複数のユーザーが同じ Notes データディレクトリを使用していることに気づいたのです。各ユーザーは、個別のロケーション文書を使用します。デフォルトでは、AutoSave.nsf はユーザーのデータディレクトリに置かれ、暗号化されます (中レベルの暗号化を使用)。このため、最初のユーザーが自動保存データベースを作成するときに、データベースはこのユーザーのキーで暗号化されます。結果として、他のユーザーはこのデータベースを使用できず、自動保存は無効になります。

この状況を回避するために、メールファイルの場合と同様の命名規則を使用して、自動保存データベースを作成することにしました。つまり、データベース名の先頭に as_ を付加します。たとえば、Alaa Mahmoud の場合、自動保存データベースの名前は「as_Amahmoud.nsf」となります。すでに同じデータベース名が使用されているときは、名前に 1 を追加して再チェックします。この名前が存在するときは 2 を追加して再チェックし、さらに、3、4・・・と繰り返します。このようにして、自動保存データベースに固有の名前を付けます。

名前の競合を解決する

この名前の付け方を使用すると、John Smith、Jane Smith、Jen Smith、Jon Smith などのユーザー名で競合が発生してしまいます。現在のユーザーに対して正しいデータベースを使用するために、ユーザー用のデータベースを作成した後で、ユーザーの Notes.ini ファイルに次のエントリを追加します。

AUTO_SAVE_USER,<短縮ユーザー名>=<データディレクトリからの相対パスでのデータベース名>

たとえば、次のようなエントリを追加します。

AUTO_SAVE_USER,Alaa Mahmoud/Westford/IBM=as_AMahmoud2.nsf

これによって、次の順番で処理が進められます。まず、ユーザーが特定の ID を使用して Notes を起動します。Notes はこのユーザー名のエントリがあるかどうかを Notes.ini でチェックします。エントリが存在する場合は、そのエントリで指定されているデータベースを使用します。データベースが存在しない場合は (ユーザーがデータベースを削除した場合など)、新しいデータベースを作成します。ユーザーがこのデータベースへのアクセス権を持っていない場合、ユーザーはエラーを受け取り、自動保存は無効になります。ユーザー名のエントリが見つからない場合は、前述の命名規則を使用して、エントリとデータベースを作成します。

ユーザーが ID を切り替えると、Notes は開かれているすべてのウィンドウを閉じます。このため、自動保存された文書が開かれていても問題にはなりません。


ポリシーを使用して自動保存オプションを設定する

システム管理者は、ポリシー文書を使用して、自動保存を有効または無効にすることができます (あるいは、ユーザー間で自動保存の間隔を同じ値に設定できます)。これを行うには、Domino Administrator で [ファイル] - [サーバーを開く] を選択します。次に、管理するサーバーの名前を入力します。指定したサーバーの Domino ディレクトリが開かれます。左側のナビゲーションペインで [設定] を選択します。次に、[設定の追加] - [デスクトップ] を選択するか、既存のデスクトップ設定文書を選択して [設定の編集] をクリックします。デスクトップ設定文書が開かれた後で、[プリファレンス] - [基本] タブを選択します (図 6 参照)。

図 6. [デスクトップ設定] 画面
[デスクトップ設定] 画面

自動保存に関連する次の 2 つのオプションを設定します。

  • [自動保存の有効化] では、ユーザーの自動保存機能の有効と無効を切り替えます。無効にすると、ユーザーは自動保存を使用できません。
  • [自動保存の周期 (分)] では、自動保存を行う間隔 (分) を設定します。

まとめ

この記事では、自動保存の優れた機能について説明しました。予期せぬ事態に備えて作業内容を保存するだけでなく、ユーザーは [ユーザープリファレンス] を使用して、またシステム管理者はポリシーを使用して自動保存を設定できます。設計者は、起動されないイベントにフォームが依存しないことを確認した後、フォームで自動保存を有効にする必要があります。自動保存は、暗号化されたローカルデータベースを使用するため、処理が速いだけでなく、セキュリティも確保されています。

Notes 文書で作業しているときに、もう予期せぬクラッシュを心配することはありません。自動保存によって復旧できるからです。

参考文献

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。プロフィールで選択した情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Lotus
ArticleID=340575
ArticleTitle=Lotus Notes/Domino 7 の自動保存のすべて
publish-date=11252005