以下、本発明を実施するための最良の形態について図面を用いて説明する。図1は、本発明を実施するための一実施形態に係る情報処理装置の構成を示す図である。
図1において、情報処理装置は、CPU102、メモリ103、記憶装置104、ビデオインタフェース105、Input/Output(以下I/Oと略称)インタフェース106、通信インタフェース107を備えている。また、情報処理装置内の各構成要素はシステムバス101を介して互いに接続されている。CPU102は、システムバス101を介して各構成要素を制御したり、データの計算や加工を行ったりする中央処理装置(プロセッサ)である。メモリ103は、データやプログラムを記憶する装置で、RAM(Random Access Memory)やROM(Read Only Memory)から構成される。記憶装置104は、記憶されたデータの書き込み/読み出しを行う。記憶装置104には、ハードディスクドライブ(HDD)111、フロッピー(登録商標)ディスクドライブ(FDD)112、不揮発性のデータソースとして利用されるCD−ROMドライブ113がある。図1には示されていないが、記憶装置104としては、磁気テープドライブ、DVD−ROM、USBメモリなども使用されることがある。
本実施形態に係るプログラムは、記憶装置104から読み込まれ、メモリ103に格納した上で、CPU102によって実行される。なお、本実施形態ではプログラムを記憶装置104から読み込む構成としているが、ROM(不図示)から読み込んだり、通信インタフェース107を介して外部から読み込んだりする構成としてもよい。
ビデオインタフェース105は、ディスプレイ装置114への表示出力を制御する。ディスプレイ装置114には、CRTや液晶等の方式を用いたものがある。I/Oインタフェース106には、キーボード115やポインティングデバイス116等の入力装置が接続される。操作者は、キーボード115を操作することにより情報処理装置に対する動作指令等を行う。ポインティングデバイス116は、ディスプレイ装置114上のカーソルを移動させてメニューやオブジェクトの選択や操作等を行う。また、ディスプレイ装置114には、タッチパネル等による操作の入力を行えるものもある。この場合、ディスプレイ装置114は出力装置と入力装置を兼ねることになる。通信インタフェース107は、コンピュータネットワーク117を通して外部機器との通信を行う。接続先のネットワークには、LANやWAN、インターネットのような公衆回線等がある。また、通信インタフェース107は、ローカルプリンタ118などの他デバイスとの通信も行う。
図2は、本実施形態に係るネットワーク構成図である。コンピュータネットワーク201には、サーバーコンピュータ(以下「サーバー」と略称)202、クライアント端末203および204が接続されている。クライアント端末には、クライアントパーソナルコンピュータ(以下「クライアントPC」と略称)203やスマートフォン204等の形態がある。コンピュータネットワーク201には、LAN、WAN、インターネット等がある。クライアント端末203および204は、コンピュータネットワーク201を通じてサーバー202と通信を行う。なお、本実施形態において、クライアント端末203、204およびサーバー202はいずれも、図1にて示した情報処理装置の構成を有するものとする。ただし、図1の構成に限定するものではなく、他の機能を備えていても構わない。また、サーバー202は、単体のコンピュータに限らず、ラックマウント型のシステムであっても構わない。
本実施形態に係る文書管理システムはサーバー202で動作し、クライアント端末としてスマートフォン204を利用する形態を想定している。ただし、文書管理システムがクライアント端末203、204で動作したり、サーバー202とクライアント端末203、204で処理を分担して行ったりする形態もありえる。
ここで、文書管理システムとは、電子文書や電子化された紙文書を保管、管理するコンピュータ上のシステムのことを意味する。電子文書(以下、「文書」と略記)とは、コンピュータ上のファイル形式で表現できるデータのことを指し、文字による文書コンテンツに限定されない。文書には、画像や動画など様々なコンテンツを含むものとする。
本実施形態に係る文書管理システムがサーバー202で動作する形態の一例では、サーバー202に、データベース、アプリケーションサーバー、Webサーバーといったサーバーアプリケーションがインストールされる。クライアント端末203、204には、Webブラウザあるいは専用のクライアントアプリケーションがインストールされる。クライアント端末203、204から、サーバー202へデータの取得リクエストが発信されると、サーバー202のWebサーバーがクライアントからのリクエストを受信する。そして、アプリケーションサーバーがリクエスト内容を解釈して必要なデータをデータベースから取得する。そして、アプリケーションサーバーは、Webサーバーを通して、取得したデータをクライアント端末203、204へ送信する。クライアント端末203、204では、データを受信すると、Webブラウザあるいは専用のクライアントアプリケーションが、取得したデータをクライアント端末のディスプレイ装置114に表示する。
図3は、文書管理システムに接続しているクライアント端末203、204で表示される画面の例である。図3(A)は、クライアントPC203で表示される画面例である。図3(A)の301はツリービューで、文書管理システムに保管されたデータ群を階層的に表示している。ツリービュー301によって、ユーザーは、文書管理システム内に保管されたデータを俯瞰的に確認、選択することができる。302はリストビューで、ツリービュー301で選択されたロケーションにあるデータをリスト表示する。303はロケーションパスで、現在表示しているロケーションを表している。図3(A)の例では、Aプロジェクト下、進捗定例下にあるロケーション20120629が選択され、ロケーション20120629に保管されている文書の一覧が表示されている。
図3(B)は、スマートフォン204で表示される画面例である。311はロケーションを表すタイトルバーである。312はリストビューで、選択されたロケーションにあるデータをリスト表示する。スマートフォンでは画面サイズが限られているため、ツリービューのような文書を俯瞰して見たり、俯瞰的にロケーションを選択したりするビューが表示しづらい。そのため、階層的な文書構造をトップレベルから一つ一つフォルダを辿って行き、目的の文書を表示する。階層の移動は、リストビュー312や上階層に戻るボタン313などを操作して行う。上記、図3(B)のように、従来の階層化された文書構造は、スマートフォンのような画面サイズが限られた端末では、データにアクセスしづらい面がある。
一方、インターネットでは、電子掲示板によるデータ管理が普及してきた。電子掲示板では、ある特定の話題やテーマに関するデータの集まりをまとめて表示する方法が多く用いられ、「スレッドフロート型掲示板」と呼ばれている。また、ある特定の話題やテーマに関するデータの集まりは「スレッド」あるいは「トピック」と呼ばれており、「タイムライン」と呼ばれるデータを時系列に並べる表示方法もある。本実施形態の説明でも、ある特定の話題やテーマに関する文書の集まりをスレッドとして扱い、以下スレッドと記載する。文書を時系列に並べる場合もスレッドの一つとして扱う。
図4は、文書管理システムに保管された文書をスレッドとして表現した場合の概念図である。401はスレッド名を表す。402はスレッドを概念的に表した線である。つまり、図4には、4つのスレッドが示されていることを意味する。403は、スレッド上に置かれたデータのアクセス単位を表すもので、本実施形態の説明では、以下、「位置コンテナ」と記載する。つまり、図4のAプロジェクト進捗定例スレッドには、4つの位置コンテナが存在することを意味する。位置コンテナに格納されるデータは、1ファイルだけに限らず、複数ファイルや階層構造を持つフォルダであってもよい。また、位置コンテナ403に付記されている数字は日付を表している。位置コンテナは、日時属性を保持しており、時系列で並べられる場合の参考情報となる。日時属性は、位置コンテナのプロパティとして保持されるが、プロパティの他にもファイルやフォルダの更新日時や作成日時、あるいは、日時を表すフォルダ名やファイル名等であってもよい。
図5は、図4で示したスレッド構造の文書管理システムのデータをスマートフォン204で表示する場合の画面例である。図5(A)は、スレッドの一覧を表示した画面例である。501はリストビューで、スレッドをリスト表示している。特に図示はしていないが、表示するスレッドをフィルタリングする機能等があってもよい。
図5(B)は、選択されたスレッドの内容を表示した画面例である。511はタイトルバーで選択されたスレッド名を示している。512はスレッドの内容を表示するペインで、スレッドの内容を時系列で横方向に表示している。513はスレッド上にある位置コンテナを示しており、図5(B)では3つの位置コンテナが表示されていることを意味する。スレッド内容の表示ペイン512は左右にスクロールすることでスレッド内の他の位置コンテナを表示することができる。514および515は左右にスクロールできることを示す方向指示アイコンである。514は左にスクロールできる場合に表示、515は右にスクロールできる場合に表示される。スクロール操作の例としては、左右にフリックする方法などがある。516は位置コンテナ内の文書を表示するリストビューである。位置コンテナ513をクリックすると表示される。図5(B)では、アイコンで表示しているが、ロケーション名あるいは文書名でリスト表示してもよい。
図5(C)は、文書の内容を表示した画面例である。526はドキュメントビューアで、リストビュー516で文書を選択した場合に、リストビュー516が切り替わって文書の内容を表示する。図5(C)では、タイトルバー511やスレッド内容の表示ペイン512等の他のコンポーネントはそのまま表示されている。このようにスレッド表示ペインとビューを同時に表示することで、操作性の向上をはかっている。なお、位置コンテナ513が単一の文書を格納している場合は、位置コンテナ513をクリックした場合にドキュメントビューア526が表示される。
このように、文書がスレッド構造で表現されると、階層が減ることによってスマートフォンなどでもデータにアクセスしやすくなる。しかし、スレッド間を移動しようとした場合には、図5(A)のようなスレッド一覧画面に戻り、スレッドを選択、さらにスレッド内の所定の位置コンテナへ移動するといった手間がかかる。その課題の解決方法について、以下説明する。
図6は、本実施形態に係る文書管理システムの機能ブロック図である。本機能ブロックは主にサーバー202で実行されるが、クライアント端末203、204上で動作してもよい。
データ管理部601は、文書を保管、管理する。スレッド管理部602は、スレッドの作成や管理を行う。ここで述べるスレッドとは、上記で説明した、ある特定の話題やテーマに関する文書の集まりを指す。スレッドは、ユーザーが明示的に作成したものや、関連する文書あるいは位置コンテナを時系列に並べたタイムラインなども含む。位置コンテナ管理部603は、位置コンテナの作成や管理を行う。また、位置コンテナを通して、データ管理部601にあるコンテンツとスレッド管理部602にあるスレッドの関連づけをする役目もある。
移動先決定部604は、後述する、あるスレッドから別のスレッドへの移動において、移動先スレッドおよび移動先位置コンテナの決定を行う。移動情報一時保管部605は、移動先決定部604で決定された移動情報を一時的に保管する。後述するスレッドから別スレッドへの移動では、移動先が固定ではなく動的に決定される。そのため、移動情報一時保管部605にユーザーごとの移動情報を保管し、次回のアクセス時に情報を利用する。なお、移動情報一時保管部605は、スマートフォン204上のアプリケーション上に存在する実施形態も考えられる。
図7は、あるスレッドから別のスレッドへ移動する場合の操作例を示した図である。図7で図示しているのはスレッド内容の表示ペインであり、図5(B)の512の部分に該当する。矢印701および702は、操作の方向を概念的に表したものであり、実際に表示されるものではない。スレッド上の位置コンテナを矢印701、矢印702のように上下にフリックすると別のスレッドへ移動することができる。移動元となる位置コンテナは、フリック操作を行った場所で決定することができる。ただし、選択されている位置コンテナを移動元とするようにしてもよい。また、図5(B)の方向指示アイコン514および515のように、上下に移動できるかどうかを方向指示アイコンで明示してもよい。このように、スレッド表示ペインから直接別のスレッドへ移動できるようにすることで、図5(A)のようなスレッド一覧画面に戻る手間を省くことができる。
図7で別のスレッドへ移動する操作について説明したが、次に、図8から図12で、移動先の決定処理について説明する。移動先の決定処理には、移動先スレッドを決定する処理と、そのスレッド内の位置コンテナを決定する処理がある。これらの処理は、図6の機能ブロック図において、移動先決定部604にて実行される。
まず、図8および図9で移動先スレッドを決定する処理について説明する。図8は複数スレッドの順序を概念的に示した図、図9は移動先スレッドを決定する処理のフローチャートである。なお本フローチャートに係るプログラムは、サーバー202の記憶装置104に記憶されており、メモリ103に読み出されCPU102によって実行される。
移動先スレッドの決定処理では、まず、移動先決定部604において、ユーザーがスレッドの順序を指定しているかどうかを確認する(S901)。スレッドの情報はスレッド管理部602から取得する。順序の指定方法には、予めユーザーが順序を設定する方法や、移動時に指定する方法などがある。予めユーザーが順序を設定する方法では、順序の情報はスレッド管理部602に保管され、移動先決定部604がスレッド管理部602から順序の情報を読み出す。移動時に指定する方法では、ユーザーがスマートフォン204のディスプレイ装置114で操作した情報がサーバー202に送信され、本決定処理の入力データとして順序の情報が与えられる。ユーザーにより順序が指定されていた場合、移動先決定部604はその指定に従って移動先を決定する(S902)。
ユーザーにより順序が指定されていない場合、移動先決定部604はグループ化されているかどうかの確認を行う(S903)。グループ化とは、例えば図4において、Aプロジェクトのスレッドをグループとみなすような設定を意味している。移動先スレッドの決定処理では、スレッドが多くなると速度が遅くなるとともに、関連性の低いスレッドへの移動が行われる可能性も大きくなる。グループ化は、移動先対象のスレッドを絞込むと同時に、関連性の高いスレッドに限定することができる。S903でグループが設定されていた場合、移動先決定部604は移動先となるスレッドの対象範囲をグループ内に限定する(S904)。ここで、対象範囲に含まれたスレッドを概念的に示したのが図8である。図8の811から817はスレッドを概念的に表しており、長さは時間軸801で示される期間を表している。スレッドの期間とは、スレッドが作成された日時から、最新の位置コンテナが持つ日時属性までの間隔となる。ただし、タイムラインを自動的に作成する場合のように、スレッドが自動的に作成される場合は、最も古い位置コンテナの日時属性が開始点となる。図8では移動先決定を行う対象スレッドとして、7本のスレッドが示されている。
対象スレッドが決定したら、移動先決定部604はスレッドの開始点が古い順にソートを行う(S905)。図8の802は、古い順にソートした番号を示している。次に、移動先決定部604は現スレッドよりも古いスレッドを抽出し(S906)、それらのスレッドと現スレッドとの重なっている期間を算出する(S907)。図8では現スレッドが815、現スレッドよりも古いスレッドが811から814に該当する。次に、移動先決定部604は、S907で算出した期間が長い順にソートを行う(S908)。図8において、現スレッドよりも古いスレッド811から814の中で、現スレッド815と最も重なっている期間が長いのはスレッド812となる。そして次に長いのがスレッド814となる。811、813は重なっている期間が無いため、S905でソートされた順に従って、現スレッドから近い順に813、811と順序が決定される。ここで、S906のように現スレッドよりも古いものと新しいものに分けたのは、図7で上下にフリックする操作に関係している。上にフリックした場合には、現スレッドよりも古いスレッドが移動先対象となり、下にフリックした場合は、現スレッドよりも新しいスレッドが移動先対象となる。つまり、現スレッド815から上へフリックして行った場合の移動先の順序は、スレッド812、814、813、811となる。図8の803はこの順序を示している。
次に、移動先決定部604は、現スレッドよりも新しいスレッドを抽出し(S909)、それらのスレッドと現スレッドとの重なっている期間を算出する(S910)。そして、S910で算出した期間が長い順にソートを行う(S911)。図8では、現スレッド815とスレッド816および817について重なっている期間の算出とソートが行われ、現スレッド815から下へフリックして行った場合の移動先の順序は、スレッド816、817となる。
上記のように、移動先スレッドの決定は現スレッド815を起点に決定されるが、決定された順序は一連の操作が終了するまで保持される。スレッドが移動するたびに移動先の算出を行うと順序に一貫性が無くなるため、本実施形態では一時的に保持するようにしている。移動情報の保持は図6の機能ブロック図における移動情報一時保管部605で行われる。なお、スレッドの並び順決定処理を明示的にしなおすような機能を設けても良い。また、スレッドが移動するたびに移動先を算出する方法でもよい。
次に、図10、図11、図12で移動先位置コンテナを決定する処理について説明する。なお、図11、図12のフローチャートに係るプログラムも図9と同様、サーバー202の記憶装置104に記憶されており、メモリ103に読み出されCPU102によって実行される。
図10は、スレッド内の位置コンテナを決定する例を示した図である。1001から1004はスレッドを示している。現スレッドを1002とする。図示している期間は部分的なものであり、スレッドの順序は図9のフローチャートにある処理に従って、図10の通りに決定されているものとする。移動先の位置コンテナを決定する方法として、日時属性にもとづいて決定する方法とインデックス情報にもとづいて決定する方法の2つの方法について説明する。
図11は、日時属性にもとづいて移動先位置コンテナを決定する処理のフローチャートである。図10の現スレッド1002およびスレッド1001を用いて、日時属性にもとづいて位置コンテナを決定する方法について説明する。図11で、移動先決定部604は、まず、移動元位置コンテナの日時属性を取得する(S1101)。移動元位置コンテナの情報は、位置コンテナ管理部603に保管されている。移動先決定部604は、スレッドに配置された位置コンテナのIDをキーにして、位置コンテナ管理部603から位置コンテナの詳細な情報を取得する。図10の例では、現スレッド1002上にある位置コンテナ1012の日時属性が取得されることになる。次に、移動先決定部604は、移動先スレッド内に存在する位置コンテナを参照して(S1102)、各位置コンテナの日時属性を取得し(S1103)、S1101で取得した移動元位置コンテナの日時属性との差異を算出(S1104)する。そして、移動先決定部604は各位置コンテナで算出した値を比較して(S1105)、差異の最も小さい位置コンテナを移動先に決定する(S1106)。図10の例では、移動先スレッド1001内の各位置コンテナの日時属性を取得、移動元位置コンテナ1012との差異を算出し、最も差異が小さい位置コンテナ1011が移動先となる。なお、図11のフローチャートでは、移動先スレッドの位置コンテナを全て確認しているが、高速化のために予めスレッド上の位置コンテナの順序を並べた情報をスレッド管理部602に保持しておいてもよい。
次に、図10の現スレッド1002およびスレッド1003、1004と図12を用いて、インデックス情報にもとづいて移動先位置コンテナを決定する方法について説明する。図10のスレッド1003には、現スレッド1002の位置コンテナ1012に関連する文書が位置コンテナ1013に格納されている。このように、文書管理では、関連する情報が日付の近い位置コンテナに存在しているとは限らない。その場合に利用するのがインデックス情報である。インデックスとはデータに付与された情報で、タグやキーと呼ばれることもある。図10の位置コンテナ1013、1014の中には、同じインデックス情報を持つ文書が格納されている。
図12は、インデックス情報にもとづいて位置コンテナを決定する処理のフローチャートである。図12において、移動先決定部604は、まず、移動元の位置コンテナの日時属性を取得する(S1201)。図10の例では、現スレッド1002上にある位置コンテナ1012の日時属性を取得する。次に、移動先決定部604は、移動先スレッド内に存在する位置コンテナ内で所定のインデックスを持つ文書を抽出する(S1202)。移動先決定部604は、抽出された文書から(S1203)、文書が格納されている位置コンテナを取得し(S1204)、各位置コンテナの日時属性を取得(S1205)する。次に、移動先決定部604は、S1201で取得した移動元位置コンテナの日時属性とS1205で取得した日時属性の差異を算出(S1206)する。そして、移動先決定部604は、各位置コンテナで算出した値を比較して(S1207)、差異の最も小さい位置コンテナを移動先に決定する(S1208)。所定のインデックスを持つファイルはスレッド内に複数存在することもある。複数ある場合には、日時属性情報が近い位置コンテナに決定されることになる。図10の例では、位置コンテナ1013内の文書が所定のインデックスを保持しているため、移動先として位置コンテナ1013に決定されることになる。同様にスレッド1004内の位置コンテナ1014内に所定のインデックスを持つファイルがあるため、スレッド1003の位置コンテナ1013からスレッド1004へ移動した場合、移動先は位置コンテナ1014になる。
なお、日時属性にもとづいて決定するか、インデックス情報にもとづいて決定するかの選択については、予め設定しておく方法や、移動時にユーザーが選択する方法などがある。ここでは、日付属性とインデックス情報の2つの例を挙げたが、比較対象となる情報は他であってもよい。また、比較対象とする情報が複数であってもよい。比較対象が複数となる場合、比較の優先順位を設ける方法や、全ての比較対象項目を総合的に判断する方法などが考えられる。優先順位を設ける方法としては、例えば、最初に日付属性で比較を行い、同じ日付属性を持つ位置コンテナが存在した場合に別の項目で決定するといったことができる。
以上のように、スレッド間を移動する操作と移動先を決定する処理によって、他スレッドへの移動操作の手間を省くことが可能になる。
次に図13、図14、図15で、その他の機能について説明する。図13は、スレッドの時間軸を調整する例を示している。例えば、毎年、決まった時期に実施される定型的な業務のようなものをスレッドとして管理することがあるが、そのようなスレッドでは、同じ時期の過去の情報を参照したい場合がある。しかし、スレッドを同一時間軸上で比較すると、それらのスレッドには重なっている時期が存在せず、移動先の位置コンテナも同時期にはならない。そのため、上記の移動先決定処理だと、移動先とならない可能性が高い。そこで、各スレッドを同一の時間軸上に配置せず、スレッドの開始点を合せる処理を行う。図13には、スレッド1301とスレッド1302があり、スレッド1301には2011年度の業務、スレッド1302には2012年度の業務データが格納されている。例えば、現在、位置コンテナ1312のデータを参照している場合に過去の情報である位置コンテナ1311を参照したいケースが考えられる。ここで、点線1320で示すように、スレッドの開始点を各年の1月1日に合わせる調整を行う。そのようにすることで、位置コンテナ1312から位置コンテナ1311へ移動ができるようになる。
図14は、移動先スレッドを変更する例を示している。現在、スレッド1401の位置コンテナ1411のデータを参照しているとして、下へフリックすると、フローチャート図9、図11の処理ではスレッド1402の位置コンテナ1412に移動することになる。しかし、日時属性の差が大きい場合に、位置コンテナ1411にある情報と位置コンテナ1412にある情報の関連性が低いことも考えられる。このような状況で、別のスレッド1403に、日時属性の近い、あるいは、所定のインデックスを持つ文書が存在している位置コンテナ1413が存在した場合、位置コンテナ1411から位置コンテナ1413へ移動することができる。
図15は、移動先から移動元へ戻る場合の例を示している。現在、スレッド1501の位置コンテナ1511のデータを参照しているとして、下へフリックすると、スレッド1502の位置コンテナ1513へ移動する。ここで、位置コンテナ1513から上へフリックすると、スレッド順序は保持されているためスレッド1501へ戻るが、位置コンテナの決定処理はスレッド移動時に行われるため、位置コンテナ1512に移動することになる。しかし、ユーザーは元の位置コンテナ1511に戻りたい場合が多い。そこで、位置コンテナの移動経路をスタック情報として一時保管しておき、元のスレッドに戻る場合は移動元の位置コンテナに移動することができる。
以上、図13、図14、図15の機能を伴うことによって、より多くのスレッドパターンや操作パターンに対応できるようになる。
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。