著者:岡田 健
ユニケージでは、小さな道具の「コマンド」をシェルスクリプトで組み合わせて、さまざまな業務システムを構築しています。本連載では、毎回あるテーマに従ってユニケージによるシェルスクリプトの記述例を分かりやすく紹介します。第10回は、グラフ可視化ソフト「Graphviz」を用いたグラフィカルなコード設計書の作成方法について解説します。
シェルスクリプトマガジン Vol.63は以下のリンク先でご購入できます。
図1 粗利を計算するシェルスクリプト(Source1.sh)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
###################################### #| 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)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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] } |