2020-001847
操作記録再生プログラム、操作再生プログラム、操作記録再生システム及び操作記録再生方法
- 審判番号
- 2020-001847
- 法域
- 特許
- 審判種別
- 拒絶査定不服審判(拒絶査定不服の審決)
- 出願番号
- 特願2015-212287外部サイト(J-PlatPat)へ移動します
- 請求日
- 2020年02月10日
- 審決日
- 2020年10月28日
- 公報発行日
- 2020年12月25日
- 結論
- 原査定取消(特許/登録すべき)
- 分類
- P18 .121-WY (G06F)
- 条文(本文から自動抽出・参考)
- 特許法第29条第2項
- データ出所
- 審決公報(SGML)
事件の表示
結論
理由
目次 ▾ 17項目
第1 手続の経緯
本願は,平成27年10月28日の出願であって,その後の手続の概要は,以下のとおりである。
第2 原査定の概要
原査定(令和元年11月5日付け拒絶査定)の概要は次のとおりである。
本願請求項1~7に係る発明は,以下の引用文献1~5に基づいて,その発明の属する技術の分野における通常の知識を有する者(以下,「当業者」という。)が容易に発明できたものであるから,特許法第29条第2項の規定により特許を受けることができない。
引用文献等一覧
1.柿元 宏晃 他,「Web行動リプレイシステムに基づくWebアプリケーション動作検証システムとその応用」,2009年度人工知能学会全国大会(第23回)論文集,社団法人人工知能学会,2009年6月19日,第1頁-第4頁
2.牟田 拓,「ゼロからはじめる Microsoft Visual Basic クリッカブルマップエディタ~その4~」,Hello!PC5・8/5・24,ソフトバンクパブリッシング株式会社,1999年5月24日,第6巻 第8号,第196頁-第201頁
3.特開平11-36919号公報
4.特開2000-181835号公報
5.特開平7-21067号公報
第3 本願発明
本願請求項1~7に係る発明(以下,それぞれ「本願発明1」~「本願発明7」という。)は,令和元年6月3日付けの手続補正で補正された特許請求の範囲の請求項1-7に記載された事項により特定される発明であり,本願発明1は以下のとおりの発明である。
「 【請求項1】表示されたオブジェクトに対する操作記録情報を記録し,記録した前記操作記録情報に従った操作を発生させる処理をコンピュータに実行させる操作記録再生プログラムであって,前記操作記録情報に記録する前記操作の種類が操作の対象オブジェクトに対する移動操作の場合,前記操作の種類を示す操作種類情報と,前記操作の対象オブジェクト内の操作位置を示す相対位置情報と,移動元の表示領域情報と,移動先の位置情報と,移動先の表示領域情報と,を対応付けて前記操作記録情報に記録し,前記操作記録情報に含まれる前記操作種類情報が移動操作を示す場合,前記操作記録情報に記録した前記移動元の表示領域情報と,前記移動先の表示領域情報と,前記相対位置情報と,前記移動先の位置情報と,に基づき,前記移動先の表示領域情報に対して前記対象オブジェクトの移動先の位置を補正し,補正した前記位置に前記対象オブジェクトを移動する操作を発生させる,操作記録再生プログラム。」
なお,本願発明2-7の概要は以下のとおりである。
本願発明2は,本願発明1を操作再生プログラムの発明としたものである。
本願発明3及び4は,それぞれ本願発明1に対応するシステム及び方法の発明であり,本願発明1とカテゴリ表現が異なるだけの発明である。
本願発明5~7は,本願発明1,3,4をさらに減縮した発明である。
第4 引用文献,引用発明等1.引用文献1について
原査定の拒絶の理由に引用された上記引用文献1には,図面とともに次の事項が記載されている。
(当審注:下線は,参考のために当審で付与したものである。)
「2. Web行動リプレイシステムWebブラウジング時のユーザの行動を記録し,ユーザの行動を再現するシステムをWeb行動リプレイシステムと呼ぶ.本システムは,ユーザのマウスの動きも再生可能である.」(第1頁右欄1~4行)
「3.1 関連システム本手法のように,Web行動リプレイシステムに基づいて,行動の記録・再現を行うシステムの一つに,デスクトップアプリケーションのロギングツールがある.イベントの発生した位置をOSから取得し,記録・再現を行うというアプローチである.Web上ではレイアウト上部オブジェクトがレイアウト下部のオブジェクトを押し出すという表示規則があるため,サイズが表示ごとに不定のオブジェクト(広告など)や,インターフェースの部分的な変更によって下位のオブジェクトの位置も不定になることがある.取得したイベント発生位置を絶対位置として取得している場合では,イベントの再現時にオブジェクトの位置とイベント発生位置のずれが生じ,正確に再現することができない点が課題である.また,Web上のシステムによってイベントの記録を行っている既存のシステムも存在する.これらのシステムではリンクやボタンなど,粒度の粗い行動のみに絞ってイベントの監視を行い,それらに発生したイベント列を命令セットとして記録している.Web技術が発展した現在のWebアプリケーションでは,マウスカーソルの軌跡,mousedown, mouseupに連動するアクション(オブジェクトのドラッグ&ドロップや軌跡による描画など)やmouseoverに連動するアクション(プルダウンメニューなど)が使われているものがある.既存のシステムのように,リンクやボタンによって発生するイベントを監視するだけでは,これら複雑なアクションを記録することはできないという課題がある.」(第2頁左欄下から7行~同頁右欄19行)
「3.2 ユーザの環境に影響を受けにくいイベント発生座標の取得本手法では,Web上で動作するシステムによってイベントの記録し,DOM構造に基づく行動情報の取得を行うため,オブジェクト位置の変動や,ユーザの環境による影響に柔軟に対応することが可能である.Webページ上でマウスカーソルによるイベントが発生した場合,Webページの左上を基準とした座標としてイベントの発生位置を取得する.本研究ではこの座標をイベント絶対座標と呼ぶ.得られた座標情報をそのまま再現時に利用した場合,前述のようにサイズの可変なオブジェクトに対応することができなくなる.そこで,イベント絶対座標を,イベントが発生した座標直下のオブジェクトを基準として表現する(図2).イベントの絶対座標直下のオブジェクトをイベント直下オブジェクト,イベント直下オブジェクトの左上座標とイベントの絶対座標との差をイベント相対座標と呼ぶ.イベント絶対座標は,イベント直下オブジェクトの左上座標とイベント相対座標の和で表すことができる.本手法ではイベント直下オブジェクトの位置を座標の代わりにXPathで表現する.この表現により,再現時に可変長のオブジェクトによってイベント直下オブジェクトの位置が変動した場合でも,XPathに変更がなければ,取得時と同様に再現することが可能になる.」(第2頁右欄20行~第3頁左欄2行)
「図2」(第3頁)
「3.4 テストケースの生成本手法では,相対的な位置関係でイベントを発生させるための命令セットを,「イベント発生時間」「イベントタイプ」「イベント直下オブジェクトのパス」「イベント相対座標」から生成する.イベントを発生させる位置は命令セットの実行時にリアルタイムに決定する.前述のように,命令セットを実行する環境ごとにウィンドウサイズ,オブジェクトの表示位置に誤差が生じるため,実行時にリアルタイムに計算を行うことで,正確なイベント発生位置を決定することができる.そのため,生成する命令セットは,時系列に並んだ命令群だけでなく,命令セットの実行時にイベント直下オブジェクトのパスから座標を計算する関数を含んだものとなる.図3は,命令群を時系列に並べた命令セットの一部であり,オブジェクトのドラッグ&ドロップを行った場合のものである.MArep.mousemove,MArep.mouseover,MArep.mousedown,MArep.mouseupはそれぞれ,mousemove,mouseover,mousedown,mouseupイベントを発生させる関数である.MAtrace.objはイベントの発生した位置直下のオブジェクトのパスを,イベント発生順に格納している.MAtrace.posはイベントの発生位置を,その直下のオブジェクトからの相対位置として格納している.MArep.timeはイベント間の遅延を発生させる関数である.MAtrace.timeはイベント間の時間を格納した変数であり,MArep.timeへの入力として与えられる.再現時のイベント絶対位置は,イベント直下オブジェクトのパス(MAtrace.obi)から計算した座標とイベント相対座標(MAtrace.pos)の和によって計算できる.この計算を時系列に沿ってイベントごとに行うことで,オブジェクトサイズの変更にも柔軟に対応し,Caputure時と同様の行動を再現できる.」(第3頁左欄下から6行~同頁右欄22行)
引用文献1のWeb行動リプレイシステムの処理は,コンピュータにプログラムを実行させることによって実現されていることは明らかであるから,引用文献1には,「Web行動リプレイシステムの処理をコンピュータに実行させるプログラム」が記載されていると認められる。
したがって,上記引用文献1には次の発明(以下,「引用発明」という。)が記載されていると認められる。
(引用発明)
Webブラウジング時のユーザの行動を記録し,ユーザの行動を再現するWeb行動リプレイシステムの処理をコンピュータに実行させるプログラムであって,
ユーザのマウスの動きも再生可能であり,
Webページ上でマウスカーソルによるイベントが発生した場合,Webページの左上を基準としたイベントの発生位置の座標をイベント絶対座標と呼び,
イベント絶対座標を,イベントが発生した座標直下のオブジェクトを基準として表現し,
イベントの絶対座標直下のオブジェクトをイベント直下オブジェクト,イベント直下オブジェクトの左上座標とイベントの絶対座標との差をイベント相対座標と呼び,
イベント絶対座標は,イベント直下オブジェクトの左上座標とイベント相対座標の和で表すことができ,
イベント直下オブジェクトの位置を座標の代わりにXPathで表現し,
この表現により,再現時に可変長のオブジェクトによってイベント直下オブジェクトの位置が変動した場合でも,XPathに変更がなければ,取得時と同様に再現することが可能になり,
相対的な位置関係でイベントを発生させるための命令セットを,「イベント発生時間」「イベントタイプ」「イベント直下オブジェクトのパス」「イベント相対座標」から生成し,
イベントを発生させる位置は命令セットの実行時にリアルタイムに決定し,
実行時にリアルタイムに計算を行うことで,正確なイベント発生位置を決定することができ,
そのため,生成する命令セットは,時系列に並んだ命令群だけでなく,命令セットの実行時にイベント直下オブジェクトのパスから座標を計算する関数を含んだものとなり,
オブジェクトのドラッグ&ドロップを行った場合の命令群を時系列に並べた命令セットの一部であるMArep.mousemove,MArep.mouseover,MArep.mousedown,MArep.mouseupはそれぞれ,mousemove,mouseover,mousedown,mouseupイベントを発生させる関数であり,
MAtrace.objはイベントの発生した位置直下のオブジェクトのパスを,イベント発生順に格納しており,
MAtrace.posはイベントの発生位置を,その直下のオブジェクトからの相対位置として格納しており,
MArep.timeはイベント間の遅延を発生させる関数であり,
MAtrace.timeはイベント間の時間を格納した変数であり,MArep.timeへの入力として与えられ,
再現時のイベント絶対位置は,イベント直下オブジェクトのパス(MAtrace.obi)から計算した座標とイベント相対座標(MAtrace.pos)の和によって計算でき,この計算を時系列に沿ってイベントごとに行うことで,オブジェクトサイズの変更にも柔軟に対応し,Caputure時と同様の行動を再現できる
プログラム。
2.引用文献2について
原査定の拒絶の理由に引用された上記引用文献2には,図面とともに次の事項が記載されている。
「領域を移動する前回紹介したサイズ変更を応用すれば,領域を移動させるのは難しくありません。左辺,上辺を移動させるときの処理からWidth,Heightプロパティを変更している部分を取り去り,ちょっとした補正を加えたものを使えばいいだけだからです。実用一点張りの連載ならそうするところなのですが,これはVisualBasicの入門なのですから,別の手を使ってみることにします。サイズ変更を応用する方法は難しくありませんので,みなさんへの課題としておきましょう。今回紹介する別の方法は,ドラッグ&ドロップを使う方法です。フォームのデザイン時には,フォーム上に配置したコントロールの上でマウスの左ボタンを押しそのままマウスを動かす(ドラッグ)することで,簡単にコントロールを動かすことができます。これと同じ機能をプログラムの実行時にも使えるようにしようというわけです。フォームに貼り付けたコントロールが実行時に動かせないのは,そのコントロールのDragModeプロパティが,続きを表示(全32行)となっているからです。手動とは,「ドラック処理をやりたいなら自分でプロタラムを作りなさい」という意味です。これを,とすれば,配置したコントロールは実行中でも動かすことができるようになります。試しにForm1の中にボタン(Command1)を作り,そのDragModeプロパティを[自動]に設定し,プログラムを実行してみてください。ボタンをドラッグすると,図1のようにマウスポインタにボタンの“影”がくっついて移動するようになります。もっとも,これでは単に動かせるようになっただけで,マウスのボタンを離すと(ドロップすると)影は消えてしまいます。理由は簡単。ドラッグ処理は“自動”で行われるようになりましたが,ドロップ処理は自動では行われないからです。では,ドロップ処理はどうすればいいのでしょうか。何かがドロップされるとVisual BasicはDragDropというイベントを発生させます。もしPicture1でDragDropイベントが発生したときを捉えてドロップ処理をしたいなら,Picture1_DragDropというプロシージャを作って処理を書けばいいわけです。DragDropプロシージャは,という3つの仮引数をとります。何がドロップされたのかをSourceで示し,どこにドロップされたのかを(X,Y)という座標で表すわけです。したがって,とプログラムすれば,ドロップされたものをドロップされた座標に移動することができます。Sourceは仮引数宣言からもわかるように(各種)コントロールを表すオブジェクト変数ですから,各コントロールに用意されているMoveメソッドを使ってコントロールを動かすわけです。これが今回作成するドラッグ&ドロップの骨子です。骨子と断ったのは,この方法では狙ったとおりの場所ヘコントロールを動かすことができないからです(実際に上のプログラムを入力して動かしてみるとわかります)。理由は,にあります。X,Yは,ドロップが行われたコントロール(この場合はPicture1)での,ドロップされた座標を表しています。すなわちこれは,ドロップ時のPicture1におけるマウスポインタの座標なのです。-方Moveメソッドは,コントロールの左上隅の座標が,指定された座標になるようにコントロールを動かします。つまりこのプログラムでは,コントロール内のどこでマウスの左ボタンを押してドラッグを開始しようが,ドロップしたときには常にマウスポインタの位置がコントロールの左上隅になってしまうわけです。これを解決するには,ドラッグ開始時に「コントロールのどこでマウスの左ボタンが押されたのか」をチェックし,ドロップ時にその分を補正する必要があります。[自動]でドラッグ開始されたのでは補正分を得ることができませんから,補正するにはDragModeプロパティを[0-手動]に戻し,プログラム内でドラッグを開始させる必要があります。プログラム内でドラッグを開始させるには,ドラッグを開始させたいコントロールのDragメソッドを使います。とすれば,Command1がドラッグ中となるわけです。これでコントロール移動に必要な知識は揃いました。早速プログラムしてみることにしましょう。領域移動のプログラムリスト1は,上の考え方にしたがって作成した,領域移動のプログラムです。Label1_MouseDownプロシージャは,Label1でマウスのボタンが押されたときに呼び出されるプロシージャで,マウスポインタの形から,マウスのボタンが押されたとき何をすればいいのか判断してそれぞれの処理をしています。領域のサイズ変更部分は前回作りましたから,今回はドラッグ開始処理を付け加えます。ドラッグ開始は,マウスポインタが上下左右矢印のときとします。追加した行は行末に「’**」を,削除する行は行頭に「’**」を付加してあります。仮引数が2行に分けて書いてあるのは掲載の都合ですので,みなさんは一行のままにしておいて構いません。追加部分ではまず,あとで補正できるように現在のマウスの位置をdsX,dsYという大域変数に保存しています(大域変数dsX,dsYは,全プログラムの先頭に入力してください)。ここで保存しているX,YはLabel1の内部座標で,Label1の左上隅から何Twipsのところでマウスのボタンが押されたかを表しているのだということを思い出しておいてください。あとで再び登場します。ちなみにdsX,dsYは,ドラッグ(Drag)スタート(Start)時のX座標,Y座標という意味で命名しました。dsX,dsYにドラッグ開始時のマウス位置を保存できたら,Dragメソッドを使ってLabel1のドラッグ動作をスタートさせます。サイズ変更のときにはShape1のサイズを変更してからLabel1をそれに合わせましたが,Shapeコントロールはドラッグ&ドロップすることができませんので,移動ではLabel1をドラッグ&ドロップしてから新しい位置にShape1を移動させます。これでドラッグが開始されましたから,次にドロップ時のプログラムを作ります。Picture1_DragDropです。こちらではnewx,newyという2つの変数に補正込みの新しい移動先を算出し,そこにSourceをMoveします。先ほど実験したように,ドロップされた座標(X,Y)にコントロールを動かすとそこがコントロールの左上隅になってしまいますから,ドラッグ前にコントロールでマウスのボタンが押されたときの差分dsX,dsYをその座標から引いてやればOKです(図2参照)。このとき気を付けなければならないのが,dsX,dsYはTwips単位であるのに対し,Label1の移動先の座標であるX,Yは(ズーム処理の関係で)vbUser単位になっているということです。単純に,とやったのでは,正しい移動先は求まりません。前回使ったPicture1.ScaleXメソッドを使い,dsXの単位をTwipsからvbUserへ変換してやる必要があります(Y座標に関しても同じです)。座標が求まったら,そこへSource(すなわちLabel1)を移動させ,続いてShape1のほうもここに移動させます。Label1とShape1はいずれも配列ですが,1つの領域は同じインデックスのLabel1とShape1の組み合わせで表現していますので,ドロップされたSource(すなわちLabel1)のlndexをそのままShape1のインデックスとすれば,対応するShape1となります。Shape1の移動が終わったら,Label1_MouseDownプロシージャの冒頭で無効にしておいたLabel1を再び生き返らせます。この処理は前回作成したLabel1_MouseUpプロシージャで行っているのですが,ドラッグ&ドロップ時にはLabel1でMouseUpイベントが発生しません。こちらで生き返らせる必要があります。最後に,ドロップ後の領域の座標を自作のmakeCoords関数で得て,それをリストビューコントロール(ListView1)の該当行にセットしてドロップ作業は終了です。といきたいところなのですが,1つ見落としがあります。ここまでのプログラムを入力したら,試しに実行し,領域を移動させてみてください。大きく移動させた際にはちゃんと移動しますが,少ししか移動させない場合には動きません。ドロップ時にマウスポインタの位置をよくチェックしているとわかるのですが,ドロップ先がPicture1ではなく自分自身(Label1)になっているからです。これに対応するには,Label1にドロップされたときの処理を付け加える必要があります。それがリスト2になります。Label1_DragDropプロシージャのプログラムは,先のPicture1_DragDropとほとんど変わりません。newx,newyの算出方法が違うだけです。Label1_DragDropの仮引数X,Yは,Label1の中のどこにドロップされたのかを表していることに注意しましょう。X,YはLabel1の内部座標(単位はTwips)です(図3)。これを押さえておけば,ドラッグ開始位置からドロップ位置までの移動距離(X軸方向)は,で求まることは簡単にわかるでしょう(単位はTwips)。あとは,SourceのLeftプロパティとTopプロパティに動いた距離を加えれば,新しい座標が求まります。ただし,SourceはPicture1に配置してありますので,そのLeft,TopプロパティはvbUser単位になっている点,新しい座標もvbUser単位しなければならない点に注意が必要です。移動距離をTwipsからvbUserに変換してから,LeftプロパティやTopプロパティに加えればOKです。先にLabel1_MouseDownプロシージャで,移動やサイズ変更に関係のないLabel1はすべて無効にしておいたのは,このドロップ処理のことを考えたからです。他のLabel1が生きていると,自分自身へのドラッグ&ドロップ以外のケースも考えなければならなくなります。移動距離の計算も,簡単に,では済まなくなり,ちょっと面倒そうです。そこまで考えたところで頭がごちゃごちゃになりそうだったので,関係のないものには消えてもらうことにしたというのが本音です。」(第196頁左欄10行~第199頁左欄9行)
「図2」(第198頁)
したがって,上記引用文献2には,「コントロール内のどこでマウスを使用してドラッグを開始しようが,ドロップしたときには常にマウスポインタの位置がコントロールの左上隅になってしまうことを課題とし,ドロップされた座標(X,Y)にコントロールを動かすとそこがコントロールの左上隅になってしまうことを回避するために,ドラッグ前にコントロールでマウスのボタンが押されたときの差分dsX,dsYを,ドロップされた座標(X,Y)から引き,位置を補正する手法」が記載されていると認められる。
3.引用文献3について
原査定の拒絶の理由に引用された上記引用文献3には,図面とともに次の事項が記載されている。
「【0024】前記コントローラ14には,エアフローメータ1の検出した吸入空気量信号,スロットルバルブ開度センサ2の検出したスロットル開度信号,クランク角センサ5の検出したクランク角信号,エンジン冷却水温センサ6の検出した冷却水温信号,触媒温度センサ8からの温度信号,排気センサ9などからの排気酸素濃度信号などが入力し,これらに基づいて,運転状態に応じてリーン燃焼とストイキ燃焼を行うように燃料噴射量,噴射時期を制御し,また機関低温時の部分負荷域など触媒7の早期活性化のために燃料噴射を吸気行程と圧縮行程の2回に分けて行い,かつこのときの全体的な空燃比が空気過剰率λ=1.1程度となるように燃料供給量を制御する。」
4.引用文献4について
原査定の拒絶の理由に引用された上記引用文献4には,図面とともに次の事項が記載されている。
「【0077】かかる動作において,画面範囲選択部213は,マウスポインタの移動が検出されたことに応答して,現在のマウスポインタの位置で最も手前にあるアプリケーションのビジブルなウインドウサイズと位置をウインドウ・システムに問い合わせ,ウインドウ枠に対応した矩形を表示させる。このウインドウ枠に対応した矩形はデスクトップ上に直接描画することもできるが,透明ウインドウを生成し,その透明ウインドウ上に描画することもできる。その後,マウスの右ボタンが押されたことが検出されたことに応答して,現在のマウスポインタの位置で最も手前にあるアプリケーションのウインドウを前面に表示させ,またウインドウ枠に対応した矩形を強調表示させる。」
5.引用文献5について
原査定の拒絶の理由に引用された上記引用文献5には,図面とともに次の事項が記載されている。
「【0028】図13に,削除内容の確認処理(図9の209)の詳細を示す。図1に示す削除内容確認キー(20)が押されながらマウスがクリックされると,処理を開始する(331)。まず,前記復元処理の図11の処理312におけるアイコンの特定方法と同様に,マウス位置からアイコンを特定し,削除内容記憶部を特定する(332)。次に,ウインドウ画面を開き(333),前記特定された削除内容記憶部に格納された削除内容情報に基づき,削除内容をウインドウ内に表示する(334)。次に,ウインドウ画面を閉じる(335)。この契機は,マウスクリックなどのユーザー操作か,前記削除内容確認キー(20)が押されてから一定時間後などとすれば良い。そして終了する(336)。」
第5 対比・判断
1.本願発明1について
(1)対比
本願発明1と引用発明とを対比すると,次のことがいえる。
ア 引用発明の「Web行動リプレイシステム」は,「Webブラウジング時のユーザの行動を記録し,ユーザの行動を再現する」ものであって「ユーザのマウスの動きも再生可能であり」,ユーザの行動である,「オブジェクトのドラッグ&ドロップ」を再現することも可能であるところ,引用発明の「オブジェクトのドラッグ&ドロップ」の“操作”は本願発明1の「表示されたオブジェクトに対する操作」に相当し,また,引用発明において「記録」される「ユーザの行動」である「オブジェクトのドラッグ&ドロップ」の“操作”に関する“情報”は,本願発明1の「操作記録情報」に相当するから,引用発明の「Webブラウジング時のユーザの行動」である「オブジェクトのドラッグ&ドロップ」の“操作”に関する“情報”を「記録し」,「ユーザの行動を再現するWeb行動リプレイシステム」の処理をコンピュータに実行させる「プログラム」は,本願発明1の「表示されたオブジェクトに対する操作記録情報を記録し,記録した前記操作記録情報に従った操作を発生させる処理をコンピュータに実行させる操作記録再生プログラム」に相当する。
イ 引用発明において,「オブジェクトのドラッグ&ドロップを行った場合」,「MAtrace.obj」として,「イベントの発生した位置直下のオブジェクトのパスを,イベント発生順に格納し」,「MAtrace.pos」として,「イベントの発生位置を,その直下のオブジェクトからの相対位置として格納し」,「MAtrace.time」として,「イベント間の時間を格納し」ているところ,引用発明の「オブジェクトのドラッグ&ドロップ」の“操作”は,本願発明1の「操作の対象オブジェクトに対する移動操作」に相当するから,引用発明の「オブジェクトのドラッグ&ドロップを行った場合」が本願発明1の「前記操作記録情報に記録する前記操作の種類が操作の対象オブジェクトに対する移動操作の場合」に相当する。
また,「オブジェクトのドラッグ&ドロップを行った場合」に,「イベントの発生位置」が「その直下のオブジェクトからの相対位置として」格納される「MAtrace.pos」は,ドラッグ&ドロップの操作におけるドラッグ時に発生する「mousedown」イベント,及びドロップ時に発生する「mouseup」イベントのそれぞれにおいて,「イベントの発生位置」が「その直下のオブジェクトからの相対位置として」格納されるものと認められることから,引用発明の「MAtrace.pos」のうち,ドラッグ時に発生する「mousedown」イベントの「発生位置」が本願発明1の「前記操作の対象オブジェクト内の操作位置を示す相対位置情報」に相当し,また,ドロップ時に発生する「mouseup」イベントの「発生位置」が本願発明1の「移動先の位置情報」に相当する。
また,引用発明では,「ユーザの行動を再現する」際の「相対的な位置関係でイベントを発生させるための命令セット」は,『「イベント発生時間」「イベントタイプ」「イベント直下オブジェクトのパス」「イベント相対座標」から生成』されるものであるところ,引用発明の「イベントタイプ」は,本願発明1の「操作の種類を示す操作種類情報」に相当し,また,上記で検討したとおり,引用発明の「イベント相対座標」は,本願発明1の「前記操作の対象オブジェクト内の操作位置を示す相対位置情報」及び「移動先の位置情報」に相当するものであり,これら「イベントタイプ」及び「イベント相対座標」が“対応付けて”記録されていることは明らかである。
以上のことから,引用発明と本願発明1とは,後記する点で相違するものの,“前記操作記録情報に記録する前記操作の種類が操作の対象オブジェクトに対する移動操作の場合,前記操作の種類を示す操作種類情報と,前記操作の対象オブジェクト内の操作位置を示す相対位置情報と,移動先の位置情報と,を対応付けて前記操作記録情報に記録し”ている点で共通する。
ウ 引用発明では,「再現時のイベント絶対位置」は,「イベント直下オブジェクトのパス(MAtrace.obi)から計算した座標とイベント相対座標(MAtrace.pos)の和によって計算でき,この計算を時系列に沿ってイベントごとに行うことで,オブジェクトサイズの変更にも柔軟に対応し,Caputure時と同様の行動を再現できる」ものであるから,引用発明において,ユーザの「ドラッグ&ドロップ」操作を再現する際には,ドラッグ時に発生する「mousedown」イベントの「発生位置」(本願発明1における「前記相対位置情報」に相当する。)及びドロップ時に発生する「mouseup」イベントの「発生位置」(本願発明1における「前記移動先の位置情報」に相当する。)に“基づいて”,“オブジェクトを移動する操作を発生させ”ていることは明らかである。
また,引用発明において,「ユーザの行動」として「オブジェクトのドラッグ&ドロップ」を「再現する」“場合”が,本願発明における「前記操作記録情報に含まれる前記操作種類情報が移動操作を示す場合」に相当する。
してみれば,引用発明と本願発明1とは,後記する点で相違するものの“前記操作記録情報に含まれる前記操作種類情報が移動操作を示す場合,前記操作記録情報に記録した前記相対位置情報と,前記移動先の位置情報と,に基づき,前記対象オブジェクトを移動する操作を発生させる”点で共通する。
したがって,本願発明1と引用発明との間には,次の一致点,相違点があるといえる。
(一致点)
「表示されたオブジェクトに対する操作記録情報を記録し,記録した前記操作記録情報に従った操作を発生させる処理をコンピュータに実行させる操作記録再生プログラムであって,前記操作記録情報に記録する前記操作の種類が操作の対象オブジェクトに対する移動操作の場合,前記操作の種類を示す操作種類情報と,前記操作の対象オブジェクト内の操作位置を示す相対位置情報と,移動先の位置情報と,を対応付けて前記操作記録情報に記録し,前記操作記録情報に含まれる前記操作種類情報が移動操作を示す場合,前記操作記録情報に記録した前記相対位置情報と,前記移動先の位置情報と,に基づき,前記対象オブジェクトを移動する操作を発生させる,操作記録再生プログラム。」
(相違点)
(相違点1)操作記録情報に記録する情報として,本願発明1は,「移動元の表示領域情報」と,「移動先の表示領域情報」を記録しているのに対して,引用発明は,そのような情報を記録することは記載されていない点。
(相違点2)本願発明1では,前記操作記録情報に含まれる前記操作種類情報が移動操作を示す場合,前記操作記録情報に記録した相対位置情報と,移動先の位置情報とに加えて,「前記移動元の表示領域情報」と,「前記移動先の表示領域情報」とに基づき,「前記移動先の表示領域情報に対して前記対象オブジェクトの移動先の位置を補正し」,「補正した前記位置に」前記対象オブジェクトを移動する操作を発生させるのに対して,引用発明は,操作記録情報に記録した相対位置情報と,移動先の位置情報とに基づいて,対象オブジェクトを移動する操作を発生させているものの,「相対位置情報」と,「移動先の位置情報」に加えて,「移動元の表示領域情報」と「移動先の表示領域情報」とに基づいて,「前記移動先の表示領域情報に対して前記対象オブジェクトの移動先の位置を補正し」,「補正した前記位置に」対象オブジェクトを移動する操作を発生させるものではない点。
(2)相違点についての判断
事案に鑑み,上記相違点1及び相違点2についてまとめて検討する。
上記第4,1.の「3.1 関連システム」の記載を参照すると,引用発明は,「Web上ではレイアウト上部オブジェクトがレイアウト下部のオブジェクトを押し出すという表示規則があるため,サイズが表示ごとに不定のオブジェクト(広告など)や,インターフェースの部分的な変更によって下位のオブジェクトの位置も不定になることがあ」り,「取得したイベント発生位置を絶対位置として取得している場合では,イベントの再現時にオブジェクトの位置とイベント発生位置のずれが生じ,正確に再現することができない」という課題や,「Web技術が発展した現在のWebアプリケーションでは,マウスカーソルの軌跡,mousedown,mouseupに連動するアクション(オブジェクトのドラッグ&ドロップや軌跡による描画など)やmouseoverに連動するアクション(プルダウンメニューなど)が使われているものがある」ところ,「既存のシステムのように,リンクやボタンによって発生するイベントを監視するだけでは,これら複雑なアクションを記録することはできない」という課題を解決するためになされたものであり,具体的には,「イベントの発生した位置直下のオブジェクトのパスを,イベント発生順に格納し」た「MAtrace.obj」や,「イベントの発生位置を,その直下のオブジェクトからの相対位置として格納し」た「MAtrace.pos」,「イベント間の遅延を発生させる関数」である「MArep.time」,「イベント間の時間を格納した変数であり,MArep.timeへの入力として与えられ」る「MAtrace.time」などの情報を格納しておき,「再現時のイベント絶対位置」を「イベント直下オブジェクトのパス(MAtrace.obi)から計算した座標とイベント相対座標(MAtrace.pos)の和によって計算」し,「この計算を時系列に沿ってイベントごとに行うことで,オブジェクトサイズの変更にも柔軟に対応し,Caputure時と同様の行動を再現できる」ようにしたものであると認められるところ,当該引用発明において,上記課題を解決するために,行動の記録時に「移動元の表示領域情報」や「移動先の表示領域情報」を記録しておき,行動の再現時に,これらの情報も併せて利用して,「前記移動先の表示領域情報に対して前記対象オブジェクトの移動先の位置を補正」することについては,何らの記載も示唆もなく,また,行動リプレイシステムにおける行動の記録時に「移動元の表示領域情報」や「移動先の表示領域情報」を記録しておき,行動の再現時に,これらの情報も併せて利用して,「前記移動先の表示領域情報に対して前記対象オブジェクトの移動先の位置を補正」することは,上記引用文献2~5にも記載されていないことから,これを,本願出願時の当該技術分野における周知技術であったということもできない。
してみれば,当業者といえども,引用発明及び引用文献2~5に記載された技術的事項から,相違点1及び相違点2に係る本願発明1の構成を容易に想到することはできない。
したがって,本願発明1は,当業者であっても,引用発明及び引用文献2~5に記載された技術的事項に基づいて容易に発明できたものとはいえない。
2.本願発明2について
本願発明2は,本願発明1を操作再生プログラムの発明としたものであり,本願発明1の上記相違点1及び相違点2に係る構成を備えるものであるから,本願発明1と同じ理由により,当業者であっても,引用発明及び引用文献2~5に記載された技術的事項に基づいて容易に発明できたものとはいえない。
3.本願発明3及び4について
本願発明3及び4は,それぞれ本願発明1に対応するシステム及び方法の発明であり,本願発明1とカテゴリ表現が異なるだけの発明であるから,本願発明1と同様の理由により,当業者であっても,引用発明及び引用文献2~5に記載された技術的事項に基づいて容易に発明できたものとはいえない。
4.本願発明5~7について
本願発明5~7は,本願発明1,3,4をさらに減縮した発明であり,本願発明1の上記相違点1及び相違点2に係る構成を備えるものであるから,本願発明1と同じ理由により,当業者であっても,引用発明及び引用文献2~5に記載された技術的事項に基づいて容易に発明できたものとはいえない。
第6 むすび
以上のとおり,本願発明1~7は,当業者が引用発明及び引用文献2~5に記載された技術的事項に基づいて容易に発明をすることができたものではない。したがって,原査定の理由によっては,本願を拒絶することはできない。
また,他に本願を拒絶すべき理由を発見しない。
よって,結論のとおり審決する。
審決本文(J-PlatPat)
J-PlatPatの審決検索トップを開きます。番号入力で「審判番号」を選び、下の番号を貼り付けて検索してください。
2020-001847