Perl Hackers Hub

第50回 Minillaを使ったモダンなCPANモジュール開発(3)

(1)こちら⁠2)こちらから。

CPANへのリリース

さて、いよいよCPANへのアップロードを行っていきましょう。

Changesを書く

まずは、リリース前にモジュールの変更履歴をChangesファイルに書きます。Minillaが出力したChangesのひな型に{{$NEXT}}という文字列がありますが、その次行以降に続けて箇条書きで変更内容を記述します。

この{{$NEXT}}部分がリリース時にv0.0.1 2018-02-17T18:42:09Zのようにバージョン番号とリリース時間に自動置換され、CPANモジュールに同梱されます。

アップロード用の設定ファイルを配置する

CPANモジュールをPAUSEにアップロードするための設定も必要です。.pauseというファイルをホームディレクトリ上にパーミッション0600で作成し、次のようにPAUSEアカウントとパスワードを記述します。

user songmu
password パスワード

CPANにアップロードする

さあ、いよいよ、CPANにモジュールをアップロードするときです。ここまでくればもう簡単です。minil releaseコマンドを実行するだけです。

アップロードされる内容を事前に確認したいのであれば、minil distを実行するとCPANにアップロードされるtarボールを手もとに作ることができるので、その中身を確認してください。今回ですと、Acme-Songmuv0.0.1.tar.gzという名前になります。

minil releaseを実行するとリリースフローが始まり、途中でモジュールのバージョンを聞かれるプロンプトと、モジュールをアップロードする前に確認のプロンプトが表示されます。それぞれ入力すればリリース作業は完了です。

このとき、先ほど説明したChangesがきちんと書かれていなかった場合には、追加でChangesの編集作業も必要です。リリースフローの中でエディタが自動で開きChangesの編集を促されるので、記述を行いましょう。

バージョンは自動的にサジェスチョンされ、プロンプトに何も入力せずに[Enter]を押した場合、それがリリースバージョンとして適用されます。それ以外のバージョンでリリースしたい場合は、バージョン番号を適宜入力してください。

% minil release
Retrieving meta data from lib/Acme/Songmu.pm.
Name: Acme::Songmu
Abstract: Songmu's sample module
Version: v0.0.1
Next Release? [v0.0.1]
(省略)
Result: PASS
Wrote Acme-Songmu-v0.0.1.tar.gz
Upload to CPAN
Release to CPAN ? [y/n] y
registering upload with PAUSE web server
POSTing upload for /path/to/Acme-Songmu-v0.0.1.tar.gz to h
ttps://pause.perl.org/pause/authenquery
PAUSE add message sent ok [200]
(省略)

しばらくするとCPANのサイト上にモジュールの情報が表示され、実際にCPANからモジュールのインストールが行えるようになります。

おめでとうございます! これで、MinillaでCPANモジュールを作成し、リリースするところまでの一通りの工程が完了しました。

CPANモジュールを更新する

CPANモジュールは機能追加やバグ修正を行いながら更新していくものです。そういった新バージョンのリリース作業も、更新内容をリポジトリにコミットしたあと、minil releaseを実行するだけで簡単に行えます。

プライベートモジュールでのMinillaの活用

前節まで、MinillaのメインのユースケースであるCPANにアップロードする場合の使い方について説明しました。ただ、Minillaは社内で使うようなプライベートモジュールの作成でも便利です。

基本的には、CPANモジュールの開発と同様に、minilnewでひな型を作り、プライベートなGitリポジトリで開発を始めれば大丈夫です。慣れないうちはプライベートモジュール作成に取り組んでみてもよいかもしれません。

以降では、プライベートモジュールを開発、運用するうえでの注意点やTipsを紹介します。

CPANへの暴発アップロードを防ぐ

プライベートモジュールをうっかりオープンなCPANにアップロードしてしまうと大変です。Minillaはminil releaseで簡単にリリースできるため、逆に暴発が怖いです。

Minillaには暴発アップロードを防ぐためのrelease.do_not_upload_to_cpanという設定項目が備わっています。minil.tomlに次のように記述します。

[release]
do_not_upload_to_cpan=true

この設定をしておくと、プライベートモジュールを誤ってCPANに公開してしまうことがなくなります。

プライベートモジュール用サーバを構築する

Minillaで作成したプライベートモジュールをプロジェクトに導入する方法はいくつかあります。cpanmgit://path/to/My-Module.gitのようにリポジトリから直接インストールする方法や、git submoduleを活用する方法などがお手軽ですが、ここでは、フルコースのプライベートモジュール用のサーバを構築して、それを利用する方法を説明します。

OrePAN2::ServerでDarkPANを構築する

プライベートモジュールやCPANの部分ミラー用途で使うイントラネット用のCPANは、DarkPANと呼ばれます。そのDarkPANを構築するためには、OrePAN2::ServerというCPANモジュールがお手軽でお勧めです。

OrePAN2::Serverのインストールはいつものようにcpanmで行えます。インストールすると、orepan2-server.plというコマンドラインサーバがインストールされます。

% cpanm -n OrePAN2::Server

CPANモジュールパッケージを配置したいディレクトリでorepan2-server.pl -p 5888を実行すると、5888番ポートでプライベートモジュール用サーバが起動します。このサーバには2つのエンドポイントが存在します。

モジュールダウンロード用URL
http://localhost:5888/orepan
モジュールアップロード用URL
http://localhost:5888/authenquery

実運用ではnginxなどでプロキシさせると思いますが、ここではこのURLで解説を続けます。

MinillaからOrePAN2::Serverへモジュールをアップロードする

先ほど構築したプライベートモジュール用サーバにMinillaを使ってモジュールをアップロードしてみましょう。手順は以下です。

  • ❶ アップロード設定ファイルをリポジトリに配置する.pause
  • minil.tomlにアップロード設定ファイルのパスを設定するrelease.pause_config
  • minil releaseを行う

.pauseは、CPANにアップロードするためにホームディレクトリに配置しているファイルと同じフォーマットのファイルです。OrePAN2::Serverにアップロードするためにupload_uriというフィールドが必要です。また、passwordフィールドは、独自にBasic認証をかけていない限りは必要ないのですが、ファイルの仕様として必須となっているため、適当な文字列を埋めておきましょう。逆に本物のPAUSEアカウントのパスワードは書かないようにしましょう。.pauseファイルの内容は次のようになります。

user songmu
password <dummy>
upload_uri http://127.0.0.1:5888/authenquery

minil.toml内で、.pauseファイルのパスを次のように設定します。

[release]
pause_config = "./.pause"

このとき、先ほど紹介したrelease.do_not_upload_to_cpanの設定がある場合は削除してください。

これらのファイルをリポジトリにコミットし、minilreleaseを実行すると、CPANへのアップロードと同じフローでOrePAN2::Serverにアップロードが実施されます。

OrePAN2::Serverにアップロードされたモジュールをインストールする

OrePAN2::Serverにアップロードされたモジュールをインストールしてみましょう。とはいえ、cpanm--mirrorオプションを付けるだけで実現できます。

% cpanm --mirror=http://localhost:5888/orepan Acme::Songmu

モジュールのインストールが完了すれば成功です。これで、プライベートモジュールもMinillaを使って開発し、それをインストールまでできるようになりました。

まとめ

Minillaを使ったCPANモジュールのオーサリングについて一通り解説しました。Minillaが開発されたことにより、CPANモジュール作成の敷居が下がり、多くの人にとって開発しやすくなりました。この記事を参考にして、読者のみなさんもぜひCPANモジュールの作成にチャレンジしてみてください。

さて、本連載も50回という節目を迎えました。次回の執筆者はakiymさん、テーマはTest2を予定しています。お楽しみに。

WEB+DB PRESS

本誌最新号をチェック!
WEB+DB PRESS Vol.130

2022年8月24日発売
B5判/168ページ
定価1,628円
(本体1,480円+税10%)
ISBN978-4-297-13000-8

  • 特集1
    イミュータブルデータモデルで始める
    実践データモデリング

    業務の複雑さをシンプルに表現!
  • 特集2
    いまはじめるFlutter
    iOS/Android両対応アプリを開発してみよう
  • 特集3
    作って学ぶWeb3
    ブロックチェーン、スマートコントラクト、NFT

おすすめ記事

記事・ニュース一覧