LoginSignup
19
18

More than 5 years have passed since last update.

Haskellのライブラリを作ってHackageに公開するまで

Last updated at Posted at 2015-01-02

Hackage

Hackage...Haskellのライブラリを集めたアーカイブ.

PerlでいうCPAN、RubyでいうRubygems、Nodeでいうnpm的なやつです.

作って公開するまでを紹介します.

今回はyour-projectという名前のライブラリを作る事とします.

こんな感じ

今回使った例は

に置いておきました.

|-- src/ ...ソースファイル
|   |-- YourProject.hs ...モジュール本体
|
|-- Setup.hs ...セットアップ
|-- YourProject.cabal .. ライブラリのメタ情報

Cabal

Cabal...Haskellのパッケージシステム.

cabalコマンド(僕のはv1.20.0.3でした)を前提に話します.

cabal コマンドの入れ方はMac用ですが昔に記事を書いたのでこれを

【Mac OS X 10.10】Haskell + Yesod + Heroku で webアプリ 1/3

説明開始

手順1: プロジェクト作るのフォルダを作る

$ mkdir your-project
$ cd your-project

手順2: ソースコードを書く.

cabal init の前にソースコードを書いておくととcabalがconfigをこれに色々最適化してくれる)

$ mkdir src
$ touch src/YourProject.hs

(名称はハイフン(-) つなぎでファイル名はキャメルケースが慣習ぽい)

今回は例として関数を1つ定義してみましょう.

YourProject.hs
module YourProject where

yourFunc = "This is your function!" :: String

手順3: cabal init コマンド

$ cabal init

対話形式で色々聞かれる. 結構頭が良くて色々推論してくれる.(パッケージ名とか)

Screen Shot 2015-01-01 at 8.59.24 PM.png

途中でライブラリ(他のHaskellのコードにインポートして使うもの)なのか実行可能ファイル(コマンド)としてビルドするのか選ぶところがある、今回はライブラリを想定して話を進めるがconfigなどの設定が微妙に違うだけ.

Screen Shot 2015-01-01 at 8.45.50 PM.png

手順4: your-project.cabal を手直し

Screen Shot 2015-01-01 at 9.00.45 PM.png

ここで自動生成されたyour-project.cabalがライブラリのメタ情報となるので手動で確認してみる.

$ vim your-project.cabal

Screen Shot 2015-01-01 at 9.02.47 PM.png

丁寧に説明が書いてあるのでそれに概ね従うと良いです.

他のライブラリを使う場合はbuild-dependsにカンマ区切りで書いていく

Screen Shot 2015-01-01 at 9.08.02 PM.png

手順5: ビルドして試す

サンドボックス(依存解消のためのスコープを絞ってライブラリをインストールするcabalの機能)を作ってインストール

$ cabal sandbox init
$ cabal install --only-dependencies
$ cabal configure
$ cabal build

cabal repl でテスト

$ cabal repl

Screen Shot 2015-01-01 at 8.40.51 PM.png

手順6: Hackage

からアカウントを作ります.

プロジェクトのディレクトリで

$ cabal sdist --snapshot 

をやるとdist/your-project-0.1.0.0.tar.gz というのが出来るのでこいつを

からアップロード. username とpasswordを上記で作ったアカウントのやつ.

手順7: 完成!

他にも色々なメタ情報を付加出来るので試すと良いです.

おやすみなさい

19
18
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
18