【Golang】プロジェクトテンプレート生成ツール(ubume)を試作【改善案を募集】
前書き:プロジェクトを新規で作るのはダルい
Golangの勉強中に、「サンプルコードを試すためのプロジェクト」や「検証用プロジェクト」を手動で作るのは、面倒だなと感じてきました。また、どこかのプロジェクトをコピーして流用すると、名称の変更忘れ(誤記、typo)が発生しがちです。
Javaのgradleのような「Golangプロジェクトテンプレートのジェネレータ」を探しましたが、パッと見つかりませんでした。そこで、Golangプロジェクトテンプレートを生成するubumeコマンドを作ってみました。
機能が少ないので、改善案があればIssue(日本語もOK)や問い合わせフォームからご連絡いただけると嬉しいです。
2022年4月19日追記:ubumeからmkgoprjにリネームしました。そして本記事に書かれている内容とは別仕様に変更(破壊的な変更)をしたので、日本語版READMEを参照してください。
インストール方法
go installでインストールしてください。
1 |
$ go install github.com/nao1215/mkgoprj/v2@latest |
Golang開発環境が未構築の場合は、ubumeコマンドのインストール前にGolang公式サイトを参考にしてGolang開発環境を構築してください。
使い方
前提ですが、Version 0.5.1の段階ではアプリケーションプロジェクトしか生成できません。ライブラリプロジェクトも対応する予定ですが、現在はプロジェクトレイアウトを検討中です。
ubumeコマンドは、”$ go mod init”と同様にインポートパスを引数として取ります。例えば、バージョン管理システム(VCS)にGitHubを使用し、ユーザー名がnao1215であり、新規作製プロジェクト名がsampleの場合は、以下のようにコマンドを実行します。
1 |
$ ubume github.com/nao1215/sample |
上記のコマンド実行後に生成されるsampleディレクトリ内は、以下のツリー構成となります。
1 2 3 4 5 6 7 8 9 |
$ tree sample/ sample/ ├── Changelog.md ├── Makefile ├── cmd │ └── sample │ ├── main.go │ └── main_test.go └── go.mod |
sample/cmd以下には、mainパッケージとそのテストファイルが格納されています。コードをビルド、テスト、フォーマットするためのMakefileも生成します。” $ go mod init github.com/nao1215/sample” も実行済みの状態です。
Makefileの仕様
Makefileは自己文書化されています。makeコマンドを引数なしで叩いた場合はビルドが始まらず、Makefileがどのようなターゲットを持ち、そのターゲットが何をするのかの説明文(helpメッセージ)が表示されます。
1 2 3 4 5 6 7 |
$ make build Build binary clean Clean project deps Dependency resolution for build fmt Format go source code test Start test vet Start go vet |
デフォルトで登録されているターゲットは、以下の処理を行います。
- make build:バイナリを生成する
- make clean:プロジェクト内の中間ファイルやゴミを削除する
- make deps:ビルド時に必要な外部ファイルを取得する
- make fmt:コードに対してフォーマッタを適用する
- make test:単体テストを実行し、カバレッジファイル(cover.html)を生成する
- make vet:静的解析を行う
新しいターゲットをMakefileに追加する場合、target:の横に##でコメントを追加してください。その##コメントが抽出されて、helpメッセージとして表示されます。以下、記載例(Makefileの抜粋)です。
1 2 3 4 5 |
build: deps ## Build binary env GO111MODULE=on GOOS=$(GOOS) $(GO_BUILD) $(GO_LDFLAGS) -o $(APP) cmd/sample/main.go clean: ## Clean project -rm -rf ./vendor $(APP) cover.out cover.html |
ビルド方法
“make build”でプロジェクトルートディレクトリに、バイナリが生成されます(今回はsampleバイナリが生成されます)。
1 2 3 4 5 6 7 8 9 |
$ ls Changelog.md Makefile cmd go.mod $ make build $ ls Changelog.md Makefile cmd go.mod sample $ ./sample Hello, World |
最後に(追記含む)
類似のプログラムは存在しそうですが、自分好みのプロジェクトがコマンド一発で作れるので、車輪の再発明(?)も悪くないかなと考えています。実装時間も数時間であり、そこまで労力かかっていません(あと、作った次の日に会社で使うタイミングがあった)
以下、追記
2022年2月現在は、オプションが増えて、作れるプロジェクト種類も増えました。本記事の内容も古くなってしまったので、興味がある方はGitHubを覗いてみてください。READMEにスクショ付きで説明を書いています。
おまけ:2022年に作成したGolang製コマンド一覧
【Golang】2022年に開発した自作CLIコマンド/ライブラリに対する所感と宣伝【OSS】
ロシア人と国際結婚した地方エンジニア。
小学〜大学院、就職の全てが新潟。
大学の専攻は福祉工学だったのに、エンジニアとして就職。新卒入社した会社ではOS開発や半導体露光装置ソフトを開発。現在はサーバーサイドエンジニアとして修行中。HR/HM(メタル)とロシア妻が好き。サイトに関するお問い合わせやTwitterフォローは、お気軽にどうぞ。
1件の返信
[…] […]