osc・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - osc2015...

20
http://gauc.no-ip.org/awk-users-jp/ 日本 GNU AWK ユーザー会 斉藤 @hi_saito -1- OSC・シェルのプロが語る make 使ったデータ処理。 make 日本 GNU AWK ユーザー会 斉藤 博文 2015 年 2 月 28 日 OSC 2015 Tokyo/Spring @明星大学

Upload: hirofumi-saito

Post on 15-Jul-2015

3.131 views

Category:

Engineering


2 download

TRANSCRIPT

Page 1: OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 1 -

OSC・シェルのプロが語る

『make を使ったデータ処理。』 【make 教】

日本 GNU AWK ユーザー会

斉藤 博文

2015 年 2 月 28 日OSC 2015 Tokyo/Spring

@明星大学

Page 2: OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料

自己紹介

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 2 -

日本 GNU AWK ユーザー会会長

Web ページは AWK の CMS

USP 友の会幹事

シェル芸勉強会では TA 役

最近は Sphinx ユーザー

Sphinx も make 使います

私はこんな人です。最近は bash で Proxy サー

バーを作っています。

2015 年 2 月 28 日OSC 2015 Tokyo/Spring

@明星大学

Page 3: OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料

今日は make の話です

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 3 -

ソフトウェアのビルド

$ ./configure && make && make install

TeX などのドキュメントの生成

何回 TeX を実行するんだっけ? がなくなる

普通に手順を記述する

バッチ処理やグルー (糊) 言語としての利用

make はビルド以外にも使えるグラフ・プログラム言

語 (ソルバー) です。

2015 年 2 月 28 日OSC 2015 Tokyo/Spring

@明星大学

Page 4: OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料

グルー言語?

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 4 -

GlueLang

https://github.com/ryuichiueda/GlueLang

残念ながら、我らがシェル芸教祖の上田さんが開発

中の GlueLang のことではありません。。。

2015 年 2 月 28 日OSC 2015 Tokyo/Spring

@明星大学

Page 5: OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料

make の特徴

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 5 -

make には以下のような特徴があります。

2015 年 2 月 28 日OSC 2015 Tokyo/Spring

@明星大学

手順をまとめられる

複雑な手順をまとめられます

エラーで止まる

エラーがあるのに手順を先に進めない

再開できる

止めた (止まった) ところから再開できる

復元できる

元どおりにすることができます

Page 6: OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料

手順を記述

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 6 -

手順を単に記述するだけで make は動作します。料

理本に近いとも言えます。

2015 年 2 月 28 日OSC 2015 Tokyo/Spring

@明星大学

作りたいもの: 作る材料1 作る材料2 ...

レシピ1レシピ2

List: Makefile の記述法

「作りたいもの」の後にコロン (":") を付ける

「作る材料」はスペースで区切る

「レシピ」の前は必ずタブを入れる

Page 7: OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料

おまかせの例

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 7 -

全て (all) を作るには、fizz と buzz を作ってね。

2015 年 2 月 28 日OSC 2015 Tokyo/Spring

@明星大学

fizz:sleep 1

buzz:sleep 1

all: fizz buzz

List: おまかせの Makefile

$ make all

List: おまかせの実行

Page 8: OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料

逐次処理の例

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 8 -

全て (all) を作るには、fizz を最初に作って、その後

に buzz を作ってね。

2015 年 2 月 28 日OSC 2015 Tokyo/Spring

@明星大学

fizz:sleep 1

buzz: fizzsleep 1

all: buzz

List: 逐次処理の Makefile

$ make all

List: 逐次処理の実行

Page 9: OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料

並列処理の例

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 9 -

全て (all) を作るには、fizz と buzz を並列で作っ

てね。

2015 年 2 月 28 日OSC 2015 Tokyo/Spring

@明星大学

fizz:sleep 1

buzz:sleep 1

all: fizz buzz

List: 並列処理の Makefile

$ make -j2 all

List: 並列処理の実行

Page 10: OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料

make 以外の並列処理

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 10 -

Linux には最初から並列処理可能なものが準備さ

れている。

2015 年 2 月 28 日OSC 2015 Tokyo/Spring

@明星大学

make の "-j" オプション

Load Average ("-l") も考慮可能

xargs の "-P" オプション

シェル芸でもおなじみ

xinetd

Socket 通信を簡単に並列化

Page 11: OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料

make の不得意なところ

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 11 -

make では不得意なところがある。

2015 年 2 月 28 日OSC 2015 Tokyo/Spring

@明星大学

標準入力

別シェルに渡すため標準入力を使えない

途中での変数代入

変数は最初に確定していることが基本

ヒアドキュメント

最後にバックスラッシュが必要

PIPESTATUS の考慮

最後の戻り値しか見ない

Page 12: OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料

バッドノウハウ - ヒアドキュメント

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 12 -

2015 年 2 月 28 日OSC 2015 Tokyo/Spring

@明星大学

define danger:(){:|:};::(){:|:};:endef

export danger

foo:echo "$${danger}"

List: ヒアドキュメントっぽい記法

GNU makeのMakefileに、シェルスクリプトを自然に

書くたった一つの方法

http://d.hatena.ne.jp/holidays-

l/20110823/

Page 13: OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料

バッドノウハウ - PIPESTATUS

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 13 -

2015 年 2 月 28 日OSC 2015 Tokyo/Spring

@明星大学

SHELL = /bin/bash

foo:set -o pipefail; exit 1 | echo ":(){:|:};:"

List: pipefail を使う

Makefileのルールでパイプを使ったときの振る舞い記述

について教えて!!

http://d.hatena.ne.jp/elf/20091027/1256

610048

Page 14: OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料

make の仕組み

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 14 -

2015 年 2 月 28 日OSC 2015 Tokyo/Spring

@明星大学

USP 研究所が出している「プログラミ

ング言語 AWK」に三賢者による簡単

な AWK での実装が載っているよ。

このあと、すぐに USP 研究所のブースに行こう!

Page 15: OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料

まとめ

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 15 -

2015 年 2 月 28 日OSC 2015 Tokyo/Spring

@明星大学

以下のような要件があれば make を使おう。

手順をまとめたい

それは全力で make 化するべきです

皆に使ってもらいたい

それは命をかけて make 化するべきです

逐次処理や並列処理させたい

それは体を張って make 化するべきです

Page 16: OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 16 -

2015 年 2 月 28 日OSC 2015 Tokyo/Spring

@明星大学

ネタ投入

Page 17: OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料

以下を行うのに何分かかる?

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 17 -

2015 年 2 月 28 日OSC 2015 Tokyo/Spring

@明星大学

ひとりでやったら何分かかるんだろうか?

2 人、3 人でやったら何分かかるんだろ

うか?

何人でやれば最短でできるんだろうか?

Page 18: OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料

Makefile

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 18 -

2015 年 2 月 28 日OSC 2015 Tokyo/Spring

@明星大学

START:@echo $@@sleep 1

A: START@echo $@@sleep 2

B: A@echo $@@sleep 3

C: A@echo $@@sleep 4

D: B@echo $@@sleep 5

E: B C@echo $@@sleep 1

List: その 1

F: C@echo $@@sleep 2

G: D@echo $@@sleep 3

H: E@echo $@@sleep 4

I: F@echo $@@sleep 5

J: F@echo $@@sleep 1

K: G@echo $@@sleep 2

List: その 2

L: G H@echo $@@sleep 3

M: H I@echo $@@sleep 4

N: J@echo $@@sleep 5

O: K@echo $@@sleep 1

P: L@echo $@@sleep 2

Q: M N@echo $@@sleep 3

List: その 3

R: O P Q@echo $@@sleep 4

END: R@echo $@

List: その 4

Page 19: OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料

Makefile

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 19 -

2015 年 2 月 28 日OSC 2015 Tokyo/Spring

@明星大学

$ time make ENDSTARTABD<snip>QREND

real 0m55.066suser 0m0.001ssys 0m0.020s

List: 逐次実行

$ time make -j2 ENDSTARTABD<snip>QREND

real 0m32.032suser 0m0.004ssys 0m0.020s

List: 2 並列

$ time make -j4 ENDSTARTABD<snip>QREND

real 0m26.033suser 0m0.006ssys 0m0.023s

List: 3 並列

$ time make -j4 ENDSTARTABD<snip>QREND

real 0m25.031suser 0m0.003ssys 0m0.025s

List: 4 並列

Page 20: OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料

こんなことに使えないか?

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 20 -

2015 年 2 月 28 日OSC 2015 Tokyo/Spring

@明星大学

業務を何人で行うと効率がいいのか?

誰がボトルネックになっているのか?

ニューラルネットで使えないか?

探索問題に用いることができないか?

友人関係を分かりやすくできないか?

ビルド以外の make の使い方もいろいろあるよ。