2
基本編: まず動かしてみよう

この章では、ASTERIAの基本的な考え方とプログラムの書き方を学んでいきます。 ASTERIAデザイナを操作しながら、手順に沿ってフローを作っていくことで、基本的なポイントを押さえていきましょう。

2.1 準備

2.1.1 付録CD-ROMからのファイルのコピー

本書の付録CD-ROMには、実習に必要なファイルが含まれています。

CDの「Home\guest」の中身をディレクトリごと、ASTERIAサーバをインストールしたディレクトリの「インストールディレクトリ\home\guest」(例えば「C:\Program Files\asteria3\home\guest」)にコピーしてください。

これで、実習に必要なファイルの準備ができました。

2.1.2 ASTERIAの基本構成

ASTERIAは、ASTERIAサーバASTERIAデザイナで構成されています。ASTERIAサーバは、ASTERIAデザイナで書いたプログラムを実行します。ASTERIAデザイナは、ASTERIAサーバに接続して使い、サーバ上のプログラムを編集することができます。

ASTERIAサーバとASTERIAデザイナ、およびASTERIAサーバ管理コンソール(ブラウザ)の関係を表したのが以下の模式図です。

このように、サーバとのやりとりには内部的にHTTPを用いています。

また、ASTERIAデザイナの画面は、以下のようなイメージです。

- プロジェクトウィンドウ
このウィンドウには、プロジェクトとフローがツリー形式で表示されています。 フローは右のメインウィンドウに表示されているような、キャンバス1枚で表されるプログラムのことです。 さまざまなフローを、プロジェクトでまとめてグループ分けします。
- メインウィンドウ
このウィンドウで、白いキャンバスにアイコンを配置していくことでフローを作っていきます。
- インスペクタウィンドウ
メインウィンドウでアイコンを選ぶと、ここにアイコンの設定項目(プロパティ)が表示されます。 インスペクタウィンドウでプロパティを変更することで、アイコンの動作を変えることができます。
- サービスパレット
ここにコンポーネントのアイコンが並んでいます。 それぞれのアイコンは、データの入出力、データ形式の変換などの機能を持っています。 これらをフローに配置することで、フローを作っていきます。

ではさっそく、ASTERIAデザイナを使ってみましょう。

2.1.3 ASTERIAデザイナの起動

ASTERIAデザイナを起動するためには、スタートメニューから[プログラム]→[ASTERIA Designer 3]→[ASTERIA Designer 3]を選択します。

少し待つと、起動ロゴが表示されます。 さらに少し待つと、次のような画面が表示されます。

既にASTERIAをお使いの方の場合、「サーバへ接続」の画面も表示されることがあります。

これで、ASTERIAデザイナの起動は完了です。

ASTERIAデザイナを終了する場合は、[ファイル]→[終了]またはタイトルバーの×ボタンで終了してください。

2.1.4 ASTERIAサーバへの接続

まず、前節のステップに従ってASTERIAサーバが起動されていることをご確認ください。

フローを作成するための前準備として、ASTERIAサーバへの接続設定をします。 なお、ここで設定した接続情報は保存できるので、そうした場合には次回起動時から以下の手順は不要になります。

メニューバーの「ファイル」→「サーバに接続」またはツールバー左端の「サーバーの追加」アイコンから、「サーバに接続」ダイアログを開きます。

ダイアログの各項目に次のように入力し、最後に「接続」を押します。

  • アドレス:localhost
  • ユーザー名:guest
  • パスワード:guest
  • ドメインは「/」のままで結構です。
  • ワークグループは空欄のままで結構です。

guestはインストール時に自動的に作成される初期ユーザです。

本書では、すべての作業をこのguestユーザで行いますので、以後このguestユーザのホームディレクトリを[HOME]と表現します。

例えば、一般的な環境でデフォルトでインストールした場合、

[HOME] = C:\Program Files\asteria3\home\guest

となります。

接続に成功すると、デザイナの左側(サーバリスト)にサーバが追加されます。

これでサーバへの接続は完了です。

2.2 Hello ASTERIA world!

それでは、さっそく ASTERIAで簡単なプログラムを作ってみましょう。

最初の一歩として、ウェブブラウザの画面に「Hello ASTERIA world!」を表示するプログラムを作っていきます。 ASTERIAを使えば、ウェブアプリケーションを簡単に作れてしまうことを、ぜひ体験してみてください。

2.2.1 プロジェクト、フロー、コンポーネント

さっそくプログラムを作り始めたいところなのですが、少しだけ寄り道をして、ASTERIAの用語を覚えておきましょう。

ASTERIAでは、プログラムをフローという単位で作っていきます。 フローは、キャンバスの上にアイコン(コンポーネント)を配置し、矢印でつないでいくことで作ります。

プロジェクトは、複数のフローを整理のためにまとめる入れ物です。 プロジェクトは、ASTERIAサーバ上のディレクトリに「.xfp」ファイルとして保存されます。

これらの用語について、以下にまとめました。

- フロー
ASTERIA上のプログラムの単位。 キャンバスの上にアイコンを配置し、矢印でつないで作ります。
- プロジェクト
複数のフローをまとめる入れ物。 ASTERIAサーバ上のディレクトリに、「.xfp」ファイルとして保存されます。
- コンポーネント
ファイルの読み書きや、データベースとの入出力など、さまざまな機能を持ったアイコンです。 コンポーネントのアイコンを矢印で接続していくことで、フローを作ります。

「コンポーネント」の正式名称は「サービスコンポーネント」ですが、長くなるので本書では略記します。

フローは、以下のようなイメージで呼び出され、実行されていきます。

今の段階では、これだけのことを覚えておけば十分です。 この先のことについては、これからフロー作りを体験していく中で、順を追って見ていきましょう。

2.2.2 新規プロジェクト、新規フローの作成

お待たせしました。 それでは、ここからプログラムの作成に入っていきましょう。

まずはじめに、プロジェクトを作ります。

デザイナ画面左側のサーバリストに表示されている「localhost - /guest」サーバの「Flow」上で右クリックして、メニューから「新規プロジェクト」を選択します。

そうすると、「新規プロジェクトの作成」ダイアログが開きます。 ここでは、ファイル名とプロジェクト名の両方ともデフォルトのまま、「OK」を押します。

これで、サーバリストにプロジェクトとフローが1つずつ追加されました。

2.2.3 フローの作成と実行

つづいて、フローの中身を作っていきましょう。

ここでは、先ほど作ったフロー「Flow1」の中にいくつかのコンポーネントを配置することで、以下のような処理の流れを作ります。

  1. HTMLファイルを読み込んで
  2. ブラウザに表示する

フローから読み込むテキストファイル [HOME]/input_data/hello.html の中身を、メモ帳などのテキストエディタで確認しておきましょう。

サーバリストに表示されている「File」は接続しているユーザのホームディレクトリ内を参照することができます。

「Flow」を展開して hello.html をダブルクリックするとデザイナ内でテキストエディタが開き、中身を確認することができます。

(1) コンポーネントの配置

フローには、最初「Start」コンポーネントのみが配置されています。

フローの実行は、Startコンポーネントから処理を開始します。

画面下部のサービスパレットから画面中央のメインウインドウに「ファイルからの入力」(FileGet)コンポーネントをドラッグ&ドロップして配置します。(Storageタブの一番左にあります。)

FileGetコンポーネントの正式名称は、FileSystem(Get)コンポーネントと長いので、「FileGetコンポーネント」と略記します。

同様に「終了(レスポンス)」(EndResponse)コンポーネントを配置します。(Controlタブの一番左にあります。)

「Start」コンポーネントの下側に出ている出力コネクタ(丸印)からドラッグを開始し、「FileGet」アイコンの上でドロップします。すると、「Start」コンポーネントから「FileGet」コンポーネントの入力コネクタ(丸印)へ矢印が接続されます。

「FileGet」から「EndResponse」コンポーネントへも同様に矢印を引き、コンポーネントを連結します。

ここまでで、いま作ろうとしているフローの骨格は完成しました。

おさらいすると、

  1. (たとえばウェブブラウザなどから)呼び出しを受けてStartコンポーネントで処理が始まる。
  2. 矢印の順に従って処理が進み、FileGetコンポーネントによってファイルが読み込まれる。
  3. 読み込まれたファイルのデータが、「ストリーム」として矢印の中を流れる。
  4. ストリーム中のデータが、EndResponseコンポーネントによって呼び出し元(ウェブブラウザなど)に戻される。

ストリームについての詳細は「4.1.2 ストリーム」をご覧ください。

という流れを作りました。

あとは、読み込むファイルのファイル名などいくつかの項目を設定すれば、フローは完成です。

最後の仕上げとして、「FileGet」コンポーネントをクリックして、インスペクタウィンドウから下記のようにコンポーネントのプロパティを設定をしてください。

FileSystem(Get)
OutputStreamFormat HTML
FilePath input_data/hello.html

まず、OutputStreamFormatをHTMLに変更します。

FilePathプロパティを設定するときには、入力エリアの右にあるボタンを押すことでファイルをダイアログから選択することができます。

これでフローはできあがりです。

コンポーネントを右クリックして「ヘルプ」を選択すると、そのコンポーネントの使い方についてのヘルプを見ることができます。

コンポーネントのFilePathプロパティを設定する場合、サーバリストに表示されている「File」上のファイルをコンポーネントにドラッグ&ドロップする方法でも設定できます。

また、FilePathプロパティにファイルパスを設定後であれば、コンポーネントをダブルクリックすると、テキストエディタが開き、参照・編集することもできます。

(2) フローのコンパイルと保存

ツールバーの「プロジェクトを保存」ボタンを押して、フローをデザイナからサーバに転送して保存します。 このとき、同時にフローのコンパイルも行われます。

ASTERIAでは、画面上でグラフィカルに書いたフローに対して、文法エラーのチェックを行って、実行ができるようにサーバへ登録することをコンパイルといいます。

エラーが無ければ、メッセージウインドウにこのように表示されます。

エラーがあった場合、メッセージウインドウにエラーの内容が表示されますので、設定を修正してください。 たとえば、何もコンポーネントを配置していない状態でコンパイルすると、次のようなエラーになります。

(3) テスト

コンパイルに成功したら、フローは実行可能になっています。 さっそく実行してみましょう。

ツールバーの「フローの実行」ボタンを押して実行ダイアログを開きます。

ここで「実行」ボタンを押します。

上図のようにステータスの欄に「正常終了」と表示されていれば、実行は成功です。 出力ストリームの欄を見ると、EndResponseに到達したストリームの中身を確認することができます。

「異常終了」が出てしまった場合には、指示に従ってフローを修正し、ふたたび実行してみてください。

(4) 実行設定

ここまでで、デザイナからフローを実行し、結果を表示することができました。 これでフローは完成です。

最後に、このフローをウェブブラウザから呼び出せるようにしてみましょう。そのためには、「実行設定」をしてフローをURLに結びつける必要があります。そうすれば、フローをウェブアプリケーションとして動作させられるようになります。

では、その手順を見ていきましょう。

実行設定についての詳細は「4.3 イベントモデル」を参照してください。

ツールバーの「実行設定」ボタンを押して、実行設定ダイアログを開きます。

リストの「Flow」欄の空白部分を押すと、フローの一覧が表示されますので、「Flow1」を選択してください。 (今はフローが1つだけですので「Flow1」のみ表示されます。)

そうすると「URL」欄に自動的にURLが記入されます。 URLは変更することもできますが、ここではデフォルトのままとしておきます。

これで、「Flow1」を「http://localhost:21380/guest/Project1/Flow1」に関連づける設定ができました。

「OK」ボタンを押して確定してください。

(5) ブラウザからの実行

それでは、ブラウザから先ほど設定したURL「http://localhost:21380/guest/Project1/Flow1」へアクセスしてみましょう。

ポート番号21380は、ASTERIAサーバがフローを実行するためのHTTPポートです。 本書の実習環境では、サーバとデザイナが同じマシンにインストールされているため、ホスト名がlocalhostとなっています。

なお、ブラウザのアドレスバーに上記URLを直接手入力してもアクセスできますが、ここでは実行ダイアログからブラウザを起動する方法でアクセスしましょう。この方法では自動的にURLがブラウザに設定されるため、URL入力の手間や間違いなどを削減できます。

ふたたびツールバーの「フローの実行」ボタンを押して実行ダイアログを開きます。

ここで、「ブラウザから実行」を選択すると、さきほど実行設定で設定したURLが自動で入力されます。

「実行」ボタンをクリックすると、ブラウザが起動してそのURLにアクセスします。

このような結果になりましたか?

これで、ASTERIAを使ってウェブアプリケーションを構築することができました。 あとはこのパターンを応用していくだけで、思いのままにウェブアプリケーションを構築していくことができるでしょう。

2.2.4 もし実行に失敗したら

ここまでの手順で、もしかしたらコンパイルには成功したけれども、実行時にエラーが起きて異常終了してしまったかも知れません。 これを例外、Exception(エクセプション)あるいはランタイムエラーと呼びます。

たとえば、FileGetコンポーネントのFilePathプロパティに指定したファイルが存在しなければ、以下のようなエラーが返されてくるでしょう。

  • 実行ダイアログから実行した場合

  • ブラウザから実行した場合

この場合、「ファイルが見つかりません」というエラーメッセージが返ってきているので、正しくファイル名を設定しなおしてから、ふたたび実行してみてください。

この手順がASTERIAにおける、もっとも基本的なデバッグの方法となります。

ただ、細かい作業を繰り返しながらデバッグをしているときに、毎回ブラウザを経由して確認していると面倒だと思います。 その前に、実行ダイアログで確認するというケースが増えていくことでしょう。 実行ダイアログは、前もって実行設定を行う必要がないので、デバッグ時には便利です。

2.3 マッパーって何?

ASTERIAの重要な機能のひとつに、データのマッピング機能があります。 データのマッピングとは、データ形式を変換(たとえば、CSV→RDB や RDB→XMLなど)したり、データ項目間のマッピングを行う処理のことで、これはASTERIAがもっとも得意とする分野です。

この機能を使うためには、フローにマッパーコンポーネントを置いて、そのアイコンの上でダブルクリックします。 すると、下のようなマッピングウィンドウが表示され、その中でデータのマッピング定義をすることをできるようになっています。

マッピングウィンドウでは、左側に入力データ項目、右側に出力データ項目がツリー形式で表示されています。 このウィンドウ内で、左側から右側に向かって矢印をつないでやることで、データのマッピング定義をしていきます。

中央のキャンバスには、「マッパー関数」を置くことができます。 マッパー関数は、データの加工を行うアイコンのことで、左側のコネクタから値を入力すると、右側のコネクタに結果を出力する機能を提供します。 マッパー関数には、文字列の加工や数値の計算などの基本的な機能を持つものから、正規表現やコード体系の変換といった高度な機能を持つものまで、さまざまなものがあります。

マッパーでこれらの関数を使うことにより、単純なデータのマッピングだけではなく、より高度なデータの加工にも対応できるところが、ASTERIAのマッパーの特長です。

2.3.1 マッパーを使ってみよう

それでは、実際にフローを実行しながらマッパーの動作を確認してみましょう。

ここでは、「[HOME]/input_data/author.csv」というCSVファイルを読み込んで、データ項目のマッピングを行ってみましょう。

まず、「Hello ASTERIA world!」で行ったように、フローを作成してください。

リンク(矢印)の形状は「直線」「カギ線」「曲線」から選べます。これはASTERIAデザイナのメニューから[ツール]→[環境設定]で変更可能です。

Component Tab Description
(1) FileSystem(Get) Storage ファイルを読み込む
(2) Mapper Control データのマッピング
(3) EndResponse Control 終了(レスポンス)
必要なプロパティ設定は次のとおりです。 (以下、既定値のままでよいプロパティについては説明を省略します。)

(1) FileSystem(Get)
FilePath input_data/author.csv
OutputStreamFormat CSV

ここで、FilePathプロパティを指定するときに、右にあるボタンを押すことでファイルをダイアログから選択することができます。

(2) Mapper
OutputStreamFormat CSV

ここで、FileGetコンポーネントが選択されている状態でストリームのプロパティを見てみると、以下のようになっています。

これは、以下のような設定を意味しています。

- OutputStreamFormat = CSV
出力ストリームは CSV。
- StartRow = 1
1行目からすべて読む。
- FieldCount = 3
フィールド(列)数は 3。
- Separator = ,
区切り文字はコンマ。
- QuotedBy = ”
フィールドはダブルクォートでくくる。
- Encoding = utf-8
文字コードは UTF-8。

(1) 入力と出力を連結する

フロー上にある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項目と項目数が多いときにはこの操作方法が威力を発揮します。

なお、項目の複数選択時にはシフトキーやコントロールキーを押しながら項目をクリックして選択することも可能です。特にコントロールキーとの組合せでは、項目を飛び飛びに選択することができます。

また、マッパーの中央部で右クリックして「複数フィールドの連結方法」を選択することで、フィールドの順序だけでなく名前の一致で連結させることも可能です。

(2) 連結を解除する

連結線(矢印)をクリックして選択された状態とし、右クリックメニューから「削除」を選択、またはキーボードのDeleteキーを押すと、矢印が消えて連結が解除されます。

(3) 項目順を入れ替える

データは矢印に従って流れますから、たとえば「input1」と「output2」、「input2」と「output1」を連結すれば、出力結果もそのように項目順を入れ替えた状態になります。

(4) マッパー関数でデータを変換する

矢印の間に「マッパー関数」を挟むことにより、入力データを変換して出力することができます。

たとえば「UPPER」関数を使えば、入力されたアルファベットの小文字をすべて大文字に変換することが可能です。

ここまで作ってきたフローを利用して試してみましょう。

(1) マッピングウインドウを開きます。 そうすると、サービスパレットにマッパー関数の一覧が表示されます。

(2) サービスパレットから「文字列」タブにある「UPPER」関数をマッピングウインドウにドラッグ&ドロップで配置します。

(3) 一旦「input1」と「output2」を連結している矢印を削除します。

(4) 「input1」と、配置した「UPPER」関数左側のコネクタを接続します。

(5) 配置した「UPPER」関数右側のコネクタと「output2」を接続します。

(6) テスト実行して、結果を確認してください。このようになりましたか?

ここでご紹介した他にも、さまざまなマッパー関数があります。 それらの使い方については後ほどご説明します。

なお、コンポーネントと同様に、マッパー関数のの右クリックメニューから「ヘルプ」を選択すると、そのマッパー関数の使い方についてのヘルプを見ることができます。

(2)の操作で、矢印線の上にドラッグ中のマッパー関数アイコンを重ねると、

このようなマークが表示されます。この状態でドロップすると、矢印の間にマッパー関数を挟むことができます。つまり、(2)〜(5)の操作を一気に実行できるので、大変便利です。

2.3.2 ストリームのパススルー

マッパーは、本来データ形式の変換を行うためのコンポーネントですが、変数やプロパティの値を読み書きするためにも使えます。 そのため、ストリームはそのまま何も変更せずに変数に値を設定したり、直後のコンポーネントのプロパティに値を設定するためにマッパーを使うケースがあります。

変数については、「4.2.3 変数・定数」に詳しい解説があります。

例えば、10フィールドの CSVをストリームとして流している途中で、「変数A」に値を設定したい場合、以下のようなマッピングになるでしょう。

このようにして、10個のフィールドをそれぞれマッピングすることも可能です。 しかし、ここでマッパーの「StreamPassThrough」プロパティを「True」に設定することで、同じことをもっと効率よく実現することができます。 これをストリームの「パススルー」と呼んでいます。

このパススルー機能を用いることで、マッパーの入力側のストリームがそのまま出力側に引き継がれていきます。

このパススルーを使うことには、以下のメリットがあります。

  • ストリームのすべてのフィールドのマッピングを行う手間が省ける
  • 入力側のストリームのフィールド定義の変更があったときに、マッピングしなおさなくて済む
  • 新しいストリームを作ってデータをコピーしないため、処理速度が高速になる

マッパーの StreamPassThroughプロパティを「True」に設定すると、アイコンに赤い矢印が付加されます。

この状態でマッパーをダブルクリックして開くと、下図のように破線の矢印でパススルーが表現されていることがわかります。

ASTERIAを使い込むにつれて、変数・プロパティの値を読み書きするためにパススルーを使う場面が増えてくると思います。 ここでしっかり覚えておきましょう。

お気に入りに追加

デザイナでフローを作るときには、下部にあるサービスパレットから中央のメインウインドウにコンポーネントをドラッグ&ドロップして配置します。サービスパレットはコンポーネントの持つ機能ごとに、タブに分類されています。

サービスパレットに新しく「お気に入り」タブを追加して、フローを作るときによく使うコンポーネントを集めておくことができます。お気に入りに追加するには、サービスパレット内のコンポーネントを右クリックして、メニューから「お気に入りに追加」を選択します。 新しく「お気に入り」タブができて、選択したコンポーネントが追加されます。

「3.2 データの読み込み」「3.3 データの書き出し」でたくさんのフローを作っていくときには以下のようにお気に入りに追加しておくと便利です。

Component Tab Description
(1) EndResponse Control 終了(レスポンス)
(2) Mapper Control データのマッピング
(3) FileSystem(Get) Storage ファイルを読み込む
(4) FileSystem(Put) Storage ファイルへ書き込む
(5) RDB(Get) Storage RDBからの読み込み
(6) RDB(Put) Storage RDBへの書き込み