ファイルを連携してみた:はじめの一歩 ~菊ちゃんのASTERIA Warp体験記~

こんにちは。インフォテリアのキクチです。

前回までにASTERIAサーバーとフローデザイナーの導入を無事に終えることが出来ました。
今回からいよいよフローの作成を体験します!

第3回の今回は、ファイルの読み込み、マッピング、そしてファイルの出力といったデータ連携の基本「ファイル連携」を体験してみたいと思います。フローデザイナーで初めて開発に取り組む方の参考になればと思いますので、お楽しみいただければと思います。

 

前回までのおさらい…

  • ASTERIAサーバーをインストールしました。
  • それに加えてフローの開発を行うために、フローデザイナーもインストール完了しています。
  • 開発用ユーザー「Kikuchan」の作成も管理コンソール(ASTERIAサーバーと同時にインストールされます)から行いました。

さあ、いよいよフローの開発です!

「ファイル」とつないでみた

今回はファイル連携にチャレンジします。
まずは基本ということでファイルを読み込んで別ファイルに出力するフローを作ってみます。

「ファイル読込、別ファイル出力」フロー作成

ドキュメント「フローサービスマニュアル」によると…

「フローの基本」プロジェクトとフロー
「はじめに」_「フローの基本」_「プロジェクトとフロー」をご参照ください。
関連する幾つかのフローはまとめられ、プロジェクトという単位で管理されます。
また、プロジェクト名をつけて識別します。1つのプロジェクトを1つのファイルとして保存しています。
そのファイルのことをプロジェクトファイルと呼び、拡張子は「.xfp」です。フローデザイナーでは、ツリーペインに表示されます。

とあります。

新規プロジェクト

ということで、何はともあれ新規プロジェクトを立ち上げます。
接続しているASTERIAサーバー名を右クリックでプロジェクトの作成を選択します。

プロジェクト名・フロー名を入力して、OKをクリックすると…

プロジェクト作成

新プロジェクト「ASTERIA Warp体験記」が作成され、ワークスペースには「ファイルを連携する1」が立ち上がっています。

新プロジェクト「ASTERIA Warp体験記」が作成、ワークスペースには「ファイルを連携する1」が開く

さあ、ここからが本番です。

プログラムの手順

一般的にプログラムで行うファイルの入出力の簡単な手順を考えてみると…

  1. 読み込みファイルパスの取得
  2. 1で取得したファイルパスでファイルオープン
  3. ファイルデータ読み込み
  4. ファイルクローズ
  5. 出力ファイルパスの取得
  6. 5で取得したファイルパスでファイルオープン
  7. 3で取得したファイルデータを書き込み
  8. ファイルクローズ

こんな流れで行われるかなと思います。

もちろん、これ以外にも入出力の文字コードの指定や取得したデータの加工変換、エラーハンドリングなど細かい手順を上げるとキリが無いですが、あくまで簡単に考えるとこんな感じではないでしょうか。

「ASTERIA Warp」でのプログラムの手順って?

これらの手順をASTERIA Warpではどんな風に表現するんでしょうか?
イメージがつきません…(汗)
困ったときは偉大なる先人たちのお知恵を拝借するに限ります。

キクチ「Hさん、ファイルの入出力のフローを作りたいんですけど…」
Hさん「簡単じゃん。FileGetコンポーネントとMapperとFilePutコンポーネントがあればそれで終わりだよ。」
キクチ「コンポーネント…ですよねー…。」
Hさん「ASTERIA Warpはコンポーネントひとつにいろんな処理をまとめているから、楽に設定できると思うよ。」

なるほど。自分でコーディングするよりも簡単になりそうなイメージ。
そして「コンポーネント」という新しい単語が出てきました。

「フローの構成要素」コンポーネントについて
「はじめに」_「フローの設計」_「フローの構成要素」_「コンポーネント」をご参照ください。
コンポーネントとはフローにおける処理の単位のことです。
フローの作成時には処理する順にコンポーネントを線でつなぎ、線に沿ってデータが流れていく…

と、マニュアルを要約するとこんなことが書いてありました。

コンポーネントを使って「ファイル」読込

まずはファイルの読み込みから考えてみます。
デザイナー画面を見ているとコンポーネントがたくさん並んだパレットの中に、明らかにファイルの入出力を行いそうな「ファイル」というタブがあったので中を見てみます。

アプリケーション内パレット一覧

マウスカーソルを合わせると各コンポーネントの簡単な機能説明がツールチップで表示されます。

ツールチップ「ファイルを読み込みます」width=

なるほど。ファイルを読み込むのはこのコンポーネントで出来そうですね。
ワークスペースにドラッグ&ドロップで配置します。

ワークスペースにコンポーネントを配置

処理の流れは簡単に決められそうです。
Hさんに聞いた流れに沿って、コンポーネントを配置してみます。

FileGetして、Mapperして、FilePut…と。
最後に処理の終了を示すEndResponseコンポーネントを配置して処理の流れは定義できました。

フロー完成図

「読込元ファイル」のパスを設定

よーし、流れは決まったので、次にどこのファイルを読み込んでくるのかを設定してみます。
FileGetコンポーネントを選択してみると、画面右側のインスペクタが書き換わりました。各コンポーネントの詳細な設定はインスペクタに表示されるプロパティで変更できるようです。
まずはFileGetコンポーネントのプロパティに読み込み元ファイルのパスを設定します。

FileGetコンポーネントのプロパティ

ちなみにこのファイルパスプロパティ、絶対パスでも相対パスでも記載可能です。

ファイルパスプロパティの詳細

読み込み元ファイルにcsvファイルを指定するとFileGetコンポーネントのストリーム定義が変わりました。

ストリームの定義

「フローの構成要素」ストリーム
「はじめに」_「フローの設計」_「フローの構成要素」_「ストリーム」をご参照ください。
ストリームとは、フロー上を実際に流れるデータです。フローサービスには、データを扱うために独自のストリーム型と呼ばれるフォーマットが9種類あります。
それぞれのストリームは、ストリームプロパティと呼ばれるストリーム固有の属性情報を持っています。
また、ストリーム型ごとに扱うデータの単位としてフィールドがあります。フィールドには名前とデータ型などの情報を定義することができ、その定義をフィールド定義といいます。
フローデザイナーのストリームペインで、各コンポーネントの出力ストリームのストリームプロパティとフィールドを定義し、その2つの定義を合わせてストリーム定義といいます。

…と、マニュアルには記載がありました。
ストリーム型ごとにデータの扱い方を定義できるプロパティは違うようで、CSV型を指定しておくと、csvファイルのデータが扱いやすくなるようですね。

(参考)一部ストリーム型のプロパティ

CSV

CSVのプロパティ

Text

テキストのプロパティ

XML

XMLのプロパティ

FixedLength

固定長テキストのプロパティ

今回読み込みを行うcsvファイルはフィールド数が20なので、「フィールド数」プロパティを20に指定します。
また、ファイルの文字コードはSJISなので「出力エンコーディング」も変更します。

CSVプロパティで出力時のエンコードを指定

ファイル読み込みの設定はこれで終了です。
続いてMapperです。

データ加工変換を行う「Mapper」コンポーネント

取得してきたデータをどう出力するのか、データの加工変換を行うのが「Mapper」コンポーネントの処理になります。
Mapperコンポーネントをダブルクリックするとマッパー画面が立ち上がります。
加工変換の設定もアイコン化されたマッパー関数をつなぎ合わせながらGUIで直感的に行えるようです。

GUIでアイコン化されたマッパー関数を連結

どうやら左側がファイルから取得してきたデータ、右側が出力ファイルの項目になっているようですね。

…うーん、どうもCSVで出力する設定になっていないように見えるなぁ。
取得してきたデータを20項目出力したいんですが、出力先にマッピングが出来ません。

「CSV」をマッピングするには?

キクチ「Hさん…CSVをマッピングしたいんですけど、どうもうまくいかなくて…」
Hさん「あぁ、これはMapperコンポーネントの出力ストリームが【Text】になってるからだね。【CSV】に変えたら出来るよ」
キクチ「Mapperコンポーネントにもストリーム型設定できるんですね…ストリーム型は最初に決めるものだと思ってました。」
Hさん「うん。受け取ったストリームをいったんバイナリに変換して操作してからCSVに出力するとかいろいろ出来るよ。」

なるほど、各コンポーネントに出力ストリームが設定できていろいろ操作できるんですね。
Mapperコンポーネントの出力ストリームをCSVに変更したところ、マッピングできそうな雰囲気が出てきました。
今回は素直に全ての項目を出力してみます。

出力ストリームをCSVに変更

「複数フィールド」連結方法

ちなみに、マッピング画面では基本的にフィールドはひとつずつ出力側にマッピングしていくのですが、今回のように項目数が多いときは1項目ずつつないでいくのが非常に手間になります。
そんなときはマッピング画面で右クリックすると「複数フィールドの連結方法」というメニューがあるので、「フィールドの順序」「フィールドの間隔」「フィールドの名前」など関連付けのルールを選択できます。

「複数フィールドの連結方法」メニューを選択

ルール付けの後に複数フィールドを選択して、出力側にマッピングすると…

複数フィールドを出力側にマッピング

まとめて関連付けが出来ました!
地味に便利な機能ですね。

「FilePutコンポーネント」出力ファイル設定

さて、マッピングまで終了したので、最後にFilePutコンポーネントに出力ファイルの設定を行います。
ストリーム型のプロパティはMapperコンポーネントのプロパティを変更した際に連動して書き換わってくれていましたので、ここではファイルパスプロパティだけ加えればよさそうです。

FilePutコンポーネントに出力ファイルの設定

FileGetコンポーネントは絶対パスで指定していたので、FilePutコンポーネントは相対パスで指定してみます。
「Kikuchan」ユーザーのホームディレクトリに「Kikuchan.csv」が出力されるように設定しました。

※ユーザーのホームディレクトリは【”ASTERIAサーバーインストール時に指定したデータフォルダ”\flow\home\”ユーザ名”】
今回は【C:\asteriahome\flow\home\Kikuchan】

FileGetコンポーネントのプロパティ

作成したフローの確認

全ての設定が完了したので、いよいよ実行して結果を確認してみます。

「コンパイル」作業

作成したフローを実行するには、「コンパイル」という作業が必要なようです。マニュアルを参考にコンパイル→実行まで行ってみます。

「フローの実行」コンパイルについて
「フローデザイナー」_「フローの実行」_「コンパイル」をご参照ください。

コンパイルは通りました!いよいよ実行です。

コンパイラメッセージ

実行結果

画面上部の実行ボタンから、実行画面を呼び出し、実行!!
実行画面には出力されるCSVのデータが表示されます。

プログラムの実行

Kikuchanユーザーのホームディレクトリを見てみると…

ホームディレクトリに書き出されたKikuchan.csv

確かに、「Kikuchan.csv」が作成されています。
ホームディレクトリに配置されているファイルは、デザイナーのファイルペインからも確認できます。

ファイルペイン内に表示されている「Kikuchan.csv」

ファイルの中身を確認してみると…

書き出されたCSVファイルの内容を確認

同じファイルがきちんと作成されていました!
出力ファイル「Kikuchan.csv」のデータが「””」でくくられていますが、これはMapperコンポーネントのストリームプロパティで変更可能です。

ちなみに、くくらないと…

Mapperコンポーネントのストリームプロパティで変更したCSVの内容

こんな感じで出力できます。

最後に

今回はここまでです。
基本的にASTERIA Warpで行う開発は…

  1. 処理がまとまったコンポーネントを配置する
  2. 各コンポーネントのプロパティを設定する
  3. 実行

という流れで進めるようですね。

処理のスケール感が多少違うかもしれませんが、自分でプログラミングを行う場合と比べると非常にスマートに完成までこぎつけることが出来ました。
各コンポーネントの詳細についてもリファレンスが用意されているので、どんなプロパティが用紙されているのか入出力のストリームの仕様など調べながら進めることが出来ます。

「各コンポーネントの詳細」について
コンポーネントリファレンスをご参照ください。

実際、今回のファイル連携の処理は初心者のぼくでも30分ほどで設定できました。
(その後ブログに起こすのに何倍も時間がかかっているのはナイショです…(汗))

次回はファイル連携をもう少し深く、複数のファイルから連携を体験してみたいと思います!



クラウド版

手ぶら de ASTERIA Warp
体験 5日間を申し込んで
簡単データ連携を体験してみよう!

サーバー準備の手間なくデータ連携ツール「ASTERIA Warp」の
全ての機能を5日間お試しいただけます。

今すぐ体験してみる 書籍の詳細についてはこちらをご覧ください。
基礎と実践 使い方マニュアル
著者:菊地 雄大

著者:
菊地 雄大

ASTERIA Warpのプリセールスエンジニア&体験セミナー講師。関係各所から舞い込んでくるASTERIA Warpに関するご依頼になんとか応えながら日々鍛えてもらっています!

ASTERIA Warp 関連サイトのご紹介

X ASTERIA Warp Developer Network(ADN)サイト

技術情報をお探しの方

ASTERIA Warp Developer Network
(ADN)サイト

ASTERIA Warp製品の技術情報やTips、また情報交換の場として「ADNフォーラム」をご用意しています。

X ASTERIA Warpユーザーグループ(AUG)

ASTERIA Warpデベロッパーの方

ASTERIA Warp オンラインコミュニティ
ADN slack

ASTERIA Warpデベロッパー同士をつなげ、技術情報の共有やちょっとしたASTERIA Warpの疑問解決の場とすることを目的としたコミュニティです。

X ASTERIA Warpユーザーサイト

ASTERIA Warpユーザーの方

ASTERIA Warpユーザーサイト
Login

製品更新版や評価版のダウンロード、各種ドキュメントのご提供、また 技術的なお問合せもこちらで受付ています。

X ASTERIA Warpパートナーサイト

ASTERIA Warpパートナーの方

ASTERIA Warpパートナーサイト
Login

パートナーライセンスの発行や各種ドキュメントのご提供をしています。

ページ先頭へ