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.
『PythonでRakeもどきを作ってみた』        makoto kuwata <kwa@kuwata-lab.com>                                             1
pyKook - Python版 Rake          タスク定義をPythonで記述          タスク処理を「料理」に例える              Recipe (タスク定義), Cookbook (定義ファイル),    ...
タスク定義                   Kookbook.py            @recipe をつけると                                            タスク定義に            ...
タスクの一覧と実行   タスクの実行                         タスク一覧の表示     sh> kk clean                 sh> kk -l     ### * clean (recipe=cle...
ファイル生成ルール                           Kookbook.py    @product() に                                     もしファイルが    パターンを指定    ...
内容が変更されたか確認                                     タイムスタンプだけ更新される                           hello                 X          ...
タスク別オプション   Kookbook.py            @spices でタスクごとの   @recipe             command-line option を定義   @spices("-d: debug mode...
コマンドフレームワーク      mygit                                        「pykook -X」を        #!/usr/bin/env pykook -X        shebang ...
実行例   サブコマンドの実行                    サブコマンド一覧     sh> ./mygit ci             sh> ./mygit -h     [master 773f3ba] comment   m...
プロパティとプロパティファイル      Kookbook.py        CC = prop("CC", "gcc")        cflags = prop("cflags", "")        @recipe        def ...
定義済みコマンド       cp(), cp_p(), cp_r(), cp_pr()   system()       rm(), rm_r(), rm_f(), rm_rf()   echo()       mkdir(), mkdir_...
その他の機能          「-n」でコマンドを実行せず表示のみ(dry-run)          「-F」で強制実行(タイムスタンプを無視)          「-D」でより詳細な情報を表示          タスク定義のループを自動検...
続きはWebで!      http://www.kuwata-lab.com/kook/pykook-users-guide.htmlLLTV 2009 Lightning Talk                 copyright© 20...
thank you            14
Upcoming SlideShare
Loading in …5
×

PythonでRakeもどきを作ってみた

2,692 views

Published on

pyKook is a software build tool similar to Rake, Make, Ant, SCons, or Cook. You can define your task in Python. In addition, pyKook has some interesting features.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

PythonでRakeもどきを作ってみた

  1. 1. 『PythonでRakeもどきを作ってみた』 makoto kuwata <kwa@kuwata-lab.com> 1
  2. 2. pyKook - Python版 Rake タスク定義をPythonで記述 タスク処理を「料理」に例える Recipe (タスク定義), Cookbook (定義ファイル), Product (生成物), Ingredient (材料), ... http://www.kuwata-lab.com/kook/pykook- users-guide.htmlLLTV 2009 Lightning Talk copyright© 2009 kuwata-lab.com all rights reserved 2
  3. 3. タスク定義 Kookbook.py @recipe をつけると タスク定義に @recipe def clean(c): 関数ドキュメントが remove *.o files タスクの摘要に rm_rf("**/*.o") コマンドでは 「**/」が利用可能LLTV 2009 Lightning Talk copyright© 2009 kuwata-lab.com all rights reserved 3
  4. 4. タスクの一覧と実行 タスクの実行 タスク一覧の表示 sh> kk clean sh> kk -l ### * clean (recipe=clean) Properties: $ rm -rf **/*.o Task recipes: clean : remove *.o ・kk または pykook で起動 ・-l または -L で一覧表示 File recipes:LLTV 2009 Lightning Talk copyright© 2009 kuwata-lab.com all rights reserved 4
  5. 5. ファイル生成ルール Kookbook.py @product() に もしファイルが パターンを指定 @recipe 存在するなら @product(*.o) @ingreds($(1).c, if_exists($(1).h)) @ingreds() で def file_o(c): 材料を指定 compile *.c into *.o system(c%"gcc -c $(ingred)") キーワードや変数を埋め込み可能 (例: $(ingred) は最初の材料を表す)LLTV 2009 Lightning Talk copyright© 2009 kuwata-lab.com all rights reserved 5
  6. 6. 内容が変更されたか確認 タイムスタンプだけ更新される hello X コンパイル ファイルの内容に変更なし hello.o コンパイル コメントだけを変更して hello.c 「kk hello」を実行LLTV 2009 Lightning Talk copyright© 2009 kuwata-lab.com all rights reserved 6
  7. 7. タスク別オプション Kookbook.py @spices でタスクごとの @recipe command-line option を定義 @spices("-d: debug mode", commad-line の引数と "-p port: port number") オプションを受け取る def start(c, *args, **kwargs): debug = kwargs.get(d) # True or None port = kwargs.get("p", 8080) app = args and args[0] or helloworld echo(c%"debug=$(debug), port=$(port), app=$(app)") ### 実行例: sh> kk start -dp 8080 helloworldLLTV 2009 Lightning Talk copyright© 2009 kuwata-lab.com all rights reserved 7
  8. 8. コマンドフレームワーク mygit 「pykook -X」を #!/usr/bin/env pykook -X shebang に指定 kook_desc = "git helper" コマンドの説明 @recipe def ci(c): invokes git commit system("git commit -a") @recipe 各タスクがサブコマンドに def co(c): invokes git clone system(c%"git clone $(url)")LLTV 2009 Lightning Talk copyright© 2009 kuwata-lab.com all rights reserved 8
  9. 9. 実行例 サブコマンドの実行 サブコマンド一覧 sh> ./mygit ci sh> ./mygit -h [master 773f3ba] comment mygit - git helper 1 files changed, 1 insertions(+), 0 deletions(-) sub-commands: ci : invokes git commit co : invokes git clone ・スクリプト名で起動する  (kk や pykook ではないことに注意) ・サブコマンド別のオプションも可能LLTV 2009 Lightning Talk copyright© 2009 kuwata-lab.com all rights reserved 9
  10. 10. プロパティとプロパティファイル Kookbook.py CC = prop("CC", "gcc") cflags = prop("cflags", "") @recipe def build(c): system(c%"$(CC) $(cflags) hello.c") Properties.py コマンドラインでも cflags = "-g -Wall" 「--cflags=...」で指定可能LLTV 2009 Lightning Talk copyright© 2009 kuwata-lab.com all rights reserved 10
  11. 11. 定義済みコマンド cp(), cp_p(), cp_r(), cp_pr() system() rm(), rm_r(), rm_f(), rm_rf() echo() mkdir(), mkdir_p() touch() mv() cd(), chdir() store() # ディレクトリ構造を with chdir(build): 保ったままコピー system(...) edit() # ファイルを一括変更 # withを抜けると # 元の場所に自動復帰LLTV 2009 Lightning Talk copyright© 2009 kuwata-lab.com all rights reserved 11
  12. 12. その他の機能 「-n」でコマンドを実行せず表示のみ(dry-run) 「-F」で強制実行(タイムスタンプを無視) 「-D」でより詳細な情報を表示 タスク定義のループを自動検出LLTV 2009 Lightning Talk copyright© 2009 kuwata-lab.com all rights reserved 12
  13. 13. 続きはWebで! http://www.kuwata-lab.com/kook/pykook-users-guide.htmlLLTV 2009 Lightning Talk copyright© 2009 kuwata-lab.com all rights reserved 13
  14. 14. thank you 14

×