作成したパッケージを検証する

 *.cabalファイルの項目を書き終えたら、作成したパッケージに問題がないかどうかを確認しましょう。そのために利用するのがcabal checkコマンドです。このコマンドを使うことで、Cabalを使ったパッケージに必要なファイルがそろっているかどうか、*.cabalファイルの記述に不備がないかどうかを確かめることができます。

 問題がなければ、以下のような結果が出力されます。

$ cabal check
No errors or warnings could be found in the package.

 何か問題があれば、以下のように具体的な問題を指摘します。

$ cabal check
The following warnings are likely affect your build negatively:
* To use the 'default-language' field the package needs to specify at least
'cabal-version: >= 1.10'.

Hackage would reject this package.

 警告やエラーが表示された場合には、特別な理由がない限り、メッセージに従って*.cabalファイルの内容を修正してください。

 問題がなければ、cabal configureコマンドとcabal sdistコマンドを使ってパッケージのアーカイブ・ファイルを作成します。ビルドの際に./configureコマンドを利用する場合には、あらかじめconfigureファイルを生成しておく必要があります。

$ cabal configure
Resolving dependencies...
Configuring sample-0.1.0.0...

$ cabal sdist
Building source dist for sample-0.1.0.0...
Preprocessing library sample-0.1.0.0...
Source tarball created: dist/sample-0.1.0.0.tar.gz

 アーカイブ・ファイルは、distディレクトリの配下に<パッケージ名>-<バージョン番号>.tar.gzという名前で作成されます。

 次にcabal installコマンドを使って、作成されたアーカイブ・ファイルでパッケージを問題なくインストールできるかどうかを試します。

$ cabal install dist/sample-0.1.0.0.tar.gz

 *.cabalファイルのother-modules:、install-includes:、c-sources:などの記述に漏れがあれば、書かれていないファイルはアーカイブ・ファイルに含まれません。ビルドに必要なファイルが足りなければ、cabal installコマンドは失敗します。

 ただし、インストールできたからといって不備の可能性がないわけではありません。data-files:の記述漏れなどにより実行時に問題が起こる可能性は残ってます。こうした問題を検出するためにCabalで提供されている機能については次回説明します。

 作成したアーカイブ・ファイルに問題がないことが確認できたら、HackageDBなどにアップロードしてパッケージをリリースします。HackageDBにパッケージをアップロードする場合には、HackageDBのアカウントが必要です。アカウントを持っていない場合には、HackageDBのUser accountsのページの指示に従って取得してください。

 パッケージが正式リリース版ではなかったり、組織の内部だけでパッケージを利用したりする場合には、HackageDBによるパッケージの配布が適していないこともあります。そうした場合には、HackageDB以外のサーバーにアーカイブ・ファイルを置くことも可能です。ユーザーがcabal installコマンドにアーカイブ・ファイルのURLを指定すれば、パッケージをインストールできます。

著者紹介 shelarcy

 第1回のコラムで紹介した「Introduction to Functional Programming using Haskell second edition」(IFPH)の訳書である「関数プログラミング入門―Haskellで学ぶ原理と技法」という本が2012年10月に出版されました。

 「関数プログラミング入門」は、題名の通り、Haskellを使った関数プログラミングの入門書です。これまで出版されたHaskellの入門書との大きな違いは、Haskellの入門を目指すのではなく、あくまで説明のための道具としてHaskellを利用することで、関数プログラミングの入門のための本を目指していることです。このため、他の入門書よりも少し広い範囲の話題を扱っています。その中には、先に翻訳された「関数プログラミングの楽しみ」で扱っている内容の基礎になる話題も含まれています。本連載で扱ったデータ構造やGHCの言語拡張の中には、この本が扱っている話題から発展して開発され、その後広く利用されるようになったものもあります。

 Haskellの入門レベルを卒業した方であっても、関数プログラミングのしっかりとした足場を持っておきたいなら、読んでおいて損のない本だと思います。