こんにちは。インフォテリアのキクチです。
前回までにASTERIAサーバーとフローデザイナーの導入を無事に終えることが出来ました。
今回からいよいよフローの作成を体験します!
第3回の今回は、ファイルの読み込み、マッピング、そしてファイルの出力といったデータ連携の基本「ファイル連携」を体験してみたいと思います。フローデザイナーで初めて開発に取り組む方の参考になればと思いますので、お楽しみいただければと思います。
目次
さあ、いよいよフローの開発です!
今回はファイル連携にチャレンジします。
まずは基本ということでファイルを読み込んで別ファイルに出力するフローを作ってみます。
ドキュメント「フローサービスマニュアル」によると…
とあります。
ということで、何はともあれ新規プロジェクトを立ち上げます。
接続しているASTERIAサーバー名を右クリックでプロジェクトの作成を選択します。
プロジェクト名・フロー名を入力して、OKをクリックすると…
新プロジェクト「ASTERIA Warp体験記」が作成され、ワークスペースには「ファイルを連携する1」が立ち上がっています。
さあ、ここからが本番です。
一般的にプログラムで行うファイルの入出力の簡単な手順を考えてみると…
こんな流れで行われるかなと思います。
もちろん、これ以外にも入出力の文字コードの指定や取得したデータの加工変換、エラーハンドリングなど細かい手順を上げるとキリが無いですが、あくまで簡単に考えるとこんな感じではないでしょうか。
これらの手順をASTERIA Warpではどんな風に表現するんでしょうか?
イメージがつきません…(汗)
困ったときは偉大なる先人たちのお知恵を拝借するに限ります。
キクチ「Hさん、ファイルの入出力のフローを作りたいんですけど…」
Hさん「簡単じゃん。FileGetコンポーネントとMapperとFilePutコンポーネントがあればそれで終わりだよ。」
キクチ「コンポーネント…ですよねー…。」
Hさん「ASTERIA Warpはコンポーネントひとつにいろんな処理をまとめているから、楽に設定できると思うよ。」
なるほど。自分でコーディングするよりも簡単になりそうなイメージ。
そして「コンポーネント」という新しい単語が出てきました。
と、マニュアルを要約するとこんなことが書いてありました。
まずはファイルの読み込みから考えてみます。
デザイナー画面を見ているとコンポーネントがたくさん並んだパレットの中に、明らかにファイルの入出力を行いそうな「ファイル」というタブがあったので中を見てみます。
マウスカーソルを合わせると各コンポーネントの簡単な機能説明がツールチップで表示されます。
なるほど。ファイルを読み込むのはこのコンポーネントで出来そうですね。
ワークスペースにドラッグ&ドロップで配置します。
処理の流れは簡単に決められそうです。
Hさんに聞いた流れに沿って、コンポーネントを配置してみます。
FileGetして、Mapperして、FilePut…と。
最後に処理の終了を示すEndResponseコンポーネントを配置して処理の流れは定義できました。
よーし、流れは決まったので、次にどこのファイルを読み込んでくるのかを設定してみます。
FileGetコンポーネントを選択してみると、画面右側のインスペクタが書き換わりました。各コンポーネントの詳細な設定はインスペクタに表示されるプロパティで変更できるようです。
まずはFileGetコンポーネントのプロパティに読み込み元ファイルのパスを設定します。
ちなみにこのファイルパスプロパティ、絶対パスでも相対パスでも記載可能です。
読み込み元ファイルにcsvファイルを指定するとFileGetコンポーネントのストリーム定義が変わりました。
…と、マニュアルには記載がありました。
ストリーム型ごとにデータの扱い方を定義できるプロパティは違うようで、CSV型を指定しておくと、csvファイルのデータが扱いやすくなるようですね。
今回読み込みを行うcsvファイルはフィールド数が20なので、「フィールド数」プロパティを20に指定します。
また、ファイルの文字コードはSJISなので「出力エンコーディング」も変更します。
ファイル読み込みの設定はこれで終了です。
続いてMapperです。
取得してきたデータをどう出力するのか、データの加工変換を行うのが「Mapper」コンポーネントの処理になります。
Mapperコンポーネントをダブルクリックするとマッパー画面が立ち上がります。
加工変換の設定もアイコン化されたマッパー関数をつなぎ合わせながらGUIで直感的に行えるようです。
どうやら左側がファイルから取得してきたデータ、右側が出力ファイルの項目になっているようですね。
…うーん、どうもCSVで出力する設定になっていないように見えるなぁ。
取得してきたデータを20項目出力したいんですが、出力先にマッピングが出来ません。
キクチ「Hさん…CSVをマッピングしたいんですけど、どうもうまくいかなくて…」
Hさん「あぁ、これはMapperコンポーネントの出力ストリームが【Text】になってるからだね。【CSV】に変えたら出来るよ」
キクチ「Mapperコンポーネントにもストリーム型設定できるんですね…ストリーム型は最初に決めるものだと思ってました。」
Hさん「うん。受け取ったストリームをいったんバイナリに変換して操作してからCSVに出力するとかいろいろ出来るよ。」
なるほど、各コンポーネントに出力ストリームが設定できていろいろ操作できるんですね。
Mapperコンポーネントの出力ストリームをCSVに変更したところ、マッピングできそうな雰囲気が出てきました。
今回は素直に全ての項目を出力してみます。
ちなみに、マッピング画面では基本的にフィールドはひとつずつ出力側にマッピングしていくのですが、今回のように項目数が多いときは1項目ずつつないでいくのが非常に手間になります。
そんなときはマッピング画面で右クリックすると「複数フィールドの連結方法」というメニューがあるので、「フィールドの順序」「フィールドの間隔」「フィールドの名前」など関連付けのルールを選択できます。
ルール付けの後に複数フィールドを選択して、出力側にマッピングすると…
まとめて関連付けが出来ました!
地味に便利な機能ですね。
さて、マッピングまで終了したので、最後にFilePutコンポーネントに出力ファイルの設定を行います。
ストリーム型のプロパティはMapperコンポーネントのプロパティを変更した際に連動して書き換わってくれていましたので、ここではファイルパスプロパティだけ加えればよさそうです。
FileGetコンポーネントは絶対パスで指定していたので、FilePutコンポーネントは相対パスで指定してみます。
「Kikuchan」ユーザーのホームディレクトリに「Kikuchan.csv」が出力されるように設定しました。
※ユーザーのホームディレクトリは【”ASTERIAサーバーインストール時に指定したデータフォルダ”\flow\home\”ユーザ名”】
今回は【C:\asteriahome\flow\home\Kikuchan】
全ての設定が完了したので、いよいよ実行して結果を確認してみます。
作成したフローを実行するには、「コンパイル」という作業が必要なようです。マニュアルを参考にコンパイル→実行まで行ってみます。
コンパイルは通りました!いよいよ実行です。
画面上部の実行ボタンから、実行画面を呼び出し、実行!!
実行画面には出力されるCSVのデータが表示されます。
Kikuchanユーザーのホームディレクトリを見てみると…
確かに、「Kikuchan.csv」が作成されています。
ホームディレクトリに配置されているファイルは、デザイナーのファイルペインからも確認できます。
ファイルの中身を確認してみると…
同じファイルがきちんと作成されていました!
出力ファイル「Kikuchan.csv」のデータが「””」でくくられていますが、これはMapperコンポーネントのストリームプロパティで変更可能です。
ちなみに、くくらないと…
こんな感じで出力できます。
今回はここまでです。
基本的にASTERIA Warpで行う開発は…
という流れで進めるようですね。
処理のスケール感が多少違うかもしれませんが、自分でプログラミングを行う場合と比べると非常にスマートに完成までこぎつけることが出来ました。
各コンポーネントの詳細についてもリファレンスが用意されているので、どんなプロパティが用紙されているのか入出力のストリームの仕様など調べながら進めることが出来ます。
実際、今回のファイル連携の処理は初心者のぼくでも30分ほどで設定できました。
(その後ブログに起こすのに何倍も時間がかかっているのはナイショです…(汗))
次回はファイル連携をもう少し深く、複数のファイルから連携を体験してみたいと思います!
ASTERIA Warpのプリセールスエンジニア&体験セミナー講師。関係各所から舞い込んでくるASTERIA Warpに関するご依頼になんとか応えながら日々鍛えてもらっています!
Related Posts
ASTERIA Warp製品の技術情報やTips、また情報交換の場として「ADNフォーラム」をご用意しています。
アステリア製品デベロッパー同士をつなげ、技術情報の共有やちょっとしたの疑問解決の場とすることを目的としたコミュニティです。