Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

4,419 views

Published on

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

Published in: Engineering
  • Be the first to comment

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

  1. 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. 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. 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. 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. 5. make の特徴 http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 5 - make には以下のような特徴があります。 2015 年 2 月 28 日 OSC 2015 Tokyo/Spring @明星大学  手順をまとめられる  複雑な手順をまとめられます  エラーで止まる  エラーがあるのに手順を先に進めない  再開できる  止めた (止まった) ところから再開できる  復元できる  元どおりにすることができます
  6. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 16. http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 16 - 2015 年 2 月 28 日 OSC 2015 Tokyo/Spring @明星大学 ネタ投入
  17. 17. 以下を行うのに何分かかる? http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 17 - 2015 年 2 月 28 日 OSC 2015 Tokyo/Spring @明星大学  ひとりでやったら何分かかるんだろうか?  2 人、3 人でやったら何分かかるんだろ うか?  何人でやれば最短でできるんだろうか?
  18. 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. 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. 20. こんなことに使えないか? http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 20 - 2015 年 2 月 28 日 OSC 2015 Tokyo/Spring @明星大学  業務を何人で行うと効率がいいのか?  誰がボトルネックになっているのか?  ニューラルネットで使えないか?  探索問題に用いることができないか?  友人関係を分かりやすくできないか? ビルド以外の make の使い方もいろいろあるよ。

×