GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
MEMOja(3) User Contributed Perl Documentation MEMOja(3)

antipop 式 Module::Setup 勉強帖

yappo が Module::Setup の実装内容を忘れかけてるので antipop 式勉強法で実装内容を勉強するドキュメントだよ。

Module::Setup で頻繁に出てくる用語の定義

フレーバー flavour じゃないのに深い意味は無い。

module-setup コマンドでファイル構造を作るときの大元となるテンプレート群の事を flavor と呼ぶ。

module-setup New::Module コマンド等で flavor から作られたファイル構造の事を skeleton と呼ぶ。

~/.module-setup/config.yaml にある、全 flavor で利用される config

~/.module-setup/plugins 以下にある、全 flavor で利用される plugin

~/.module-setup/flavors/foo 以下に展開されてる flavor のテンプレートファイル群を、持ち運びし易いように一つの package file にまとめる事や、纏まったファイルの事。

pack_flavor などなど。

~/.module-setup/flavors/foo 以下に flavor template を展開した後に、さらに別の flavor.pm を、その foo flavor に追加する事が出来る。

使う為には config.yaml にて Plugin::Additional を使うようにしておく。

コマンドラインでは

  module-setup --module-setup-dir=/foo/bar

組み込みでは

  my $pmsetup = Module::Setup->new(
      options => {
          module_setup_dir => '/foo/bar',
      },
      argv    => [qw/ New::Module foo_flavor /],
  );

環境変数では

  $ENV{MODULE_SETUP_DIR} = '/foo/var'

とする。

module-setup でよく使われるファイルやディレクトリは Module::Setup::Path 以下の名前空間のモジュールにて処理できる。

基本的な処理は Module::Setup::Path::Base で実装されており、 path_to やら file を探したり、そのPath存在チェックなどである。

基幹的なディレクトリ ~/.module-setup を表す。 中には Flavors, Plugins, Config が含まれている。

設定ファイルのload/save処理

Path:Class::Dir + 拡張された mkdpath が実装されている。

Path::Class::File を継承している

~/.module-setup/flavors/foo の foo 以下を表す

Config, Template, Plugins, Additional を含んでいる

Flavor に属してる

~/.module-setup/flavors/foo/template

Flavor に属してる

~/.module-setup/flavors/foo/plugins

プラグインとは Module::Setup::Plugin な名前空間で提供される hook point に応じて様々な処理を行える。詳しい hook points は Module::Setup::Plugin 見た方が速い。

~/.module-setup/config.yaml の plugin セクションに書くと、flavor, skeleton を作る時には必ずloadされる用になる。

global な config とは別に flavor 内の ~/.module-setup/flavors/foo/config.yaml に書くと、そのflavorを処理するときだけloadされる。

  package Module::Setup::Flavor::CodeRepos;
  use strict;
  use warnings;
  use base 'Module::Setup::Flavor';
  sub loader {
      my $self = shift;
      $self->import_template('Module::Setup::Flavor::Default');
  }
  1;

のようなコードを書く事で、この場合だと Module::Setup::Flavor::Default を継承した flavor を作る事ができる。

template が入ってる DATA セクションでは、親の flavor template に Unified な patch をあてられるようになった。 その場合は Patch をあてたい file section に template ではなくて patch という key でパッチを記述する。

追加変更があるテンプレートだけ記述する事が可能。

module-setup コマンドが使ったり組み込み用途で使う物ですね。

起動フェーズ

  Module::Setup->new->setup_options->run;

の通り、 new で instance 作って setup_options でコマンドラインオプションを解釈して run で処理を実行します。

組み込みの場合は setup_options を呼ばずに直接 run するんだけど、その場合は new に options と args を渡す必要がある。

  # module-setup New::Module foo_flavor 相当の組み込みコード
  my $pmsetup = Module::Setup->new(
      options => {
          # ここに GetOptions で取得するべきパラメータを入れる
      },
      argv    => [qw/ New::Module foo_flavor /], # ここは GetOptions で取れなかった残りかすをいれる。
  );
  $pmsetup->run; # create New::Module module with foo_flavor flavor

pack_flavor

指定した flavor を指定した package name で pack する。

module-setup コマンドから flavor を開発する為に用意された機能がまとまっている。 flavorのディレクトリ構成の作成、テスト、pack化までを一元で行う。

create flavor

  module-setup --devel FlavorName

で、 FlavorName という flavor を作る事ができる。

  cd FlavorName

して、ディレクトリ移動して、flavorの作成を行う。

test flavor

flavor のディレクトリの root にて

  module-setup --devel --test

とすると、 t/all.t を自動的に作って、意図した flavor が作れてるかテスト出来る。 テストを行うには config.yaml を編集する。

作り立ての flavor には

  ---
  class: FlavorClassName
  module_setup_flavor_devel: 1plugins: []
  testdata:
    dirs:
      - testdir
    files:
      - file: testfile.txt
        likes:
          - hel+options
          - FlavorClassName 
   module: MyApp

となってるので、 testdata 以下を編集してテストケースを追加する。

config->{testdata}->{dirs} は、 flavor にて作られるディレクトリを指定する。

config->{testdata}->{files} は、flavor にて作られるファイルを指定する。

config->{testdata}->{files}->[]->{file} に、作成されるファイル名を

@{ config->{testdata}->{files}->[]->{likes} } に、そのファイルの中に出てくる文字列の正規表現を入れます。これは複数個入れらます。

dirs と files は、 flavor で作成される物と完全に一致しないとテストが性交しません。このテストの実装は Module::Setup::Test::Flavor にてされてます。

pack flavor

現在の編集中の flavor をその場で pack できます。

  module-setup --devel --pack

単独実行可能形式にするには下記のとおり。

  module-setup --devel --pack --executable

与えられた flavor template を元に skeleton を作成する。 1 file/dir ごとに作る。

file path 周りを扱う
2009-12-21 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.