ロボット引継ぎ資料(不定期)

ビズロボを使う人のための参考情報(ネタ受付中・品質非保証)

エクスプレッションの特殊文字ってなんだ(\n, \r\n, \t)

エクスプレッションで文字列を加工する際に特殊文字を使いたいのなら「””」で定数をくくれ!ということなんですが、特殊文字ってなんじゃい?って最初思いました。

たくさんロボットを作ったものの、「\n」「\r\n」「\t」位しか使ったことはありません。きっともっと複雑なことをやろうとすれば使いどころもあるんでしょうが、業務部門で作るロボットには余り難しいことまでさせる必要はないかなと思っています。

では実際どう言う場合に使うのでしょうか。 幾つか例を挙げてみようと思います。

\n (改行)の場合

インターネットで検索した情報をテキストやCSVにまとめたい場合、抽出した値をファイルに追記して行く処理を作りますが、変数入れた値だけを指定しても1行内にどんどん追記されてしまいます。 収集したデータを1行に1件書き込んでいきたい場合には、下の様に値の後ろに改行コードを指定してあげる必要があります。

f:id:kzk_pin:20181123220332p:plain

\r\n (改行2)の場合

使用ケースとしては上の\nと同じですが、例えば\nで改行させたファイルをメモ帳で開いた場合ちゃんと改行されません。 これはソフトによって改行コードの決まりが違うことに原因があるようで、そんな場合には\r\nを代わりに使うとちゃんと改行されます。

\t (タブ)の場合

業務で使うデータとしてはCSVが割と多いです。ファイルをダブルクリックすればExcelで開いてくれますし。 ただ、すでにフォーマットが決まっているExcelにリストデータをペタッと張り付けたりする場合、カンマ区切りのデータだと一つのセルの中に全部の列のデータが入ってしまいます。 そんな時、カンマの代わりにタブで列を区切ってデータを作成するとテキストをファイルごとコピーして貼り付けできるのでロボットでデータを生成する段階で\tを使ってタブ区切りのデータを作成してしまいます。

f:id:kzk_pin:20181124013959p:plain

エクスプレッションでの定数「 ””」 と「 >><<」 の違いと使い分け。

エクスプレッションの中には「定数」というのが2つあって、下の図の様に「単なる定数:""」と「値を持つ場合の定数:>><<」があります。

f:id:kzk_pin:20181123021215p:plain

「値を持つ場合の定数」という日本語が不明ですが、マニュアルを見てみると以下のような記述になっています。

"text"

固定テキスト。 バックスラッシュ文字 (\) を使用すると、特殊文字を入力できます。
\n は改行
\r はキャリッジ リターン
\f はフォーム フィード
\t は水平タブ
\b はバックスペース
\」は二重引用符
\' は一重引用符
\\ はバックスラッシュ
\uxxxx は xxxx エンコードUnicode 文字。xxxx は 4 つの 16 進数の値。

>>text<<

固定テキスト。この表記には引用符文字などあらゆるものを含めることができます。ただし、終了シンボル (<<) を除きます。バックスラッシュ (\) 文字は、特殊文字の入力に使用できません。

つまり、特殊文字を利用したいのなら「""」、特に何も考えずに入力した通りに表示したいなら「>><<」を使えってことですかね。

使用例:

f:id:kzk_pin:20181123125236p:plain

上が「""」したが「>><<」を同じ文字列で使った結果。

値を加工する「エクスプレッション」と「コンバータ」

ロボットを作っていく中で、扱う文字列を加工したり追加したりしたいときがあります。例えば数値の計算をしたり、抽出した文字列から一部を切り取ったり、見出しを付けたり。後は処理した日付や時刻を記録したいときにも。

ビズロボではこれらの操作をする方法として「エクスプレッション」と「コンバータ」という機能があってどちらも大体同じような目的で使うことができるものの、何が違うかと言えばエクスプレッションは一筆書き的に一発パンチ的なズバッと変換をするのに比べ、コンバータは複数攻撃のコンボみたいな感じだろうか。コンバータは技を組み合わせることでより複雑なこともできる感じで玄人っぽい。

どんな時に使うかと言えば、どちらも変数に値をセットするときで、アクションで言うと「抽出」とか「変数の割当」「変数の変換」辺り。

例えば「変数の割当」の場合、初期の設定方法は単純な固定値を指定する”値”が指定されていますが、入力ボックス右側の▼をクリックすると、下の図の様に設定方法を変更することができます。

f:id:kzk_pin:20181123020723p:plain

ここで「エクスプレッション」を選択すると、今度は表示が下の図の様に変わりエクスプレッションとして値を編集・加工できるようになります。

f:id:kzk_pin:20181123021215p:plain

ちなみに「コンバータ」を選択した場合には、こんな感じです。

f:id:kzk_pin:20181123021518p:plain

ロボットの中にコメントを記述しよう。

うちの場合はだいだい事業部門でロボットを作りますが、時間が経つと担当業務が変わったりそれに伴って担当ロボットが変わったりします。

その際にはロボットについても引継ぎを受けるのですが、数も多いのでざっと済ます程度です。 厳格にルール化しているわけではないのでロボットの作りは人によっていろいろなんですが、さすがに処理の細かい部分や大きな流れ(パート)についてはコメントがあるのとないのでは管理性が全然違ってきますね。

自分が作ったロボットでも、フローが長くなってしまったものや細かい条件設定なんかについては、時間が経つと忘れてしまったり思い出すのに時間が掛かるので、下のような感じでコメントを残していくのが良いかと思います。(こまめに記録を残す人もいますが多くの人はそうでもないので、急がば回れでちゃんとコメントを残しましょう。)

コメントの構成

コメントはこんな風に、各ステップの名称の下にメモ書きできるように用意されています。

f:id:kzk_pin:20181029134300p:plain

またコメントに入力した言葉は、デザインスタジオの検索ボックスから検索することもできます。 すでに動いているロボットに手を入れる時には、何か日付とかラベルになるコメントを入れておくと、あとで変更したところを検索ボックスで探し出すのに便利。(見落とし防止)

f:id:kzk_pin:20181029134938p:plain

ほんとに、後で検索できるのは便利です。

明示的にログを記録したい場合

ビズロボの場合ロボットはサーバーに登録して動かしますが、「何のロボットがいつ動いたか」といった実行記録についてはログとして勝手にサーバー側で記録されます。 ただ実際に作ったロボットを運用しだすと、自動的に記録されるログ情報だけでは都合がわるい場合もあるんですね。

たとえば、実行中のロボットが途中でエラーになった場合。

よくあるのが入力ファイルのフォーマットが変更になっていたり入力データ自体に記述漏れがあったりすること。どちらもエラーになるもののピンポイントで原因が分からないのでロボットの中身を見ることになります。(まぁ、慣れてくれば分かるようになるものもありますが。)

その場合に、明示的に「ファイルのフォーマットが変わってて〇〇の列がなくなってますよ。」とか「入力されてる値の桁数間違ってますよ。」とか「〇〇行目の××に記入漏れあります。」と教えてもらえると、ロボットの中身を見なくても一瞬で原因が分かるので、いちいち担当者からの質問を受ける必要なく業務が回っていきます。まぁこの辺りは自分たちでやってるので最初から全てのパターンを網羅して云々というよりは、運用しながら発見の都度追加している感じでした。

最初は何もできず「すみません、問題発生です。」としか報告してこない新人に対し「はぁ、どれどれ。。」とお願いした仕事の中身をいちいち見ては、こちらで間違った箇所を見つけてやらなければならない段階から、「すみません、フォーマットが変わっているようなのでこの部分教えてもらえますか?」とポイントを絞った指導で足りるようになるようなイメージですかね。

そうそう、ログを明示的に記録するためには「ログ出力」というアクションを使います。

ぼくがロボット作っていたころは英語だったけど、最近は日本語になったみたいですね。。(英語に慣れてしまったので、日本語の方が違和感。。)

f:id:kzk_pin:20181021033038p:plain

担当はずれましたがビズロボ使用許可は残ってますので、無断で使い続けてるわけじゃないですよ。(念のため)