0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go: 利用しているモジュール/ツール

0
Posted at

概要

今回は小ネタで、2025年現在利用しているものの記録です。カテゴリ分けとして以下にまとめてみました。

  • CLI
  • Web
  • その他開発系

CLI

  • なし

フラグやサブコマンドのライブラリ( urfave/cli, spf13/cobra, jessevdk/go-flags )を使ったこともありました。しかし、ライブラリとその依存のアップデート対応の手間を鑑みて、最終的に10年くらい前にWeb読んだ記事(消滅済み)の記憶を元に標準ライブラリで書いています。記事が消えてしまったので曖昧な記憶ですが

  • 入出力は io.Rader / io.Writer で定義しておいて main 関数で実行時は os.Stdin / os.Stdout を渡し、テスト実行時は strings.Reader / bytes.Buffer などを渡して使う
  • コマンドは引数と入出力(あるいはその構造体)を受け取って終了ステータスを返す
  • コマンドを実行する関数は引数を受け取ってコマンドを実行し、終了ステータスで os.Exit する
  • main 関数はコマンドを実行する関数を実行するだけ
  • フラグはフラグ解析後のデータを格納する構造体を定義して、引数を加工して構造体にマッピングする
  • ディフォルト値を設定したい設定ファイルのハンドリングにFunctional Options Pattern使う

あたりは書いてあった気がします。

2025年的には

により詳細に説明があり、GitHub にサンプルもあるので、それを参照しながら書くのが良いかなと思います。

同資料中にもありますが、 CLI は運用作業用のものが多いので、ユーティリティー用のライブラリ(とその依存)で頻繁にアップデートがかかるのは手間です。ほどほどで対応できるようにするためにあまり使わなくなったかなと思います。

Web

REST API は OpenAPI に沿って作るので oapi-codegen。RPC系は元々 protobuf + gRPC だったのを buf + connect どうかなと検討しています。現在の用途だとどのみちフロンエンドから grpc-gateway 的な REST へのブリッジが必要なので積極的に対応が進められていないのですが。

ごく小規模ということもあって Web サーバは標準の net/http で書いていて、あまり Webフレームワークを使ったことがありません。少し使ったのが

くらいでしょうか。

SQL 系は5年くらい前に「あまり自動生成部分が多くないやつ」くらいで検討して以降再検討していないので今だともっといいものがあるのかもしれません。 sqlc だと複雑なクエリに対応しづらいのはあるのですが、大きい不満はないので変えていない状態です。

OAuthは2.1の需要が出てきたのでPKCEの対応の検討があります。JWTは諸々使っています。

その他開発系

用途バラバラなのでそれぞれに記載します。利用クラウドインフラや連携SaaSのSDKやクライアントライブラリを除くと以下くらいでしょうか。

開発系のCLIはバイナリしか使っていないとRust製なのか、Go製なのか意識してないので実際にはもっとあるかもしれませんが。

おわりに

定期的に書いて何が理由で変更したかが分かるようになっているといいかなと思っています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?