2023年6月21日·1分で読めます

囲碁モジュールと依存関係の管理

Go モジュールを深く掘り下げることで、Golang の依存関係管理システムの可能性を最大限に引き出します。プロジェクトの保守性を向上させ、業界のベストプラクティスを取り入れましょう。

囲碁モジュールと依存関係の管理

Goの依存関係管理入門

依存関係管理は、プロジェクトが依存するライブラリやパッケージのバージョンを管理するのに役立つので、どんなソフトウェアプロジェクトでも重要な側面です。 Go (Golang) では、依存関係管理によってバージョン管理の問題を解決しやすくし、他のパッケージとの互換性を維持し、 開発プロセス 全体を効率化することで、Go プロジェクトの再現性と保守性を確保します。

Go モジュール以前は、Go の依存関係管理はあまり合理化されていませんでした。開発者は依存関係を管理するために depglidegovendorの ようなツールに頼ることがよくありました。これらのツールは便利でしたが、公式 Go プロジェクトの一部ではなかったため、開発者によっては Go を言語として採用する際に摩擦が生じました。

Goモジュールの時代

2018年、GoチームはGoプロジェクトにおける依存関係管理の新しい標準である「モジュール」の概念を導入しました。モジュールとは、バージョン管理された関連パッケージの集合体であり、コードベースに必要なすべての依存関係を提供します。Go 1.11 で Go モジュールが導入されたことで、依存関係管理はよりシンプルに、より汎用的になり、Go プロジェクトによって公式にサポートされるようになりました。Go モジュールは次のような機能を導入しました:

  • セマンティック バージョン管理 (SemVer) を使用した依存関係のバージョン管理
  • 簡素化された依存関係管理コマンド (例: go getgo mod tidy)
  • 詳細な依存性情報を含むマニフェストファイル (go.mod)の自動生成
  • 必要な依存関係の自動ダウンロードとキャッシュ

Go モジュールを使用すると、これまで Go 開発の制約となっていた $GOPATH ディレクトリ内にコードを配置する必要がなくなります。この新しいシステムにより、より柔軟なプロジェクト構造が可能になり、異なるリポジトリを切り替えても Go プロジェクトを簡単に作業できるようになりました。

Go モジュール・プロジェクトのセットアップ

Go モジュールを始めるのは簡単です。以下の手順に従って、新しい Go モジュールプロジェクトをセットアップしてください。

  1. まず、お使いのシステムに Go バージョン 1.11 以降がインストールされていることを確認してください。Go のバージョンはターミナルで go version を実行することで確認できます。
  2. お好きな場所に移動し、 my-go-projectなどの わかりやすい名前で新しいプロジェクトフォルダを作成します。
  3. コマンドラインで新しく作成したフォルダに移動します。
  4. 新しいGoモジュールを初期化するには、 go mod init コマンドを実行し、その後にモジュールのパスを続けます。例えば、プロジェクトをGitHubでホストするつもりなら、 go mod init github.com/your-username/my-go-projectを 実行できます。このコマンドは、プロジェクトフォルダー内に go.modという 名前の新しいファイルを生成します。

go.mod ファイルはGoモジュールプロジェクトの中心です。このファイルには、モジュールの名前などのメタデータと、モジュールが必要とするすべての依存関係が含まれています。依存関係を管理するために、Goプロジェクトのライフサイクルを通して go.mod ファイルとやり取りすることになります。これで Go モジュールプロジェクトがセットアップされ、Go モジュールシステムを使って依存関係の追加と管理を始める準備ができました。

Go モジュール内での依存関係の管理

Go モジュールは、プロジェクトの依存関係を管理するためのわかりやすく効果的なアプローチを提供します。特定のバージョンの依存関係を追加、更新、削除することができ、プロジェクトと他のパッケージとの相互作用を管理するのに役立ちます。このセクションでは、Go モジュールプロジェクト内の依存関係を管理する手順を説明します。

依存関係の追加

新しい依存関係を追加するには、Go コードで必要なパッケージをインポートするだけです。たとえば、 github.com/gorilla/muxを プロジェクトに追加したい場合は、次のようにインポートします:

インポート ( "github.com/gorilla/mux" )

次に go build または go testを 実行すると、Goは自動的に必要なパッケージをダウンロードし、 go.modと go.sum ファイルを更新し、指定されたパッケージを使用するようにプロジェクトを設定します。あるいは、 go get コマンドを使って、新しい依存関係を明示的に追加することもできます:

go get github.com/gorilla/mux

これはパッケージを取得するだけでなく、プロジェクトの go.mod ファイルと go.sum ファイルを更新します。

依存関係の更新

特定の依存関係を新しいバージョンに更新するには、 go get コマンドの後にパッケージのインポートパスと希望のバージョン番号を続けます:

go get github.com/gorilla/[email protected]

このコマンドは go.mod ファイルを新しいバージョンのパッケージで更新し、そのソースコードをダウンロードします。更新されたパッケージが破壊的な変更を含んでいる場合、それに応じてコードを調整する必要があるかもしれないことに注意してください。

依存関係の削除

プロジェクトから依存関係を削除するには、まず、対応する import 文をソースコードから削除します。その後、 go mod tidy コマンドを実行して go.mod ファイルをクリーンアップします:

go mod tidy

このコマンドは、 go.mod ファイルから未使用の依存関係を削除し、プロジェクトがクリーンで整理された状態に保たれるようにします。

セマンティック・バージョニングとGoモジュール

Goでバックエンドを速く構築
モジュールを手作業でつなぐことなく、バージョン管理されたAPIとクリーンなリリースを備えたGoバックエンドを構築します。
AppMasterを試す

セマンティック・バージョニング(SemVer)は、ソフトウェアのリリースに一意のバージョン番号を割り当てる、広く採用されているバージョニング・システムです。3つのパートからなる番号付けフォーマットを使用します:Major.Minor.Patch(例: 1.2.3)。SemVer:

  • メジャーバージョンの変更は、破壊的な変更を示し、手動によるコード調整が必要です。
  • マイナーバージョンの変更は、後方互換性を維持しながら新機能を導入します。
  • パッチバージョンの変更には、後方互換性を維持しながら、バグ修正やマイナーなパフォーマンスの向上が含まれます。

Go Modules は依存関係のバージョン管理を扱うためにセマンティックバージョン管理を組み込んでおり、開発者は更新、後方互換性、および破壊的な変更をより簡単に管理できます。Go モジュールで依存関係のバージョンを指定する場合、バージョン範囲または特定のバージョン番号を使用できます。たとえば、 - パッケージの最新の安定版を取得するには、バージョン番号を指定せずにパッケージのインポートパスを使用します: go get github.com/gorilla/mux.- 特定のバージョンを取得するには、 @ 記号の後にバージョン番号を追加します: go get github.com/gorilla/[email protected].- 特定のメジャーバージョン内の最新のマイナーまたはパッチアップデートを取得するには、 ^(キャレット) シンボルを使用します: go get github.com/gorilla/mux@^v1.0.0.

一般的なGoモジュールコマンドとその使い方

一つのスタックで依存を削減
バックエンド、Web UI、モバイルクライアントを単一プラットフォームでまとめ、グルーコードを置き換えます。
プラットフォームを確認

よく使われるGoモジュールコマンドとその使用例を紹介します:

go mod init

go mod init はカレントディレクトリに新しいGoモジュールプロジェクトを初期化します。モジュール、依存関係、バージョン制約に関する情報を含む go.mod ファイルを生成します。

go mod init example.com/myproject

example.com/myprojectを モジュールのパスに置き換えてください。

go get

go get は、依存関係の追加、更新、削除に使われる多用途なコマンドです。パッケージのインポートパスを指定し、オプションでその後にバージョン番号または範囲を指定します。

go get github.com/gorilla/[email protected]

このコマンドは、 github.com/gorilla/mux パッケージをバージョンv1.8.0に追加または更新します。

go mod tidy

go mod tidyは go.mod ファイルから未使用の依存関係を削除し、プロジェクトのソースコードのimport文を反映するように更新します。

go mod tidy

不要な依存関係のimport文を削除した後にこのコマンドを実行します。

go modグラフ

go mod graphはプロジェクトの依存関係ツリーを表示し、直接依存と間接依存の両方を読みやすい形式で表示します。このコマンドは、複雑な依存関係の問題をデバッグするときに役立ちます。

go mod グラフ

go mod verify

go mod verify は、 go.sum ファイルにリストされている依存関係の整合性をチェックします。依存関係のチェックサムが記録された値と一致しない場合、コマンドはエラーを報告します。

go mod verify

依存関係の衝突の解決

プロジェクトが複数のパッケージに依存している場合、依存関係の競合が発生することがあります。Go モジュールは、 go.mod ファイルの replace ディレクティブと exclude ディレクティブを使用して、このような競合を処理する組み込みのメカニズムを提供します。

replace ディレクティブ

replace ディレクティブを使うと、モジュールのバージョンを別のものに変更したり、 ローカルパスにマップしたりすることができます。これは、リモートリポジトリにコミットする前に、 特定のバージョンやフォークされたプロジェクト、ローカルの変更を テストする必要がある場合に便利です。replace ディレクティブを使うには、 go.mod ファイルに以下の行を追加します:

replace example.com/original/module v1.2.3 => example.com/new/module v1.4.0

これは、 example.com/original/moduleの バージョン v1.2. 3を example.com/new/moduleの バージョン v1.4.0 に置き換えます。モジュールをローカルパスで置き換えることもできます:

replace example.com/original/module v1.2.3 => ../local/path/to/new/module

Exclude ディレクティブ

exclude ディレクティブを使うと、特定のバージョンのモジュールが プロジェクトで使われないようにすることができます。これは、特定のバージョンに互換性の問題やセキュリティの 脆弱性があることを知っているときに便利です。モジュールのバージョンを除外するには、 go.mod ファイルに以下の行を追加します:

exclude example.com/target/module v1.2.3

go .sum ファイルを更新し、依存関係ツリーを再計算するために、これらの変更を適用した後に go mod tidyを 実行することを忘れないでください。

プライベート Go モジュールとリポジトリ管理

ボイラープレートなしでAPIを作成
ルーティングライブラリや冗長な定型コードを気にせず、REST APIやWebSocketエンドポイントを作成できます。
バックエンドを構築

プライベートのGoモジュールとリポジトリで作業する方法は、パブリックのGoモジュールで作業する方法と似ていますが、適切な認証とプライバシーを確保するための追加の手順がいくつかあります。

GOPRIVATE の設定

インポートパスが公開サーバーに漏れるのを防ぐには、 GOPRIVATE 環境変数を設定します。この変数はプライベートリポジトリのインポートパスのパターンをカンマ区切りで指定します。

go env -w GOPRIVATE=example.com/private/path/* とします。

アクセストークンの使用

プライベートリポジトリを使うには、GitHub や GitLab などのソースコードホスティングサービスで認証する必要があります。適切な権限(GitHub の場合は リポジトリスコープなど)を持つ個人用のアクセストークンを作成します。アクセストークンを作成する具体的な手順については、ホスティングサービスのドキュメントを参照してください。アクセストークンを取得したら、認証用の環境変数を設定します。VCSサービスに応じて適切な環境変数を使いましょう。

export GIT_TERMINAL_PROMPT=0 export GITHUB_TOKEN=YOUR_ACCESS_TOKEN

これにより、 go コマンドがプライベート・リポジトリーをGoモジュールとしてダウンロードし、認証できるようになります。複数の VCS サービスで作業する場合は、必要に応じて個別の環境変数を定義することで、それぞれのアクセストークンを設定できます。

以前の依存関係管理システムからの移行

生成されたソースを所有する
1つの設計図からGo、Vue3、ネイティブモバイルの実ソースコードを取得できます。
コードを生成

Go モジュールの前には、Dep、glide、カスタムベンダーディレクトリソリューションなど、さまざまな依存関係管理システムがありました。これらのシステムをまだ使っているのであれば、Goモジュールに移行して最新のGolang依存性管理の利点を享受しましょう。以前の依存関係管理システムから Go モジュールに移行するには、以下の手順に従ってください:

  1. 元のプロジェクトのバックアップを作成し、必要に応じて以前の状態に戻せるようにします。
  2. 既存の依存関係管理ファイル ( Gopkg.tomlGopkg.lock など) をすべて削除します。
  3. ターミナルでプロジェクトのルートに移動し、 go mod init を実行して新しい go.mod ファイルを作成します。これは、以前の依存ファイルがあれば、それを Go モジュールのエントリに変換しようとします。
  4. go mod tidy を実行して、 go.mod ファイルに以前のシステムからの依存関係を入力します。このコマンドは、必要なパッケージだけが依存関係ツリーに含まれるようにします。
  5. この時点で、依存関係の衝突を解決したり、特定のバージョンを強制するために、 go.mod ファイルを調整する必要があるかもしれません。これらの問題を処理するために、 replace ディレクティブや exclude ディレクティブを必要に応じて使用してください。
  6. プロジェクトが期待通りにビルドされ、テストに合格することを確認してください。

これらのステップに従うことで、プロジェクトは Go モジュールで動作するようになり、依存関係の管理が効率化され、長期的に保守しやすくなります。問題が残っている場合は、 go.mod ファイルを調整したり、インポート・パスが正しいフォーマットに従っているかチェックしたりして解決してください。

AppMaster:Golangベースのアプリケーション開発の高速化

Goモジュールと依存関係管理のベストプラクティスを日々のワークフローに組み込むことは、保守可能でスケーラブルなGolangベースのソフトウェアプロジェクトを保証するために不可欠です。しかし、Golangのパワーを活用しながら、アプリケーション開発プロセス全体を加速できるとしたらどうでしょうか?

AppMaster.ioは、ビジュアル開発環境を使用してGolangベースのバックエンドアプリケーションを生成することに重点を置いた、包括的な ノーコード・ プラットフォームです。バックエンドアプリケーション以外にも、AppMaster 、開発プロセスを合理化するために設計された統合的なアプローチを使って、ウェブアプリケーションやモバイルアプリケーションを作成することができます。

AppMaster を使えば、ユーザはビジュアルUIを通じて データモデル(データベーススキーマ)の作成、ビジネスプロセスの設計、 REST APIと WebSocket endpoints の定義を行うことができる。ウェブ・アプリケーションは、ウェブ・ビジネス・プロセス・デザイナーとともに ドラッグ・アンド・ドロップ・インターフェースを使用して作成され、完全にインタラクティブなユーザー・エクスペリエンスを実現します。モバイル・アプリケーションも同様に、モバイル・ ビジネス・プロセス・デザイナーと UI設計機能を使って設計します。

AppMasterPublish'ボタンを押すと、プラットフォームがお客様の設計図を受け取り、アプリケーションのソースコードを生成します。アプリケーションをコンパイルし、テストを実行し、 Dockerコンテナ(バックエンドアプリケーション用)にパックし、すべてをクラウドにデプロイします。

バックエンドアプリケーションはGolang(Go)を使って生成され、Golangが提供するパフォーマンス、シンプルさ、保守性の恩恵を受けている。ウェブアプリケーションは Vue3 フレームワークと JavaScript/TypeScriptを 使用して生成され、モバイルアプリケーションはAppMaster サーバー駆動型フレームワーク、Android用の Kotlinと Jetpack Compose 、iOSアプリケーションにはSwiftUI 。

強力なAppMaster プラットフォームのおかげで、コーディング経験のない人でも、サーバーバックエンド、ウェブサイト、カスタマーポータル、ネイティブモバイルアプリケーションを網羅する、完全でスケーラブルなソフトウェアソリューションを作成することができます。AppMaster は、ソフトウェア開発プロセス全体をスピードアップするだけでなく、要件が変更されるたびにアプリケーションをゼロから生成することで、技術的負債を完全に排除します。

ソフトウェア開発のニーズにno-code 、特にGolangの利点を活用したプラットフォームの採用を検討しているなら、AppMaster 。 無料アカウントに サインアップして、10倍速く、3倍費用対効果の高いソリューションで、アプリケーション開発の未来を探ってください。

よくある質問

Goモジュールとは何ですか?

Go Modules は、Go (Golang) プロジェクトの公式依存関係管理システムです。これにより、プロジェクトの依存関係を簡単に管理できるようになり、Go プロジェクトの再現性と保守性が確保されます。依存関係の管理は、バージョン管理の問題を解決し、他のパッケージとの互換性を確保し、開発プロセスを合理化するために重要です。

新しい Go Module プロジェクトはどのようにセットアップするのですか?

新しいプロジェクト フォルダーを作成し、コマンド ラインでそのフォルダーに移動し、 go mod initコマンドに続いてモジュール パスを使用します。 go.modファイルが生成され、フォルダーが Go Modules プロジェクトであることが示されます。ファイルを編集して依存関係を管理します。

Go モジュールで依存関係を追加、更新、削除するにはどうすればよいですか?

依存関係を追加または更新するには、 go getコマンドの後にパッケージのインポート パスとバージョン番号を指定します。依存関係を削除するには、ソース コード内の対応する import ステートメントを削除し、 go mod tidyを実行して、未使用の依存関係をgo.modファイルからクリーンアップします。

セマンティック・バージョニングとGoモジュールにおけるその役割とは?

セマンティック バージョニング (SemVer) は、Major.Minor.Patch (例: 1.2.3) という 3 つの部分からなる番号付け形式を使用するバージョン管理システムです。これは、開発者がソフトウェアの変更を伝達するのに役立ちます。 Go Modules には、依存関係のバージョン管理用に SemVer が組み込まれており、更新、下位互換性、および重大な変更の処理が容易になります。

一般的なGoモジュールのコマンドとその用途は?

一般的な Go モジュールのコマンドは次のとおりです。 go mod init - 新しい Go モジュール プロジェクトを初期化します go get - 依存関係を追加、更新、または削除します。 go mod tidy - 未使用の依存関係を削除します go mod graph - 依存関係ツリーを表示します。 go mod verify - 依存関係ツリーに問題があるかどうかを確認します。

Go モジュールで依存関係の競合を解決するにはどうすればよいですか?

依存関係の競合は、 go.modファイル内のreplaceまたはexcludeディレクティブを使用して解決できます。 replaceディレクティブを使用すると、依存関係を別のバージョンまたはローカル パスに置き換えることができます。一方、 excludeディレクティブを使用すると、プロジェクトで特定のバージョンが使用されなくなります。

プライベート Go モジュールを使用し、リポジトリを管理するにはどうすればよいですか?

プライベート Go モジュールを使用するには、 go env -w GOPRIVATEを使用して環境を設定し、その後にプライベート モジュールのパススペック パターンのカンマ区切りリストを指定します。プライベート リポジトリに対する認証に Git 構成またはアクセス トークンを使用し、他の Go モジュール プロジェクトと同様に依存関係を管理します。

以前の依存関係管理システムから Go Modules に移行するにはどうすればよいですか?

Dep、glide、または別の依存関係管理システムから移行するには、まず元のプロジェクトをバックアップします。次に、 go mod initを実行して新しいgo.modファイルを作成します。次に、 go mod tidyを使用して、以前のシステムからの依存関係をgo.modファイルに追加し、必要な調整を行います。

AppMaster.ioはどのようにしてGolangベースのアプリケーション開発を加速できるのでしょうか?

AppMaster.io は、Golang ベースのバックエンド アプリケーションを生成するno-codeプラットフォームです。 AppMasterを利用すると、ユーザーがデータ モデル、ビジネス プロセス、API endpointsを視覚的に設計し、アプリケーションのソース コードを生成し、スケーラビリティと保守性の完全な利点を提供できるため、アプリケーション開発を大幅にスピードアップできます。

始めやすい
何かを作成する 素晴らしい

無料プランで AppMaster を試してみてください。
準備が整ったら、適切なサブスクリプションを選択できます。

始める