【解決手段】情報表示装置202は、プログラムリスト100への第1の命令文の入力を検出する検出処理と、第1の命令文の入力が検出された場合に、第1の命令文に対応する第1のライセンスを検索する第1の検索処理と、第1のライセンスを識別する情報と第1の命令文の出現位置とを対応付けた第1のライセンスに関する出現情報を格納する格納処理と、第1のライセンスに競合する第2のライセンスを検索する第2の検索処理と、第2のライセンスに関する出現情報を検索する第3の検索処理と、第1のライセンスを識別する情報と、前記第2のライセンスに関する出現情報とを、表示画面に表示する表示処理と、を実行する。
前記表示処理では、前記プロセッサは、前記第1の命令文および前記第1のライセンスを識別する情報と、前記第2の命令文および前記第2のライセンスに関する出現情報とを、前記表示画面に表示することを特徴とする請求項1に記載の情報表示装置。
前記表示処理では、前記プロセッサは、前記第1のライセンスを識別する情報と、前記第2のライセンスに関する出現情報とを、前記第1の命令文の前記プログラムリストへの入力、前記プログラムリストの保存、または、前記プログラムリストの再オープンのいずれかのタイミングで、前記表示画面に表示することを特徴とする請求項1に記載の情報表示装置。
前記表示処理では、前記プロセッサは、前記ポリシー違反情報を、前記第1の命令文の前記プログラムリストへの入力、前記プログラムリストの保存、または、前記プログラムリストの再オープンのいずれかのタイミングで、前記表示画面に表示することを特徴とする請求項6に記載の情報表示装置。
【発明を実施するための形態】
【0011】
インターネット等のオープンネットワークには、オープンソースソフトウェアと呼ばれるプログラムリスト付きのソフトウェアが公開されており、オープンソースソフトウェアのプログラムリストを、自由に開発者が開発するプログラムリストに組み込むことが可能である。オープンソースソフトウェアにはライセンスが指定されていることがあり、オープンソースソフトウェアを開発者が開発するプログラムリストに組み込むことで、オープンソースソフトウェアのライセンスによって開発に制約が生じることがある。
【0012】
そこで、ライセンス競合やライセンスポリシー違反など、開発者が意図しないライセンスの制約を回避するため、本実施例にかかる情報表示装置は、プログラムリスト上の競合ライセンスの出現箇所やプログラムリスト上の命令文についてのライセンスポリシー違反を表示する。これにより、開発者がプログラムリストの作成または編集中に、競合ライセンスやライセンスポリシー違反に関係する命令文を修正することができる。
【0013】
<情報表示例>
図1は、本実施例にかかる情報表示装置による情報表示例を示す説明図である。(A)は、作成または編集中におけるプログラムリストの表示画面101の一例である。表示画面101は、開発者が関数で表現される命令文『funcC1』までプログラムリスト100に入力した状態の画面である。
【0014】
(B)は、(A)において、プログラムリスト100の作成または編集中、命令文『funcC1』が入力された場合に表示されるポリシー違反情報を示す表示画面102の一例である。表示画面102は、表示画面101に重畳表示される。表示画面102は、プログラムリスト100に命令文『funcC1』の入力があった場合に表示される。表示画面102には、対象命令文である命令文『funcC1』がライセンスポリシーに違反することを示す情報が表示される。対象命令文とは、ライセンスポリシー違反や競合の判定対象となる命令文である。ライセンスポリシーとは、あらかじめ規定された開発要件であり、命令文に設定されたライセンスを、開発者が使用可能であるか否かを示す情報である。
【0015】
たとえば、表示画面102では、命令文『funcC1』に付与されているライセンスが、『ライセンス類型:T2』に属する『ライセンス:L3』であり、『ライセンス:L3』は、ライセンスポリシーに違反することを示す。情報表示装置は、表示画面102を、命令文『funcC1』の入力時に表示させてもよく、プログラムリスト100の保存時またはプログラムリスト100が保存されたファイルの再オープン時に表示させてもよい。
【0016】
(C)は、ポップアップ情報を示す表示画面103の一例である。表示画面103は、(A)の表示画面101に表示されるプログラムリスト100を保存する場合に表示される画面である。表示画面103の上段には、プログラムリスト100に入力された対象命令文である命令文『funcC1』に付与されているライセンスが、『ライセンス類型:T2』に属する『ライセンス:L3』であり、『ライセンス:L3』の出現率は50%であることを示す。ライセンス出現率とは、ファイルDB(Database)に保存されているプログラムリストのファイル群に出現するライセンスのうち、対象命令文に設定されたライセンスが出現する確率である。
【0017】
表示画面103の中段には、競合命令文、競合ライセンス、競合ライセンス類型、競合ライセンス出現率、競合ライセンス出現箇所が表示される。「競合」とは、同じ著作物(本例ではプログラム)に共存させてはならない複数のライセンスが同じ著作物に共存しうる状態である。競合命令文とは、対象命令文に設定されたライセンスと競合するライセンス(競合ライセンス)が設定された命令文である。競合命令文は、同じプログラムリスト100に対象命令文『funcC1』よりも先に入力された命令文『funcA1』でもよく、他のプログラムリストに入力された命令文でもよい。すなわち、「競合」は同一ファイルだけではなく、異なるファイル間でも生じる。競合ライセンス類型とは、競合ライセンスの種類を示す情報である。
【0018】
競合ライセンス出現率とは、ファイルDB(Database)に保存されているプログラムリストのファイル群に出現するライセンスのうち、競合命令文に設定された競合ライセンスが出現する確率である。競合ライセンス出現箇所とは、競合ライセンスが設定された競合命令文の出現位置を示す情報である。たとえば、競合ライセンスが設定された競合命令文が入力されたプログラムリストが保存されるファイルのファイル名、当該ファイルでの競合命令文が出現する先頭行からの行数、当該ファイルでの競合命令文が出現する行の先頭文字からのバイト数により特定される。
【0019】
また、表示画面103の下段には、置換可能命令文が表示される。置換可能命令文とは、対象命令文と同等の機能を有し、かつ、対象命令文に設定されたライセンスとは競合しないライセンスが設定された命令文である。
【0020】
なお、情報表示装置は、表示画面103を、プログラムリスト100をファイルに保存する場合だけではなく、対象命令文の入力時や、当該ファイルの再オープン時に表示させてもよい。
【0021】
このように、プログラムリスト100の作成または編集中に表示画面102、103を表示することができるため、開発者は、ライセンスポリシーを遵守したり、他のライセンスと競合したりしないように、プログラムリストを作成または編集することができ、プログラムリストの作成または編集の手戻り発生を抑制することができる。
【0022】
<システム構成例>
図2は、本実施例にかかる情報表示システムのシステム構成例を示す説明図である。情報表示システム200は、端末201とサーバとなる情報表示装置202とがLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワークに接続されたシステムである。端末201は、開発者が操作するコンピュータであり、プログラムリストの作成や編集が可能である。情報表示装置202は、
図1の(B),(C)に示した表示画面102,103に関する情報を生成して端末201に送信し、端末201のブラウザに表示画面102,103を表示させるコンピュータである。なお、
図2では、クライアントサーバ型の情報表示システム200について説明したが、端末201において
図1の(B),(C)に示した表示画面102,103に関する情報を生成することとしてもよい。
【0023】
<ハードウェア構成例>
図3は、端末201および情報表示装置202(以下、総称してコンピュータ)のハードウェア構成例を示すブロック図である。コンピュータ300は、プロセッサ301と、記憶デバイス302と、入力デバイス303と、出力デバイス304と、通信インターフェース(通信IF305)と、を有する。プロセッサ301、記憶デバイス302、入力デバイス303、出力デバイス304、および通信IF305は、バス306により接続される。プロセッサ301は、コンピュータ300を制御する。記憶デバイス302は、プロセッサ301の作業エリアとなる。また、記憶デバイス302は、各種プログラムやデータを記憶する非一時的なまたは一時的な記録媒体である。記憶デバイス302としては、たとえば、ROM(Read Only Memory)、RAM(Random Access Memory)、HDD(Hard Disk Drive)、フラッシュメモリがある。入力デバイス303は、データを入力する。入力デバイス303としては、たとえば、キーボード、マウス、タッチパネル、テンキー、スキャナがある。出力デバイス304は、データを出力する。出力デバイス304としては、たとえば、ディスプレイ、プリンタがある。通信IF305は、ネットワーク203と接続し、データを送受信する。
【0024】
<機能的構成例>
図4は、本実施例にかかる情報表示システム200の機能的構成例を示すブロック図である。端末201は、取得部411と編集部412と保存部413とを有する。また、情報表示装置202は、情報表示部420とファイルDB421とを有する。取得部411、編集部412、保存部413、および情報表示部420は、具体的には、たとえば、
図3に示した記憶デバイス302に記憶されたプログラムをプロセッサ301に実行させることにより、その機能を実現する。また、ファイルDB421は、記憶デバイス302によりその機能を実現する。
【0025】
取得部411は、ファイルDB421からプログラムリストが保存されているファイルを取得する。また、新規作成の場合、取得部411は、プログラムリストが未入力状態のファイルを取得する。取得されたファイルは、表示画面101として表示される。編集部412は、取得部411によって取得されたプログラムリストに、キーボードなどの入力デバイス303の操作により文字入力する。保存部413は、取得部411によって取得されたプログラムリストをファイルとしてファイルDB421に保存する。情報表示部420は、取得部411によってプログラムリストが取得された場合に、
図1の表示画面102,103に関する情報を生成して、表示先である端末201や情報表示装置202の出力デバイス304に出力する。出力デバイス304では、表示画面102,103が表示される。
【0026】
図5は、
図4に示した情報表示部420の機能的構成例を示すブロック図である。情報表示部420は、命令文定義ファイル501と、ライセンス情報格納テーブル502と、出現箇所情報格納テーブル503と、競合ライセンス情報格納テーブル504と、置換可能命令文情報格納テーブル505と、ポップアップ情報格納テーブル506とを有する。以後の説明では「テーブル」形式で説明するが、これら情報は必ずしもテーブルによるデータ構造で表現されていなくても良く、リスト、DB、キュー等のデータ構造やそれ以外で表現されていても良い。そのため、データ構造に依存しないことを示すために「テーブル」、「リスト」、「DB」、「キュー」等について単に「情報」と呼ぶことがある。また、各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「名前」、「ID」という表現を用いることが可能であり、これらについてはお互いに置換が可能である。
【0027】
また、情報表示部420は、検出部510と、第1の検索部511と、格納部512と、第2の検索部513と、第3の検索部514と、算出部515と、第4の検索部516と、判断部517と、表示制御部518と、を有する。
【0028】
検出部510は、プログラムリストへの第1の命令文の入力を検出する。検出元のプログラムリストは、編集部412により作成または編集中のファイルに格納されているプログラムリストである。第1の命令文とは、取得されたプログラムリストに入力された命令文であり、上述した対象命令文となる。検出部510は、第1の命令文の入力を、命令文定義ファイル501を参照することにより検出する。
【0029】
図6は、命令文定義ファイル501の一例を示す説明図である。命令文定義ファイル501は、プログラムリストに入力された命令文を検出するための情報である。命令文定義ファイル501には、たとえば、命令文を検出するための情報として正規表現が規定される。したがって、検出部510は、プログラムリストに入力された文字列が正規表現に該当する場合に、入力された文字列を命令文として検出する。なお、命令文定義ファイル501には、正規表現に限らず、命令文が規定されてもよい。また、検出部510は、入力された命令文の削除も検出する。
【0030】
図5に戻り、第1の検索部511は、検出部510によって第1の命令文の入力が検出された場合に、命令文群の各命令文と当該命令文に設定されたライセンスとを対応付けたライセンス情報から、第1の命令文に対応する第1のライセンスを検索する。検索された第1のライセンスと当該第1のライセンスに対応する第1の命令文は、ポップアップ情報格納テーブル506に格納される。また、ライセンス情報には、たとえば、ライセンス情報格納テーブル502が該当する。
【0031】
図7は、ライセンス情報格納テーブル502の一例を示す説明図である。ライセンス情報格納テーブル502は、命令文701とライセンス702とライセンス類型703とを対応付けたテーブルである。ライセンス702には、ライセンスを識別する情報としてライセンス名が格納される。ライセンス類型703には、ライセンス702の種類が格納される。たとえば、GPL(General Public License)はライセンス類型703であり、GPLv2やGPLv3は、ライセンス類型:GPLに属するライセンス702である。ライセンス情報格納テーブル502は、どの命令文701にどのライセンス類型703のどのライセンス702が設定されたかを示す情報である。たとえば、命令文701がSaである場合、対応するライセンス702はL1であり、ライセンスL1のライセンス類型703はT1である。ライセンス情報格納テーブル502は、あらかじめ用意されるテーブルであり、各エントリは、追加、変更、削除可能である。
【0032】
図5に戻り、格納部512は、ライセンスを識別する情報と命令文の出現位置とを対応付けて格納可能なライセンスに関する出現情報に、第1の検索部511によって検索された第1のライセンスを識別する情報と第1の命令文の出現位置とを対応付けた第1のライセンスに関する出現情報を格納する。ライセンスに関する出現情報には、たとえば、出現箇所情報格納テーブル503が該当する。
【0033】
図8は、出現箇所情報格納テーブル503の一例を示す説明図である。出現箇所情報格納テーブル503は、ライセンスの出現箇所を示す情報であり、ライセンス801とファイル名802と行数803とオフセット804とを対応付けた情報である。ライセンス801には、ライセンスを識別する情報としてライセンス名が格納される。ファイル名802、行数803およびオフセット804は、ライセンス801が設定された命令文の出現位置を示す。ファイル名802は、ライセンス801が設定された命令文が入力されたプログラムリストのファイルの名称である。行数803は、ファイル名802により特定されるファイルにおいて、ライセンス801が設定された命令文が出現する先頭行からの行数である。オフセット804は、ファイル名802により特定されるファイルにおいて、ライセンス801が設定された命令文が出現する行の先頭からのバイト数である。
【0034】
出現箇所情報格納テーブル503の初期状態は空である。格納部512は、第1の検索部511によって検索された第1のライセンスのライセンス名と、第1の命令文が入力されたプログラムリストのファイル名、行数およびオフセットである出現位置とを、出現箇所情報格納テーブル503の新規エントリとして格納する。なお、検出部510によって命令文の削除が検出された場合、格納部512は、削除された命令文について格納されたエントリを出現箇所情報格納テーブル503から削除する。
【0035】
図5に戻り、第2の検索部513は、ライセンスと当該ライセンスに競合する競合ライセンスとを対応付けた競合ライセンス情報から、第1のライセンスに競合する第2のライセンスを検索する。競合ライセンス情報には、たとえば、競合ライセンス情報格納テーブル504が該当する。
【0036】
図9は、競合ライセンス情報格納テーブル504の一例を示す説明図である。競合ライセンス情報格納テーブル504は、ライセンス901と競合ライセンス902とライセンスポリシー違反903とを対応付けた情報である。競合ライセンス情報格納テーブル504では、ライセンス901が、競合ライセンス902と競合することを示す。また、ライセンスポリシー違反903は、ライセンス901がライセンスポリシー違反であるか否かを示す。
【0037】
競合ライセンス情報格納テーブル504は、どのライセンスがどのライセンスと競合関係にあり、また、ライセンスポリシーに違反しているか遵守しているかを示す情報である。たとえば、第1の検索部511によって検索された第1のライセンスがL1である場合、競合ライセンスはL4であり、ライセンスL1はライセンスポリシーを遵守する。したがって、第2の検索部513は、第2のライセンスとしてライセンスL4を検索する。なお、競合ライセンス情報格納テーブル504は、あらかじめ用意されるテーブルであり、各エントリは、追加、変更、削除可能である。
【0038】
第3の検索部514は、ライセンスに関する出現情報から、第2の検索部513によって検索された第2のライセンスに関する出現情報を検索する。具体的には、たとえば、第3の検索部514は、出現箇所情報格納テーブル503から、ライセンス801に第2のライセンスのライセンス名があるエントリを検索する。検索されたエントリである第2のライセンスに関する出現情報は、ポップアップ情報格納テーブル506に格納される。
【0039】
算出部515は、ライセンスに関する出現情報に基づいて、第1のライセンスの出現頻度と第2のライセンスの出現頻度を算出する。ライセンスに関する出現情報には、上述したように、出現箇所情報格納テーブル503が該当する。出現頻度とは、ファイルDB421のファイル群において、ライセンス801がどれくらい出現するかを示す情報である。出現頻度としては、出現確率や出現数がある。本実施例では、出現確率を用いて説明する。なお、出現数とは、あるライセンスについての出現箇所情報格納テーブル503のエントリ数である。また、出現確率は、あるライセンスについての出現数を、出現箇所情報格納テーブル503の総エントリ数で割った値である。
【0040】
第4の検索部516は、命令文と当該命令文と置換可能な置換命令文とを対応付けた置換情報から、第1の命令文と置換可能な第3の命令文を検索する。置換情報には、たとえば、置換可能命令文情報格納テーブル505が該当する。
【0041】
図10は、置換可能命令文情報格納テーブル505の一例を示す説明図である。置換可能命令文情報格納テーブル505は、命令文1001と置換可能命令文1002とを対応付けたテーブルである。置換可能命令文1002とは、命令文1001と同等の命令を実行する文であり、命令文1001と置換可能である。なお、置換可能命令文情報格納テーブル505は、あらかじめ用意されるテーブルであり、各エントリは、追加、変更、削除可能である。第4の検索部516によって検索された第3の命令文は、置換可能命令文1002としてポップアップ情報格納テーブル506に格納される。
【0042】
図5に戻り、判断部517は、ライセンスがライセンスポリシーに違反するか否かを示すライセンスポリシー情報を参照して、第1のライセンスがライセンスポリシーに違反するか否かを判断する。ライセンスポリシー情報には、たとえば、
図9に示した競合ライセンス情報格納テーブル504が該当する。たとえば、ライセンスL1の場合は、競合ライセンス情報格納テーブル504においてライセンスポリシー違反903が『No』であるため、判断部517は、ライセンスL1はライセンスポリシーに違反していないと判断する。一方、ライセンスL2の場合は、競合ライセンス情報格納テーブル504においてライセンスポリシー違反903が『Yes』であるため、判断部517は、ライセンスL2はライセンスポリシーに違反すると判断する。
【0043】
表示制御部518は、判断部517によって第1のライセンスがライセンスポリシーに違反すると判断された場合、第1の命令文と第1のライセンスとを対応付けたライセンスポリシー違反情報を表示画面に表示する。表示制御部518は、ライセンスポリシー違反情報を情報表示装置202の出力デバイス304の表示画面に表示してもよく、端末201にポップアップ情報を送信して、端末201の出力デバイス304の表示画面に表示させてもよい。ライセンスポリシー違反情報における第1の命令文は、たとえば、
図1の表示画面102の『対象命令文:funcC1』に相当する。また、ポリシー違反情報における第1のライセンスは、たとえば、
図1の表示画面102の『ライセンス:L3』に相当する。
【0044】
また、表示制御部518は、ライセンスポリシー違反情報を、第1の命令文のプログラムリストへの入力、プログラムリストの保存、または、プログラムリストの再オープンのいずれかのタイミングで、表示画面に表示することとしてもよい。第1の命令文のプログラムリストへの入力タイミングの場合、開発者は、これまでに入力した命令文の中から、今回入力した命令文についてポリシー違反であることを確認することができる。また、命令文の入力によりポリシー違反情報が表示されるため、開発者は、ポリシー違反情報を表示させるための操作を別途する必要はなく、プログラムリストの作成または編集をおこなうことができる。
【0045】
また、プログラムリストの保存タイミングの場合、開発者は、保存直前にプログラムリストに含まれるポリシー違反を確認することができる。また、プログラムリストの再オープンのタイミングの場合、開発者は、編集開始時にプログラムリストに含まれるポリシー違反を確認することができる。
【0046】
また、表示制御部518は、第1のライセンスを識別する情報と、第3の検索部514によって検索された第2のライセンスに関する出現情報とを、ポップアップ情報として表示画面に表示する。第1のライセンスを識別する情報は、第1のライセンスのライセンス名であり、たとえば、
図1の表示画面103の『ライセンス:L3』に相当する。第2のライセンスに関する出現情報は、第1のライセンスと競合する第2のライセンス(競合ライセンス)の出現位置を示す情報(ファイル名、行数、オフセット)であり、たとえば、
図1の表示画面103の『競合ライセンス出現箇所:ファイルFa(行数NLa)[バイト数os1]』に相当する。
【0047】
また、表示制御部518は、ポップアップ情報を情報表示装置202の出力デバイス304の表示画面に表示してもよく、端末201にポップアップ情報を送信して、端末201の出力デバイス304の表示画面に表示させてもよい。
【0048】
また、表示制御部518は、第1の命令文および第1のライセンスを識別する情報と、第2の命令文および第2のライセンスに関する出現情報とを、ポップアップ情報として表示画面に表示することとしてもよい。第1の命令文は、たとえば、
図1の表示画面103の『対象命令文:funcC1』に相当する。第2の命令文は、競合命令文であり、たとえば、
図1の表示画面103の『競合命令文:funcA1』に相当する。
【0049】
また、表示制御部518は、算出部515によって算出された第1のライセンスの出現頻度および第1のライセンスを識別する情報と、算出部515によって算出された第2のライセンスの出現頻度および第2のライセンスに関する出現情報とを、ポップアップ情報として表示画面に表示することとしてもよい。第1のライセンスの出現頻度は、対象命令文に設定されたライセンスの出現頻度であり、たとえば、
図1の表示画面103の『ライセンス出現率:50%』に相当する。第2のライセンスの出現頻度は、競合命令文に設定された競合ライセンスの出現頻度であり、たとえば、
図1の表示画面103の『競合ライセンス出現率:50%』に相当する。
【0050】
ライセンス出現率または競合ライセンス出現率をポップアップ情報の一部とすることで、開発者はプログラムリストにおいてライセンスの競合における修正箇所に対して、出現箇所のより少ない箇所を修正するためのヒントを得ることができ、手戻りの少ない修正が可能になる。
【0051】
また、表示制御部518は、第4の検索部516によって検索された第3の命令文および第1のライセンスを識別する情報と、第2のライセンスに関する出現情報とを、ポップアップ情報として表示画面に表示することとしてもよい。第3の命令文は、置換可能命令文であり、たとえば、
図1の表示画面103の『置換可能命令文:funcC2』に相当する。
【0052】
また、表示制御部518は、上述したポップアップ情報を、第1の命令文のプログラムリストへの入力、プログラムリストの保存、または、プログラムリストの再オープンのいずれかのタイミングで、表示画面に表示することとしてもよい。第1の命令文のプログラムリストへの入力タイミングの場合、開発者は、これまでに入力した命令文の中から、今回入力した命令文についてのポップアップ情報を確認することができる。また、命令文の入力によりポップアップ情報が表示されるため、開発者は、ポップアップ情報を表示させるための操作を別途する必要はなく、プログラムリストの作成または編集をおこなうことができる。
【0053】
また、プログラムリストの保存タイミングの場合、開発者は、保存直前にプログラムリストに含まれるポップアップ情報を確認することができる。また、プログラムリストの再オープンのタイミングの場合、開発者は、編集開始時にプログラムリストに含まれるポップアップ情報を確認することができる。
【0054】
また、表示制御部518は、ポップアップ情報格納テーブル506のエントリを読み出すことにより、上述したポップアップ情報を表示画面に表示する。
【0055】
図11は、ポップアップ情報格納テーブル506の一例を示す説明図である。ポップアップ情報格納テーブル506は、命令文1101とライセンス1102とライセンス類型1103と競合ライセンス1104と競合出現ファイル1105と競合出現行数1106と競合出現オフセット1107と置換可能命令文1108とを有し、ポップアップ情報ごとにエントリを構成する。
【0056】
命令文1101には、第1の検索部511によって検索された第1のライセンスに対応する第1の命令文が格納される。ライセンス1102には、第1の検索部511によって検索された第1のライセンスのライセンス名が格納される。ライセンス類型1103には、ライセンス情報格納テーブル502において第1の命令文および第1のライセンスに対応するライセンス類型が格納される。
【0057】
競合ライセンス1104、競合出現ファイル1105、競合出現行数1106、および競合出現オフセット1107には、第3の検索部514によって検索された第2のライセンスに関する出現情報である競合ライセンス名、競合ファイル名、当該競合ファイル名における行数、当該行数におけるオフセットが格納される。
【0058】
置換可能命令文1108には、第4の検索部516によって検索された第1の命令文と置換可能な第3の命令文が格納される。
【0059】
<情報表示例>
図12は、ライセンスポリシー違反情報の表示例を示す説明図である。
図12において、表示画面102は、プログラムリスト100を作成または編集する表示画面101の保存ボタン1201を押下した場合に表示される画面である。そして、表示画面102の保存ボタン1202が押下されると、表示画面101に表示されているプログラムリスト100がファイルDB421に保存される。キャンセルボタン1203が押下されると、表示画面102は消去される。
【0060】
また、表示画面102によるライセンスポリシー違反の警告を行った後に、編集部412は、キー入力を一段階元に戻して、開発者がライセンスポリシーに違反するライセンス付きの文字列を入力不可能にしてもよい。
【0061】
図13は、ポップアップ情報の表示例1を示す説明図である。ポップアップ情報が表示されている表示画面103は、プログラムリスト100を作成または編集する表示画面101において命令文『funcC1』が入力された場合に表示される画面である。符号1301はカーソルである。表示制御部518は、競合ライセンス出現箇所にリンク1302を生成する。これにより、表示画面103において、競合ライセンス出現箇所である『競合ライセンス出現箇所:ファイルFa(行数NLa)[バイト数os1]』には、当該競合ライセンス出現箇所へのリンク1302が張られる。
【0062】
図14は、ポップアップ情報の表示例2を示す説明図である。
図14は、
図13の表示例1の次状態である。
図14は、カーソル1401によりリンク1302が指定された状態を示す。
【0063】
図15は、ポップアップ情報の表示例3を示す説明図である。
図15は、
図14の表示例2の次状態である。
図15は、カーソル1401によりリンク1302が指定されたことにより、表示制御部518は、リンク1302のリンク先となる競合ライセンス出現箇所をファイルDB421から特定する。そして、表示制御部518は、表示画面101のカーソル1301を、命令文『funcC1』の末尾位置から競合ライセンス出現箇所である競合命令文『funcA』の先頭位置に移動させる。これにより、開発者は、どの命令文が競合命令文であるかを容易に特定することができ、修正作業の効率化を図ることができる。
【0064】
<情報表示処理例>
図16は、情報表示装置202による情報表示処理の一例を示すフローチャートである。まず、情報表示装置202は、編集部412によりファイルDB421からファイルを指定してオープンする(ステップS1601)。つぎに、情報表示装置202は、検出部510により命令文の入力が検出されたか否かを判断する(ステップS1602)。命令文の入力が検出されない場合(ステップS1602:No)、ステップS1606に移行する。
【0065】
一方、命令文の入力が検出された場合(ステップS1602:Yes)、情報表示装置202は、表示情報生成処理を実行する(ステップS1603)表示情報生成処理(ステップS1603)は、ライセンスポリシー違反情報およびポップアップ情報を生成する処理である。表示情報生成処理(ステップS1603)の詳細については
図17および
図18で説明する。
【0066】
表示情報生成処理(ステップS1603)のあと、情報表示装置202は、表示制御部518によりポップアップ情報を表示する(ステップS1605)。このあと、情報表示装置202は、ファイルDB421への保存指示の有無を判断し(ステップS1606)、保存指示がない場合(ステップS1606:No)、ステップS1602に移行する。一方、保存指示がある場合(ステップS1606:Yes)、情報表示装置202は、保存部413によりファイルをファイルDB421に保存する(ステップS1607)。
【0067】
<表示情報生成処理例>
図17は、
図16に示した表示情報生成処理(ステップS1603)の一例を示すフローチャート1である。まず、情報表示装置202は、第1の検索部511により、ステップS1602での検出命令文をライセンス情報格納テーブル502から検索する(ステップS1701)。つぎに、情報表示装置202は、ステップS1701により検索できたか否かを判断する(ステップS1702)。すなわち、情報表示装置202は、検出命令文でヒットしたエントリがライセンス情報格納テーブル502にあるか否かを判断する。
【0068】
検出できなかった場合(ステップS1702:No)、表示情報生成処理(ステップS1603)を終了し、ステップS1606に移行して保存指示待ちとなる。一方、検索できた場合(ステップS1702:Yes)、情報表示装置202は、格納部512により、検出命令文が存在するファイルのファイル名、当該ファイルでの検出命令文が出現する先頭行からの行数、検出命令文が出現する行の先頭からのオフセットを特定し、出現箇所情報格納テーブル503に格納する(ステップS1703)。また、情報表示装置202は、第1の検索部511により、検出命令文に対応するライセンス名をライセンス情報格納テーブル502から特定し、特定したライセンス名と検出命令文とをポップアップ情報格納テーブル506に格納する(ステップS1704)。
【0069】
また、情報表示装置202は、第1の検索部511により、検出命令文およびライセンス名の組に対応するライセンス類型をライセンス情報格納テーブル502から特定し、特定したライセンス類型を当該組に関連付けてポップアップ情報格納テーブル506に格納する(ステップS1705)。
【0070】
このあと、情報表示装置202は、判断部517により、競合ライセンス情報格納テーブル504を参照して、検出命令文がライセンスポリシーに違反するか否かを判断する(ステップS1706)。ライセンスポリシー違反である場合(ステップS1706:Yes)、情報表示装置202は、表示制御部518により、
図1の(B)に示したように、ライセンスポリシー違反情報(表示画面102)を表示する(ステップS1707)。このあと、
図18のステップS1801に移行する。一方、ライセンスポリシーに違反していない場合(ステップS1706:No)、
図18のステップS1801に移行する。
【0071】
図18は、
図16に示した表示情報生成処理(ステップS1603)の一例を示すフローチャート2である。まず、情報表示装置202は、第2の検索部513により、検出命令文に対応する競合ライセンスのライセンス名を競合ライセンス情報格納テーブル504から検索する(ステップS1801)。つぎに、情報表示装置202は、ステップS1801により検索できたか否かを判断する(ステップS1802)。すなわち、情報表示装置202は、検出命令文でヒットしたエントリが競合ライセンス情報格納テーブル504にあるか否かを判断する。
【0072】
検索できなかった場合(ステップS1802:No)、ステップS1807に移行する。一方、検索できた場合(ステップS1802:Yes)、情報表示装置202は、第2の検索部513により、競合ライセンス名をポップアップ情報格納テーブル506に格納する(ステップS1803)。
【0073】
つぎに、情報表示装置202は、第3の検索部514により、競合ライセンスの出現箇所を、出現箇所情報格納テーブル503から検索する(ステップS1804)。情報表示装置202は、ステップS1804により検索できたか否かを判断する(ステップS1805)。すなわち、情報表示装置202は、競合ライセンス名でヒットしたエントリが出現箇所情報格納テーブル503にあるか否かを判断する。
【0074】
検索できなかった場合(ステップS1805:No)、ステップS1807に移行する。一方、検索できた場合(ステップS1805:Yes)、情報表示装置202は、検索できたエントリを、ポップアップ情報格納テーブル506の競合ライセンスの出現箇所(競合ライセンス1104、競合出現ファイル1105、競合出現行数1106、競合出現オフセット1107)に格納する(ステップS1806)。
【0075】
そして、情報表示装置202は、第4の検索部516により、検出命令文と置換可能な命令文を置換可能命令文情報格納テーブル505から検索する(ステップS1807)。検出できなかった場合(ステップS1808:No)、表示情報生成処理(ステップS1603)を終了し、ステップS1604に移行する。一方、検索できた場合(ステップS1808:Yes)、情報表示装置202は、検索された置換可能命令文をポップアップ情報格納テーブル506に格納する(ステップS1809)。そして、表示情報生成処理(ステップS1603)を終了して、ステップS1604に移行する。
【0076】
このように、本実施例によれば、開発者は、プログラムリストの作成または編集において命令文を入力するだけで(別途操作する必要なく)、当該命令文についての競合ライセンスの存在やライセンスポリシー違反を確認することができる。したがって、プログラム開発の手戻りの抑制を図ることができる。
【0077】
また、入力が検出された検出命令文と、当該検出命令文に設定されたライセンスに競合する競合ライセンスが設定された競合命令文とを表示することにより、開発者は、検出命令文がどの命令文とライセンス競合してしまうかを、命令文を入力するだけで(別途操作する必要なく)、確認することができる。
【0078】
ライセンス出現率または競合ライセンス出現率をポップアップ情報の一部とすることで、開発者はプログラムリストにおいてライセンスの競合における修正箇所に対して、出現箇所のより少ない箇所を修正するためのヒントを得ることができ、手戻りの少ない修正が可能になる。
【0079】
また、ライセンス競合する場合に検出命令文について置換可能命令文を表示することにより、ライセンス競合を回避しつつプログラムリストの作成または編集をおこなうことができる。また、検出命令文に設定されたライセンスのライセンスポリシー違反情報を表示することにより、ライセンスポリシー違反を回避したプログラムリストを作成または編集することができる。
【0080】
このように、本実施例によれば、プログラムリストの作成または編集において命令文を入力するだけで、別途操作する必要なく、ポップアップ情報やライセンスポリシー違反情報を表示することができる。したがって、プログラムリストの作成や編集を効率的におこなうことができ、手戻りの抑制を図ることができる。
【0081】
なお、上述した実施例では、ポップアップ情報(表示画面103)およびライセンスポリシー違反情報(表示画面102)を表示する例について説明したが、いずれか一方を表示することとしてもよい。
【0082】
また、情報表示装置202は、置換可能命令文を表示する場合、競合ライセンスと、置換可能命令文に設定されたライセンスとが競合するか否かを、競合ライセンス情報格納テーブル504を参照して判断することとしてもよい。具体的には、たとえば、
図1(C)において、情報表示装置202は、競合ライセンスL1と置換可能命令文funcC2に設定されたライセンスとが競合するか否かを判断する。競合しない場合は、情報表示装置202は、置換可能命令文funcC2を表示画面103に表示し、競合する場合は、他に競合しない置換可能命令文があれば当該置換可能命令文を表示画面103に表示し、他に競合しない置換可能命令文がなければ表示画面103に表示しない。これにより、情報表示装置202は、代用できる置換可能命令文のみを開発者に提示することができ、修正作業の効率化を図ることができる。
【0083】
なお、本発明は前述した実施例に限定されるものではなく、添付した特許請求の範囲の趣旨内における様々な変形例及び同等の構成が含まれる。例えば、前述した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに本発明は限定されない。また、ある実施例の構成の一部を他の実施例の構成に置き換えてもよい。また、ある実施例の構成に他の実施例の構成を加えてもよい。また、各実施例の構成の一部について、他の構成の追加・削除・置換をしてもよい。
【0084】
また、前述した各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等により、ハードウェアで実現してもよく、プロセッサがそれぞれの機能を実現するプログラムを解釈し実行することにより、ソフトウェアで実現してもよい。
【0085】
各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリ、ハードディスク、SSD(Solid State Drive)等の記憶装置、又は、ICカード、SDカード、DVD等の記録媒体に格納することができる。
【0086】
また、制御線や情報線は説明上必要と考えられるものを示しており、実装上必要な全ての制御線や情報線を示しているとは限らない。実際には、ほとんど全ての構成が相互に接続されていると考えてよい。