はじめに
dub v1.23.0が9月にリリースされました。
その中に、 Support dependencies as git url with exact commit
とあったので実際に試してみました。
使い方
使い方はリリースノートに書いてある通りですが、実例をdmanbotから抜粋します。
{
"dependencies": {
"twitter4d": {
"path": "./twitter4d"
}
}
}
{
"dependencies": {
"twitter4d": {
"repository": "git+https://github.com/simdnyan/twitter4d.git",
"version": "72142f69173fb1914263eaff3f830b786a6cd6e0"
}
}
}
dmanbotではtwitter4dでdlang-requestsを使うためにforkしたリポジトリをgit submoduleで参照して使っていましたが、v1.23.0以降からはdubで直接リポジトリを指定しています。なんだかんだgitの操作は煩わしいので、パッケージマネージャが隠蔽してくれるのは非常にありがたいです。
ここで参照しているtwitter4dは~/.dub/packages/twitter4d-72142f69173fb1914263eaff3f830b786a6cd6e0/
に保存されていました。
Single-file packages
もちろん、Single-file packagesでも有効です。
以前の記事の例は以下のように書き換えることができます。
#!/usr/bin/env dub
/+ dub.sdl:
name "dlang_requests"
dependency "requests" repository="git+https://github.com/ikod/dlang-requests.git" version="bcbf3505a442770279c598023386c0bde70e8266”
+/
import std.stdio,
std.getopt,
requests;
string url = "http://example.com/";
void main(string[] args)
{
getopt(args, "url", &url);
auto rs = Request().get(url);
writeln(rs.responseBody);
}
実行方法は変わらず、dub run --single dlang_requests.d -- --url=http://qiita.com
もしくは./dlang_requests.d --url=http://qiita.com
でパラメータを与えて実行できます。
余談
dubのバージョンがv1.23.0以前だとInvalid SemVer format
と怒られます。まずはバージョンを確認しましょう。
$ dmd --version
DMD64 D Compiler v2.094.0
Copyright (C) 1999-2020 by The D Language Foundation, All Rights Reserved written by Walter Bright
$ dub --version
DUB version 1.23.0, built on Sep 22 2020
最後に
いかがでしたか?
使い方で挙げた実例以外では、プライベートライブラリ等、dubにアップできないケースで有用かと思います。是非活用してみて下さい。