SlideShare une entreprise Scribd logo
1  sur  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
@明星大学
自己紹介
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
@明星大学
今日は 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
@明星大学
グルー言語?
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
@明星大学
make の特徴
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 5 -
make には以下のような特徴があります。
2015 年 2 月 28 日
OSC 2015 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 の記述法
「作りたいもの」の後にコロン (":") を付ける
「作る材料」はスペースで区切る
「レシピ」の前は必ずタブを入れる
おまかせの例
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: おまかせの実行
逐次処理の例
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: fizz
sleep 1
all: buzz
List: 逐次処理の Makefile
$ make all
List: 逐次処理の実行
並列処理の例
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: 並列処理の実行
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 通信を簡単に並列化
make の不得意なところ
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 11 -
make では不得意なところがある。
2015 年 2 月 28 日
OSC 2015 Tokyo/Spring
@明星大学
 標準入力
 別シェルに渡すため標準入力を使えない
 途中での変数代入
 変数は最初に確定していることが基本
 ヒアドキュメント
 最後にバックスラッシュが必要
 PIPESTATUS の考慮
 最後の戻り値しか見ない
バッドノウハウ - ヒアドキュメント
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/
バッドノウハウ - 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
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 研究所のブースに行こう!
まとめ
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 15 -
2015 年 2 月 28 日
OSC 2015 Tokyo/Spring
@明星大学
以下のような要件があれば make を使おう。
 手順をまとめたい
 それは全力で make 化するべきです
 皆に使ってもらいたい
 それは命をかけて make 化するべきです
 逐次処理や並列処理させたい
 それは体を張って make 化するべきです
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 16 -
2015 年 2 月 28 日
OSC 2015 Tokyo/Spring
@明星大学
ネタ投入
以下を行うのに何分かかる?
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 17 -
2015 年 2 月 28 日
OSC 2015 Tokyo/Spring
@明星大学
 ひとりでやったら何分かかるんだろうか?
 2 人、3 人でやったら何分かかるんだろ
うか?
 何人でやれば最短でできるんだろうか?
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
Makefile
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 19 -
2015 年 2 月 28 日
OSC 2015 Tokyo/Spring
@明星大学
$ time make END
START
A
B
D
<snip>
Q
R
END
real 0m55.066s
user 0m0.001s
sys 0m0.020s
List: 逐次実行
$ time make -j2
END
START
A
B
D
<snip>
Q
R
END
real 0m32.032s
user 0m0.004s
sys 0m0.020s
List: 2 並列
$ time make -j4
END
START
A
B
D
<snip>
Q
R
END
real 0m26.033s
user 0m0.006s
sys 0m0.023s
List: 3 並列
$ time make -j4
END
START
A
B
D
<snip>
Q
R
END
real 0m25.031s
user 0m0.003s
sys 0m0.025s
List: 4 並列
こんなことに使えないか?
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 20 -
2015 年 2 月 28 日
OSC 2015 Tokyo/Spring
@明星大学
 業務を何人で行うと効率がいいのか?
 誰がボトルネックになっているのか?
 ニューラルネットで使えないか?
 探索問題に用いることができないか?
 友人関係を分かりやすくできないか?
ビルド以外の make の使い方もいろいろあるよ。

Contenu connexe

Tendances

Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介
Kiwamu Okabe
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンド
YUKI Kaoru
 

Tendances (18)

Gitを使ってみませんか
Gitを使ってみませんかGitを使ってみませんか
Gitを使ってみませんか
 
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
 
インフラ自動化とHashicorp tools
インフラ自動化とHashicorp toolsインフラ自動化とHashicorp tools
インフラ自動化とHashicorp tools
 
Git勉強会 2016 Gitで卒論を管理しよう回
Git勉強会 2016 Gitで卒論を管理しよう回Git勉強会 2016 Gitで卒論を管理しよう回
Git勉強会 2016 Gitで卒論を管理しよう回
 
Drone.io のご紹介
Drone.io のご紹介Drone.io のご紹介
Drone.io のご紹介
 
はてなのサービスの開発環境
はてなのサービスの開発環境はてなのサービスの開発環境
はてなのサービスの開発環境
 
Node.jsでDroneたちをめっちゃ簡単にHACKする話 JSオジサン#6
Node.jsでDroneたちをめっちゃ簡単にHACKする話 JSオジサン#6Node.jsでDroneたちをめっちゃ簡単にHACKする話 JSオジサン#6
Node.jsでDroneたちをめっちゃ簡単にHACKする話 JSオジサン#6
 
Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンド
 
JTF 2013
JTF 2013JTF 2013
JTF 2013
 
North Starアプリ作り,海外コミュニティ,Tips
North Starアプリ作り,海外コミュニティ,TipsNorth Starアプリ作り,海外コミュニティ,Tips
North Starアプリ作り,海外コミュニティ,Tips
 
Groovyの紹介20130323
Groovyの紹介20130323Groovyの紹介20130323
Groovyの紹介20130323
 
Git (実践入門編)
Git (実践入門編)Git (実践入門編)
Git (実践入門編)
 
SPAJAMでやったこと
SPAJAMでやったことSPAJAMでやったこと
SPAJAMでやったこと
 
真Drone入門
真Drone入門真Drone入門
真Drone入門
 
Infrastructure.nagoya ~Dockerって何ですか?~
Infrastructure.nagoya ~Dockerって何ですか?~Infrastructure.nagoya ~Dockerって何ですか?~
Infrastructure.nagoya ~Dockerって何ですか?~
 
Rancher と GitLab を使う3つの理由
Rancher と GitLab を使う3つの理由Rancher と GitLab を使う3つの理由
Rancher と GitLab を使う3つの理由
 
Docker lifecycle event hooks
Docker lifecycle event hooksDocker lifecycle event hooks
Docker lifecycle event hooks
 

En vedette

C++のビルド高速化について
C++のビルド高速化についてC++のビルド高速化について
C++のビルド高速化について
AimingStudy
 
Nwrノルウェースタディーツアー概要
Nwrノルウェースタディーツアー概要Nwrノルウェースタディーツアー概要
Nwrノルウェースタディーツアー概要
nwrnet
 
【Nwr】0417おしゃれな生き方
【Nwr】0417おしゃれな生き方【Nwr】0417おしゃれな生き方
【Nwr】0417おしゃれな生き方
nwrnet
 
収入と貯蓄の関係V1
収入と貯蓄の関係V1収入と貯蓄の関係V1
収入と貯蓄の関係V1
Shimizu Hitoshi
 
マイケル・ポーターの『競争の戦略』を読んだら。
マイケル・ポーターの『競争の戦略』を読んだら。マイケル・ポーターの『競争の戦略』を読んだら。
マイケル・ポーターの『競争の戦略』を読んだら。
剛 大島
 
Mon2 25
Mon2 25Mon2 25
Mon2 25
medism
 
大学生のためのドラッカー 同志社生協講演
 大学生のためのドラッカー 同志社生協講演 大学生のためのドラッカー 同志社生協講演
大学生のためのドラッカー 同志社生協講演
ToshimasaHikita
 
Google 日本語入力 TechTalk 2010
Google 日本語入力 TechTalk 2010Google 日本語入力 TechTalk 2010
Google 日本語入力 TechTalk 2010
Yamagata Yoriyuki
 

En vedette (20)

awk入門
awk入門awk入門
awk入門
 
C++のビルド高速化について
C++のビルド高速化についてC++のビルド高速化について
C++のビルド高速化について
 
Linux女子部第二回勉強会usp友の会
Linux女子部第二回勉強会usp友の会Linux女子部第二回勉強会usp友の会
Linux女子部第二回勉強会usp友の会
 
女性にモテるためのIT系男子的部屋の片付け術
女性にモテるためのIT系男子的部屋の片付け術女性にモテるためのIT系男子的部屋の片付け術
女性にモテるためのIT系男子的部屋の片付け術
 
バーニングマンから考える組織論 20140223Co-Lab用
バーニングマンから考える組織論 20140223Co-Lab用バーニングマンから考える組織論 20140223Co-Lab用
バーニングマンから考える組織論 20140223Co-Lab用
 
Leadership
LeadershipLeadership
Leadership
 
Nwrノルウェースタディーツアー概要
Nwrノルウェースタディーツアー概要Nwrノルウェースタディーツアー概要
Nwrノルウェースタディーツアー概要
 
【Nwr】0417おしゃれな生き方
【Nwr】0417おしゃれな生き方【Nwr】0417おしゃれな生き方
【Nwr】0417おしゃれな生き方
 
プロの無職についての考察:序
プロの無職についての考察:序プロの無職についての考察:序
プロの無職についての考察:序
 
収入と貯蓄の関係V1
収入と貯蓄の関係V1収入と貯蓄の関係V1
収入と貯蓄の関係V1
 
モテない男のソリューション -万葉恋愛メソッド-
モテない男のソリューション -万葉恋愛メソッド-モテない男のソリューション -万葉恋愛メソッド-
モテない男のソリューション -万葉恋愛メソッド-
 
(10)昇進管理
(10)昇進管理(10)昇進管理
(10)昇進管理
 
マイケル・ポーターの『競争の戦略』を読んだら。
マイケル・ポーターの『競争の戦略』を読んだら。マイケル・ポーターの『競争の戦略』を読んだら。
マイケル・ポーターの『競争の戦略』を読んだら。
 
Mon2 25
Mon2 25Mon2 25
Mon2 25
 
大阪大学サイバーメディアセンターにおける可視化サービスの取り組み
大阪大学サイバーメディアセンターにおける可視化サービスの取り組み大阪大学サイバーメディアセンターにおける可視化サービスの取り組み
大阪大学サイバーメディアセンターにおける可視化サービスの取り組み
 
大学生のためのドラッカー 同志社生協講演
 大学生のためのドラッカー 同志社生協講演 大学生のためのドラッカー 同志社生協講演
大学生のためのドラッカー 同志社生協講演
 
Google 日本語入力 TechTalk 2010
Google 日本語入力 TechTalk 2010Google 日本語入力 TechTalk 2010
Google 日本語入力 TechTalk 2010
 
名前重要 超重要
名前重要 超重要名前重要 超重要
名前重要 超重要
 
ワーママのお金に関するアンケート Money by powermamaproject
ワーママのお金に関するアンケート Money by powermamaprojectワーママのお金に関するアンケート Money by powermamaproject
ワーママのお金に関するアンケート Money by powermamaproject
 
正規表現 入門
正規表現 入門正規表現 入門
正規表現 入門
 

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

日本 GNU AWK ユーザー会スライド 2 - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会スライド 2 - OSC2012 Tokyo/Fall日本 GNU AWK ユーザー会スライド 2 - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会スライド 2 - OSC2012 Tokyo/Fall
博文 斉藤
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
Takayuki Shimizukawa
 
ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03
Daiki Maekawa
 
Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And Jekyll
Yoji Shidara
 
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
Hideki Takase
 

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

日本 GNU AWK ユーザー会スライド 2 - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会スライド 2 - OSC2012 Tokyo/Fall日本 GNU AWK ユーザー会スライド 2 - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会スライド 2 - OSC2012 Tokyo/Fall
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
 
GitLabを骨までしゃぶりつくす@ゆるUniStudy#7
GitLabを骨までしゃぶりつくす@ゆるUniStudy#7GitLabを骨までしゃぶりつくす@ゆるUniStudy#7
GitLabを骨までしゃぶりつくす@ゆるUniStudy#7
 
ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03
 
Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And Jekyll
 
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
 
some topic of ffmpeg
some topic of ffmpeg some topic of ffmpeg
some topic of ffmpeg
 
OSC Nagoya NETMF 160528
OSC Nagoya NETMF 160528OSC Nagoya NETMF 160528
OSC Nagoya NETMF 160528
 
Swift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswiftSwift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswift
 
20150227 オープンソースカンファレンス Tokyo 2015 Spring
20150227 オープンソースカンファレンス Tokyo 2015 Spring20150227 オープンソースカンファレンス Tokyo 2015 Spring
20150227 オープンソースカンファレンス Tokyo 2015 Spring
 
Nodeにしましょう
NodeにしましょうNodeにしましょう
Nodeにしましょう
 
Getting Started With Ore-Ore Swift Standard Library ++ ほんのり続報
Getting Started With Ore-Ore Swift Standard Library ++ ほんのり続報Getting Started With Ore-Ore Swift Standard Library ++ ほんのり続報
Getting Started With Ore-Ore Swift Standard Library ++ ほんのり続報
 
LibreOfficeの最新動向 in OSC 2015 Hiroshima
LibreOfficeの最新動向 in OSC 2015 HiroshimaLibreOfficeの最新動向 in OSC 2015 Hiroshima
LibreOfficeの最新動向 in OSC 2015 Hiroshima
 
ROSチュートリアル ROBOMECH2018
ROSチュートリアル ROBOMECH2018ROSチュートリアル ROBOMECH2018
ROSチュートリアル ROBOMECH2018
 
Metahub for github
Metahub for githubMetahub for github
Metahub for github
 
Message Analyzer でパケット キャプチャー
Message Analyzer でパケット キャプチャーMessage Analyzer でパケット キャプチャー
Message Analyzer でパケット キャプチャー
 
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
 
関西Itコミュニティ集まれ!デブサミ名物コミュニティlt大会(発表版)
関西Itコミュニティ集まれ!デブサミ名物コミュニティlt大会(発表版)関西Itコミュニティ集まれ!デブサミ名物コミュニティlt大会(発表版)
関西Itコミュニティ集まれ!デブサミ名物コミュニティlt大会(発表版)
 
オープンソースカンファレンス大分参加報告 & 勉強会向けサーバを作ってみる
オープンソースカンファレンス大分参加報告 & 勉強会向けサーバを作ってみるオープンソースカンファレンス大分参加報告 & 勉強会向けサーバを作ってみる
オープンソースカンファレンス大分参加報告 & 勉強会向けサーバを作ってみる
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
 

Plus de 博文 斉藤 (10)

Obsidian Talk JP 資料 - 2021-10-15
Obsidian Talk JP 資料 - 2021-10-15Obsidian Talk JP 資料 - 2021-10-15
Obsidian Talk JP 資料 - 2021-10-15
 
 Obsidian Talk JP - Template & Daily notes - 2021-09-04
 Obsidian Talk JP - Template & Daily notes - 2021-09-04 Obsidian Talk JP - Template & Daily notes - 2021-09-04
 Obsidian Talk JP - Template & Daily notes - 2021-09-04
 
Markdown で行こう!
Markdown で行こう!Markdown で行こう!
Markdown で行こう!
 
Shell で制限付き並列処理をしよう
Shell で制限付き並列処理をしようShell で制限付き並列処理をしよう
Shell で制限付き並列処理をしよう
 
curl で iPhone にプッシュ通知しよう
curl で iPhone にプッシュ通知しようcurl で iPhone にプッシュ通知しよう
curl で iPhone にプッシュ通知しよう
 
Usptomonokai 20111028
Usptomonokai 20111028Usptomonokai 20111028
Usptomonokai 20111028
 
USP 友の会 LT 資料 20130413
USP 友の会 LT 資料 20130413USP 友の会 LT 資料 20130413
USP 友の会 LT 資料 20130413
 
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
 
日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall
 
お手軽並列処理
お手軽並列処理お手軽並列処理
お手軽並列処理
 

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

  • 1. 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 @明星大学
  • 2. 自己紹介 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 @明星大学
  • 3. 今日は 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 @明星大学
  • 4. グルー言語? 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 @明星大学
  • 5. make の特徴 http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 5 - make には以下のような特徴があります。 2015 年 2 月 28 日 OSC 2015 Tokyo/Spring @明星大学  手順をまとめられる  複雑な手順をまとめられます  エラーで止まる  エラーがあるのに手順を先に進めない  再開できる  止めた (止まった) ところから再開できる  復元できる  元どおりにすることができます
  • 6. 手順を記述 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 の記述法 「作りたいもの」の後にコロン (":") を付ける 「作る材料」はスペースで区切る 「レシピ」の前は必ずタブを入れる
  • 7. おまかせの例 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: おまかせの実行
  • 8. 逐次処理の例 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: fizz sleep 1 all: buzz List: 逐次処理の Makefile $ make all List: 逐次処理の実行
  • 9. 並列処理の例 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: 並列処理の実行
  • 10. 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 通信を簡単に並列化
  • 11. make の不得意なところ http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 11 - make では不得意なところがある。 2015 年 2 月 28 日 OSC 2015 Tokyo/Spring @明星大学  標準入力  別シェルに渡すため標準入力を使えない  途中での変数代入  変数は最初に確定していることが基本  ヒアドキュメント  最後にバックスラッシュが必要  PIPESTATUS の考慮  最後の戻り値しか見ない
  • 12. バッドノウハウ - ヒアドキュメント 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/
  • 13. バッドノウハウ - 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
  • 14. 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 研究所のブースに行こう!
  • 15. まとめ http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 15 - 2015 年 2 月 28 日 OSC 2015 Tokyo/Spring @明星大学 以下のような要件があれば make を使おう。  手順をまとめたい  それは全力で make 化するべきです  皆に使ってもらいたい  それは命をかけて make 化するべきです  逐次処理や並列処理させたい  それは体を張って make 化するべきです
  • 16. http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 16 - 2015 年 2 月 28 日 OSC 2015 Tokyo/Spring @明星大学 ネタ投入
  • 17. 以下を行うのに何分かかる? http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 17 - 2015 年 2 月 28 日 OSC 2015 Tokyo/Spring @明星大学  ひとりでやったら何分かかるんだろうか?  2 人、3 人でやったら何分かかるんだろ うか?  何人でやれば最短でできるんだろうか?
  • 18. 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
  • 19. Makefile http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 19 - 2015 年 2 月 28 日 OSC 2015 Tokyo/Spring @明星大学 $ time make END START A B D <snip> Q R END real 0m55.066s user 0m0.001s sys 0m0.020s List: 逐次実行 $ time make -j2 END START A B D <snip> Q R END real 0m32.032s user 0m0.004s sys 0m0.020s List: 2 並列 $ time make -j4 END START A B D <snip> Q R END real 0m26.033s user 0m0.006s sys 0m0.023s List: 3 並列 $ time make -j4 END START A B D <snip> Q R END real 0m25.031s user 0m0.003s sys 0m0.025s List: 4 並列
  • 20. こんなことに使えないか? http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 20 - 2015 年 2 月 28 日 OSC 2015 Tokyo/Spring @明星大学  業務を何人で行うと効率がいいのか?  誰がボトルネックになっているのか?  ニューラルネットで使えないか?  探索問題に用いることができないか?  友人関係を分かりやすくできないか? ビルド以外の make の使い方もいろいろあるよ。