2 |
|
この章では、ASTERIAの基本的な考え方とプログラムの書き方を学んでいきます。 ASTERIAデザイナを操作しながら、手順に沿ってフローを作っていくことで、基本的なポイントを押さえていきましょう。
|
|
|
|
本書の付録CD-ROMには、実習に必要なファイルが含まれています。 CDの「Home\guest」の中身をディレクトリごと、ASTERIAサーバをインストールしたディレクトリの「インストールディレクトリ\home\guest」(例えば「C:\Program Files\asteria3\home\guest」)にコピーしてください。
これで、実習に必要なファイルの準備ができました。
|
|
ASTERIAデザイナを起動するためには、スタートメニューから[プログラム]→[ASTERIA Designer 3]→[ASTERIA Designer 3]を選択します。
少し待つと、起動ロゴが表示されます。 さらに少し待つと、次のような画面が表示されます。
|
既にASTERIAをお使いの方の場合、「サーバへ接続」の画面も表示されることがあります。 |
これで、ASTERIAデザイナの起動は完了です。
|
ASTERIAデザイナを終了する場合は、[ファイル]→[終了]またはタイトルバーの×ボタンで終了してください。 |
|
|
まず、前節のステップに従ってASTERIAサーバが起動されていることをご確認ください。 フローを作成するための前準備として、ASTERIAサーバへの接続設定をします。 なお、ここで設定した接続情報は保存できるので、そうした場合には次回起動時から以下の手順は不要になります。 メニューバーの「ファイル」→「サーバに接続」またはツールバー左端の「サーバーの追加」アイコンから、「サーバに接続」ダイアログを開きます。
ダイアログの各項目に次のように入力し、最後に「接続」を押します。
guestはインストール時に自動的に作成される初期ユーザです。 本書では、すべての作業をこのguestユーザで行いますので、以後このguestユーザのホームディレクトリを[HOME]と表現します。 例えば、一般的な環境でデフォルトでインストールした場合、
[HOME] = C:\Program Files\asteria3\home\guest となります。
接続に成功すると、デザイナの左側(サーバリスト)にサーバが追加されます。
これでサーバへの接続は完了です。
|
|
それでは、さっそく ASTERIAで簡単なプログラムを作ってみましょう。 最初の一歩として、ウェブブラウザの画面に「Hello ASTERIA world!」を表示するプログラムを作っていきます。 ASTERIAを使えば、ウェブアプリケーションを簡単に作れてしまうことを、ぜひ体験してみてください。
|
|
さっそくプログラムを作り始めたいところなのですが、少しだけ寄り道をして、ASTERIAの用語を覚えておきましょう。 ASTERIAでは、プログラムをフローという単位で作っていきます。 フローは、キャンバスの上にアイコン(コンポーネント)を配置し、矢印でつないでいくことで作ります。 プロジェクトは、複数のフローを整理のためにまとめる入れ物です。 プロジェクトは、ASTERIAサーバ上のディレクトリに「.xfp」ファイルとして保存されます。 これらの用語について、以下にまとめました。
|
「コンポーネント」の正式名称は「サービスコンポーネント」ですが、長くなるので本書では略記します。 |
フローは、以下のようなイメージで呼び出され、実行されていきます。
今の段階では、これだけのことを覚えておけば十分です。 この先のことについては、これからフロー作りを体験していく中で、順を追って見ていきましょう。
|
|
お待たせしました。 それでは、ここからプログラムの作成に入っていきましょう。 まずはじめに、プロジェクトを作ります。 デザイナ画面左側のサーバリストに表示されている「localhost - /guest」サーバの「Flow」上で右クリックして、メニューから「新規プロジェクト」を選択します。
そうすると、「新規プロジェクトの作成」ダイアログが開きます。 ここでは、ファイル名とプロジェクト名の両方ともデフォルトのまま、「OK」を押します。
これで、サーバリストにプロジェクトとフローが1つずつ追加されました。
|
|
つづいて、フローの中身を作っていきましょう。 ここでは、先ほど作ったフロー「Flow1」の中にいくつかのコンポーネントを配置することで、以下のような処理の流れを作ります。
フローから読み込むテキストファイル [HOME]/input_data/hello.html の中身を、メモ帳などのテキストエディタで確認しておきましょう。
サーバリストに表示されている「File」は接続しているユーザのホームディレクトリ内を参照することができます。
「Flow」を展開して hello.html をダブルクリックするとデザイナ内でテキストエディタが開き、中身を確認することができます。
|
|
フローには、最初「Start」コンポーネントのみが配置されています。
|
フローの実行は、Startコンポーネントから処理を開始します。 |
画面下部のサービスパレットから画面中央のメインウインドウに「ファイルからの入力」(FileGet)コンポーネントをドラッグ&ドロップして配置します。(Storageタブの一番左にあります。)
|
FileGetコンポーネントの正式名称は、FileSystem(Get)コンポーネントと長いので、「FileGetコンポーネント」と略記します。 |
同様に「終了(レスポンス)」(EndResponse)コンポーネントを配置します。(Controlタブの一番左にあります。)
「Start」コンポーネントの下側に出ている出力コネクタ(丸印)からドラッグを開始し、「FileGet」アイコンの上でドロップします。すると、「Start」コンポーネントから「FileGet」コンポーネントの入力コネクタ(丸印)へ矢印が接続されます。
「FileGet」から「EndResponse」コンポーネントへも同様に矢印を引き、コンポーネントを連結します。
ここまでで、いま作ろうとしているフローの骨格は完成しました。 おさらいすると、
|
ストリームについての詳細は「4.1.2 ストリーム」をご覧ください。 |
という流れを作りました。 あとは、読み込むファイルのファイル名などいくつかの項目を設定すれば、フローは完成です。 最後の仕上げとして、「FileGet」コンポーネントをクリックして、インスペクタウィンドウから下記のようにコンポーネントのプロパティを設定をしてください。
まず、OutputStreamFormatをHTMLに変更します。
FilePathプロパティを設定するときには、入力エリアの右にあるボタンを押すことでファイルをダイアログから選択することができます。
これでフローはできあがりです。
コンポーネントを右クリックして「ヘルプ」を選択すると、そのコンポーネントの使い方についてのヘルプを見ることができます。
コンポーネントのFilePathプロパティを設定する場合、サーバリストに表示されている「File」上のファイルをコンポーネントにドラッグ&ドロップする方法でも設定できます。
また、FilePathプロパティにファイルパスを設定後であれば、コンポーネントをダブルクリックすると、テキストエディタが開き、参照・編集することもできます。
|
|
ツールバーの「プロジェクトを保存」ボタンを押して、フローをデザイナからサーバに転送して保存します。 このとき、同時にフローのコンパイルも行われます。
|
ASTERIAでは、画面上でグラフィカルに書いたフローに対して、文法エラーのチェックを行って、実行ができるようにサーバへ登録することをコンパイルといいます。 |
エラーが無ければ、メッセージウインドウにこのように表示されます。
エラーがあった場合、メッセージウインドウにエラーの内容が表示されますので、設定を修正してください。 たとえば、何もコンポーネントを配置していない状態でコンパイルすると、次のようなエラーになります。
|
|
コンパイルに成功したら、フローは実行可能になっています。 さっそく実行してみましょう。 ツールバーの「フローの実行」ボタンを押して実行ダイアログを開きます。
ここで「実行」ボタンを押します。
上図のようにステータスの欄に「正常終了」と表示されていれば、実行は成功です。 出力ストリームの欄を見ると、EndResponseに到達したストリームの中身を確認することができます。 「異常終了」が出てしまった場合には、指示に従ってフローを修正し、ふたたび実行してみてください。
|
|
ここまでで、デザイナからフローを実行し、結果を表示することができました。 これでフローは完成です。 最後に、このフローをウェブブラウザから呼び出せるようにしてみましょう。そのためには、「実行設定」をしてフローをURLに結びつける必要があります。そうすれば、フローをウェブアプリケーションとして動作させられるようになります。 では、その手順を見ていきましょう。
|
実行設定についての詳細は「4.3 イベントモデル」を参照してください。 |
ツールバーの「実行設定」ボタンを押して、実行設定ダイアログを開きます。
リストの「Flow」欄の空白部分を押すと、フローの一覧が表示されますので、「Flow1」を選択してください。 (今はフローが1つだけですので「Flow1」のみ表示されます。)
そうすると「URL」欄に自動的にURLが記入されます。 URLは変更することもできますが、ここではデフォルトのままとしておきます。
これで、「Flow1」を「http://localhost:21380/guest/Project1/Flow1」に関連づける設定ができました。 「OK」ボタンを押して確定してください。
|
|
それでは、ブラウザから先ほど設定したURL「http://localhost:21380/guest/Project1/Flow1」へアクセスしてみましょう。
|
ポート番号21380は、ASTERIAサーバがフローを実行するためのHTTPポートです。 本書の実習環境では、サーバとデザイナが同じマシンにインストールされているため、ホスト名がlocalhostとなっています。 |
なお、ブラウザのアドレスバーに上記URLを直接手入力してもアクセスできますが、ここでは実行ダイアログからブラウザを起動する方法でアクセスしましょう。この方法では自動的にURLがブラウザに設定されるため、URL入力の手間や間違いなどを削減できます。 ふたたびツールバーの「フローの実行」ボタンを押して実行ダイアログを開きます。
ここで、「ブラウザから実行」を選択すると、さきほど実行設定で設定したURLが自動で入力されます。
「実行」ボタンをクリックすると、ブラウザが起動してそのURLにアクセスします。
このような結果になりましたか? これで、ASTERIAを使ってウェブアプリケーションを構築することができました。 あとはこのパターンを応用していくだけで、思いのままにウェブアプリケーションを構築していくことができるでしょう。
|
|
ここまでの手順で、もしかしたらコンパイルには成功したけれども、実行時にエラーが起きて異常終了してしまったかも知れません。 これを例外、Exception(エクセプション)あるいはランタイムエラーと呼びます。 たとえば、FileGetコンポーネントのFilePathプロパティに指定したファイルが存在しなければ、以下のようなエラーが返されてくるでしょう。
この場合、「ファイルが見つかりません」というエラーメッセージが返ってきているので、正しくファイル名を設定しなおしてから、ふたたび実行してみてください。 この手順がASTERIAにおける、もっとも基本的なデバッグの方法となります。 ただ、細かい作業を繰り返しながらデバッグをしているときに、毎回ブラウザを経由して確認していると面倒だと思います。 その前に、実行ダイアログで確認するというケースが増えていくことでしょう。 実行ダイアログは、前もって実行設定を行う必要がないので、デバッグ時には便利です。
|
|
ASTERIAの重要な機能のひとつに、データのマッピング機能があります。 データのマッピングとは、データ形式を変換(たとえば、CSV→RDB や RDB→XMLなど)したり、データ項目間のマッピングを行う処理のことで、これはASTERIAがもっとも得意とする分野です。 この機能を使うためには、フローにマッパーコンポーネントを置いて、そのアイコンの上でダブルクリックします。 すると、下のようなマッピングウィンドウが表示され、その中でデータのマッピング定義をすることをできるようになっています。
マッピングウィンドウでは、左側に入力データ項目、右側に出力データ項目がツリー形式で表示されています。 このウィンドウ内で、左側から右側に向かって矢印をつないでやることで、データのマッピング定義をしていきます。 中央のキャンバスには、「マッパー関数」を置くことができます。 マッパー関数は、データの加工を行うアイコンのことで、左側のコネクタから値を入力すると、右側のコネクタに結果を出力する機能を提供します。 マッパー関数には、文字列の加工や数値の計算などの基本的な機能を持つものから、正規表現やコード体系の変換といった高度な機能を持つものまで、さまざまなものがあります。 マッパーでこれらの関数を使うことにより、単純なデータのマッピングだけではなく、より高度なデータの加工にも対応できるところが、ASTERIAのマッパーの特長です。
|
|
それでは、実際にフローを実行しながらマッパーの動作を確認してみましょう。 ここでは、「[HOME]/input_data/author.csv」というCSVファイルを読み込んで、データ項目のマッピングを行ってみましょう。
まず、「Hello ASTERIA world!」で行ったように、フローを作成してください。
リンク(矢印)の形状は「直線」「カギ線」「曲線」から選べます。これはASTERIAデザイナのメニューから[ツール]→[環境設定]で変更可能です。
ここで、FilePathプロパティを指定するときに、右にあるボタンを押すことでファイルをダイアログから選択することができます。
ここで、FileGetコンポーネントが選択されている状態でストリームのプロパティを見てみると、以下のようになっています。
これは、以下のような設定を意味しています。
|
|
フロー上にあるMapperアイコンをダブルクリックすると、マッピングウインドウが開きます。
このウインドウでは、左側に入力側のフィールドが3つ、右側に出力側のフィールドが3つ並んでおり、データはすべて左から右へと流れていきます。
ここで、たとえば「input1」から「output1」へデータを流したいとします。その場合は、左側の「input1」からドラッグし、右側の「output1」でドロップしてください。矢印で連結されて「input1」から「output1」へのデータの流れが設定されます。
|
この例では、input1には読み込んだCSVファイルの1フィールド目のデータが入っています。 |
同様の操作で「input2」と「output2」、「input3」と「output3」も連結してください。
これで、結果的に何もしないマッピング設定が完了しました。実行ダイアログから実行すると、このように表示されます。
|
ここでの「何もしない」とは、データの項目順にも内容にも変換をかけないという意味です。 |
複数選択で一気に連結する方法 項目数が多く1本ずつ連結することが大変で、複数の項目をまとめて連結したいときは、矢印をまとめて引くこともできます。たとえば、「input1」と「output1」、「input2」と「output2」、「input3」と「output3」をまとめて連結する場合、次のように操作します。 (1) 出力側を複数選択します。(output1でドラッグ開始し、output3でドロップします。)
(2) 同様にして入力側を複数選択し、ドラッグしたまま出力側へ持って行き、ドロップします。
この例では3項目だけでしたが、50項目、100項目と項目数が多いときにはこの操作方法が威力を発揮します。 なお、項目の複数選択時にはシフトキーやコントロールキーを押しながら項目をクリックして選択することも可能です。特にコントロールキーとの組合せでは、項目を飛び飛びに選択することができます。 また、マッパーの中央部で右クリックして「複数フィールドの連結方法」を選択することで、フィールドの順序だけでなく名前の一致で連結させることも可能です。
|
|
連結線(矢印)をクリックして選択された状態とし、右クリックメニューから「削除」を選択、またはキーボードのDeleteキーを押すと、矢印が消えて連結が解除されます。
|
|
データは矢印に従って流れますから、たとえば「input1」と「output2」、「input2」と「output1」を連結すれば、出力結果もそのように項目順を入れ替えた状態になります。
|
|
矢印の間に「マッパー関数」を挟むことにより、入力データを変換して出力することができます。 たとえば「UPPER」関数を使えば、入力されたアルファベットの小文字をすべて大文字に変換することが可能です。 ここまで作ってきたフローを利用して試してみましょう。 (1) マッピングウインドウを開きます。 そうすると、サービスパレットにマッパー関数の一覧が表示されます。
(2) サービスパレットから「文字列」タブにある「UPPER」関数をマッピングウインドウにドラッグ&ドロップで配置します。
(3) 一旦「input1」と「output2」を連結している矢印を削除します。
(4) 「input1」と、配置した「UPPER」関数左側のコネクタを接続します。
(5) 配置した「UPPER」関数右側のコネクタと「output2」を接続します。
(6) テスト実行して、結果を確認してください。このようになりましたか?
ここでご紹介した他にも、さまざまなマッパー関数があります。 それらの使い方については後ほどご説明します。
|
なお、コンポーネントと同様に、マッパー関数のの右クリックメニューから「ヘルプ」を選択すると、そのマッパー関数の使い方についてのヘルプを見ることができます。 |
(2)の操作で、矢印線の上にドラッグ中のマッパー関数アイコンを重ねると、
このようなマークが表示されます。この状態でドロップすると、矢印の間にマッパー関数を挟むことができます。つまり、(2)〜(5)の操作を一気に実行できるので、大変便利です。
|
|
マッパーは、本来データ形式の変換を行うためのコンポーネントですが、変数やプロパティの値を読み書きするためにも使えます。 そのため、ストリームはそのまま何も変更せずに変数に値を設定したり、直後のコンポーネントのプロパティに値を設定するためにマッパーを使うケースがあります。
|
変数については、「4.2.3 変数・定数」に詳しい解説があります。 |
例えば、10フィールドの CSVをストリームとして流している途中で、「変数A」に値を設定したい場合、以下のようなマッピングになるでしょう。
このようにして、10個のフィールドをそれぞれマッピングすることも可能です。 しかし、ここでマッパーの「StreamPassThrough」プロパティを「True」に設定することで、同じことをもっと効率よく実現することができます。 これをストリームの「パススルー」と呼んでいます。 このパススルー機能を用いることで、マッパーの入力側のストリームがそのまま出力側に引き継がれていきます。 このパススルーを使うことには、以下のメリットがあります。
マッパーの StreamPassThroughプロパティを「True」に設定すると、アイコンに赤い矢印が付加されます。
この状態でマッパーをダブルクリックして開くと、下図のように破線の矢印でパススルーが表現されていることがわかります。
ASTERIAを使い込むにつれて、変数・プロパティの値を読み書きするためにパススルーを使う場面が増えてくると思います。 ここでしっかり覚えておきましょう。
デザイナでフローを作るときには、下部にあるサービスパレットから中央のメインウインドウにコンポーネントをドラッグ&ドロップして配置します。サービスパレットはコンポーネントの持つ機能ごとに、タブに分類されています。 サービスパレットに新しく「お気に入り」タブを追加して、フローを作るときによく使うコンポーネントを集めておくことができます。お気に入りに追加するには、サービスパレット内のコンポーネントを右クリックして、メニューから「お気に入りに追加」を選択します。 新しく「お気に入り」タブができて、選択したコンポーネントが追加されます。
「3.2 データの読み込み」「3.3 データの書き出し」でたくさんのフローを作っていくときには以下のようにお気に入りに追加しておくと便利です。
|