今流行りの DUB を使ってみた

公式 URL
http://code.dlang.org/
Github
https://github.com/rejectedsoftware/dub
日本語解説(とてもありがたい)
http://codelogy.org/archives/2013/09/%E3%80%90d%E8%A8%80%E8%AA%9E%E3%80%91d%E8%A8%80%E8%AA%9E%E3%81%AE%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3%E3%80%81dub.html
http://qiita.com/yasei_no_otoko/items/2724eebab10f5cd0a02f


開発環境が Arch Linux なので、dmdとか dubとかは

$ yaourt -S dlang dub

で導入。
ちなみに community package なので yaourt は必須では無いです。


使用方法について。
上記の URL読めば大抵の使い方は分かる。

project $ dub init test
Successfully created an empty project in '/home/user/Programming/D/project/test'.
project $ cd test 
test $ ls
package.json  public  source  views
test $ cat package.json 
{
	"name": "test",
	"description": "An example project skeleton",
	"homepage": "http://example.org",
	"copyright": "Copyright © 2000, Your Name",
	"authors": [
		"Your Name"
	],
	"dependencies": {
	}
}
test $ ls source 
app.d
test $ cat source/app.d 
import std.stdio;

void main()
{ 
	writeln("Edit source/app.d to start your project.");
}


必要なライブラリ等の情報は package.json の dependenciesに書いて、
エントリポイントになる app.dにコードを書いていく感じ。


プロジェクトの中で

test $ dub

とか叩くとコンパイルから実行までやってくれる。

test $ dub build

とか叩くと package.json の "name" で実行ファイルが作成される。


dependenciesに列挙したライブラリは
/home/user/.dub/packages の中に保存されるので、
綺麗にしたかったら .dubとか丸々消してしまえば良いのかな。


で、dub使って気になったのが
野良 github repositoryとかは登録出来ないっぽい?という事。
http://code.dlang.org/ に登録すれば引っ張ってこれるのだろうけど、
其処まででも無いかなぁと思ったので
ローカルにある外部ライブラリなり外部ソースコードを一緒にコンパイルする方法調べた。


結論としては、package.json
"importPaths":[ path, ... ]
"sourceFiles":[ file, ... ]
"sourcePaths":[ path, ... ]
辺りの Key Value Pair を登録しといてやるとよしなにやってくれるっぽい。

test $ ls ../../mylib/adjustxml 
README.md  adjustxml.d

こんなライブラリがあったとする。


"importPaths" に関して

  • 列挙した path に -Iを付けてコンパイラに渡してくれる。
test $ cat package.json
{
    ...
    "importPaths": [
        "../../mylib/adjustxml"
    ]
}
test $ dub build --verbose
... 省略 ...
Compiling...
dmd -c -oftemp.o -debug -g -wi -version=Have_test -I../../mylib/adjustxml -Jviews source/app.d
Linking...
dmd -oftest temp.o -g


"sourceFiles" に関して

test $ cat package.json
{
    ...
    "sourceFiles": [
        "../../mylib/adjustxml/adjustxml.d"
    ]
}
test $ dub build --verbose
... 省略 ...
Compiling...
dmd -c -oftemp.o -debug -g -wi -version=Have_test -Isource -Jviews source/app.d ../../mylib/adjustxml/adjustxml.d
Linking...
dmd -oftest temp.o -g


"sourcePaths" に関して

  • 列挙した path に含まれている *.d を全てコンパイラに渡してくれる。
  • 気をつけなきゃいけない点?としては、sourcePaths使うと project/source を読みに行ってくれなくなるので、明示的に "source" ディレクトリを書いてやらねばならない。
test $ cat package.json
{
    ...
    "sourcePaths": [
        "../../mylib/adjustxml"
    ]
}
test $ dub build --verbose
... 省略 ...
Compiling...
dmd -c -oftemp.o -debug -g -wi -version=Have_test -Isource -Jviews source/app.d ../../mylib/adjustxml/adjustxml.d
Linking...
dmd -oftest temp.o -g


実はここらへん、配布されてるパッケージの package.json眺めると簡単に分かる。


はてな記法全然分からないから凄く読みづらい…
取り敢えず自分用メモとして残しておく感じで。


これから DUBが D言語の標準 package managerになっていくという流れっぽいので、
今のうちから慣れておくと後々ラクできるかも?