概要
ビルドツールである「Daiku」について紹介します
Infrastructure as Code(サーバ構築やデプロイなどをコードで管理する)が流行っている今以前紹介したFabricやDaikuなどが使えるのかなと思います
Daiku and Daikufile are now production ready
こちらによるとRakeの機能をだいたいパクったということでRakeのPerl版という位置づけみたいです
シェルを羅列できるので学習コストが低いのも利点の一つだと思います
ビルドツールとは
プログラムをビルドするための一連の作業を自動化するためのツールになります
makeとかが有名なのかと思いますがJavaScript系だとGruntやgulpなどがあったりします
ビルドツールまとめ。Gruntとかgulpとか (フロント寄り)
インストール
cpanmのインストール
$ cd /usr/bin/ $ sudo curl -LOk http://xrl.us/cpanm $ sudo chmod +x cpanm
Daikuをインストールするために必要なものをインストールする
$ sudo yum install perl-devel perl-TAP-Harness-Archive perl-Capture-Tiny perl-Mouse
Daikuのインストール
$ sudo cpanm Daiku
確認
$ whereis daiku daiku: /usr/local/bin/daiku
■ Hello World
// サンプルファイルを用意 $ cat Daikufile.pl desc 'hello'; task default => sub { sh "echo 'Hello, world!'"; }; // desc: タスクの説明 // task: タスクの定義 // default: タスク名を指定しなかった場合、デフォルトで呼ばれるタスク // sh: シェルを実行できる // タスクを一覧 $ daiku -T -f Daikufile.pl daiku default # hello // Daikufileを指定して実行 $ daiku -f Daikufile.pl [LOG] Building Task: default Hello, world!
■ Hello World
タスクに引数を与える
$ cat Daikufile.pl use Data::Dumper; desc 'hello'; task hello => sub { my ($task, $name) = @_; print Dumper $task; print Dumper $name; sh "echo $name Helllo World!!"; };
実行方法
$ daiku -f Daikufile.pl 'hello[hoge]' [LOG] Building Task: hello $VAR1 = bless( { 'registry' => bless( { 'tasks' => { 'hello' => $VAR1 }, 'namespaces' => [] }, 'Daiku::Registry' ), 'desc' => 'hello', 'deps' => [], 'dst' => 'hello', 'code' => sub { "DUMMY" } }, 'Daiku::Task' ); $VAR1 = 'hoge'; hoge Helllo World!!
タスクの階層化
namespaceを使ってタスクの階層化ができる
例えば同じファイル内でサーバ毎にタスク名を作るときに
servername_buildなどを作らなくても良いようにnamespaceという概念がある
$ cat Daikufile.pl namespace build => sub { desc 'server1 build'; task server1 => sub { sh "echo server1 build !!"; }; desc 'server2 build'; task server2 => sub { sh "echo server2 build !!"; }; };
実行方法
$ daiku -f Daikufile.pl build:server1 build:server2 [LOG] Building Task: build:server1 server1 build !! [LOG] Building Task: build:server2 server2 build !!
namespaceはネストすることもできる
1度に複数のタスクを実行する
複数のタスクで1つのタスクとさせることができる
$ cat Daikufile.pl task build => ['build:server1', 'build:server2']; namespace build => sub { desc 'server1 build'; task server1 => sub { sh "echo server1 build !!"; }; desc 'server2 build'; task server2 => sub { sh "echo server2 build !!"; }; };
実行方法
$ daiku -f Daikufile.pl build [LOG] Building Task: build [LOG] Building Task: build:server1 server1 build !! [LOG] Building Task: build:server2 server2 build !!
処理の切り出し
Daikufileが長くなると管理が難しくなるため別ファイルに切り出すことができる
$ cat Daikufile.pl use Task::Build; desc 'build'; task default => sub { require Task::Build; Task::Build->run(); }; $ cat Task/Build.pm #!/usr/bin/perl package Task::Build; sub run { print "helloooooooo\n"; } 1; $ daiku -f Daikufile.pl [LOG] Building Task: default helloooooooo
コメントを書く
コメント一覧