【解決手段】それぞれコンピュータで実行される処理に対応する複数の処理オブジェクトを画面上に表示し、当該複数の処理オブジェクトに対する開発者からの操作を受け付けることによって、開発者によるソフトウェアの作成を実現し、開発者が作成するソフトウェアを、互いに異なる複数種類のオペレーティングシステムのいずれでも実行可能な実行用コードとして出力し、出力された実行用コードを読み込んでソフトウェアを実行するソフトウェア開発システムである。
それぞれコンピュータで実行される処理に対応する複数の処理オブジェクトを画面上に表示し、当該複数の処理オブジェクトに対する開発者からの操作を受け付けることによって、開発者によるソフトウェアの作成を実現するソフトウェア作成手段と、
前記ソフトウェア作成手段により開発者が作成するソフトウェアを、互いに異なる複数種類のオペレーティングシステムのいずれでも実行可能な実行用コードとして出力するコード出力手段と、
前記実行用コードを読み込んで前記ソフトウェアを実行するソフトウェア実行手段と、
を含むことを特徴とするソフトウェア開発システム。
それぞれコンピュータで実行される処理に対応する複数の処理オブジェクトを画面上に表示し、当該複数の処理オブジェクトに対する開発者からの操作を受け付けることによって、開発者によるソフトウェアの作成を実現するソフトウェア作成手段と、
前記ソフトウェア作成手段により開発者が作成するソフトウェアを、互いに異なる複数種類のオペレーティングシステムのいずれでも実行可能な実行用コードとして出力するコード出力手段と、
ことを特徴とするソフトウェア開発装置。
それぞれコンピュータで実行される処理に対応する複数の処理オブジェクトを画面上に表示し、当該複数の処理オブジェクトに対する開発者からの操作を受け付けることによって、開発者によるソフトウェアの作成を実現するソフトウェア作成手段、及び、
前記ソフトウェア作成手段により開発者が作成するソフトウェアを、互いに異なる複数種類のオペレーティングシステムのいずれでも実行可能な実行用コードとして出力するコード出力手段、
としてソフトウェア開発用のコンピュータを機能させるためのプログラム。
【発明を実施するための形態】
【0009】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【0010】
[第1実施形態]
本発明の第1の実施形態に係るソフトウェア開発システム1は、
図1に示すように、開発者がソフトウェアの開発に使用するソフトウェア開発装置10と、開発されたソフトウェアを動作させる端末装置20と、を含んで構成される。以下では、ソフトウェア開発装置10を用いて開発者が作成するソフトウェアを開発対象ソフトウェアという。
【0011】
ソフトウェア開発装置10は、パーソナルコンピュータ等の情報処理装置であって、制御部11と、記憶部12と、通信部13と、を含んで構成されている。また、ソフトウェア開発装置10は、操作デバイス14及び表示デバイス15と接続されている。
【0012】
制御部11は、CPU等であって、記憶部12に記憶されているプログラムに従って各種の情報処理を実行する。本実施形態において制御部11が実行する処理の詳細については、後述する。記憶部12は、RAM等のメモリ素子を含んで構成され、制御部11が実行するプログラム、及び当該プログラムが処理対象とする各種のデータを記憶する。通信部13は、LANカード等のデータ通信インタフェースであって、ソフトウェア開発装置10は通信部13を介してインターネット等の通信ネットワークと接続される。
【0013】
操作デバイス14は、例えばキーボードやマウス等であって、開発者から各種の操作入力を受け付ける。表示デバイス15は、例えば液晶ディスプレイなどであって、制御部11の制御に従って各種の情報を表示する。特に本実施形態では、操作デバイス14は、表示デバイス15の画面上の位置をユーザーが指示するためのポインティングデバイスを含む。このポインティングデバイスは、マウスやトラックボール、タッチパネルなどであってよい。開発者は、操作デバイス14を介して表示デバイス15の画面上に表示される各種のオブジェクトを操作して、ソフトウェアの開発作業を行う。操作デバイス14及び表示デバイス15は、ソフトウェア開発装置10と別体の装置であってもよいし、ソフトウェア開発装置10の筐体内に配置されてもよい。
【0014】
端末装置20は、開発対象ソフトウェアの利用者が使用する情報処理装置であって、パーソナルコンピュータやスマートフォン、タブレット等、プログラムを実行可能な各種のデバイスであってよい。端末装置20は、通信ネットワークを介してソフトウェア開発装置10と接続されており、ソフトウェア開発装置10から開発対象ソフトウェアの実行用コードを受信する。なお、本実施形態では、互いに異なるオペレーティングシステムが動作する複数種類の端末装置20がソフトウェア開発装置10と接続されるものとする。
【0015】
以下、本実施形態に係るソフトウェア開発システム1が実現する機能について、
図2の機能ブロック図を用いて説明する。同図に示されるように、ソフトウェア開発システム1は、機能的に、ソフトウェア開発環境31と、コード出力部32と、ソフトウェア実行部33と、を含んで構成される。これらの機能のうち、ソフトウェア開発環境31、及びコード出力部32は、ソフトウェア開発装置10の制御部11が記憶部12に記憶された開発用プログラムを実行することによって実現される。また、ソフトウェア実行部33は、各端末装置20が所定のプログラムを実行することによって実現される。これらのプログラムは、光ディスクなどの各種のコンピュータ読み取り可能な情報記憶媒体に格納されてソフトウェア開発装置10及び端末装置20に提供されてもよいし、インターネット等の通信ネットワークを介して提供されてもよい。
【0016】
ソフトウェア開発環境31は、開発者によるソフトウェア開発を実現するための機能であって、開発作業用の画面(以下、開発画面という)を表示デバイス15に表示するとともに、開発者が操作デバイス14を操作して行った指示を受け付けて開発画面の表示内容を更新する。このソフトウェア開発環境31を利用することによって、開発者は開発対象ソフトウェアが表示すべき内容や実行すべき処理の内容をソフトウェア開発装置10に指示することができる。特に本実施形態では、ソフトウェア開発環境31は、ビジュアルプログラミング言語によるソフトウェア開発に対応している。すなわち、ソフトウェア開発環境31は、開発対象ソフトウェアを構成する部品となる各種のオブジェクトを開発画面内に表示し、開発者は開発画面内のオブジェクトを操作したり、オブジェクトに対して必要な情報を入力したりすることによって、ソフトウェアを作成していく。ソフトウェア開発環境31がどのようにして開発者によるソフトウェア開発を実現するかについては、後に詳しく説明する。
【0017】
コード出力部32は、ソフトウェア開発環境31により開発者が作成した開発対象ソフトウェアの実行用コードを出力する。本実施形態では、この実行用コードは、所定の言語で記述されており、互いに異なる複数種類のオペレーティングシステムのいずれでも実行可能な形式のデータとして出力されるものとする。このため、この実行用コードを様々なプログラム実行環境で実行させ、利用することが可能になっている。例えば実行用コードは、JavaScript(登録商標)等のスクリプト言語で記述される。この場合、コード出力部32は実行用コードをテキストファイル形式のデータとして出力する。また、コード出力部32は、バイトコンパイル等の処理を実行して、中間言語で記述された実行用コードを出力してもよい。このように、コード出力部32が所定の言語で記述された実行用コードをファイル形式のデータとして出力することで、この実行用コードを端末装置20に送信し、端末装置20上で実行させることができる。
【0018】
なお、コード出力部32が出力する実行用コードには、開発対象ソフトウェアの外観(表示内容)を記述するデータが含まれてもよい。このようなデータは、例えばHTML言語やCSS言語によって記述することができる。また、コード出力部32は、開発対象ソフトウェアの表示内容を記述するデータを、所定の言語で記述された実行用コードとは別に出力してもよい。また、コード出力部32は、実行用コード、及びその他のデータをまとめて、各種類のオペレーティングシステムに対応したデータ形式のパッケージファイルを生成し、出力してもよい。この場合、パッケージファイル自体は複数種類のオペレーティングシステムのそれぞれに合わせて互いに異なる内容のデータであってもよい。
【0019】
ソフトウェア実行部33は、コード出力部32が出力した実行用コードを読み込んで開発対象ソフトウェアを実行する。ソフトウェア実行部33は、各オペレーティングシステム上で動作し、実行用コードの記述に用いられた言語を解釈可能なプログラムによって実現される。具体的に、実行用コードがスクリプト言語で記述される場合、ソフトウェア実行部33は当該スクリプト言語を解釈可能なインタプリタであってよい。特に実行用コードがJavaScriptで記述されている場合、ソフトウェア実行部33はウェブビューなどを利用したウェブサイト表示用アプリケーションプログラムによって実現されてよい。多くのウェブサイト表示アプリケーションプログラムはJavaScriptに対応しているので、このようなアプリケーションプログラムによって実行用コードを解釈、実行することができる。また、実行用コードが中間言語で記述されている場合、ソフトウェア実行部33はその中間言語を最終的な実行可能コードに変換して実行する機能を備える仮想マシン等のプログラムであってもよい。
【0020】
以上説明したように、本実施形態では、コード出力部32が複数のオペレーティングシステムで実行可能な形態で実行用コードを出力し、その実行用コードを各端末装置20のソフトウェア実行部33が実行する。これにより、互いに異なるオペレーティングシステムを実行する複数の端末装置20で、開発対象ソフトウェアを利用することができる。
【0021】
以下、ソフトウェア開発環境31が表示する開発画面、及びその開発画面が表示された状態で開発者が実行可能な開発作業の具体例について、説明する。
【0022】
図3は、開発者が開発対象ソフトウェアの表示内容を編集する際に使用される、表示編集用の開発画面の一例である。開発画面の左側には、開発対象ソフトウェアの実行時に表示される画面を模した画面レイアウトLが表示されている。この例では、画面レイアウトLはスマートフォンの画面を模した表示領域になっている。開発画面の右側には編集領域A0が配置されている。この編集領域A0内の表示内容は、開発者が領域上部のタブを選択することで切り替え可能になっており、
図3はデザインタブT1が選択された状態の表示を示している。この状態において、編集領域A0内の左側には部品オブジェクト領域A1が、右側には特性情報領域A2及び位置情報領域A3が、それぞれ配置されている。デザインタブT1が選択された開発画面上で、開発者は開発対象ソフトウェアの実行時に画面に表示される表示内容を作成することができる。また、開発画面の右上に配置されている保存ボタンを開発者が選択すると、コード出力部32がその時点の編集内容に基づいて実行用コードを生成し、出力する。
【0023】
図3の部品オブジェクト領域A1内には、画面レイアウトL内に配置される候補となる各種の部品オブジェクトCが並んで表示されている。部品オブジェクトCは、開発対象ソフトウェアの実行時に画面内に表示される表示要素Dに対応する。この部品オブジェクトCは、開発者によるオブジェクト配置操作の対象となる。開発者は、部品オブジェクト領域A1内の部品オブジェクトCを配置対象として選択し、画面レイアウトL内の任意の位置を配置場所として指定するオブジェクト配置操作を実行することによって、選択した種類の部品オブジェクトCに対応する部品(表示要素D)を画面レイアウトL内の指定した位置に配置することができる。
図3では、ボタンを表す表示要素D1及びテキスト領域を表す表示要素D2がオブジェクト配置操作によって画面レイアウトL内に配置された様子が示されている。
【0024】
ここで、開発者によるオブジェクト配置操作とは、開発画面内に表示されているいずれかのオブジェクトを配置対象として選択する操作と、そのオブジェクトの配置場所となる開発画面内の位置を指定する操作とによって実現される操作である。具体例として、操作デバイス14がマウスを含む場合、オブジェクト配置操作は、配置対象のオブジェクトの位置を起点として開発画面内の配置場所の位置を終点とするドラッグアンドドロップ操作であってよい。また、操作デバイス14がタッチパネルを含む場合などでは、オブジェクト配置操作は、配置対象のオブジェクトを開発者がタップして選択状態にし、その後続いて配置場所の位置をタップする2段階の選択操作であってもよい。
【0025】
デザインタブT1が選択された状態で画面レイアウトL内に配置済みの表示要素Dを開発者が選択すると、その選択された表示要素Dの特性に関する情報が特性情報領域A2内に表示される。また、選択された表示要素Dの画面レイアウトL内における位置及びサイズの情報が位置情報領域A3に表示される。なお、この位置及びサイズの情報は、画面レイアウトL内のピクセルを単位として、画面レイアウトLに対して設定された位置座標によって表現されている。開発者は、これらの領域に表示された情報を編集することによって、表示要素Dの外観や位置、サイズを変更できる。ここで、表示要素Dの特性は、主に当該表示要素Dの外観に関する各種の属性やパラメタなどであって、予め表示要素Dの種類ごとに設定可能な特性、及びそのデフォルト値が用意されているものとする。開発者は、特に必要がなければデフォルト値をそのまま使用することで各特性の入力を省略することができる。表示要素Dのサイズについても同様である。この開発画面上で、開発者は各種の表示要素Dを画面レイアウトL内に配置するとともに、配置された表示要素Dの特性やサイズを指定することで、開発対象ソフトウェアの実行時に表示される画面を作成することができる。
【0026】
図4は、開発対象ソフトウェアが実行する処理の内容を開発者が編集する際に使用される、処理編集用の開発画面の一例を示している。開発者は、
図3の開発画面が表示された状態でプログラムタブT2を選択することで、
図4に例示するような処理編集用の開発画面を表示させることができる。この
図4の例では、編集領域A0内の左側に処理オブジェクト領域A4が、右側に処理編集領域A5が、それぞれ表示されている。
【0027】
図4の処理オブジェクト領域A4内には、複数の処理オブジェクトPが表示されている。各処理オブジェクトPは、開発対象ソフトウェアで実行可能な何らかの処理、又は処理に用いられるデータに対応しており、その内容によっていくつかのカテゴリに分類される。例えば、条件分岐や繰り返しなど処理の流れを制御するための処理オブジェクトPや、演算処理に対応する処理オブジェクトP、非同期に発生するイベントを処理するための処理オブジェクトPなどがある。開発者は、処理オブジェクト領域A4の上方に配置されたボタンを操作することで、処理オブジェクト領域A4内に表示される処理オブジェクトPの種類を切り替えることができる。
【0028】
開発者は、処理オブジェクト領域A4内に表示されているいずれかの処理オブジェクトPを配置対象として処理編集領域A5内の位置を指定するオブジェクト配置操作を行うことによって、当該処理オブジェクトPに対応する処理を開発対象ソフトウェアの実行用コードに含めることができる。開発対象ソフトウェアの実行用コードは、開発者が処理編集領域A5内に配置した複数の処理オブジェクトPに対応する処理を、配置位置に応じて決定される順序や組み合わせで実行するものになる。
【0029】
処理編集用の開発画面が表示された状態で開発者が画面レイアウトL内の表示要素Dを選択する操作を行った場合、ソフトウェア開発環境31は、その選択された表示要素Dを対象とする処理オブジェクトPの一覧を処理オブジェクト領域A4内に表示する。このとき表示される各処理オブジェクトPには、選択された表示要素Dの外観を表す要素画像Ieが含まれている。これにより、開発者は直感的に処理オブジェクトPがどの表示要素Dを処理対象としているかを把握できる。なお、
図4はボタンを表す表示要素D1が選択された状態を示しており、処理オブジェクト領域A4内には、当該表示要素D1を対象とする処理に対応する処理オブジェクトPが並んでいる。しかも、これらの処理オブジェクトPは、それぞれ表示要素D1の外観を示す要素画像Ieを含んでいる。
【0030】
処理オブジェクトPの中には、所定の処理を実行して実行結果の値を出力する処理に対応するものがある。以下ではこのような処理を値出力処理といい、このような処理オブジェクトPを値出力処理オブジェクトという。また、値出力処理によって出力される値を出力値という。値出力処理の具体例としては、演算結果を戻り値として返す関数や、表示要素Dに設定された特性情報などを取得して出力する処理などが挙げられる。さらに、処理オブジェクトPの中には、値の入力を受け付けて、入力された値を用いて処理を実行するものがある。以下ではこのような処理を値入力処理といい、このような処理オブジェクトPを値入力処理オブジェクトという。また、値入力処理に入力される値を入力値という。値入力処理オブジェクトは、入力値を受け付けるための入力領域Aiを備えている。値入力処理の具体例としては、入力値を引数として利用する関数や、入力値を表示要素Dの特性情報として設定して画面表示を更新する処理などが挙げられる。なお、一つの処理オブジェクトPは、値入力処理オブジェクトであり、かつ、値出力処理オブジェクトでもある場合がある。
【0031】
開発者は、処理編集領域A5内に配置された値入力処理オブジェクトの入力領域Aiに入力値を直接指定したり、変数に対応する処理オブジェクトPを配置したりすることができる。あるいは、入力領域Aiに値出力処理オブジェクトを配置してもよい。以下、入力領域Aiに値出力処理オブジェクトを配置する操作について、
図5を用いて説明する。
図5は、処理編集用の開発画面の一部を拡大した様子を示している。なお、ここでは具体例として、値入力処理オブジェクトである第1オブジェクトP1の入力領域Aiに、値出力処理オブジェクトである第2オブジェクトP2を配置する場合について説明する。この場合まず開発者は、処理オブジェクト領域A4内の第1オブジェクトP1を配置対象として処理編集領域A5内の位置を配置場所とするオブジェクト配置操作を行って、第1オブジェクトP1を処理編集領域A5内に配置する。その後、処理オブジェクト領域A4内の第2オブジェクトP2を配置対象として第1オブジェクトP1が備える入力領域Aiを配置場所とするオブジェクト配置操作を実行する。
図5内の矢印は、このオブジェクト配置操作の過程を示している。このようなオブジェクト配置操作を行うことによって、開発対象ソフトウェアの実行時に、第1オブジェクトP1に対応する値出力処理によって得られる出力値を入力値として用いて、第2オブジェクトP2に対応する値入力処理が実行されることになる。
【0032】
一般に、値出力処理で出力される出力値や値入力処理で利用される入力値は、そのデータ型が決まっている。例えば、画面レイアウトL内に配置されたボタンの中に表示されている文字列を取得して出力する値出力処理の場合、出力値のデータ型はテキスト型になる。また、入力値をテキスト領域にセットする値入力処理の場合、入力値のデータ型はテキスト型になる。データ型は、テキスト型のほかにも、数値型、日時型、論理値型などがある。また、画像ファイルなどのデータファイル型や、画面レイアウトL内の表示色を表すカラー型などを含んでもよい。通常、第1オブジェクトP1を第2オブジェクトP2の入力領域Aiに配置する場合、第1オブジェクトP1に対応する処理で出力される出力値のデータ型と、第2オブジェクトP2に対応する処理で利用される入力値のデータ型とは、一致していなければならない。そのため開発者は、各処理における入力値や出力値のデータ型を意識して、データ型の不整合が発生しないよう注意しながら複数の処理オブジェクトPを組み合わせなければならない。そこでソフトウェア開発環境31は、開発者が入力値や出力値のデータ型を容易に把握し、データ型の不整合を引き起こさないようにすることのできるユーザーインタフェースを備えている。
【0033】
具体的に、ソフトウェア開発環境31は、各値出力処理オブジェクトを、対応する処理によって出力される出力値のデータ型を識別可能な態様で画面上に表示する。さらに、各値入力処理オブジェクトが備える入力領域Aiについても、対応する処理で利用可能な入力値のデータ型を識別可能な態様で表示する。しかも、この入力領域Aiの表示態様は、入力可能な入力値のデータ型と同じデータ型の出力値を出力する値出力処理オブジェクトの表示態様と対応する態様となっている。具体例として、第2オブジェクトP2に対応する処理で出力される出力値のデータ型と第1オブジェクトP1に対応する処理で利用可能な入力値のデータ型とが一致する場合、第2オブジェクトP2の表示態様と第1オブジェクトP1が備える入力領域Aiの表示態様とを互いに対応させる。これにより開発者は、データ型の一致/不一致をデータ型の名称を確認するまでもなく直感的に把握することができる。
【0034】
図5は、具体的なデータ型の表示態様として値出力処理オブジェクト及び入力領域Aiの表示色を利用する場合の例について示している。すなわち、各値出力処理オブジェクトの全体を、対応する処理の出力値のデータ型に関連づけられた色で表示する。また、値入力処理オブジェクトが備える入力領域Aiの外周を、対応する処理で利用可能な入力値のデータ型に関連づけられた色で表示する。具体例として、テキスト型は紫、数値型は青、論理値型は赤などで表示すればよい。なお、
図5では、データ型に対応する色の違いをハッチングの種類で表しているが、
図4ではハッチングは省略されている。このようにデータ型に対応する色で値出力処理オブジェクトの全体や値入力処理オブジェクトの入力領域Aiを色分けしてあれば、値出力処理オブジェクトを値入力処理オブジェクトの入力領域Aiに配置する場合、開発者は単に配置対象の値出力処理オブジェクトの表示色と配置場所の入力領域Aiの外周の表示色とが一致するようにオブジェクト配置操作を行いさえすれば、データ型を一致させることができる。そのため、データ型の不整合の問題が生じにくくなる。
【0035】
なお、ここでは色でデータ型を識別することとしたが、それ以外の方法でデータ型を識別可能に表示してもよい。例えば、入力領域Aiの形状、及び値出力処理オブジェクト全体の形状をデータ型に合わせて変化させてもよい。具体的には、テキスト型は矩形の領域、数値型は楕円形の領域などのように形状を変化させることで、形状が一致する入力領域Aiに値出力処理オブジェクトを配置すればデータ型が一致するように保証することができる。また、値出力処理オブジェクトだけでなく、変数などのデータそのものを表す処理オブジェクトPについても、対応するデータのデータ型を識別可能な表示態様で表示してよい。
【0036】
以上説明した本実施形態に係るソフトウェア開発システム1によれば、開発者は、主として部品オブジェクトCや処理オブジェクトPを対象としたオブジェクト配置操作を行うことによって、容易に開発対象ソフトウェアを開発できる。また、開発対象ソフトウェアをソフトウェア開発装置10とは別の各種の端末装置20で実行させることができる。
【0037】
[処理オブジェクトの表示制御]
ここで、開発者が複数の処理オブジェクトPをまとめて操作できるようにするためにソフトウェア開発環境31が実行する制御の一例について、説明する。ここでは、開発画面に表示される各処理オブジェクトPは、階層構造を持つデータ要素によって表現されるものとする。このような階層構造は、例えばDOM(Document Object Model)によって実現される。
【0038】
以下では具体例として、開発画面に表示される処理オブジェクトPは、HTML言語におけるdivタグで記述されるブロック要素(div要素)によって表されるものとする。しかも、本実施形態では、各処理オブジェクトPは親子関係が設定された少なくとも二つのデータ要素によって記述されることとする。ここでは具体例として、第1のdiv要素、及びその子要素である第2のdiv要素の二つのデータ要素によって1つの処理オブジェクトPが表現されるものとする。この二つのdiv要素には、それぞれ異なる種類の属性が設定され、開発画面のインタフェース上においてそれぞれ異なる役割を持つ。以下では具体例として、第1のdiv要素には"component"という名前のclass属性が、第2のdiv要素には"component-body"という名前のclass属性が、それぞれ設定されるものとする。すなわち、1つの処理オブジェクトPは、以下に例示するようなHTMLデータによって記述される。
<div class="component"><div class="component-body">処理A</div></div>
ここで、処理オブジェクトPの開発画面上における外観を規定する各種の属性は、第2のdiv要素に対して指定されるものとする。すなわち、"component-body"属性を持つブロック要素に対してCSSなどで要素の表示に関する属性を指定することによって、処理オブジェクトPの外観が決定される。
【0039】
また、ある処理オブジェクトP(第1オブジェクトP1とする)が値入力処理オブジェクトであって、入力領域Aiに別の処理オブジェクトP(第2オブジェクトP2とする)が指定された場合、この第2処理オブジェクトPは、内部的に第1オブジェクトP1を構成する第2のdiv要素の子要素として表現される。
【0040】
さらに本実施形態では、開発者は、連続して実行されるべき二つの処理に対応する二つの処理オブジェクトPを開発画面上において連結させる連結操作を実行できる。ここでは具体例として、第3オブジェクトP3を第1オブジェクトP1に連結させるものとする。この場合開発者は、第3オブジェクトP3を選択し、第1オブジェクトP1が表示されている領域、又はその下方の所定範囲内の領域を指定するオブジェクト配置操作(ドラッグアンドドロップ操作等)を連結操作として実行する。この連結操作に応じて、第3オブジェクトP3は第1オブジェクトP1の下方に連結されて表示される。
図6Aはこの状態における画面表示の例を示している。なお、ここでは第1オブジェクトP1の入力領域Aiに第2オブジェクトP2が指定されていることとしている。
【0041】
このとき、内部的には第1オブジェクトP1の第1のdiv要素に対する子要素として第3オブジェクトP3が追加される。
図6Bは、
図6Aの表示例に対応するデータ要素の階層構造(DOMツリー)を示している。ここで注目すべき点は、第2オブジェクトP2及び第3オブジェクトP3という二つの処理オブジェクトPが第1オブジェクトP1の子要素となっているが、それぞれ互いに異なる親要素に従属していることである。つまり、第1オブジェクトP1に対する入力値として指定された第2オブジェクトP2は、第1オブジェクトP1の第2のdiv要素を親要素とし、第1オブジェクトP1に連結される第3オブジェクトP3は、第1オブジェクトP1の第1のdiv要素を親要素としている。このように、二種類のdiv要素のうちのどちらに従属するかによって、子要素である処理オブジェクトPが親要素である処理オブジェクトPとどのような関係なのかを判別できるようになっている。
【0042】
この状態において、開発者はさらに別の処理オブジェクトP(ここでは第4オブジェクトP4とする)を第3オブジェクトP3に連結させることもできる。この場合、開発者は第1オブジェクトP1に第3オブジェクトP3を連結させたときと同様の連結操作を実行すればよい。
図7Aはこのような連結操作を行った後の表示例を示しており、
図7Bはこの状態におけるデータ要素の階層構造を示している。
図7Bに示すように、第4オブジェクトP4を構成するデータ要素は第3オブジェクトP3の第1のdiv要素を親要素としている。このようにして、開発者は複数の処理オブジェクトPを順に連結させることができる。
【0043】
この状態において、開発者は連結された処理オブジェクトPの全体を移動させる移動操作を行うことができる。このとき開発者は、移動操作として、データ構造上最も上位の階層に位置する第1オブジェクトP1が占める領域を起点とするオブジェクト配置操作(ドラッグアンドドロップ操作等)を行う。これにより、連結された3つの処理オブジェクトPを互いに連結させたまま別の場所に移動させることができる。また、開発者が2番目の第3オブジェクトP3が占める領域を起点とした移動操作を行った場合、第3オブジェクトP3、及びこれに連結されている第4オブジェクトP4がまとめて移動され、これに伴って第1オブジェクトP1と第3オブジェクトP3との連結は解除される。こうして、開発者は任意の処理オブジェクトPを連結させたり分離させたりしながら、開発対象ソフトウェアの処理内容を編集することができる。
【0044】
本実施形態では、これまで説明したように処理オブジェクトPが階層構造のデータとして管理されているので、上述したような移動操作が行われるとき、ソフトウェア開発環境31は、移動操作の対象となる処理オブジェクトPをそのデータ構造から容易に特定することができる。具体的に、ソフトウェア開発環境31は、移動操作の起点として指定された領域に対応するdiv要素(処理オブジェクトPの第2のdiv要素)の親要素(同じ処理オブジェクトPの第1のdiv要素)に直接的及び間接的に従属する全ての処理オブジェクトPを移動操作の対象とする。例えば前述したように第1オブジェクトP1が選択された場合には、第2オブジェクトP2〜第4オブジェクトP4の全てが操作対象とされる。また、第3オブジェクトP3が選択された場合にはこれに従属する第4オブジェクトP4も移動操作の対象となり、第2オブジェクトP2又は第4オブジェクトP4が選択された場合にはこれらの処理オブジェクトP単体が移動操作の対象となる。さらにこのとき、選択された処理オブジェクトPは親要素から分離される。このような制御によれば、ソフトウェア開発環境31は、開発者が選択した処理オブジェクトPに別の処理オブジェクトPがいくつ連結されているか、あるいは連結されていないのか、また入力領域Ai内に別の処理オブジェクトPが指定されているのか、あるいは指定されていないのかなどを考慮する必要がなくなる。すなわち、ソフトウェア開発環境31は単に選択された処理オブジェクトPの第1のdiv要素に従属する全てのデータ要素を、その種類や従属関係にかかわらずまとめて移動対象にしさえすれば、そのデータ構造を保ったまま複数の処理オブジェクトPを移動させることができる。つまり、各処理オブジェクトPの第1のdiv要素は、当該処理オブジェクトPが開発者に選択された際に、当該処理オブジェクトPに付随して移動操作の対象にするべき処理オブジェクトPを特定する役割を果たしていることになる。
【0045】
前述したように、コード出力部32は、開発者が処理編集領域A5内に配置した複数の処理オブジェクトPに対応する処理を含む実行用コードを出力する。この場合において、コード出力部32は、処理オブジェクトPの表示、編集用にソフトウェア開発環境31が生成、更新したデータ要素の階層構造を参照して、実行用コードを出力する。具体的にコード出力部32は、ある処理オブジェクトPの第2のdiv要素に別の処理オブジェクトPが子要素として従属している場合、子要素の処理オブジェクトPの出力値を親要素の処理オブジェクトPの入力値として利用する処理を実行用コードに含める。また、ある処理オブジェクトPの第1のdiv要素に別の処理オブジェクトPが子要素として従属している場合、親要素の処理オブジェクトPに対応する処理、及び子要素の処理オブジェクトPに対応する処理を順に実行するという処理内容の実行用コードを出力する。このように、ある処理オブジェクトPに別の処理オブジェクトPが子要素として従属する場合に、コード出力部32は、その子要素が第1のdiv要素、及び第2のdiv要素のどちらに従属しているかに応じて出力される実行用コードの内容を変化させる。こうすれば、各データ要素の従属関係だけで実行用コードに含まれる処理の関係を特定することができる。
【0046】
具体例として、開発者の操作によって
図7Bに示すようなデータ要素の階層構造が生成された場合、これに対応する実行用コードは以下に例示するようなものになる。
button.setText(textarea.getText());
setValue("a","b");
textarea.setText("c");
【0047】
[ライブラリの取り込み]
以上の説明では、開発者はソフトウェア開発環境31において予め用意された処理オブジェクトPを用いて開発対象ソフトウェアを開発することになる。そのため、ソフトウェア開発環境31に用意されていない処理を含んだ開発対象ソフトウェアを作成することは困難である。そこでソフトウェア開発環境31は、外部のライブラリを読み込んで、その中に含まれる処理に対応する処理オブジェクトPを生成し、開発画面の処理オブジェクト領域A4内に表示してもよい。このような機能によれば、事前にソフトウェア開発環境31に用意されていない処理をソフトウェア開発環境31内に取り込んで、開発者が利用できるようになる。
【0048】
一般に、ライブラリは他の実行用コードから呼び出し可能な関数や参照可能な変数を複数含んで構成されている。そこでソフトウェア開発環境31は、取り込み対象となるライブラリのコードデータを読み込んで、その中に含まれる関数や外部参照可能な変数を特定し、そのそれぞれに対応する処理オブジェクトPを生成する。このとき、処理オブジェクトPの名称(画面上に表示される文字列)は、関数や変数の名前そのものであってもよいし、これらの名前を所定のルールで変換したものであってもよい。この場合の所定のルールは、例えばアルファベットの小文字と大文字が連続する場合にその部分を単語の切れ目と判断し、その間にスペースを挿入するなどの変換ルールであってよい。また、ソフトウェア開発環境31は関数や変数の名前を変換するための変換辞書を読み込んで、この変換辞書の記述に従って関数や変数の名前を対応する別の名前に置き換えて開発画面内に表示してもよい。このような制御によれば、例えば英語で記述された関数名などを日本語の文字列に置き換えて処理オブジェクトPの名称として開発者に提示することができる。
【0049】
また、前述したように関数の中には入力値(引数)のデータ型や出力値(戻り値)のデータ型が定められているものがある。このような関数を外部のライブラリから取り込む場合、指定されたデータ型に応じて、入力領域Aiや処理オブジェクトPそのものの表示態様(色や形状など)を変化させてもよい。また、ライブラリに含まれる関数は、その言語仕様によっては、想定する引数や戻り値のデータ型が決まっているものの、そのデータ型がライブラリのコード内に明示されていない場合もある。この場合、そのままでは入力領域Aiや処理オブジェクトPの表示態様をデータ型に合わせて変化させることは難しい。そこで、前述した変換辞書に関数名などとともに対応する引数のデータ型や戻り値のデータ型の情報を含むこととし、ソフトウェア開発環境31はこの変換辞書を参照して入力領域Aiや処理オブジェクトPの表示態様をデータ型に応じたものに変化させてもよい。また、データ型が特定できない場合には、デフォルトの表示態様で表示させてもよい。
【0050】
図8Aは、この例において取り込み対象となるライブラリの記述例を示している。この例では、ライブラリ内に"hello"及び"hello2"の二つの関数が含まれており、"hello"は一つ、"hello2"は二つの引数をとるものとする。このようなライブラリが読み込まれた場合、ソフトウェア開発環境31は、
図8Bに示すような二つの処理オブジェクトPを生成し、開発画面の処理オブジェクト領域A4内に表示する。
【0051】
開発者は、予め用意された処理オブジェクトPと同様に、ライブラリ内の関数に対応する処理オブジェクトPを選択して処理編集領域A5内に配置するオブジェクト配置操作を実行することで、この操作の対象となった処理オブジェクトPに対応する関数を呼び出す処理を、実行用コードに含めることができる。また、ライブラリ内の変数に対応する処理オブジェクトPを選択する操作を行った場合、この変数を参照する処理を実行用コードに含めることができる。具体例として、
図8Bに示す二つの処理オブジェクトPが配置され、かつ入力領域Ai内に変数の値が指定された場合、以下に例示するような実行用コードが生成される。
hello("1");
hello2("10","5");
【0052】
[第2実施形態]
以下、本発明の第2の実施形態に係るソフトウェア開発システム1について説明する。本実施形態におけるソフトウェア開発システム1のハードウェア構成、及び機能ブロックの概要は、
図1に示す第1実施形態の構成と同様である。そのため、第1実施形態と共通する内容の説明は省略し、同一の構成要素については同一の参照符号を用いて参照する。
【0053】
第1実施形態では、端末装置20のソフトウェア実行部33は、オペレーティングシステムごとに独立に用意されるものであって、かつ、ウェブビューなどの公知のプログラムを利用することもできるものとした。しかしながら本実施形態では、ソフトウェア実行部33は、複数種類のオペレーティングシステムのそれぞれについて、独自に生成されたネイティブアプリケーションプログラムによって実現される。
【0054】
本実施形態では、コード出力部32が出力する実行用コードは、所定のスクリプト言語Lで記述されることとし、ソフトウェア実行部33はこのスクリプト言語Lを解釈可能なインタプリタであるものとする。このスクリプト言語Lが公知のものと異なる特殊な仕様を持つ場合、既存のインタプリタではスクリプト言語Lで記述された実行用コードを実行することができない。そのため、開発対象ソフトウェアを実行させたい複数種類のオペレーティングシステムのそれぞれについて、スクリプト言語Lに対応したインタプリタを用意する必要がある。このようなインタプリタを個別に開発したり、またオペレーティングシステムの数だけ手作業で移植を繰り返したりするのは、手間がかかる。
【0055】
そこで本実施形態では、一つのソースコードSに基づいて互いに異なるオペレーティングシステムで動作する複数種類のネイティブアプリケーションプログラムを生成可能なプログラム開発エンジンEを利用して、インタプリタを生成するものとする。
図9は、本実施形態におけるソフトウェア実行部33の実現方法を説明するための図である。ここでプログラム開発エンジンEとしては、ゲーム開発に用いられるUnityなどのゲームエンジンを利用することができる。このようなプログラム開発エンジンEは、ゲーム機や携帯情報端末などの複数のプラットフォームに対応しており、一つのソースコードから複数種類のオペレーティングシステムのそれぞれで動作するネイティブアプリケーションプログラムを生成することができる。そのため、独自仕様のスクリプト言語Lに対応したインタプリタを用意したい場合、プログラム開発エンジンEを利用すれば、一つのソースコードSを作成するだけで、プログラム開発エンジンEが対応する複数のプラットフォームのそれぞれで動作するインタプリタを生成することができる。
【0056】
本実施形態では、独自仕様のインタプリタによってソフトウェア実行部33を実現するので、ソフトウェア開発環境31によって開発される開発対象ソフトウェアの仕様に合わせた動作をソフトウェア実行部33に実行させることができる。具体例として、ソフトウェア実行部33は、ソフトウェア開発環境31によって生成可能な種類の処理だけを実行すればよいので、それ以外の処理にも対応する公知のインタプリタよりも小さな実行ファイルで実現することもできる。
【0057】
また、ソフトウェア実行部33は、開発対象ソフトウェアの実行時に表示する画像についても、ソフトウェア開発環境31の仕様に対応した方法で処理することができる。例えば開発者は、ソフトウェア開発環境31により開発対象ソフトウェアの表示内容を編集する際に、ボタンの背景画像として使用する画像など、各種の用途に使用する画像ファイルを自分で用意し、指定することができるものとする。この場合、コード出力部32は、実行用コードのデータと併せて指定された画像ファイルを出力する。これによりソフトウェア実行部33は、実行用コードに添付された画像ファイルを読み込んで、開発対象ソフトウェア実行時の画面に表示することができる。
【0058】
さらに、ソフトウェア開発環境31はデフォルト画像のファイルを予め用意してもよい。デフォルト画像のファイルは、ボタンの背景画像、表示画面全体の背景画像、画像領域内に表示されるサンプル画像など、用途に応じて複数種類用意されてもよい。以下では具体例として、ボタンの背景画像にデフォルト画像を使用する場合について、説明する。
【0059】
まず、開発者がボタンの表示要素Dを画面レイアウトLに最初に配置した段階では、ソフトウェア開発環境31は、デフォルト画像のファイルを読み込んで、配置されたボタンの背景画像として表示する。開発者は、デフォルト画像に問題がなければ、自分で画像ファイルを用意することなく、そのまま実行用コードを出力させればよい。これに対して、デフォルト画像以外の画像を使用したい場合、開発者は使用したい画像(以下、代替画像という)のファイルを自分で用意し、表示要素Dの特性情報の一部としてこのファイルを指定することで、代替画像の使用を指示する。開発者が代替画像の使用を指示した場合、前述したようにコード出力部32は実行用コードに代替画像のファイルを添付して出力する。一方、開発者が代替画像の使用を指示しなかった場合、コード出力部32は、開発者が代替画像の使用を指示した場合と異なり、デフォルト画像が選択されたことを示す情報を対象の表示要素Dと関連づけて実行用コードに含めることとし、デフォルト画像のファイルそのものは出力しないこととする。
【0060】
この場合、端末装置20のソフトウェア実行部33は、ソフトウェア開発環境31が用意しているデフォルト画像と対応する対応画像のファイルを用意しておくこととする。この対応画像は、デフォルト画像と完全に同一の画像であってもよいし、デフォルト画像に対して縮小などの画像処理を施した画像であってもよい。そして、ソフトウェア実行部33は、読み込んだ実行用コード内にデフォルト画像が選択されたことを示す情報が含まれる場合、対応画像のファイルを読み込んで、開発対象ソフトウェア実行時の画面内に表示する。このように、ソフトウェア開発環境31とソフトウェア実行部33が互いに対応する画像のファイルを用意しておくことによって、実行用コードにデフォルト画像のファイルを含める必要がなくなり、ソフトウェア開発装置10から端末装置20に送信するデータの量を少なくすることができる。
【0061】
なお、このような画像の表示に関する処理は、第1実施形態に係るソフトウェア開発システム1にも適用可能である。第1実施形態では、開発者が代替画像の使用を指示した場合、上述したのと同様にして実行用コードに代替画像のファイルを添付する。一方、開発者が代替画像の使用を指示しなかった場合、代替画像と同様にデフォルト画像のファイルを添付してもよいが、インターネット等に公開されたデフォルト画像の取得先を示す情報を実行用コードに含めてもよい。こうすれば、ソフトウェア実行部33は開発対象ソフトウェアの実行時に公開されたデフォルト画像を取得して表示することができる。
【0062】
また、ソフトウェア実行部33は、その実行環境に応じて、実行用コード内で指定されている表示要素Dの位置やサイズを調整してもよい。本実施形態では、様々なプログラム実行環境で開発対象ソフトウェアを動作させることを想定しているため、端末装置20が備える表示画面のサイズや形状のバリエーションも多岐にわたることになる。一つのソースコードSから生成されるインタプリタでこのような表示画面の違いに対応するため、本実施形態では、開発者がソフトウェア開発環境31を用いて指定した表示要素Dの位置及びサイズを、統一したルールで各実行環境における画面サイズにマッチさせることとする。具体的に、コード出力部32が出力する実行用コード内には、画面レイアウトL内に配置された各表示要素Dの配置位置及びサイズの情報(位置情報領域A3に表示される情報)が含まれるものとする。この情報は、前述した通り、開発画面における画面レイアウトLの大きさを基準として決定されている。これに対してソフトウェア実行部33は、開発対象ソフトウェアを実行する際に、まずその実行結果を表示する画面上の表示領域(以下、実行時画面という)の縦横それぞれのサイズ(画素数)の情報を取得する。そして、実行用コードに含まれる各表示要素Dの位置及びサイズの数値を、取得した実行時画面のサイズと、画面レイアウトLのサイズの比に応じて変換することによって、各表示要素Dを表示領域内のどの位置にどの程度のサイズで配置するか決定する。
【0063】
具体的に、画面レイアウトLの横幅がwl、実行時画面の横幅がwd、ある表示要素Dの横方向の配置位置がx、横幅がwcだった場合、ソフトウェア実行部33は、その表示要素Dの横方向の配置位置をx・(wd/wl)、横幅をwc・(wd/wl)に変換する。また、縦方向の配置位置及び縦幅についても同様の計算によって変換する。そして、変換された位置及びサイズで表示要素Dを表示領域内に表示する。こうすれば、画面レイアウトLと実行時画面のサイズが一致しない場合であっても、開発者が画面レイアウトL内で確認した配置と同様に実行時画面内に各表示要素Dを配置することができる。
【0064】
なお、本発明の実施の形態は、以上説明したものに限られない。例えば以上の説明では、コード出力部32が出力した実行用コードは通信ネットワークを介して端末装置20に送信されるものとしたが、これに限らず、実行用コードは光ディスクやUSBメモリ等の情報記憶媒体に格納されて端末装置20に提供されてもよい。