awesome-go の紹介

この記事は [フラー株式会社 Advent Calendar 2024](https://qiita.com/advent-calendar/2024/fuller-inc) の17日目の記事です。

# [awesome-go](https://github.com/avelino/awesome-go) とは

> A curated list of awesome Go frameworks, libraries, and software. Inspired by awesome-python.

[awesome-python](https://github.com/vinta/awesome-python) にインスパイアされた、Goのフレームワーク、ライブラリ、ソフトウェアの 厳選されたリストです。（引用のただの直訳）

curate はキュレーションという言葉でどこかで聞いたことがあると思います。
[情報を選択し、整理し、特定の目的や視点に基づいて再構成する行為を指す](https://www.weblio.jp/content/%E3%82%AD%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3)そうです。このような curated list はGoだけはなく、[様々な言語、フレームワークであります](https://github.com/search?q=awesome-&type=repositories)。

何かの要件を満たすライブラリを探す時、Google検索やGithubのレポジトリで全文検索するのもいいですが、分野別のディレクトリ型検索をしたい時に使えると思います。また、一目通しておくことで、問題解決のきっかけになると思います。

# 選定基準

宣伝目的であったり、いわゆる荒らし行為であったりと自由にプロジェクトが追加される懸念を感じたため、curated list にどういうプロジェクトが追加されるのか調べました。
[CONTRIBUTING.md](https://github.com/avelino/awesome-go/blob/main/CONTRIBUTING.md)によるとPRで誰でもリストの追加、削除、変更ができるようです。ただし、以下の品質基準があり、また、一度リストにされたプロジェクトであっても一定のメンテナンスを要求するようです。メンテナンスが一定の基準を満たしていないため、PRでリストから削除されることもあるようです。

[以下、品質基準より引用](https://github.com/avelino/awesome-go/blob/main/CONTRIBUTING.md#quality-standards)

リストに掲載されるためには、プロジェクトのリポジトリは以下の品質基準を満たしている必要があります。

- 最初のコミットから少なくとも5ヶ月の履歴があること
- オープンソースライセンスであること
- ドキュメント通り、期待通りに機能すること
- Go プログラマのコミュニティにとって一般的に有用であること
- 積極的にメンテナンスされていること
- 定期的な最近のコミット。または、終了したプロジェクトについては、課題やプルリクエストに通常2週間以内に対応していること
- 安定しているか、安定に向けて進行中であること
- プロジェクトの意図や仕組みを誰もが理解できるように、英語で徹底的に文書化されていること(README、pkg.go.dev docコメントなど)
- すべてのパブリック関数と型には、Goスタイルのドキュメントヘッダをつけること
- ライブラリ/プログラムがテスト可能である場合、カバレッジはデータ関連以外のパッケージで80%以上、データ関連パッケージで90%以上であること(注意: テストもレビューされます。もしあなたのパッケージのカバレッジが単なるベンチマーク結果であれば、手動でチェックします)
- go.mod ファイルが vX.X.X という形式のバージョン番号でファイルをリストアップできるような、バージョン番号付きの公式リリースを少なくとも一つ持っていること

# プロジェクト分野リスト

最後に、プロジェクトの分野をリスト化したものを貼っておきます。
ざっとみて、興味があるものがあれば、具体的なレポジトリを見にいってもらえればと。

- Actor Model
- Artificial Intelligence
- Audio and Music
- Authentication and OAuth
- Blockchain
- Bot Building
- Build Automation
- Command Line
  - Advanced Console UIs
  - Standard CLI
- Configuration
- Continuous Integration
- CSS Preprocessors
- Data Integration Frameworks
- Data Structures and Algorithms
  - Bit-packing and Compression
  - Bit Sets
  - Bloom and Cuckoo Filters
  - Data Structure and Algorithm Collections
  - Iterators
  - Maps
  - Miscellaneous Data Structures and Algorithms
  - Nullable Types
  - Queues
  - Sets
  - Text Analysis
  - Trees
  - Pipes
- Database
  - Caches
  - Databases Implemented in Go
  - Database Schema Migration
  - Database Tools
  - SQL Query Builders
- Database Drivers
- Interfaces to Multiple Backends
- Relational Database Drivers
- NoSQL Database Drivers
- Search and Analytic Databases
- Date and Time
- Distributed Systems
- Dynamic DNS
- Email
- Embeddable Scripting Languages
- Error Handling
- File Handling
- Financial
- Forms
- Functional
- Game Development
- Generators
- Geographic
- Go Compilers
- Goroutines
- GUI
- Hardware
- Images
- IoT (Internet of Things)
- Job Scheduler
- JSON
- Logging
- Machine Learning
- Messaging
- Microsoft Office
  - Microsoft Excel
  - Microsoft Word
- Miscellaneous
  - Dependency Injection
  - Project Layout
  - Strings
  - Uncategorized
- Natural Language Processing
  - Language Detection
  - Morphological Analyzers
  - Slugifiers
  - Tokenizers
  - Translation
  - Transliteration
- Networking
  - HTTP Clients
- OpenGL
- ORM
- Package Management
- Performance
- Query Language
- Reflection
- Resource Embedding
- Science and Data Analysis
- Security
- Serialization
- Server Applications
- Stream Processing
- Template Engines
- Testing
  - Testing Frameworks
  - Mock
  - Fuzzing and delta-debugging/reducing/shrinking
  - Selenium and browser control tools
  - Fail injection
- Text Processing
  - Formatters
  - Markup Languages
  - Parsers/Encoders/Decoders
  - Regular Expressions
  - Sanitation
  - Scrapers
  - RSS
  - Utility/Miscellaneous
- Third-party APIs
- Utilities
- UUID
- Validation
- Version Control
- Video
- Web Frameworks
  - Middlewares
    - Actual middlewares
    - Libraries for creating HTTP middlewares
  - Routers
- WebAssembly
- Windows
- Workflow Frameworks
- XML
- Zero Trust
- Code Analysis
- Editor Plugins
- Go Generate Tools
- Go Tools
- Software Packages
  - DevOps Tools
  - Other Software