著者:岡田 健
ユニケージでは、小さな道具の「コマンド」をシェルスクリプトで組み合わせて、さまざまな業務システムを構築しています。本連載では、毎回あるテーマに従ってユニケージによるシェルスクリプトの記述例を分かりやすく紹介します。第10回は、グラフ可視化ソフト「Graphviz」を用いたグラフィカルなコード設計書の作成方法について解説します。
シェルスクリプトマガジン Vol.63は以下のリンク先でご購入できます。![]()
![]()
図1 粗利を計算するシェルスクリプト(Source1.sh)
######################################
#| input: [原価マスタ] PRICE
#| output: [原価マスタ修正] $tmp-price
#| outline: 原価マスタから必要な部分だけ抜き出す
######################################
cat PRICE |
self 1/3 > $tmp-price
######################################
#| input: [部門マスタ] CATEGORY
#| output: [部門マスタ修正] $tmp-category
#| outline: 部門マスタから必要な部分だけ抜き出す
######################################
cat CATEGORY |
self 1/3 > $tmp-category
######################################
#| input: [原価マスタ修正] $tmp-price
#| input: [部門マスタ修正] $tmp-category
#| output: [出力] $tmp-out
#| outline: 粗利計算をする
######################################
cat SALES |
# 1:店舗 2:商品No 3:日付 4:売数
# 5:売上 6:割引
join1 key=2 $tmp-price | # 原価 / 売価を連結
# 1:店舗 2:商品No 3:原価 4:売価
# 5:日付 6:売数 7:売上 8:割引
join1 key=2 $tmp-category | # 部門を連結
# 1:店舗 2:商品No 3:部門 4:原価
# 5:売価 6:日付 7:売数 8:売上
# 9:割引
lcalc '$3,$7,$8,$8-$7*$4' | # 売数 / 売上 / 荒利計算
# 1:部門 2:売数 3:売上 4:粗利
msort key=1 | # 部門でソート
sm2 1 1 2 4 | # 売数 / 売上 / 荒利集計
sm5 1 1 2 4 | # 合計行の付加
divsen 2 3 4 | # 千で除算
divsen 3 4 | # 千で再除算
lcalc '$1,$2,$3,$4,100*$4/$3' | # 荒利率を求める
# 1:部門 2:売数 3:売上 4:粗利
# 5:粗利率
marume 5.1 | # 四捨五入
join2 key=1 CATEGORY_NAME | # カテゴリ名の連結
# 1:部門 2:部門名 3:売数 4:売上
# 5:粗利 6:粗利率
comma 3 4 5 | # カンマ編集
keta | # 桁そろえ
keisen +e | # 罫線を引く
cat header - # 出力
図3 DOT言語で書かれた中間コード(Source1.dot)
digraph sample {
graph[ layout=dot ];
node[fontname="IPAゴシック"];
ID:1 原価マスタから必要な部分だけ抜き出す [ shape=box ];
ID:2 部門マスタから必要な部分だけ抜き出す [ shape=box ];
ID:3 粗利計算をする [ shape=box ];
[原価マスタ] [shape = ellipse, peripheries = 2]
[部門マスタ] [shape = ellipse, peripheries = 2]
[出力] [ shape = ellipse, style = bold];
[原価マスタ修正] [ shape = ellipse, style = bold];
[部門マスタ修正] [ shape = ellipse, style = bold];
[原価マスタ] -> ID:1 原価マスタから必要な部分だけ抜き出す [color = blue, style = bold, arrowsize = 1]
ID:1 原価マスタから必要な部分だけ抜き出す -> [原価マスタ修正] [color = red, style = bold, arrowsize = 1]
[部門マスタ] -> ID:2 部門マスタから必要な部分だけ抜き出す [color = blue, style = bold, arrowsize = 1]
ID:2 部門マスタから必要な部分だけ抜き出す -> [部門マスタ修正] [color = red, style = bold, arrowsize = 1]
[原価マスタ修正] -> ID:3 粗利計算をする [color = blue, style = bold, arrowsize = 1]
[部門マスタ修正] -> ID:3 粗利計算をする [color = blue, style = bold, arrowsize = 1]
ID:3 粗利計算をする -> [出力] [color = red, style = bold, arrowsize = 1]
}