(57)【要約】【課題】運用手順書から自動的にワークフローを生成する。【解決手段】コンピュータは、作成対象のワークフローに含まれる複数の処理にそれぞれ対応する複数のプログラムについてそれぞれの入力値が特定されているか否かを識別可能に記憶する記憶部を備える。コンピュータは、記憶部を参照して、複数のプログラムのうち、入力値が特定された第１のプログラムと、入力値が特定されていない第２のプログラムとを特定する。コンピュータは、特定した第１のプログラム及び第２のプログラム間のワークフロー上での位置関係に基づき、第１のプログラムの入力値と第２のプログラムの入力値とが一致するか否かの判定を行う。コンピュータは、判定結果が肯定的である場合、第１のプログラムの入力値を第２のプログラムの入力値とする。【選択図】図１
2019159602.tif 000002
【特許請求の範囲】
【請求項１】
作成対象のワークフローに含まれる複数の処理にそれぞれ対応する複数のプログラムについてそれぞれの入力値が特定されているか否かを識別可能に記憶する記憶部を参照して、前記複数のプログラムのうち、入力値が特定された第１のプログラムと、入力値が特定されていない第２のプログラムとを特定し、
特定した前記第１のプログラム及び前記第２のプログラム間の前記ワークフロー上での位置関係に基づき、前記第１のプログラムの入力値と前記第２のプログラムの入力値とが一致するか否かの判定を行い、
判定結果が肯定的である場合、前記第１のプログラムの入力値を前記第２のプログラムの入力値とする、
処理をコンピュータに実行させることを特徴とする生成プログラム。
【請求項２】
作成済のワークフローに関するデータから生成された、前記第１のプログラム及び前記第２のプログラム間の位置関係毎の前記第１のプログラムの入力値及び前記第２のプログラムの入力値が一致するか否かの傾向に基づき、前記第１のプログラムの入力値と前記第２のプログラムの入力値とが一致するか否かの判定を行う、
ことを特徴とする請求項１に記載の生成プログラム。
【請求項３】
作成済のワークフローに関するデータから生成された、前記第１のプログラム及び前記第２のプログラム間の位置関係を示す情報、前記第１のプログラムの識別情報、及び前記第２のプログラムの識別情報の組みを、前記第１のプログラムの入力値と前記第２のプログラムの入力値とが一致するか否かを示す情報に変換する変換パラメータに基づき、特定した前記第１のプログラムの入力値及び前記第２のプログラムの入力値が一致するか否かの判定を行う、
ことを特徴とする請求項１に記載の生成プログラム。
【請求項４】
前記変換パラメータは、前記作成済のワークフローに含まれる複数の処理に対応した複数のプログラムの位置関係、および前記複数のプログラムの間で入力値が一致するかの情報を機械学習することにより生成される
ことを特徴とする請求項３に記載の生成プログラム。
【請求項５】
前記第１のプログラム及び前記第２のプログラム間の前記ワークフロー上での位置関係は、前記第１のプログラムで行われる第１の処理から、前記第２のプログラムで行われる第２の処理までの間に、前記作成対象のワークフローに含まれる処理の数を表わす情報である
ことを特徴とする請求項１乃至４のうち何れか１項に記載の生成プログラム。
【請求項６】
前記作成対象のワークフローに含まれる複数の処理を記載した手順書から、前記手順書中の処理の順序、および、データの種類を表わすデータ種別と対応付けて入力値を抽出し、
抽出された入力値のうち、前記第１のプログラムで行われる処理の前記作成対象のワークフロー中での順序と同じ順序に対応付けられ、かつ、前記第１のプログラムに対する入力値のデータ種別と同じデータ種別に分類される値を、前記第１のプログラムに対する入力値として設定する
処理をさらにコンピュータに実行させることを特徴とする請求項１乃至５のうち何れか１項に記載の生成プログラム。
【請求項７】
作成対象のワークフローに含まれる複数の処理にそれぞれ対応する複数のプログラムについてそれぞれの入力値が特定されているか否かを識別可能に記憶する記憶部と、
前記記憶部を参照して、前記複数のプログラムのうち、入力値が特定された第１のプログラムと、入力値が特定されていない第２のプログラムとを特定する特定部と、
特定した前記第１のプログラム及び前記第２のプログラム間の前記ワークフロー上での位置関係に基づき、前記第１のプログラムの入力値と前記第２のプログラムの入力値とが一致するか否かを判定する判定部と、
判定結果が肯定的である場合、前記第１のプログラムの入力値を前記第２のプログラムの入力値に設定する設定部
を備えることを特徴とする生成装置。
【請求項８】
作成対象のワークフローに含まれる複数の処理にそれぞれ対応する複数のプログラムについてそれぞれの入力値が特定されているか否かを識別可能に記憶する記憶部を参照して、前記複数のプログラムのうち、入力値が特定された第１のプログラムと、入力値が特定されていない第２のプログラムとを特定し、
特定した前記第１のプログラム及び前記第２のプログラム間の前記ワークフロー上での位置関係に基づき、前記第１のプログラムの入力値と前記第２のプログラムの入力値とが一致するか否かの判定を行い、
判定結果が肯定的である場合、前記第１のプログラムの入力値を前記第２のプログラムの入力値とする、
処理をコンピュータに実行させることを特徴とする生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、生成プログラム、生成装置、および、生成方法に関する。
【背景技術】
【０００２】
近年、業務システムの運用作業を自動化するＲＢＡ（Runbook Automation）技術が注目されている。ＲＢＡ技術を適用すると、運用手順書に従ってオペレータが行っていた作業の多くが自動化されるため、運用負荷の軽減、ヒューマンエラーの削減、運用コストの低減といった様々な効果が期待できる。ここで、運用手順書を用いたオペレータによる運用からＲＢＡ技術を用いた運用に切り替える場合、ＲＢＡ技術に対応したワークフロー定義ファイル（ワークフロー）を作成することになる。ワークフローの作成は、専用の開発環境（エディタ）を用いて行われる。この場合、オペレータは、エディタに予め設定された様々な運用操作部品を、運用手順書に記載されている運用手順に沿って配置することにより、ワークフローを作成する。
【０００３】
オペレータがワークフローを作成すると、ワークフローの作成のための人件費や工数等の作業コストが発生してしまう。そこで、ワークフローの作成を支援するために、運用作業に含まれる操作の操作名と部品名の比較結果に基づいて、操作と部品を対応付ける実行フロー作成支援装置が提案されている（例えば、特許文献１を参照）。
【０００４】
さらに、作業手順情報から抽出した操作情報毎に、入力テンプレートを用いて入力情報を抽出し、不明な入力情報が少なくなるように作業手順情報に対応する自動実行部品を選択する処理をコンピュータに実行させる方法も提案されている（例えば、特許文献２を参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１４／１３６２１０号
【特許文献２】特開２０１７−３３３８８号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ワークフローの作成の際には、運用手順に含まれている操作と運用操作部品が対応付けられるだけでなく、運用操作部品と運用操作部品に入力される入力値の対応付けも行われる。ここで、運用操作部品と入力値の対応付けは、自動化が困難であり、オペレータが運用手順書の内容を確認しながら手作業で行うことになる。入力テンプレートを用いる方法を用いても、運用手順書の書式が入力テンプレートの書式と異なる場合は、入力値の抽出に失敗してしまう。このため、運用手順書からワークフローを自動生成することは困難である。
【０００７】
本発明は、１つの側面として、本発明は、運用手順書から自動的にワークフローを生成することを目的とする。
【課題を解決するための手段】
【０００８】
１つの態様では、生成プログラムは、作成対象のワークフローに含まれる複数の処理にそれぞれ対応する複数のプログラムについてそれぞれの入力値が特定されているか否かを識別可能に記憶する記憶部を参照して、前記複数のプログラムのうち、入力値が特定された第１のプログラムと、入力値が特定されていない第２のプログラムとを特定し、特定した前記第１のプログラム及び前記第２のプログラム間の前記ワークフロー上での位置関係に基づき、前記第１のプログラムの入力値と前記第２のプログラムの入力値とが一致するか否かの判定を行い、判定結果が肯定的である場合、前記第１のプログラムの入力値を前記第２のプログラムの入力値とする、処理をコンピュータに実行させる。
【発明の効果】
【０００９】
１つの側面によれば、運用手順書から自動的にワークフローを生成できる。
【図面の簡単な説明】
【００１０】
【図１】生成装置の構成の例を説明する図である。
【図２】ワークフローの生成方法の例を説明するフローチャートである。
【図３】学習処理の例を説明するフローチャートである。
【図４】学習処理の例を説明する図である。
【図５】操作情報の抽出処理の例を説明する図である。
【図６】運用設計情報の生成方法の例を説明する図である。
【図７】入力値の抽出方法の例を説明するフローチャートである。
【図８】入力値テーブルの例を説明する図である。
【図９】運用設計情報の例を説明する図である。
【図１０】運用設計情報の例を説明する図である。
【図１１】判定処理の例を説明する図である。
【図１２】運用設計情報の例を説明する図である。
【図１３】運用設計情報の例を説明する図である。
【図１４Ａ】入力値の設定方法の例を説明するフローチャートである。
【図１４Ｂ】入力値の設定方法の例を説明するフローチャートである。
【図１５】生成装置のハードウェア構成の例を説明する図である。
【発明を実施するための形態】
【００１１】
以下、図面を参照して、実施形態について説明する。図１は、生成装置１０の構成の例を説明する図である。生成装置１０は、学習処理部２０、作成処理部３０、および、記憶部４０を備える。記憶部４０は、学習用ワークフローデータベース４１、同義語辞書データベース４２、操作部品情報データベース４３、運用手順書データベース４４を保持する。記憶部４０は、データベースの他に、学習処理部２０や作成処理部３０での処理で得られたデータ等も記憶する。データベースは、ＤＢと表記される。
【００１２】
学習用ワークフローデータベース４１は、学習部２１が使用する学習データを記録したデータベースである。ここで、学習データとして、既に生成されているワークフロー（過去のワークフロー等）が用いられる。なお、学習用ワークフローデータベース４１は、ワークフローが運用されるシステムについての情報も含んでいても良い。例えば、処理対象の運用手順書の種類に応じて、学習データとなるワークフローが選択される場合、選択基準となる情報も学習用ワークフローデータベース４１に含まれ得る。運用手順書データベース４４は、処理対象となる運用手順書を記録する。運用手順書は、オペレータが読んで運用処理を実行できるように処理の内容が記載されたファイルである。運用手順書は、例えば、テキストファイルとして生成され得る。同義語辞書データベース４２は、運用手順書に記載されている文言を正規化する際に使用する語句と、その語句に正規化される同義語を対応付ける。
【００１３】
操作部品情報データベース４３は、運用操作部品の名称や運用操作部品に入力される入力値の種類を特定する情報などを記録する。ここで、運用操作部品（操作部品）は、ワークフロー中の処理を行うために使用されるプログラムである。
【００１４】
学習処理部２０は、学習部２１と判定部２２を備える。学習部２１は、学習用ワークフローデータベース４１に記録されているワークフローを用いて、複数の運用操作部品の間の距離と、各運用操作部品に入力される入力値の関係性を機械学習する。以下、機械学習を単に学習と称することがある。
【００１５】
判定部２２は、学習部２１での学習結果を用いて、先行の運用操作部品に対する入力値と、後続の運用操作部品に対する入力値が一致する可能性が高いかを判定する。以下の説明では、運用操作部品に入力される入力値の種類を特定する情報のことを「入力情報」と記載することがある。例えば、運用操作部品がファイルを作成するプログラムであって、その運用操作部品に入力されたファイル名のファイルを作成するものとする。作成対象のファイル名としてｔｅｓｔ．ｔｘｔが入力される場合、入力値は「ｔｅｓｔ．ｔｘｔ」であり、入力情報は、「作成対象のファイル名」となる。
【００１６】
作成処理部３０は、操作情報抽出部３１、入力情報抽出部３２、選択部３３、生成部３４、出力部３５、および、設定処理部５０を備える。操作情報抽出部３１は、運用手順書から、作業項目番号ごとに操作に関する語句を抽出する。入力情報抽出部３２は、操作部品の入力値となり得る語句を、その語句が出現した作業項目番号とともに、運用手順書から抽出し、その語句の属性情報に対応付ける。選択部３３は、抽出された操作に関する語句を、運用操作部品と対応付けて、運用設計情報に記録する。このとき、選択部３３は、適宜、操作部品情報データベース４３を参照できる。生成部３４は、設定処理部５０の処理結果を用いてワークフローを生成する。出力部３５は、生成したワークフローを出力する。
【００１７】
設定処理部５０は、特定部５１と設定部５２を備える。特定部５１は、判定部２２での判定処理の対象となる入力情報を特定する。設定部５２は、運用操作部品への入力値を設定する。作成処理部３０や設定処理部５０で行われる処理の詳細は後述する。
【００１８】
図２は、ワークフローの生成方法の例を説明するフローチャートである。図２のフローチャートを参照しながらワークフローの生成方法の概略を説明するが、各ステップの処理の詳細は後述する。
【００１９】
学習部２１は、過去のワークフローを学習することにより、判定部２２が分類器として動作する際に使用するパラメータを生成する（ステップＳ１）。操作情報抽出部３１は、処理対象とする運用手順書を運用手順書データベース４４から読み込み、運用手順書に含まれている操作を表わす語句を操作情報として抽出する（ステップＳ２）。選択部３３は、操作部品情報データベース４３を参照しながら、抽出された操作情報の各々を運用操作部品に対応付け、得られた結果を運用設計情報に記録する（ステップＳ３）。このとき、選択部３３は、操作情報に対応付けた運用操作部品の各々に入力される情報の種類も、入力情報として特定し、運用設計情報に記録する。入力情報抽出部３２は、運用手順書に含まれている入力値を表わす記載を、入力値として抽出する（ステップＳ４）。設定部５２は、運用設計情報に記録されている入力情報の各々に対して、入力値を設定する（ステップＳ５）。このとき、設定部５２は、適宜、ある入力情報の入力値が他の入力情報の入力値と同じ値になる確率が高いかを判定部２２が判定した結果を利用する。なお、判定部２２は、ステップＳ１で生成されたパラメータを用いて判定処理を行う。設定部５２による入力値の設定が終わると、生成部３４はワークフローを生成し、出力部３５は生成されたワークフローを出力する（ステップＳ６）。
【００２０】
図２において、ステップＳ１はステップＳ５の処理が行われる前のタイミングであれば、どのタイミングで行われても良い。例えば、ステップＳ１の処理は、ステップＳ２以降の処理が行われる前に前処理として行われても良いし、ステップＳ４の後で行われても良い。さらに、ステップＳ４の処理は、ステップＳ２、Ｓ３の前に行われても良い。
【００２１】
＜学習処理＞
図３は、学習処理の例を説明するフローチャートである。学習部２１は、学習用ワークフローデータベース４１から学習用のワークフローを読み込む（ステップＳ１１）。このとき、学習部２１は、学習用ワークフローデータベース４１に記録されているワークフローのうちの一部を学習用に使用しても良く、学習用ワークフローデータベース４１に記録されている全てのワークフローを学習用に使用しても良い。例えば、オペレータは、処理対象の運用手順書の内容に応じて、学習に使用するワークフローを選択し、選択したワークフローを学習部２１に設定しても良い。学習部２１は、学習用のワークフローを、学習データのフォーマットに整形する（ステップＳ１２）。ステップＳ１２において、学習部２１は、学習用ワークフローから、運用操作部品の入力情報や運用操作部品間の距離など、学習処理に使用される情報を抽出することにより、学習データとする。学習部２１は、得られた学習データを、分類器で機械学習する（ステップＳ１３）。なお、学習部２１が備える分類器は、機械学習が可能な任意の分類器である。学習部２１は、分類器での機械学習により得られた情報を、学習結果として記憶部４０に記録する（ステップＳ１４）。なお、ステップＳ１４はオプションであり、ステップＳ１４が行われないように改変されても良い。例えば、ステップＳ１４の処理の代わりに、学習結果を用いた判定を行う際に使用されるパラメータを、学習部２１が判定部２２に設定しても良い。
【００２２】
図４は、学習処理の例を説明する図である。図４を参照しながら、図３のステップＳ１２、Ｓ１３で行われる処理の例を詳しく説明する。図４の例では、ワークフロー６ｘ〜６ｚが学習に使用するワークフローとして学習部２１に読み込まれているとする。ワークフロー６ｘには、ｍａｋｅ＿ｆｉｌｅ、ｍａｋｅ＿ｄｉｒ、ｃｏｐｙ＿ｆｉｌｅ、ｍｏｖｅ＿ｆｉｌｅの順に４つの運用操作部品が含まれている。さらに、ワークフロー６ｘ中には、各運用操作部品が処理に使用する入力情報も含まれているとする。学習部２１は、ワークフロー６ｘから、これらの運用操作部品の間の位置関係と、各運用操作部品に入力される入力情報を機械学習する。ここで、２つの運用操作部品の間の位置関係は、一方の運用操作部品から、他方の運用操作部品までにワークフロー６上に記録されている運用操作部品の数である。以下の記載では、運用操作部品の間の位置関係のことを「運用操作部品の間の距離」と記載することがある。例えば、ワークフロー６ｘでは、ｍａｋｅ＿ｆｉｌｅという運用操作部品の後の最初の運用操作部品がｍａｋｅ＿ｄｉｒであるので、ｍａｋｅ＿ｆｉｌｅとｍａｋｅ＿ｄｉｒの間の距離は１である。一方、ｍａｋｅ＿ｆｉｌｅという運用操作部品から２つ目の運用操作部品はｃｏｐｙ＿ｆｉｌｅである。このため、ｍａｋｅ＿ｆｉｌｅとｃｏｐｙ＿ｆｉｌｅの間の距離は２である。
【００２３】
図４の学習データ７に示されるように、１つの運用操作部品に複数の入力値が入力されることがあるため、個々の入力値はその入力値の種類を表わす入力情報に対応付けられる。入力情報として、運用操作部品と入力値の種類の組み合わせを一意に特定する識別情報（ＩＤ）が用いられる。
【００２４】
図４の学習データ７に示されるように、部品ａ、ｂの入力情報および入力値に、上述した距離が対応付けられて記録される。また、部品ａの入力値と部品ｂの入力値とが等しい場合、部品ａ、ｂの入力情報および入力値に「一致」が対応付けられる。部品ａの入力値と部品ｂの入力値とが等しくない場合、部品ａ、ｂの入力情報および入力値に「不一致」が対応付けられる。
【００２５】
学習部２１は、学習データ７を入力として、機械学習を行い、分類器を生成する。該分類器は、学習済みモデルとも称される。
【００２６】
＜操作情報の抽出＞
図５は、操作情報の抽出処理の例を説明する図である。図５を参照しながら、図２のステップＳ２の処理の例を説明する。図５の運用手順書２は、テキストデータとして記載された運用手順書の例である。図５に示す運用手順書２には、項目番号と、各項目番号に対応した手順が記載されている。なお、項目番号は、各手順の順序を示す番号である。
【００２７】
操作情報抽出部３１は、運用手順書２に記載されている各作業項目から、項目番号に対応付けて、運用操作に関する語句を抽出する。以下、運用手順書２中の運用操作に関する語句のことを「操作語句」と記載することがある。操作情報抽出部３１は、抽出した操作語句を処理するために、同義語辞書データベース４２を参照する。
【００２８】
同義語辞書データベース４２には、正規化の際に使用する表現（正規表現）と、正規表現に置き換えられる同義語を対応付けている。図５の例では、「ファイルを作成」という文言と、「ファイルを生成」という文言は、いずれも「ファイル作成」という正規表現の同義語である。同様に、「ファイルをコピーする」という文言と、「複写する」という文言は、いずれも「ファイル複写」という正規表現の同義語である。さらに、「ディレクトリを圧縮する」という文言と、「かためる」という文言は、いずれも「ディレクトリ圧縮」という正規表現の同義語である。
【００２９】
操作情報抽出部３１は、運用手順書２から抽出した操作語句を、同義語辞書データベース４２に含まれている正規表現に置き換えることにより、操作語句を正規化する（ステップＳ２１）。例えば、操作情報抽出部３１は、項目＝１から「ファイルを生成」という操作語句を抽出する。操作情報抽出部３１は、同義語辞書データベース４２を参照することにより、項目＝１から抽出した操作語句を「ファイル作成」という正規表現に置き換える。同様の処理を他の項目にも行うことにより、操作情報抽出部３１は、図５に示す項番別操作情報３を生成する。
【００３０】
＜運用設計情報の生成＞
図６は、運用設計情報５の生成方法の例を説明する図である。図６を参照しながら、図２のステップＳ３の処理の例を説明する。選択部３３は、項番別操作情報３中の各操作に対応する運用操作部品を決定するために、操作部品情報データベース４３を参照する。
【００３１】
操作部品情報データベース４３には、運用操作部品に対応付けて、運用操作部品の名称、入力情報、属性が記録されている。運用操作部品の名称は、運用操作部品が行う処理を表わす正規表現に一意に対応付けられる。図６の例では、運用操作部品の名称として、運用操作部品が行う処理を表わす正規表現が使用されている。入力情報は、運用操作部品の処理の際に運用操作部品に入力される情報の種類を表わす識別情報である。例えば、操作部品情報データベース４３の1番目のエントリは、ｍａｋｅ＿ｆｉｌｅという運用操作部品に対して、ＩＤ＝６１で識別される情報とＩＤ＝６２で識別される情報が入力されることを示している。ここで、ＩＤ＝６１はｍａｋｅ＿ｆｉｌｅに入力される実行ホスト名を識別する情報であり、ＩＤ＝６２はｍａｋｅ＿ｆｉｌｅに入力される生成対象のファイル名を識別する情報であるとする。属性は、入力情報ごとにその入力情報として受け付けられるデータタイプが記録される。例えば、操作部品情報データベース４３の1番目のエントリでは、ＩＤ＝６１（実行ホスト）に対応する属性はＩＰアドレスであり、ＩＤ＝６２（生成対象のファイル名）に対応する属性はファイル名である。
【００３２】
選択部３３は、項番別操作情報３の各項目に登録されている操作語句をキーとして操作部品情報データベース４３を検索し、検索によって得られた運用操作部品と情報を、項目番号に対応付けて運用設計情報５に記録する（ステップＳ２２）。例えば、図６中の項番別操作情報３には、項目番号＝１の操作語句として「ファイル作成」が得られている。そこで、選択部３３は、「ファイル作成」という文言をキーとして操作部品情報データベース４３を検索し、得られた値と得られた運用操作部品を、項目番号＝１に対応付けて運用設計情報５に記録する。その他の項目に対しても同様に処理を行うことにより、図６に示す運用設計情報５を生成する。なお、選択部３３による操作が終わった段階では、運用設計情報５に含まれる入力情報のいずれに対しても適用される入力値が設定されていない。
【００３３】
＜入力値の抽出方法＞
図７は、入力値の抽出方法の例を説明するフローチャートである。図７を参照しながら、図２のステップＳ４の処理の例を説明する。入力情報抽出部３２は、運用手順書２を読み込む（ステップＳ３１）。入力情報抽出部３２は、運用手順書２から入力値を抽出する（ステップＳ３２）。入力情報抽出部３２は、予め、正規表現テーブルを保持していてもよい。正規表現テーブルは、ファイルパスやメールアドレスのように、正規表現が特定できるような入力値の抽出に使用可能な任意のテーブルである。入力情報抽出部３２は、正規表現テーブルを用いて、入力値を運用手順書２から抽出する。さらに、入力情報抽出部３２は、自然言語処理技術の１つである固有表現抽出手法を用いて、運用手順書２のデータから入力値と属性情報を特定してもよい。その後、入力情報抽出部３２は、抽出した入力値を、その入力値が出現した項目の番号とともに入力値テーブルに記録する（ステップＳ３３）。このとき、入力情報抽出部３２は、入力値と共に、その入力値の属性も入力値テーブルに記録する。
【００３４】
図８は、入力値テーブル４の例を説明する図である。図８は、図５に示す運用手順書２とは異なる運用手順書２が用いられた場合の入力値テーブル４の一例である。入力値テーブル４には、項目の番号、入力値、属性が対応付けられている。項目の番号は、運用手順書２中で各入力値が記載されていた項目の番号である。属性は、入力値のデータタイプを表わす。
【００３５】
＜入力値の設定方法＞
図９は、運用設計情報５の例を説明する図である。図９に示す運用設計情報５ａは、図４〜図６を参照しながら説明した処理と同様の処理によって生成される。以下、図８に示す入力値テーブル４と図９に示す運用設計情報５ａが得られている場合を例として、入力値の設定方法の例を説明する。
【００３６】
設定部５２は、以下の２つの判定基準を用いて、入力値テーブル４中の入力値を運用設計情報５中の運用操作部品への入力値として設定する。
【００３７】
基準１）入力値の属性と運用操作部品に入力される入力情報の属性が同じであり、かつ、運用操作部品に対応付けられた項目番号と入力値が出現した項目番号が一致する場合、運用操作部品の入力情報を、入力値に設定する。
【００３８】
基準２）ワークフローの学習によって得られた運用操作部品間の順序と各運用操作部品の入力情報の組み合わせの情報に基づいて、入力情報を推測できる場合、推測結果を用いて、運用操作部品に入力される値を設定する。
以下、基準１を用いた入力値の設定方法と、基準２を用いた入力値の設定方法に分けて、入力値の設定の例を説明する。
【００３９】
（１）基準１を用いた入力値の設定方法
基準１を用いた入力値の設定では、設定部５２は、運用設計情報５ａ（図９）に記載されている運用操作部品から処理対象の運用操作部品を選択する。ここでは、ｍｏｖｅ＿ｆｉｌｅが処理対象に選択されたとする。設定部５２は、ｍｏｖｅ＿ｆｉｌｅに入力される情報のうち、ＩＤ＝１１で識別される入力情報の属性がＩＰアドレスであることを認識する。次に、設定部５２は、入力値テーブル４から、属性に「ＩＰアドレス」が設定されている情報を検索する。図８の例では、設定部５２は、属性がＩＰアドレスである入力値として、「１９２．１６８．１４４．７２」を特定する。
【００４０】
設定部５２は、処理対象の運用操作部品に対応付けられた項目番号と、入力値テーブル４から特定した入力値に対応付けられた項目番号が一致するかを判定する。この例では、ｍｏｖｅ＿ｆｉｌｅに対応付けられた項目番号は１であり、入力値テーブル４から特定した入力値「１９２．１６８．１４４．７２」に対応付けられた項目番号も１である。そこで、設定部５２は、ｍｏｖｅ＿ｆｉｌｅに入力される情報のうちのＩＤ＝１１で識別される入力情報の値として、入力値「１９２．１６８．１４４．７２」を設定する。
【００４１】
同様に、設定部５２は、ｍｏｖｅ＿ｆｉｌｅへの入力情報のうちのＩＤ＝１２で識別される入力情報の属性がファイル名であることを認識する。設定部５２は、属性がファイル名である入力値として、「Ｃ：￥ｔｅｓｔ￥ｔｅｓｔ．ｔｘｔ」を入力値テーブル４から抽出する。設定部５２は、ＩＤ＝１２の入力先となる運用操作部品ｍｏｖｅ＿ｆｉｌｅと、入力値「Ｃ：￥ｔｅｓｔ￥ｔｅｓｔ．ｔｘｔ」のいずれも、項目番号＝１に対応付けられているので、ＩＤ＝１２の入力情報の値として、Ｃ：￥ｔｅｓｔ￥ｔｅｓｔ．ｔｘｔを設定する。
【００４２】
次に、設定部５２が項目番号＝２の運用操作部品（ｃｏｍｐｒｅｓｓｅｄ＿ｄｉｒｅｃｔｏｒｙ）に対する処理を行う場合の例を説明する。設定部５２は、ｃｏｍｐｒｅｓｓｅｄ＿ｄｉｒｅｃｔｏｒｙへの入力情報のうちのＩＤ＝２１で識別される入力情報の属性がＩＰアドレスであることを認識する。設定部５２は、入力値テーブル４から属性がＩＰアドレスである入力値として、「１９２．１６８．１４４．７２」を特定する。しかし、この例では、ｃｏｍｐｒｅｓｓｅｄ＿ｄｉｒｅｃｔｏｒｙに対応する項目番号は２であるのに対し、特定した入力値に対応付けられている項目番号は１である。設定部５２は、入力先となる運用操作部品の項目番号と入力値が出現した項目番号が一致しないので、ＩＤ＝２１で識別される入力情報への入力値を設定しない。設定部５２は、さらに、他の入力情報についても、基準１に従って、入力値を入力情報に対応付ける。
【００４３】
図１０は、設定部５２が基準１を用いた処理を行ったことにより得られる運用設計情報５の例を示す。図１０中の運用設計情報５ｂのうちの太線で示す情報は、基準１を用いた処理によって設定された情報である。運用設計情報５ｂに示す段階では、項目番号＝２の運用操作部品に入力される情報が設定されていない。
【００４４】
（２）基準２を用いた入力値の設定方法
基準１を用いた設定処理を行っても設定されない入力値については、基準２を用いた設定処理が行われる。基準２を用いた設定処理では、特定部５１が判定処理の対象となる入力情報を特定する。特定部５１は、設定対象となっている入力値を使用する運用操作部品（第２の運用操作部品）を特定する。さらに、特定部５１は、既に入力値が設定されている運用操作部品（第１の運用操作部品）も特定する。以下の例では、第１の運用操作部品が第２の運用操作部品よりも前に処理が行われる運用操作部品から選択される場合を例として説明する。例えば、特定部５１は、運用設計情報５ｂ（図１０）中のＩＤ＝２１で識別される入力情報を、入力値の設定対象に決定したとする。特定部５１は、ＩＤ＝２１で識別される入力情報の入力先となるｃｏｍｐｒｅｓｓｅｄ＿ｄｉｒｅｃｔｏｒｙを第２の運用操作部品とする。特定部５１は、第２の運用操作部品よりも前に処理される運用操作部品であって入力値が設定済みの入力情報を有する第１の運用操作部品として、ｍｏｖｅ＿ｆｉｌｅを特定する。さらに、特定部５１は、第１の運用操作部品となるｍｏｖｅ＿ｆｉｌｅに、ＩＤ＝１１〜１３の各々で識別される３つの入力情報が対応付けられていることから、ＩＤ＝１１〜１３の入力情報を判定処理に使用する候補として特定する。特定部５１は、さらに、特定した第１の運用操作部品と第２の運用操作部品の間の位置関係を特定する。ここで、第１の運用操作部品と第２の運用操作部品の間の位置関係（距離）は、第１の運用操作部品の後に、第２の運用操作部品までに使用される運用操作部品の数で表わされる。第１の運用操作部品と第２の運用操作部品の間の距離は、各運用操作部品に割り振られた項目番号の差分と同じ値である。運用設計情報５ｂの例では、第１の運用操作部品は項目番号＝１のｍｏｖｅ＿ｆｉｌｅであり、第２の運用操作部品は項目番号＝２のｃｏｍｐｒｅｓｓｅｄ＿ｄｉｒｅｃｔｏｒｙである。このため、第１の運用操作部品と第２の運用操作部品の間の距離は１である。
【００４５】
図１１は、判定処理の例を説明する図である。特定部５１での特定処理が終わると、判定部２２は、判定対象の２つの入力情報について、各々の入力情報が入力される運用操作部品間の位置関係、および、各運用操作部品の入力情報の組み合わせに基づいて入力値を推測できる関係にあるかを判定する。このとき、判定部２２は、学習部２１による機械学習の学習結果（分類器）を用いて判定処理を行う分類器Ｆ（Ｘａ，Ｘｂ，Ｙａｂ）として動作する。図１１に示すように、分類器への入力データｄ１は、Ｘａ、Ｘｂ、Ｙａｂである。Ｘａは、第１の運用操作部品の入力情報を特定する識別情報である。第１の運用操作部品の入力情報が複数ある場合、Ｘａは、第１の運用操作部品の入力情報のうちで、判定処理の対象となる入力情報を識別する識別情報である。Ｘｂは、第２の運用操作部品の入力情報のうちで入力値の設定対象となっている入力情報を識別する識別情報である。Ｙａｂは、第１の運用操作部品と第２の運用操作部品の間の距離である。
【００４６】
判定部２２は、分類器Ｆに入力データｄ１を入力した場合に、入力データｄ１が、分類器Ｆが示す傾向と一致と分類されるか、不一致と分類されるかを判定する。ここで、学習済みモデルは、学習データｄ２（上述した学習データ７）を機械学習することにより生成される。従って、学習済みモデルは、第１の運用操作部品への入力情報を特定する識別情報、第２の運用操作部品への入力情報を特定する識別情報、および、第１の運用操作部品と第２の運用操作部品の間の距離を、判定結果に変換するための変換パラメータであるといえる。判定部２２は、分類器を用いて、入力データｄ１を判定した結果を、判定結果ｄ３として生成する。
【００４７】
ここでは、ｃｏｍｐｒｅｓｓｅｄ＿ｄｉｒｅｃｔｏｒｙへの入力情報のうち、ＩＤ＝２１で識別される入力情報が入力値の設定対象となっているので、ＸｂはＩＤ＝２１である。一方、第１の運用操作部品となっているｍｏｖｅ＿ｆｉｌｅへの入力情報のうち、ＩＤ＝１１が判定処理の対象に選択されたとする。この場合、Ｙａｂは、ｍｏｖｅ＿ｆｉｌｅからｃｏｍｐｒｅｓｓｅｄ＿ｄｉｒｅｃｔｏｒｙまでの距離であるため、１である。これらの値が判定部２２に入力されると、判定部２２は、学習済みモデルに基づいて、判定結果ｄ３を出力する。この例では、判定部２２による判定結果が「一致する」であったとする。すると、設定部５２は、ＩＤ＝２１で識別される入力情報に設定する入力値を、ＩＤ＝１１で識別される入力情報に設定されている値と同じ値にする。
【００４８】
図１２は、運用設計情報の例を説明する図である。図１２の例では、設定部５２は、ｃｏｍｐｒｅｓｓｅｄ＿ｄｉｒｅｃｔｏｒｙに入力される実行ホストの情報（ＩＤ＝２１）として、ＩＤ＝１１で識別される入力情報に設定されている値と同じ「１９２．１６８．１４４．７２」を設定する。このため、運用設計情報５ｂ（図１０）は、図１２に示す運用設計情報５ｃに更新されている。
【００４９】
次に、特定部５１がｃｏｍｐｒｅｓｓｅｄ＿ｄｉｒｅｃｔｏｒｙへの入力情報のうち、ＩＤ＝２２で識別される入力情報を入力値の設定対象として特定したとする。さらに、判定処理に使用する第１の運用操作部品の入力情報として、特定部５１が、ｍｏｖｅ＿ｆｉｌｅへ入力されるＩＤ＝１３の入力情報を選択したとする。すると、分類器に入力される値は以下の通りになる。
Ｘａ：ＩＤ＝１３
Ｘｂ：ＩＤ＝２２
Ｙａｂ：１
判定部２２が分類器として、学習済みモデルを用いて判定を行った際の判定結果が「一致」であるとする。すると、設定部５２は、ＩＤ＝１３で識別される入力情報に設定されている入力値「Ｃ：￥ｔｅｓｔ」を、ＩＤ＝２２で識別される入力情報の設定値とする。このため、運用設計情報５ｃ（図１２）は、図１３に示す運用設計情報５ｄのように更新される。図１０〜図１３を参照しながら説明したように、生成装置１０では、学習済みモデルを用いた判定を行うので、例えば、一部の項目での運用操作部品の入力値が運用手順書２中の記載からは抽出されない運用手順書２についても入力値を設定できる場合がある。例えば、以下のように、運用手順書２の一部の項目において入力値となるファイル名を指定しておらず、入力されるファイルが生成された項目番号を記載しているに過ぎない場合がある。
項番２：作業ディレクトリを圧縮する。圧縮ファイル：Ｃ：￥ｒｅｓｕｌｔ．ｚｉｐ
項番３：２のファイルをバックアップサーバに転送
この場合、入力情報抽出部３２は、項目番号＝３の処理での転送対象のファイル名を運用手順書の記載からは入力値として抽出しない。このため、基準１を用いた処理では項目番号３の運用操作部品への入力情報は設定されない。ここで、学習部２１において、過去のワークフローでは、ディレクトリの圧縮を行う運用操作部品（第１の部品）からの距離が１である後段の運用操作部品（第２の部品）が転送処理を行うことを学習しているとする。また、学習部２１は、過去のワークフローでは、第１の部品に圧縮ファイル名として入力される入力値と、第２の部品に転送処理の対象として入力される入力値が一致していることも学習しているとする。この場合、学習済みモデルには、第１の部品に圧縮ファイル名として入力される入力値と、第２の部品に転送処理の対象として入力される入力値が一致することが、第１の部品と第２の部品との間の距離と共に登録されている。このため、判定部２２は、学習済みモデルを用いて、項目番号３の処理を行う運用操作部品に対して転送処理の対象を指定する入力値が、項目番号２の処理を行う運用操作部品に入力される圧縮ファイル名と一致する可能性を肯定的に判定する。この判定に基づき、設定部５２は、項目番号３の処理を行う運用操作部品での転送処理の対象を指定する入力情報として、項目番号２の処理を行う運用操作部品へ入力される圧縮ファイル名と同じ「Ｃ：￥ｒｅｓｕｌｔ．ｚｉｐ」を設定できる。
【００５０】
図１４Ａおよび図１４Ｂは、入力値の設定方法の例を説明するフローチャートである。なお、図１４Ａと図１４Ｂの例では、学習部２１は、生成した学習済みモデルをパラメータとして記憶部４０に記憶し、判定部２２が処理を行う際にパラメータを読み込む場合を例として説明している。しかし、図１４Ａと図１４Ｂは処理の一例であって、学習済みモデルを利用するためのパラメータが判定部２２に設定されるタイミングは、任意に変更され得る。さらに、ステップＳ４２、Ｓ４３の処理の前にステップＳ４４、Ｓ４５の処理が行われても良い。
【００５１】
入力値が設定されていない運用設計情報５が生成されると、ループ端Ｌ１１とＬ１２で挟まれたループ処理が行われる。以下、ループ端Ｌ１１とＬ１２で挟まれたループ処理のことを「入力値テーブル処理ループ」と記載することがある。設定部５２は、全ての運用操作部品に対して処理を行ったかを判定する（ループ端Ｌ１１）。全ての運用操作部品に対して処理を行っていない場合、設定部５２は、入力値の設定処理の対象とする運用操作部品を決定する（ループ端Ｌ１１でＮｏ、ステップＳ４１）。
【００５２】
次に、ループ端Ｌ２１とＬ２２で挟まれたループ処理が行われる。以下、ループ端Ｌ２１とＬ２２で挟まれたループ処理のことを「設定ループ」と記載することがある。設定部５２は、処理対象とする運用操作部品について、全ての入力情報を処理したかを判定する（ループ端Ｌ２１）。処理対象とする運用操作部品について全ての入力情報を処理していない場合、設定部５２は、未処理の入力情報の属性と、入力値の属性を比較する（ループ端Ｌ２１でＮｏ、ステップＳ４２）。なお、ステップＳ４２での比較処理に用いられる入力値は、入力値テーブル４に抽出されている入力値である。設定部５２は、未処理の入力情報の属性と入力値の属性が一致するかを判定する（ステップＳ４３）。未処理の入力情報の属性と入力値の属性が一致しない場合、ループ端Ｌ２１以降の処理が繰り返される（ステップＳ４３でＮｏ）。
【００５３】
一方、未処理の入力情報の属性と入力値の属性が一致する場合、設定部５２は、未処理の入力情報の入力先となる運用操作部品に対応付けられた項目番号と、入力値に対応付けられた項目番号を比較する（ステップＳ４３でＹｅｓ、ステップＳ４４）。入力情報の入力先となる運用操作部品に対応付けられた項目番号と、入力値に対応付けられた項目番号が一致する場合、設定部５２は、処理対象の入力情報に入力値を設定し、ループ端Ｌ２１に戻る（ステップＳ４５でＹｅｓ、ステップＳ４６）。運用操作部品に対応付けられた項目番号と入力値に対応付けられた項目番号が一致しない場合、ループ端Ｌ２１以降の処理が繰り返される（ステップＳ４５でＮｏ）。
【００５４】
ループ端Ｌ２１において、処理対象とする運用操作部品について全ての入力情報を処理したと判定すると、設定部５２は、ループ端Ｌ１１に戻る。ループ端Ｌ１１において、全ての運用操作部品に対して設定ループ中の処理を行ったと判定すると、設定部５２は、入力値テーブル処理ループの処理を終了する。
【００５５】
入力値テーブル処理ループの処理が終了すると、判定部２２は、分類器のパラメータを記憶部４０から読み込む（ステップＳ４６）。次に、ループ端Ｌ３１とＬ３２で挟まれたループ処理が行われる。以下、ループ端Ｌ３１とＬ３２で挟まれたループ処理のことを「対応付けループ」と記載することがある。特定部５１は、入力値が未決定の入力情報を有する運用操作部品があるかを判定する（ループ端Ｌ３１）。入力値が未決定の入力情報を有する運用操作部品がある場合、特定部５１は、入力値の設定処理の対象とする運用操作部品を決定する（ループ端Ｌ３１でＹｅｓ、ステップＳ４７）。
【００５６】
次に、ループ端Ｌ４１とＬ４２で挟まれたループ処理が行われる。以下、ループ端Ｌ４１とＬ４２で挟まれたループ処理のことを「判定ループ」と記載することがある。特定部５１は、先行の運用操作部品の設定済みの入力情報の全てに注目したかを判定する（ループ端Ｌ４１）。先行の運用操作部品の設定済みの入力情報のうちで、判定処理に使用していないものがある場合、特定部５１は、判定処理に使用する入力情報を選択する（ループ端Ｌ４１でＮｏ、ステップＳ４８）。なお、ステップＳ４８で選択される入力情報は、先行の運用操作部品の設定済みの入力情報の中から選択されている。特定部５１は、設定処理の対象の運用操作部品と、選択した入力情報の入力先となる先行の運用操作部品との間の距離を取得する（ステップＳ４９）。判定部２２は、分類器を用いて、距離に応じて、設定対象の入力情報に設定される入力値が、先行する運用操作部品の入力情報に設定されている入力値と一致するかを判定する（ステップＳ５０）。判定部２２が２つの入力値が一致しないと判定すると、特定部５１は、ループ端Ｌ４１に戻る（ステップＳ５１でＮｏ）。
【００５７】
一方、ステップＳ５０での判定において、判定部２２が２つの入力値が一致すると判定したとする（ステップＳ５１でＹｅｓ）。すると、設定部５２は、先行する運用操作部品の入力情報として設定されている入力値を、設定対象の運用操作部品の入力情報に設定する（ステップＳ５２）。ステップＳ５２の処理を行うと、特定部５１は、判定ループから抜けて、ループ端Ｌ３１に戻る。
【００５８】
ループ端Ｌ４１において、先行の運用操作部品の設定済みの入力情報の全てに注目したと判定すると、特定部５１は、判定ループから抜けて、ループ端Ｌ３１に戻る。ループ端Ｌ３１において、入力値が未決定の入力情報を有する運用操作部品がないと判定すると、特定部５１は処理を終了する。
【００５９】
以上説明したように、実施形態にかかる生成装置１０は、運用手順書２から入力値を抽出すると共に、各入力値の属性も特定するので、入力値の属性を用いて、運用設計情報５中の入力情報に入力値を対応付けることができる。そして、入力値の属性からは入力値が決定されない入力情報（第２の入力情報）に対しては、学習済みモデルを用いて、距離に基づいて、他の入力情報（第１の入力情報）と入力値が一致する可能性が肯定的であるかを判定できる。分類器を用いた判定部２２による判定結果が「一致」である場合、生成装置１０は、第２の入力情報の値を第１の入力情報の入力値と一致させる。このため、生成装置１０は、属性からは入力値が決定されない入力情報についても入力値を設定することができる。
【００６０】
なお、図１０〜図１４Ｂを参照しながら、入力値が設定されている先行の運用操作部品の情報を用いて、後続の運用操作部品への入力値を設定する場合の例を説明したが、これは一例に過ぎない。例えば、図１０〜図１４Ｂを参照しながら説明した処理と同様の処理により、生成装置１０は、入力値が設定されている後続の運用操作部品の情報を用いて、先行の運用操作部品への入力値を設定しても良い。
【００６１】
＜ワークフローの生成＞
生成部３４は、入力値の設定が終わった運用設計情報５を、ワークフローに変換する。生成部３４が行う運用設計情報５からワークフローへの変換処理は、任意の既知の方法を用いることができる。出力部３５は、生成部３４が生成したワークフローを出力する。出力先は、他の装置であっても良く、生成装置１０に備えられている表示装置（図示せず）などであっても良い。
【００６２】
以上説明したように、生成装置１０では、運用設計情報５に登録された入力情報の各々について、自律的に入力値を設定することができる。このため、運用手順書２のテキストデータから、ワークフローを自動生成することができる。
【００６３】
＜生成装置１０のハードウェア構成の一例＞
図１５は、生成装置１０のハードウェア構成の例を説明する図である。図１５の例に示すように、バス１００に対して、プロセッサ１１１とRandom Access Memory（ＲＡＭ）１１２とRead Only Memory（ＲＯＭ）１１３とが接続される。また、該バス１００に対して、補助記憶装置１１４と媒体接続部１１５と通信インタフェース１１６とが接続される。
【００６４】
プロセッサ１１１はＲＡＭ１１２に展開されたプログラムを実行する。実行されるプログラムとしては、実施形態における処理を行うプログラムが適用されてもよい。
【００６５】
ＲＯＭ１１３はＲＡＭ１１２に展開されるプログラムを記憶する不揮発性の記憶装置である。補助記憶装置１１４は、種々の情報を記憶する記憶装置であり、例えばハードディスクドライブや半導体メモリ等が適用されてもよい。媒体接続部１１５は、可搬型記録媒体１１５Ｍと接続可能に設けられている。
【００６６】
可搬型記録媒体１１５Ｍとしては、可搬型のメモリ（例えば、半導体メモリ）や光学式ディスク（例えば、Compact Disc(CD)やDigital Versatile Disc(DVD)）等が適用されてもよい。この可搬型記録媒体１１５Ｍに実施形態の処理を行うプログラムが記録されていてもよい。
【００６７】
上述した学習処理部２０と作成処理部３０は、与えられたプログラムをプロセッサ１１１が実行することにより実現されてもよい。また、記憶部４０は、ＲＡＭ１１２や補助記憶装置１１４等により実現されてもよい。
【００６８】
ＲＡＭ１１２、ＲＯＭ１１３、補助記憶装置１１４および可搬型記録媒体１１５Ｍは、何れもコンピュータ読み取り可能な有形の記憶媒体の一例である。これらの有形な記憶媒体は、信号搬送波のような一時的な媒体ではない。
【００６９】
＜その他＞
本実施形態は、以上に述べた実施の形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で種々の構成または実施形態を取ることができる。
【００７０】
例えば、以上の説明では、記憶部４０に運用手順書データベース４４が記憶されているが、処理対象の運用手順書２が、適宜、生成装置１０に読み込まれても良い。運用手順書２が生成装置１０に読み込まれる場合、生成装置１０は、通信インタフェース１１６を介して運用手順書２の読み込みを行っても良い。また、生成装置１０は、入力装置（図示せず）をさらに備えていて、入力装置を介して運用手順書２を取得しても良い。
【００７１】
さらに、学習済みモデルについても変更が行われても良い。例えば、学習済みモデルは、先行する運用操作部品の識別情報、後続の運用操作部品の識別情報、および、運用操作部品の間の距離の組み合わせについて、先行する運用操作部品と後続の運用操作部品の間で入力値が一致するかを判定した情報であっても良い。例えば、各運用操作部品への入力値が１つずつである場合、このように変形すると、入力情報のＩＤの代わりに、各運用操作部品の識別情報を用いて、入力値が運用操作部品間で一致するかの判定や入力値の設定を行うことができる。
【符号の説明】
【００７２】
２  運用手順書
３  項番別操作情報
４  入力値テーブル
５  運用設計情報
６  ワークフロー
７  学習データ
１０  生成装置
２０  学習処理部
２１  学習部
２２  判定部
３０  作成処理部
３１  操作情報抽出部
３２  入力情報抽出部
３３  選択部
３４  生成部
３５  出力部
４０  記憶部
４１  学習用ワークフローデータベース
４２  同義語辞書データベース
４３  操作部品情報データベース
４４  運用手順書データベース
５０  設定処理部
５１  特定部
５２  設定部
１１１  プロセッサ
１１２  ＲＡＭ
１１３  ＲＯＭ
【図１】
2019159602.tif 000003
【図２】
2019159602.tif 000004
【図３】
2019159602.tif 000005
【図４】
2019159602.tif 000006
【図５】
2019159602.tif 000007
【図６】
2019159602.tif 000008
【図７】
2019159602.tif 000009
【図８】
2019159602.tif 000010
【図９】
2019159602.tif 000011
【図１０】
2019159602.tif 000012
【図１１】
2019159602.tif 000013
【図１２】
2019159602.tif 000014
【図１３】
2019159602.tif 000015
【図１４Ａ】
2019159602.tif 000016
【図１４Ｂ】
2019159602.tif 000017
【図１５】
2019159602.tif 000018