Haskellでいってみよう

日曜プログラマにも満たないレベルでもHaskellで何かソフトウェアを作りたい!

開発環境の整備とプロジェクトディレクトリ

ちゃんとしたプロダクトを作るにあたり、まずは開発環境を整えないといけない。 ソース管理は当然なので、今ならgithubが妥当だろう。早速ユーザ登録して、 新規リポジトリを開始する。この辺の詳しいところは、以下の書籍を参考にした。

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

コラボレーションするようなモノではないので少々オーバースペックな感じはするが、 自宅でバージョン管理システムを運用するのは大変面倒くさいのでやはりクラウド サービスが楽だ。

新しく、"picfinder"というリポジトリを作ったので、これをローカルにcloneしてくる。

$ git clone https://github.com/eijian/picfinder.git

簡単そうなところで、指定したディレクトリ内に存在するJPEGファイルの中で、同じ 画像であるものを探し出してレポートしてくれるプログラムを作ってみようと思う。 さて、Haskellでビルドやテストを繰り返し行うには、Cabalというのを使うと良さそう。 この辺は以下の書籍を参考にした。

まずは初期化をする必要があるらしい。

$ cabal init
Package name? [default: picfinder] picfinder
Package version? [default: 0.1.0.0] 0.1.0.0
Please choose a license:
  :
   8) BSD3
  :
Your choice? [default: (none)] 8

とりあえずプロダクト名、初期バージョン、そしてライセンスを選ぶ。 Cabal(かHaskell界)のしきたりなのか、バージョンは4つの数字で表す ようにする、と先の[関数プログラミング…]に書いてある。まずは、 0.1.0.0で始めておく。

名前とかを入力した後、今回のプログラムは画像関係なのでカテゴリは Graphicsを、また実行プログラムとしておく。

Project category:
  :
  10) Graphics
  :
Your choice? [default: (none)] 10
What does the package build:
   1) Library
   2) Executable
Your choice? 2

あとはmainが入るソースファイル名やHaskellのバージョンなどを聞かれたが よくわからないのでデフォルトのままで。とりあえず最後まで進んだので良しとする。

Generating LICENSE...
Warning: LICENSE already exists, backing up old version in LICENSE.save0
Generating Setup.hs...
Generating picfinder.cabal...

You may want to edit the .cabal file and add a Description field.

あと、ソースツリーをどうするか考えないといけないがルートにバラバラいろんな ファイルやディレクトリが散らかっているのは嫌いなので、ソースとテストと文書用に 3つだけ作った。トップディレクトリは次のようになった。

.git                      <= gitが勝手に作った?
.gitignore                <= github登録時に指定
LICENSE                   <= githubで登録時に選択すると作られるがCabalが作った方を採用
README.md                 <= githubで登録した時に作られた
Setup.hs                  <= Cabalが生成
doc/
picfinder.cabal           <= Cabalが生成
src/
test/

次回からは少しずつプログラムを作ってみる。