はじめに
現在、受講中のITスクールで実施されているハッカソン形式のチーム開発において、バックエンドをGo言語で開発することになりました。
チームメンバーの方と環境構築を進める中で、PythonとGo言語に少し似ている部分があると感じたため、調べてみることにしました。
本記事は、その内容を自分用の備忘録としてまとめたものです。走り書き程度のメモとなりますが、何卒ご容赦ください。
書こうと思ったきっかけ
私自身、今回のGo言語については十分な知識がないまま、同じチームの方々と開発環境を進めることになりました。
その中で、Go言語にはrequirements.txt
に相当する依存管理システムとしてGo Modulesが存在することを知り、これを深掘りしてみようと思いました。
Pythonにはある程度馴染みがあるため、Pythonとの関連性も踏まえながら、この記事にまとめてみることにしました。
Pythonのrequirements.txt
とは
requirements.txt
は、Pythonプロジェクトで必要な外部ライブラリやパッケージを記録したファイルです。
このファイルを使用することで、プロジェクトの依存関係を明確にし、再現性の高い環境構築が可能になります。
特徴
パッケージのリスト化:
- 必要なパッケージとそのバージョンをリスト形式で記載します。
- 例:
Flask==2.0.1
requests>=2.25.1
numpy
環境の再現性:
pip install -r requirements.txt
コマンドを使うことで、他の開発者が同じ環境を簡単に再現できます。
管理の容易さ:
プロジェクトの依存関係を一元管理でき、複数の開発者が参加する際やデプロイ時に便利です。
Go言語の依存管理(Go Modules)
Go言語では、requirements.txt
に相当する依存管理システムとしてGo Modules
が使われます。
Go Modulesの特徴
go.mod
ファイル:
- プロジェクトの依存関係を管理するファイルで、Go Modulesの中心です。
- 例:
module myproject
go 1.19
require (
github.com/gin-gonic/gin v1.8.1
golang.org/x/crypto v0.10.0
)
go.sum
ファイル:
依存関係のチェックサムを記録するファイルで、セキュリティや整合性を保つ役割があります。
Go Modulesのコマンドとメリット
Go Modulesを使用すると、簡単に依存関係を管理し、プロジェクトの再現性を高めることができます。
ここまでの簡単な整理
ここまでの知識を自分なりに整理し、一度まとめてみます。
-
Python:
-
requirements.txt
を使って手動でパッケージとバージョンを記録・管理。 - コマンド例:
pip install -r requirements.txt
- シンプルな構成で依存関係を明示的に管理。
-
-
Go:
-
go.mod
とgo.sum
を使って、依存関係を自動的かつセキュアに管理。 - 主なコマンド例:
go mod init go get go mod tidy
- 自動的な依存管理とGOPATH不要の柔軟性が特徴。
-
Pythonのrequirements.txt
とGo Modulesの比較
ここまでの内容を簡単に表形式で整理しました。参考になれば幸いです。
項目 | Python (requirements.txt) | Go (go.mod) |
---|---|---|
目的 | 外部ライブラリや依存関係の管理 | 依存関係とバージョンの管理 |
記載方法 | テキスト形式で手動記述 | コマンドで自動生成される |
依存関係の詳細管理 | 手動で記載する場合が多い |
go.sum でチェックサムを管理 |
環境再現性 |
pip install -r で再現可能 |
go mod tidy で再現可能 |
管理の仕組み | 仮想環境(venv , virtualenv )推奨 |
Go ModulesによりGOPATH非依存で管理 |
共通点
-
目的:
- 両言語ともプロジェクトの依存関係を管理し、再現性の高い環境構築を支援。
-
重要性:
- 複数人での開発やCI/CD環境での活用において、再現性と一貫性を保つために欠かせないツール。
どちらの方法も適切に活用することで、開発効率を向上させることができます。
まとめ
最後まで読んでいただき、ありがとうございました。今回の記事では、自分の中でも曖昧だった知識を改めて整理し、言語化する形でまとめてみました。
本記事の内容はインターネット上の文献などを参考に作成していますが、あくまで個人の備忘録としての位置づけです。その点をご了承ください。
これからも分からないことに積極的に向き合い、アウトプットを通じて理解を深めていきたいと思います。