Perl Hackers Hub

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

この記事を読むのに必要な時間:およそ 2.5 分

(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.107

2018年10月24日発売
B5判/160ページ
定価(本体1,480円+税)
ISBN978-4-297-10172-5

  • 特集1
    [Dockerもサポート!]実践CircleCI
    ワークフローで複雑なCI/CDを自動化
  • 特集2
    iOS 12最新活用
    強化された機械学習とAR,Swift 4.2
  • 特集3
    速攻改善 UIデザイン
    銀の弾丸! オブジェクトベース設計

著者プロフィール

松木雅幸(まつきまさゆき)

idのSongmuの由来は「松木」の中国語発音表記。

中国でのIT起業,語学営業職,SIer,ソーシャルゲーム開発などの紆余曲折を経て,現在は,はてな東京オフィスでチーフエンジニアとサーバー監視SaaS,Mackerelのプロダクトオーナーを務める。ISUCONに過去3度優勝するなど,インフラを意識してアプリケーションコードを書くことが得意。趣味はCPANにモジュールを上げまくることだったが,最近はGoがお気に入りで多数のオレオレツールをGitHubに公開している。

著書に『みんなのGo言語[現場で使える実践テクニック]』,『Mackerelサーバ監視[実践]入門』(共に共著,技術評論社)

Blog:http://www.songmu.jp/riji/
GitHub:Songmu

コメント

コメントの記入