【Golang】プロジェクトテンプレート生成ツール(ubume)を試作【改善案を募集】

前書き:プロジェクトを新規で作るのはダルい

Golangの勉強中に、「サンプルコードを試すためのプロジェクト」や「検証用プロジェクト」を手動で作るのは、面倒だなと感じてきました。また、どこかのプロジェクトをコピーして流用すると、名称の変更忘れ(誤記、typo)が発生しがちです。

Javaのgradleのような「Golangプロジェクトテンプレートのジェネレータ」を探しましたが、パッと見つかりませんでした。そこで、Golangプロジェクトテンプレートを生成するubumeコマンドを作ってみました。

機能が少ないので、改善案があればIssue(日本語もOK)問い合わせフォームからご連絡いただけると嬉しいです。

 

2022年4月19日追記:ubumeからmkgoprjにリネームしました。そして本記事に書かれている内容とは別仕様に変更(破壊的な変更)をしたので、日本語版READMEを参照してください。

           

インストール方法

go installでインストールしてください。

Golang開発環境が未構築の場合は、ubumeコマンドのインストール前にGolang公式サイトを参考にしてGolang開発環境を構築してください。

      

使い方

前提ですが、Version 0.5.1の段階ではアプリケーションプロジェクトしか生成できません。ライブラリプロジェクトも対応する予定ですが、現在はプロジェクトレイアウトを検討中です。

ubumeコマンドは、”$ go mod init”と同様にインポートパスを引数として取ります。例えば、バージョン管理システム(VCS)にGitHubを使用し、ユーザー名がnao1215であり、新規作製プロジェクト名がsampleの場合は、以下のようにコマンドを実行します。

             

上記のコマンド実行後に生成されるsampleディレクトリ内は、以下のツリー構成となります。

sample/cmd以下には、mainパッケージとそのテストファイルが格納されています。コードをビルド、テスト、フォーマットするためのMakefileも生成します。” $ go mod init github.com/nao1215/sample” も実行済みの状態です。

             

Makefileの仕様

Makefileは自己文書化されています。makeコマンドを引数なしで叩いた場合はビルドが始まらず、Makefileがどのようなターゲットを持ち、そのターゲットが何をするのかの説明文(helpメッセージ)が表示されます。 

 

デフォルトで登録されているターゲットは、以下の処理を行います。

  • make build:バイナリを生成する
  • make clean:プロジェクト内の中間ファイルやゴミを削除する
  • make deps:ビルド時に必要な外部ファイルを取得する
  • make fmt:コードに対してフォーマッタを適用する
  • make test:単体テストを実行し、カバレッジファイル(cover.html)を生成する
  • make vet:静的解析を行う

    

新しいターゲットをMakefileに追加する場合、target:の横に##でコメントを追加してください。その##コメントが抽出されて、helpメッセージとして表示されます。以下、記載例(Makefileの抜粋)です。

            

ビルド方法

“make build”でプロジェクトルートディレクトリに、バイナリが生成されます(今回はsampleバイナリが生成されます)。

               

最後に(追記含む)

類似のプログラムは存在しそうですが、自分好みのプロジェクトがコマンド一発で作れるので、車輪の再発明(?)も悪くないかなと考えています。実装時間も数時間であり、そこまで労力かかっていません(あと、作った次の日に会社で使うタイミングがあった)

 

以下、追記

2022年2月現在は、オプションが増えて、作れるプロジェクト種類も増えました。本記事の内容も古くなってしまったので、興味がある方はGitHubを覗いてみてください。READMEにスクショ付きで説明を書いています。

            

おまけ:2022年に作成したGolang製コマンド一覧

【Golang】2022年に開発した自作CLIコマンド/ライブラリに対する所感と宣伝【OSS】

おすすめ

1件の返信