omohayui blog

おも‐はゆ・い【面映ゆい】[形][文]おもはゆ・し[ク]《顔を合わせるとまばゆく感じられる意》きまりが悪い。てれくさい。

How to upload a module to CPAN

Why?

とある既存の CPAN module に修正を加える必要あり、PullReq を作成して送ったところ、
自分でアップロードしてみたらと言われ、アップロードを試み、結果たくさんの反省点があったので、
一から自分で作った module をアップロードすることにしました。

Process

Step1: What should I make as a module?

perlnewmod - 新しいモジュールを配布するには - perldoc.jp

とりあえず、CPANアップロードのリベンジをしたいという思いで、以前実装したコードを module に切り出してしまったので、
ここに記載あるように「必要性の議論」はできていないです。(ごめんなさい)
作成したのは、FCM の API v1 向け Client です。
必要だったのは FCM の API Client というより OAuth 2.0 アクセストークンを使った Google API Client でした。
ServiceAccount の json ファイルをそのまま使ってやりたいことをできるものが当時見つからず。
Go で書かれている google api client のソースコードを読んで perl に置き換えることにしたのです。

github.com

Step2: Create a module

今回、 Minilla というオーサリングツールを使いました。

% minil new WWW-FCM-HTTP-V1

するだけで、アップロードまでに必要なものは勝手に作ってくれます。

% ls -l WWW-FCM-HTTP-V1
 Build.PL
 Changes
 LICENSE
 META.json
 README.md
 cpanfile
 lib/
 minil.toml
 t/

lib/ と t/ ディレクトリにそれぞれソースコードを置いて minil test を行うと、
META.json や README.md も更新してくれます。

Step3: Create PAUSE ID

まず、 module ができても、 PAUSE のアカウントがないと CPAN にはアップロードできません。

PAUSE: The CPAN back stage entrance から登録を行います。

そしてここから申請してもすぐアカウントが自動作成されるわけではなく、
手動で作成される (!) ので、1週間ぐらいはかかりました。

おそらく、 "A short description of why you would like a PAUSE ID:" の内容を人の手でちゃんとチェックしているのかなと・・・

アカウントが作成されると「Welcome new user OMOHAYUI」というメールが届きます。
別のメールで仮パスワードが送られてくるので、そちらでログインし、パスワードを変更します。

ここで、 metacpan.org のアカウントと PAUSE ID の連携を試みるのですが、
現在ここで問題が起きていて、連携用コードが PAUSE アカウントに設定しているメールに届きません。。。
これができなくても CPAN にはアップロードできるのですが、
アイコンが設定できなかったり、いいねができなかったりちょっと寂しいものがあります。

Can't associate with PAUSE · Issue #2048 · metacpan/metacpan-web · GitHub この issue が resolve されれば・・・

Step4: Setting pause_config

Minilla でリリースする際には cpan-upload を利用する為、
.pause ファイルを home directory に配置しておく必要があります。
pause にログインする際の user名とパスワードを記載します。

user OMOHAYUI
password *********

Step5: Release

Minilla でリリースする場合は、

minil release

とコマンドを打つだけです。

test と Changes の更新、 Github への commit & push CPAN アップロード までやってくれます。 アップロード後、しばらくすると upload と indexer report のメールが届いて完了です。

補足として、Changeログの更新時は、version と更新日時は自動で追加されるので追記不要です。

{{$NEXT}}
    - next version

0.01 2019-03-31T16:07:40Z

    - original version

Step6: Update modules

自分の場合は、翌日ぐらいに CPAN Testers から Daily Summary Report が届きました。
テスト結果としては、 MSWin32-x86 環境で send test が失敗しているよ!という内容でした。

win環境でテストするのめん..困難なので、 MSWin32 はサポート外としてテストを修正し、再度アップロードを試みました。

初回移行も minil release だけで、いけます。
version もデフォルト 0.02 で更新してくれます。

Next

CPANアップロードの方法は覚えたけれども、
やっぱり Go の方で何か package 作りたいな...