Perlがくしゅう帳(Rubyも)

プログラミングの勉強会の参加記録や学んだことなど。 twitter ID : @tomcha_で活動しています。 最近は主にPerl関連の勉強会やコミュニティに参加しています。移転前のブログはこちら->http://ruby.doorblog.jp/

Acme大全への道

こんにちは、Perl入学式in大阪でサポーターをしている @tomcha_ です。

www.perl-entrance.org

趣味でPerlのプログラミングを始めて早6年。
なんとなく、ちょっとしたコードを書いている毎日ですが、PerlMongerになったからには大きな憧れってありますよね。

そう、これです

f:id:tomcha0079:20170602223101j:plain:w500

Acme大全!

いつの日か、自分の書いたモジュールがAcme大全に載ってたらカッコイイな〜と、

今までは見る側でしたが、入学式の講師予習をしている時に、ふとモジュールを思いついたので、勢いに乗っかって作ってみようと思いました。

まずはモジュールの紹介よりも先に作った手順などを紹介します。

やったこと 手順

1. Minillaのインストー

Acme大全に載るには、CPANAcme::で始まる名前空間に自作モジュールをアップする必要があります。
CPANにアップするモジュールには、色々とお作法がありますが、その雛形を簡単に作ってくれるモジュールが、Minilla です。

metacpan.org

まずはMinillaをcpanからダウンロードしましょう。

cpanm minnilla

2. minil new

Minillaのインストール 自作モジュールを作成するために、ローカルのパソコンの任意のディレクトリで、以下の新規作成コマンドを叩きます。

minil new Acme::モジュール名

ここでミソなのは、今回作るのは憧れのAcmeモジュールなので、モジュール名の前にAcme::をつけます。
その他、色々な名前空間でモジュールを作るときは、適宜応じた名前と :: で区切って指定します。
すると、 :: で区切った通りにディレクトリ、子ディレクトリも自動的に作ってくれます。超便利。
Hoge.pmというモジュールを作るなら、

minil new Acme::Hoge

とします。

3. コードを書く

さあ、オリジナルモジュールを作りましょう!
あ、その前に編集前の状態で git commt しておきましょう。
そして、ディレクトリの中に lib というディレクトリがあり、その中の モジュール名.pm を編集していきます。
通常はサブルーチンを書いていく感じになりますね。そうすると、作ったモジュールを読み込めば自作サブルーチンが呼び出せるようになります。
また、__END__以降の行の部分のコメントを編集して、READMEの内容を作っていきます。ここに書いておくと、この後のコマンド操作でREADMEファイルをよしなに作ってくれます。コピペで使い方がわかる、SYNOPSYSも丁寧に書いてみましょう。

4. Minil test

モジュールの中身が実装できたら、モジュール名のディレクトリ直下で、テストを実行して確認します。コマンドは、

minil test

です。デフォルトでは、自分の書いたモジュールが読み込めるかどうかのテストがデフォルトで書かれています。
まずはこのテストが通る事を確認して、その他テストも書いてみましょう。

5. Minil releaseの前に、pauseの登録

実装できた!テストも通った!さあ、リリースだ….のちょっと前にしておく事があります。
CPANにモジュールを上げる事になるので、先にCPANに自分のアカウントを作っておく必要があります。

https://pause.perl.org/pause/query

PAUSEというサイトで登録するのですが、こちらのブログ記事で詳しく書かれています。

blog.livedoor.jp

今回、大変参考にさせていただきました。感謝。

6. cpanアカウントの設定

PAUSEでアカウントを作ったら、アイコン画像などもう少し詳しいプロフィールを設定します。
プロフィールはmetacpanというサイトで設定します。

Search the CPAN - metacpan.org

まずはTwitterGithubのアカウントなどでサインインし、Accountメニューからidentitiesを選び、先程作ったPAUSEのアカウントと紐付けます。 f:id:tomcha0079:20170602224550p:plain:w500

そして、profileページでアイコンや自分のブログなど、プロフィールを書きましょう。

7. リリース準備ファイル

ホームディレクトリに.pauseファイルを作り、そこへPAUSEアカウントの情報を書き込みます。

touch ~/.pause chmod 600 ~/.pause

.pauseの中身は、

user username
password userpassword

(もちろん、自分の)を書きます。

8. Acme名前空間の再確認

CPAN名前空間での整理やテスト文化など、素晴らしいエコシステムが整った公共の場です。
まずはCPANの流儀にしたがい、自分の作ったモジュールがのディレクトリ名がAcme-Hogeとなっているか、llibディレクトリの中のAcmeディレクトリの中にファイルが置かれているか再確認しましょう。

さあ、ここまで来ればあと少しです!

9. リリース

モジュールをCPANにリリースです!

minil release

最初は何度かファイルをアップするためのCPANモジュールが足りない!と怒られました。
その都度、cpanm でインストールして、すべてのアップロード用モジュールが揃えば自動的にCPANにモジュールがアップされます!

作ったAcmeモジュールと今回はまったこと

さて、今回私が作ったモジュールはこちらです。

metacpan.org

どういうモジュールかというと、Perl入学式では一番最初に"Hello, world\n"と画面に出力するプログラムを作ります。
なので、Perlという言語のスローガン、TMTOWTDI “There’s More Than One Way To Do It.” “「やり方はひとつじゃない」”
に習って、教科書とは違うやり方の"Hello, world"のモジュールを作ってみました。

こんな単純なモジュールですが、実はテストでちょっとはまりました。
モジュール内のprint文、最初はシングルクォートで囲っており、改行しない文字列を出力させてました。
すると何故か、デフォルトのモジュール読み込みテストがコケる!
丁度Perl鍋という勉強会で作っていたので、周りの参加者に見てもらい、テスト単体とかでも試した結果、どうやらテスト時に"ok"で始まるテキストが帰らないとテストがコケる用で、テストの返り値文字'ok'の前に'Hello,world'の文字が改行せずにひっついていた為、'ok'を認識してくれずテストがコケていました。
Perl鍋と参加されていたPerlMongersにも感謝。
Perl鍋は不定期で平日木曜日のよる、大阪は梅田で絶賛開催しています。

perlnabe.connpass.com

出力文字列をダブルクォートで囲い、きちんと改行して、なんとかテストが通りました。

めでたい!念願のAcme大全に載れるはず?!
今年も出版されるのを願ってます!

ちなみに、こういうもくもく会を主催してます。(宣伝)

naniwaperl.connpass.com