前回の記事では、どちらかというとビルドツールとしてのdubの紹介になりました。今回は、パッケージマネージャとしてのdubを見てみます。
code.dlang.orgに、dubで使用出来るパッケージの一覧があります。vibe.dや、derelictなどの名前が見られます。
前回の記事に出てきたpackage.jsonの中に、dependenciesという項目がありました。ここに、パッケージ名とバージョンを追加することによって、そのパッケージを使用出来るようになります。
例として、ctpgパッケージを使ってみましょう。ctpgは、コンパイル時のパーサジェネレータです。
$ cd
$ dub init ctpg_test
Successfully created an empty project in '/home/〜〜〜/ctpg_test'.
$ cd ctpg_test
package.jsonを以下のように書きます。
{
"name": "ctpg_test",
"description": "An example project skeleton",
"homepage": "http://example.org",
"copyright": "Copyright © 2000, Your Name",
"authors": [
"Your Name"
],
"dependencies": {
"ctpg": "~master"
}
}
バージョンの部分に書かれている~masterは、githubでのmasterブランチをバージョンとして使用するという意味です。そして、source/app.dで実際にctpgを使ってみます。
import std.stdio : writeln;
import std.conv : to;
import ctpg;
// 四則演算式を計算するパーサを生成する
mixin(genParsers(
q{
@_setSkip(skip)
// rootのパーサ
int root = addExp $;
// 加算と減算
int addExp =
mulExp !"+" addExp >> (lhs, rhs){ return lhs + rhs; }
/ mulExp !"-" addExp >> (lhs, rhs){ return lhs - rhs; }
/ mulExp;
// 乗算と除算
int mulExp =
primary !"*" mulExp >> (lhs, rhs){ return lhs * rhs; }
/ primary !"/" mulExp >> (lhs, rhs){ return lhs / rhs; }
/ primary;
// 数字と括弧でくくられた式
int primary = !"(" addExp !")" / [0-9]+ >> to!int;
}));
void main()
{
parse!root("4 * 5 + 2 * 11").value.writeln();
parse!root("4 * ( 5 + 2 ) * 11").value.writeln();
}
実行すると、
$ dub
Checking dependencies in '/home/〜〜〜/ctpg_test'
The following changes will be performed:
Install ctpg ~master, userWide
Downloading ctpg ~master...
Installing ctpg ~master to /home/〜〜〜/.dub/packages/...
ctpg has been installed with version ~master
Building configuration "application", build type debug
Running dmd (compile)...
Linking...
Running /tmp/dub/1480571894/ctpg_test...
42
308
ちゃんとctpgが使えました!
同じようにして、vibe.dやderelictを使うこともできます。便利ですね。
担当:美馬(とても便利でよい)