Acme大全への道
こんにちは、Perl入学式in大阪でサポーターをしている @tomcha_ です。
趣味でPerlのプログラミングを始めて早6年。
なんとなく、ちょっとしたコードを書いている毎日ですが、PerlMongerになったからには大きな憧れってありますよね。
そう、これです
Acme大全!
いつの日か、自分の書いたモジュールがAcme大全に載ってたらカッコイイな〜と、
今までは見る側でしたが、入学式の講師予習をしている時に、ふとモジュールを思いついたので、勢いに乗っかって作ってみようと思いました。
まずはモジュールの紹介よりも先に作った手順などを紹介します。
やったこと 手順
1. Minillaのインストール
Acme大全に載るには、CPANのAcme::で始まる名前空間に自作モジュールをアップする必要があります。
CPANにアップするモジュールには、色々とお作法がありますが、その雛形を簡単に作ってくれるモジュールが、Minilla です。
まずはMinillaをcpanからダウンロードしましょう。
cpanm minnilla
2. minil new
Minillaのインストール 自作モジュールを作成するために、ローカルのパソコンの任意のディレクトリで、以下の新規作成コマンドを叩きます。
minil new Acme::モジュール名
ここでミソなのは、今回作るのは憧れのAcmeモジュールなので、モジュール名の前にAcme::をつけます。
その他、色々な名前空間でモジュールを作るときは、適宜応じた名前と :: で区切って指定します。
すると、 :: で区切った通りにディレクトリ、子ディレクトリも自動的に作ってくれます。超便利。
Hoge.pmというモジュールを作るなら、
とします。
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というサイトで登録するのですが、こちらのブログ記事で詳しく書かれています。
今回、大変参考にさせていただきました。感謝。
6. cpanアカウントの設定
PAUSEでアカウントを作ったら、アイコン画像などもう少し詳しいプロフィールを設定します。
プロフィールはmetacpanというサイトで設定します。
Search the CPAN - metacpan.org
まずはTwitterやGithubのアカウントなどでサインインし、Accountメニューからidentitiesを選び、先程作ったPAUSEのアカウントと紐付けます。
そして、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モジュールと今回はまったこと
さて、今回私が作ったモジュールはこちらです。
どういうモジュールかというと、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鍋は不定期で平日木曜日のよる、大阪は梅田で絶賛開催しています。
出力文字列をダブルクォートで囲い、きちんと改行して、なんとかテストが通りました。
めでたい!念願のAcme大全に載れるはず?!
今年も出版されるのを願ってます!
ちなみに、こういうもくもく会を主催してます。(宣伝)