Hackageに登録するまでの手順をざっくりメモった
1. Haskellのライブラリを作る
まずはここから。Githubとかにリポジトリ作っておくと2のtrusteesとのやりとりで便利。2. アカウント登録
アカウント登録ページからアカウントを作成。登録したらメールが来るので適宜アクティベート。Hackageではスパム対策としてtrusteesからの承認を得るまではパッケージをアップロードできない。そのため、アカウント登録ページに記載されているtrusteesのメーリングリストにuploader groupに追加してもらう旨のメールを送る必要がある。
私の場合、メールはこんな感じで送った
Dear trustees team,
I registered and activated hackage account and want to upload my package.
Would you add my account to the uploader group?
username: tzmfreedom
email: xxxx
Best regards,
xxx
RubyGemsやnpmはそういう承認フローは無かったので、パッケージ登録のためにメールを送信するのに少し抵抗があったけど、パッケージアップロードに関するアドバイスをもらえたりHaskell初心者としてはとても有り難い感じだった。
3. candidateでテストアップロード
uploader groupに追加してもらったらアップロードできる状態。stack sdist
などでtar.gzを作ってそれをアップロードすればOK。
が、一度アップロードしたものは削除できないので、Package Candidatesというテスト用パッケージアップロードの仕組みがある。これを使うと、cabalファイルで足りない項目があれば教えてくれるしパッケージの見栄えのチェックもできる。hsforceだとこんな感じ。candidateの画面からボタンクリックでパッケージのリリースも可能。candidateページにアップロードしたものはhttp://hackage.haskell.org/package/hsforce-0.1.0.0/candidate/hsforce-0.1.0.0.tar.gz といった感じで参照できるので、これをextra-depsにセットしてパッケージの動作確認も可能。便利。
4. リリース
candidateからアップロードしても良いし、普通にアップロードしてもOK。APIでもいける?っぽいけど試していないです。パッケージのバージョン管理について
Haskellのバージョニングのポリシーとして PVP(Package Version Policy)というのがあるようです。セマンティックバージョニングとは違い、A.B.C.Dのバージョニングの場合、A.Bがメジャーバージョン、Cがマイナーバージョン、D以下がパッチバージョンという感じ(厳密に言うと違うかもしれないですがイメージこんな感じ)。詳細はPVPのページを参照ください。
あとDependenciesのバージョンも明確に指定した方が良いんですが、その際 cabal gen-bounds
を叩くとDependenciesのバージョンを自動で出力してくれるのでめっちゃ便利。
Haddock
パッケージをアップロードすると各モジュールで公開しているメソッドやデータ型が自動でドキュメント化されます。ただし、何も書いていないとシグニチャだけ表示されるだけなので利用例や説明を付与するにはHaddockでドキュメンテーションしていく必要があります。