初めてのPerlモジュール作成 in 五反田Perl

Jun 8, 2014   #perl 

五反田Perlに参加してもくもくしてきました。
何を作るか結構迷ったのですが、以前書いたスクリプトをモジュール化してみよう
せっかくモジュール化するならCPANモジュールっぽいフォーマットでつくろう

という事でつくったのがこちら

モジュール作成までにやったこと、ハマったことなどをまとめていこうと思います。

参考にしたもの

ひな形作成

shibayuさんの記事にある通り、Module::Starter::PBPを使用してひな形作成。
特にはまったりしたとこはなかった感じ。

$ module-starter --module=Module::Sample
  Added to MANIFEST: Build.PL
  Added to MANIFEST: Changes
  Added to MANIFEST: lib/Module/Sample.pm
  Added to MANIFEST: Makefile.PL
  Added to MANIFEST: MANIFEST
  Added to MANIFEST: README
  Added to MANIFEST: t/00.load.t
  Added to MANIFEST: t/perlcritic.t
  Added to MANIFEST: t/pod-coverage.t
  Added to MANIFEST: t/pod.t
  Created starter directories and files

[追記]

papix校長よりひな形作成のモジュールにとしてMinillaをおしえていただきました。
{% oembed https://twitter.com/__papix__/status/477616583968169984 %}

使ってみたら非常に快適で、ドキュメント自動生成やらなんやら。
将来CPAN Autorになったときにもいいかんじそうでよさげ。

[追記END]

初テスト

ひな形の中にテストとか含まれているのでテストを実行してみます。
実行するときはモジュールを使えるようにするために、-Idirectoryオプションを指定

$ perl -Ilib t/00.load.t 
  1..1
  not ok 1 - use Module::Sample;
  #   Failed test 'use Module::Sample;'
  #   at t/00.load.t line 4.
  #     Tried to use 'Module::Sample'.
  #     Error:  Global symbol "$VERSION" requires explicit package name at lib/Module/Sample.pm line 7.
  # Compilation failed in require at t/00.load.t line 4.
  # BEGIN failed--compilation aborted at t/00.load.t line 4.
  # Testing Module::Sample 
  # Looks like you failed 1 test of 1.

失敗。7行目の$VERSIONよく見ろって書いてあるので、
Acme::MilkyHolmesを参考に修正

package Module::Sample;                                                                         
use warnings;
use strict;
use Carp;

our $VERSION = '0.0.1';   # ここを修正

1; 
__END__

# 省略
$ perl -Ilib t/00.load.t  
  1..1
  ok 1 - use Module::Sample;
  # Testing Module::Sample 0.0.1

無事成功です。

開発とテスト

開発自体はすでに過去につくったものだったので特にはまらずでしたが、
テストでどの辺を切り出すとかに悩みました。

特に、外部APIの結果をどうテストするのかみたいなところで悩んで
飲み会でそのことを質問すると、外部APIの部分をモック化するとかなんとか。
それ用のモジュールもあるそうでしたが忘れました。ガードなんたらとか。

[追記]
Test::Mock::Guard というモジュールでした。
さっそく取り入れてみます。
[追記end]

公開、周囲の反応

一番むずかったのは、どこに何を書くか。
それに関してTwitterで頂いた指摘がこんな感じ

{% oembed https://twitter.com/moznion/status/475283560283123715 %} {% oembed https://twitter.com/moznion/status/475288195957936128 %} {% oembed https://twitter.com/__papix__/status/475294512105807872 %}

公開して即座にみてもらえて、改善点までおしえてもらてとても捗る。 感謝です。

まとめ

  • 初めてのモジュール作り、ハマりながらも完成させれた。
  • 過去につくったものの、「モジュール化」に焦点をあてたのがよかった。
    →新規開発だとやること多すぎて作りきらなかったと思う。
  • 頂いた指摘を元に修正をしていく次第。
  • コード書いて、すぐみてもらえて、反応があるっていうのがよかった。
  • わかんなかったこととかすぐに飲み会でカジュアルに質問できるのもよい。

さいごに

場を提供して頂いた校長に感謝
飲みの場でアドバイス頂いた皆様もありがとうございました。

このエントリーをはてなブックマークに追加