はじめに
一年ほど前にGo言語を勉強しはじめて、そのシンプルさを追求する言語思想にすっかりハマってしまいました。
以来botだったり簡単なスクリプトだったりはGoで書くようになったのですが、その際に便利だなーと感じだdepについて紹介させていただきます。
depとは?
depはGoのパッケージ管理ツールです。JavaでいうMavenと考えていただければわかりやすいと思います。
これが登場する以前からGoには"Glide"というツールがあったそうなのですが、このdepはGoの公式で開発されているとのことで、現在ではこちらが主流となっているそうです。(私は最近Goに触り始めたのでGlideを使ったことはなく、depとの比較などはできません・・・)
使ってみる
例えばGoには標準でcron実行をさせるようなものがないので、そういった処理をさせたい場合には外部パッケージを使う必要があります。そこで今回は、一定間隔で適当な処理をさせるプログラムを、外部パッケージを使って作ってみたいと思います。
depのインストール
depのインストールはこちらに記載されている通りgo get
コマンドか、Macの場合はHomebrewでも入れられます。
$ brew install dep
インストールできたかどうかの確認ついでにhelpをみてみます。
$ dep
dep is a tool for managing dependencies for Go projects
Usage: dep <command>
Commands:
init Initialize a new project with manifest and lock files
status Report the status of the project's dependencies
ensure Ensure a dependency is safely vendored in the project
prune Prune the vendor tree of unused packages
version Show the dep version information
Examples:
dep init set up a new project
dep ensure install the project's dependencies
dep ensure -update update the locked versions of all dependencies
dep ensure -add github.com/pkg/errors add a dependency to the project
Use "dep help [command]" for more information about a command.
無事にインストールできました。
プロジェクトの作成
プロジェクトを作成し、dep initコマンドを実行してください。
$ mkdir $GOPATH/src/dep-sample
$ cd $GOPATH/src/dep-sample
$ dep init
すると、以下の通り二つのファイルとvendorというディレクトリができたと思います。パッケージはこのディレクトリの中にインストールされます。
$ ls -R
Gopkg.lock Gopkg.toml vendor
./vendor:
次にコードを書いてしまいます。(5秒ごとに標準出力させるという単純なコードです。)このディレクトリに配置してください。
package main
import (
"fmt"
"github.com/carlescere/scheduler"
"runtime"
)
func main() {
scheduler.Every(5).Seconds().Run(sayHello)
runtime.Goexit()
}
func sayHello() {
fmt.Println("Hello!")
}
コードの中で利用した外部パッケージはgo-schedulerです。とても使いやすいのでおすすめです。
importしていますが、このままでは利用できないため、depを利用して下記コマンドでインストールします。
$ dep ensure
すると、さきほどまで空だった vendor ディレクトリに今回利用するパッケージがインストールされたことを確認いただけると思います。(なんて簡単!)
$ ls -R vendor/
github.com
vendor//github.com:
carlescere
vendor//github.com/carlescere:
scheduler
vendor//github.com/carlescere/scheduler:
LICENSE README.md scheduler.go scheduler_test.go
また、アプリケーションのリストが記載される Gopkg.lock ファイルにもパッケージ情報が追記されました。
$ cat Gopkg.lock
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
[[projects]]
name = "github.com/carlescere/scheduler"
packages = ["."]
revision = "ddcf6a6be3e8bd4b480f96031d9e1f3abecf2767"
version = "0.1"
...
試しに実行してみてください。外部パッケージを利用して、5秒ごとに標準出力させることができると思います。
$ go run main.go
Hello!
Hello!
Hello!
...
さいごに
このように利用したいパッケージを使ったコードを書いてコマンドを実行するだけでいい感じに諸々やってくれるので、とっても楽です。ぜひ使ってみてください。
ちなみにですが、私がGo言語を勉強した本は「スターティングGo言語」です。JavaやCと比較してこうだよ、みたいな記載も多いので、私にはとても理解しやすかったです。