SlideShare a Scribd company logo
好きなライブラリ
発表ドラゴン
Asakusa.go #2
maito
自己紹介
Masahiko Ito
オカキチCTO
ブロックチェーンゲームという文化を
つくる事が今の仕事
このLTの目的
Go言語は他の言語と比べると、フルスタックなフレームワークが無い
(RubyでいうRails, PythonでいうDjango、PHPでいうLaravel)
つまりGoは標準ライブラリと薄いフレームワークを組み合わせるカルチャー
結果、車輪の再発明をうっかり行ってしまう確率が高い
そこで、自分が愛用しているライブラリを発信することで、
「そんなライブラリあったの」という発見の場を作りたい
それが好きなライブラリ発表ドラゴンである
#asakusago #好きなライブラリ発表ドラゴン
で是非皆さんからも発信して教えてください
時間の都合上WEBサーバー作りで役立つもの優先的に紹介します
5分でWEBサーバー
つくれるやつ
「好き」「推奨」の温度感
使った事の無いライブラリをオススメするのはよろしくないと考えています
一方何を採用するかの正解はメンバーの経験値にも影響されます
よって「好き」という表現をあまり強い推奨に結び付けたい意図はありません
迷ったらスター数が多い方をサンプルとして提示します
このような表現になったのは
インターネットが悪い
みんな知ってそうだけど
避けては通れないやつ
まずは
好きなライブラリ発表ドラゴン
サーバーの骨組みになるやつ
標準ライブラリのnet/httpだけで作ることはほぼない
サーバーを立ち上げるうえで何かしらを採用する傾向にある
gin、またはechoがメジャー
ginの方が軽くて速い、また2024年現在人気が高い
好きなライブラリ発表ドラゴン
ルーティングをまとめるやつ
ginより更に薄いライブラリもある
用途次第ではこちらに切り替えることで軽量、高速化できるかも
go-chi/chi, gorilla/muxなど
好きなライブラリ発表ドラゴン
ぱっと見の違いはこのサンプルだけだとわからない
ルーティングが複雑化した時の書きっぷりの好みの問題
とにかく軽いほうが良い or 手厚くケアして欲しいかの方針で決める
好きなライブラリ発表ドラゴン
リクエストパラメータをバリデーションするやつ
github.com/go-playground/validator
emailの仕様を満たしているか、とかの判定はライブラリに任せたい
好きなライブラリ発表ドラゴン
DBにアクセスするやつ
go-gorm/gorm, volatiletech/sqlboiler, uptrace/bun
諸説ある
gormはうっかりでSQLインジェクション可能なAPIを書けてしまっ
た経験があるので個人的には避けようとしている
コード生成の手間があるが、typoリスクの低いsqlboiler シンプルORMのBun
好きなライブラリ発表ドラゴン
migration管理するやつ
pressly/goose
makefileとCIでmigration実行できるようにしておいた方が良い
好きなライブラリ発表ドラゴン
ログを出力するやつ
loggerはただでさえ戦国時代になっているように見えがち
背景として「標準ライブラリに構造化ロギングが無い」
という意見があったが、log/slogが出てしまった
rs/zerolog, go.uber.org/zapあたりが自分の周囲では採用される傾向
zelologはNetflixのエンジニア、zapはUberのエンジニアが作ってい
るので強そう(もちろん中身が良いわけですが)
これは知っておきたかった
と思ったやつ
続いて
好きなライブラリ発表ドラゴン
エラーをまとめるやつ
hashicorp/go-multierror, go.uber.org/multierr
hashicorp製の方がスター数は多い
for loop、または非同期処理が全て終わってからエラーハンドリン
グする時に使う
好きなライブラリ発表ドラゴン
リトライするやつ
cenkalti/backoff
exponential backoffを実行してくれる
好きなライブラリ発表ドラゴン
テストコードで使うやつ
golang/mock
モックを実装する際の定番
好きなライブラリ発表ドラゴン
テストコードで使うやつ
stretchr/testify
テストコードを書く時に何かと便利(特にassert)
好きなライブラリ発表ドラゴン
テストコードで使うやつ
google/go-cmp
assertで構造体比較するより
こちらの方がテスト結果は見やすいかも
好きなライブラリ発表ドラゴン
テストコードで使うやつ
Songmu/flextime
現在時刻をテスト時に固めるやつ
好きなライブラリ発表ドラゴン
uberが作ってるやつ

More Related Content

Similar to Asakusa.go #2 好きなライブラリ発表ドラゴン LT maito0915

我々はどこから来たのか 我々は何者か 我々はどこに行くのか
我々はどこから来たのか 我々は何者か 我々はどこに行くのか我々はどこから来たのか 我々は何者か 我々はどこに行くのか
我々はどこから来たのか 我々は何者か 我々はどこに行くのかwizstargaer
 
Alluren of prototype-based OOP
Alluren of prototype-based OOPAlluren of prototype-based OOP
Alluren of prototype-based OOPazuma satoshi
 
Kafka logをオブジェクトストレージに連携する方法まとめ
Kafka logをオブジェクトストレージに連携する方法まとめKafka logをオブジェクトストレージに連携する方法まとめ
Kafka logをオブジェクトストレージに連携する方法まとめKeigo Suda
 
Reproducebility 100倍 Dockerマン
Reproducebility 100倍 DockerマンReproducebility 100倍 Dockerマン
Reproducebility 100倍 DockerマンNagi Teramo
 
フリーデスクトップ印刷友の会紹介 for Ubuntu Kansai 11.03 (canceled)
フリーデスクトップ印刷友の会紹介 for Ubuntu Kansai 11.03 (canceled)フリーデスクトップ印刷友の会紹介 for Ubuntu Kansai 11.03 (canceled)
フリーデスクトップ印刷友の会紹介 for Ubuntu Kansai 11.03 (canceled)Naruhiko Ogasawara
 
GUI何処行ったんDocker
GUI何処行ったんDockerGUI何処行ったんDocker
GUI何処行ったんDockerKazuhito Miura
 
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介Shoken Fujisaki
 
GarumとMeteoriteと私 3nd Edition ver0.04
GarumとMeteoriteと私 3nd Edition ver0.04GarumとMeteoriteと私 3nd Edition ver0.04
GarumとMeteoriteと私 3nd Edition ver0.04Shinobu Okano
 
Swiftで外部ライブラリを使ってみよう
Swiftで外部ライブラリを使ってみようSwiftで外部ライブラリを使ってみよう
Swiftで外部ライブラリを使ってみようKanako Kobayashi
 
Rubyと機械学習の現状
Rubyと機械学習の現状Rubyと機械学習の現状
Rubyと機械学習の現状Aki Ariga
 
Ruby本から読み解くRuby考古学 - Ruby Archaeology from the Ruby Book
Ruby本から読み解くRuby考古学 - Ruby Archaeology from the Ruby BookRuby本から読み解くRuby考古学 - Ruby Archaeology from the Ruby Book
Ruby本から読み解くRuby考古学 - Ruby Archaeology from the Ruby BookTadashi Saito
 
ザ・ダイアログファシリテーター
ザ・ダイアログファシリテーターザ・ダイアログファシリテーター
ザ・ダイアログファシリテーターフリーランス
 
コミュニティのある風景
コミュニティのある風景コミュニティのある風景
コミュニティのある風景Ryunosuke SATO
 
20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuri20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuriYoshifumi Yamaguchi
 
人間たちとsystemd
人間たちとsystemd人間たちとsystemd
人間たちとsystemdUchio Kondo
 
My開発環境の話
My開発環境の話My開発環境の話
My開発環境の話Yuta Ohashi
 

Similar to Asakusa.go #2 好きなライブラリ発表ドラゴン LT maito0915 (20)

我々はどこから来たのか 我々は何者か 我々はどこに行くのか
我々はどこから来たのか 我々は何者か 我々はどこに行くのか我々はどこから来たのか 我々は何者か 我々はどこに行くのか
我々はどこから来たのか 我々は何者か 我々はどこに行くのか
 
Alluren of prototype-based OOP
Alluren of prototype-based OOPAlluren of prototype-based OOP
Alluren of prototype-based OOP
 
Kafka logをオブジェクトストレージに連携する方法まとめ
Kafka logをオブジェクトストレージに連携する方法まとめKafka logをオブジェクトストレージに連携する方法まとめ
Kafka logをオブジェクトストレージに連携する方法まとめ
 
Reproducebility 100倍 Dockerマン
Reproducebility 100倍 DockerマンReproducebility 100倍 Dockerマン
Reproducebility 100倍 Dockerマン
 
フリーデスクトップ印刷友の会紹介 for Ubuntu Kansai 11.03 (canceled)
フリーデスクトップ印刷友の会紹介 for Ubuntu Kansai 11.03 (canceled)フリーデスクトップ印刷友の会紹介 for Ubuntu Kansai 11.03 (canceled)
フリーデスクトップ印刷友の会紹介 for Ubuntu Kansai 11.03 (canceled)
 
aozorahack hackathon #1
aozorahack hackathon #1aozorahack hackathon #1
aozorahack hackathon #1
 
GUI何処行ったんDocker
GUI何処行ったんDockerGUI何処行ったんDocker
GUI何処行ったんDocker
 
読書会開催提案
読書会開催提案読書会開催提案
読書会開催提案
 
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
 
LL Onsen 2008 OpenPrinting
LL Onsen 2008 OpenPrintingLL Onsen 2008 OpenPrinting
LL Onsen 2008 OpenPrinting
 
GarumとMeteoriteと私 3nd Edition ver0.04
GarumとMeteoriteと私 3nd Edition ver0.04GarumとMeteoriteと私 3nd Edition ver0.04
GarumとMeteoriteと私 3nd Edition ver0.04
 
Swiftで外部ライブラリを使ってみよう
Swiftで外部ライブラリを使ってみようSwiftで外部ライブラリを使ってみよう
Swiftで外部ライブラリを使ってみよう
 
Rubyと機械学習の現状
Rubyと機械学習の現状Rubyと機械学習の現状
Rubyと機械学習の現状
 
Ruby本から読み解くRuby考古学 - Ruby Archaeology from the Ruby Book
Ruby本から読み解くRuby考古学 - Ruby Archaeology from the Ruby BookRuby本から読み解くRuby考古学 - Ruby Archaeology from the Ruby Book
Ruby本から読み解くRuby考古学 - Ruby Archaeology from the Ruby Book
 
ザ・ダイアログファシリテーター
ザ・ダイアログファシリテーターザ・ダイアログファシリテーター
ザ・ダイアログファシリテーター
 
コミュニティのある風景
コミュニティのある風景コミュニティのある風景
コミュニティのある風景
 
20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuri20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuri
 
簡単!Groovy入門
簡単!Groovy入門簡単!Groovy入門
簡単!Groovy入門
 
人間たちとsystemd
人間たちとsystemd人間たちとsystemd
人間たちとsystemd
 
My開発環境の話
My開発環境の話My開発環境の話
My開発環境の話
 

Recently uploaded

ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介miyp
 
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上mizukami4
 
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題についてMasatsugu Matsushita
 
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHubCompute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHubK Kinzal
 
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例Kurata Takeshi
 
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料Toru Miyahara
 
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料Toru Miyahara
 
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料Toru Miyahara
 

Recently uploaded (8)

ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
 
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
 
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
 
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHubCompute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
 
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
 
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
 
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
 
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
 

Asakusa.go #2 好きなライブラリ発表ドラゴン LT maito0915

Editor's Notes

  1. 伊藤と申します オカキチという会社でCTOをやらせていただいています 去年のGo conferenceスタッフでしたが、今年はサボり中です
  2. さて本題です、私はarchiveパッケージの新機能について説明します
  3. さて本題です、私はarchiveパッケージの新機能について説明します
  4. さて本題です、私はarchiveパッケージの新機能について説明します
  5. さて本題です、私はarchiveパッケージの新機能について説明します
  6. さて本題です、私はarchiveパッケージの新機能について説明します
  7. さて本題です、私はarchiveパッケージの新機能について説明します
  8. さて本題です、私はarchiveパッケージの新機能について説明します
  9. さて本題です、私はarchiveパッケージの新機能について説明します
  10. さて本題です、私はarchiveパッケージの新機能について説明します
  11. さて本題です、私はarchiveパッケージの新機能について説明します
  12. さて本題です、私はarchiveパッケージの新機能について説明します
  13. さて本題です、私はarchiveパッケージの新機能について説明します
  14. さて本題です、私はarchiveパッケージの新機能について説明します
  15. さて本題です、私はarchiveパッケージの新機能について説明します
  16. さて本題です、私はarchiveパッケージの新機能について説明します
  17. さて本題です、私はarchiveパッケージの新機能について説明します
  18. さて本題です、私はarchiveパッケージの新機能について説明します
  19. さて本題です、私はarchiveパッケージの新機能について説明します