Perl版ビルドツールDaiku 入門の入門

Published: 2016年3月5日 by tomsato

概要

ビルドツールである「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

概要

コメントを書く

※ Emailは公開されません

※ コメントは承認されると下記に表示されます

コメント一覧

最近の投稿

社内ツールなどの超小規模なAPIをGolangで実装する際にフレームワークを使うべきかを、実際にnet/httpを使った実装とフレームワークを使った実装を比較することでどれだけ優位性があるかを見ていきたいと思います。今回はフレームワークにはシンプルで使いやすそうなEchoを使うことにします。

vue-pdfを使ってNuxt.jsで作成しているアプリケーションに pdfスライドを表示させるサンプルを作成しました README.md通りに実装してもうまくいかないところがあったのでそのあたり含めてまとめます

Vue.js / Nuxt.jsにおけるログインの実装方法をまとめる Auth0やNuxt.jsのAuth Moduleとmiddlewareについて調べつつサンプルを作成することで理解を深める

コンポーネント設計について考える Atomic DesignやPresentational Component, Container Componentについてまとめつつ 自分だったらVue.js / Nuxt.jsでどういうコンポーネント設計にするかについてまとめます

Netlify Formsを使ってブログサイトにコメント機能を追加する方法を調べたので紹介 Netlify FormsはNetlifyに標準機能として用意されているフォーム機能 サーバレスなので別途コメント用にサーバを用意する必要がなくHTMLを埋め込むだけで準備できる

カテゴリ一覧

タグ一覧