> Source: https://www.ymotongpoo.com/works/goblog-ja/gonew/


# プロジェクトテンプレートを試す

[Experimenting with project templates](https://go.dev/blog/gonew) by Cameron Balahan

Goで新しいプロジェクトを始めるとき、既存のプロジェクトをクローンするところから始めることもあるでしょう。
そうすることで、すでに動作するものを土台にして、ゼロから始めるのではなく段階的に変更を加えていけます。

長年にわたり、Goの開発者から「始めることこそが一番難しい部分だ」という声を聞いてきました。
他の言語から来た新しい開発者は、デフォルトのプロジェクトレイアウトについての指針を期待しますし、
チームで働く経験豊富な開発者はプロジェクトの依存関係の一貫性を期待します。
そしてあらゆる種類の開発者が、ウェブ上のサンプルからコピー&ペーストすることなく、
新しいプロダクトやサービスを簡単に試せる方法を望んでいます。

そこで本日、あらかじめ定義されたテンプレートからGoの新しいプロジェクトを生成する実験的なツール
`gonew` を公開しました。テンプレートは誰でも書けます。テンプレートはモジュールとして
パッケージ化され配布されるため、Goモジュールプロキシとチェックサムデータベースを活用して
セキュリティと可用性を高められます。

プロトタイプである `gonew` は意図的に最小限の機能に留めています。本日リリースしたのは、
フィードバックとコミュニティの方向性を集めるための土台となることを目的とした、
非常に限定的なプロトタイプです。ぜひ試してみて、
[感想を聞かせてください](https://go.dev/s/gonew-feedback)。
みなさんにとってより役立つツールを一緒に作り上げていきましょう。

## 使ってみる

まずは [`go install`](https://pkg.go.dev/cmd/go#hdr-Compile_and_install_packages_and_dependencies)
を使って `gonew` をインストールしましょう。

```shell-session
$ go install golang.org/x/tools/cmd/gonew@latest
```

既存のテンプレートをコピーするには、新しいプロジェクトの親ディレクトリで `gonew` を
2つの引数とともに実行します。1つ目はコピーしたいテンプレートのパス、2つ目は作成する
プロジェクトのモジュール名です。例えば次のようになります。

```shell-session
$ gonew golang.org/x/example/helloserver example.com/myserver
$ cd ./myserver
```

その後は `./myserver` 内のファイルを読んだり編集したりしてカスタマイズできます。

始めるにあたって、2つのテンプレートを用意しました。

* [hello](https://pkg.go.dev/golang.org/x/example/hello):
  カスタマイズ用のフラグを備えた、挨拶を表示するコマンドラインツール。
* [helloserver](https://pkg.go.dev/golang.org/x/example/helloserver): 挨拶を返すHTTPサーバー。

## 自分でテンプレートを書く

自分のテンプレートを書くのは、Goの他のモジュールを[作成する](https://go.dev/doc/tutorial/create-module)
のと同じくらい簡単です。上記でリンクした例を参考にして始めてみてください。

また、[Google Cloud](https://github.com/GoogleCloudPlatform/go-templates) チームや
[Service Weaver](https://github.com/ServiceWeaver/template) チームが提供している例もあります。

## 次のステップ

ぜひ `gonew` を試してみて、どうすればもっと良く、もっと役立つものにできるか教えてください。
`gonew` は今のところあくまで実験的な段階にあることを忘れないでください。
正しい方向に進めるためにみなさんの[フィードバック](https://go.dev/s/gonew-feedback)が必要です。

By Cameron Balahan

