1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

dub v1.23.0/Support dependencies as git url with exact commit

はじめに

dub v1.23.0が9月にリリースされました。
その中に、 Support dependencies as git url with exact commit とあったので実際に試してみました。

使い方

使い方はリリースノートに書いてある通りですが、実例をdmanbotから抜粋します。

before:

dub.json
{
    "dependencies": {
        "twitter4d": {
            "path": "./twitter4d"
        }
    }
}

after v1.23.0:

dub.json
{
    "dependencies": {
        "twitter4d": {
            "repository": "git+https://github.com/simdnyan/twitter4d.git",
            "version": "72142f69173fb1914263eaff3f830b786a6cd6e0"
        }
    }
}

dmanbotではtwitter4ddlang-requestsを使うためにforkしたリポジトリをgit submoduleで参照して使っていましたが、v1.23.0以降からはdubで直接リポジトリを指定しています。なんだかんだgitの操作は煩わしいので、パッケージマネージャが隠蔽してくれるのは非常にありがたいです。

ここで参照しているtwitter4dは~/.dub/packages/twitter4d-72142f69173fb1914263eaff3f830b786a6cd6e0/に保存されていました。

Single-file packages

もちろん、Single-file packagesでも有効です。
以前の記事の例は以下のように書き換えることができます。

dlang_requests.d
#!/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にアップできないケースで有用かと思います。是非活用してみて下さい。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?