Go gorm mysql の構成でデッドロックに立ち向かう ~retry処理, retry-go~

Go

Go gorm mysql の構成でデッドロックに立ち向かう ~retry処理, retry-go~

OAuth, OIDC, Auth0, Cognitoを思い出すINDEX

What OAuth, OIDC, Auth0, Cognito など認証認可にまつわるプロトコルやIDaaSを調べ直すことが多い。 毎回同じ記事を検索していたのでインデックスとして残しておく。 要約とインデックス OAuth2.0 OIDC Auth0・Cognito アクセストークンの要求方法とそれに…

Go言語の振り返り

Go

Go言語を使い出してもうすぐ一年が経ちます。 この機会にGo言語の振り返りをしたいと思います。 Go言語のメリット Goを学習して感じたメリット 可読性が高い gofmtが世界標準になっていて、プロジェクト毎に設定する必要がない 標準パッケージが充実している…

Single Source of Truth 信頼できる唯一の情報源 SSOT

今回は SSOTの考え方についての学習録です。 SSOTとは Wikipedia 情報システムの設計と理論においては、すべてのデータが1か所でのみ作成、あるいは編集されるように、情報モデルと関連するデータスキーマとを構造化する方法である。データへのリンクで可能…

GraphQL vs OpenAPI スキーマ駆動開発比較

今回はGraphQLとOpenAPIの開発を比較していきたいと思います。 筆者は本業のプロジェクトでGraphQLを、副業でOpenAPIを使用しています。 アプリケーション開発時にどちらを選定するか迷っている方の参考になれば幸いです。 使用技術概要 GraphQL OpenAPI バ…

DaynamoDB を学習した時の記事、詰まった箇所

2022年の1月から副業業務委託としてtoB SaaSの開発をお手伝いさせて頂いています。 以下の技術スタックで開発してます。 Go DynamoDB OpenAPI3 DynamoDB, OpenAPIは初めて触る技術でした。 新しい技術のキャッチアップはかなり負荷のかかる学習ですが、同時…

goldie でAPIテスト Go Golang goldie その1

今回はgoldieというライブラリを使ったGolden testを実装していきます。 Golden Test Goleden Testとは .golden拡張子のファイルにAPIの結果(jsonなどを)保持しておき、テスト時に出力結果に変更がないかを比較するテスト手法です。 goldie goldieはGo言語用…

Go logLevel設計 logrus echo

今回はGo言語でログ出力を実装します。 Go言語には標準でlog パッケージがありますが、今回はよりリッチな logrus を使ったログ設計を行なっていきます。 レベル設計 ログをレベル単位で分けることでバグの検出を容易にするだけでなく、特定のレベルが出力さ…

Go カスタムエラー ~xerros.Frame, errors~

今回はGo言語のエラー処理におけるカスタムエラーの実装を行なっていきます。 GraphQLのサーバーから構築している為、実装をGraphQL仕様に寄せています。 それでは独自のエラー構造体を定義してカスタムエラーを作成していきます。 Go 言語でカスタムエラー …

Go CSV download API

今回はGo製のAPIでCSVをダウンロードする方法を見ていきたいと思います。 普段はGraphQLについて発信していますが、今回はRestで実装し、"encoding/csv"パッケージなどメイン機能部分のみ解説していきます。 ルーター Restなのでまずはルーティングを作りま…

SkyWay API使ってみた webRTC 入門

業務でも使用しているSkyWayのJavaScript SDK チュートリアルをやってみました。 SkyWayはwebRTC 技術のSDK API を提供しているサービスです。 無料、有料プランがありチュートリアルレベルなら無料で十分試す事ができます。 webrtc.ecl.ntt.com コード コー…

Go gorilla/sessions

今回はGoでcookieを扱うパッケージ gorilla/sessionsを触ってみます。https://github.com/gorilla/sessions 最初は公式のサンプルコードを見て、次に用意された構造体やメソッドの中身を見ていきたいと思います。 公式のサンプルコード 以下サンプルコード v…

Go time.Timeの扱いで学んだこと

今回は本業で開発しているGoのAPIで時刻の概念をドメインとして扱ったのでその時に学んだことを復習したいと思います。 TL;DR 要件はDateTimeのような日付ではなく、時刻のみを扱い比較した結果に応じてビジネスロジックを振り分けるようなイメージです。 以…

DDDことはじめ ~アプリケーションサービス~

前回の続きです。 今回はDDDのサービスについて振り返りたいと思います。 shikatech.hatenablog.com アプリケーションサービス 前回に続きこちらの記事からコードを引用します。 How to Implement Domain-Driven Design (DDD) in Golang | by Percy Bolmér |…

DDD ことはじめ ~値オブジェクト・集約・エンティティ・ファクトリ~

今回は以前から気になっていたDDDの技術書とGo×DDDの実装記事を読んだので振り返りをします。 今回読んだ書籍と記事は以下です。 本: ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本 記事: towardsdatascience.com 尚、DDDの概念や思想…

Go × GitHub Actions CI構築 ~ MySQL・Redis docker-compose 別リポジトリをGit clone する~

今回はGitHub ActionsでGoのAPIサーバーのCI構築を行いたいと思います。 GitHub Actionsのチュートリアル的な部分には触れませんのでご留意ください。 TL;DR 以下の構成でCI構築を行います。 CIはdocker-composeを使用する docker-composeのある親ディレクト…

Go × GitHub Actions CI構築 ~ MySQL・Redis docker-compose を別リポジトリをGit clone する~

Gin echo corsのオリジンをHttp Request から取得する

Go, Golang の echo, Gin それぞれのフレームワークでHTTP Headerのmiddlewareをカスタマイズ(custom)する方法 Http Request から Originを取得する方法

Gopher道場 自習室 課題をやってみた

Go言語 そのものの力を伸ばしたいと思って メルカリのtenntennさんが開催しているGopher道場の課題に挑戦してみました。 課題1では画像形式を変更するコマンドラインを作成します。 今回はその時使ったパッケージや気づきを紹介したいと思います。 車輪の再…

GraphQL APIエラー Go gqlgenで実装

今回はGraphQLのエラーについて復習してみました。 また、簡単ではありますがgqlgenを使ってカスタムエラーを実装してみたいと思います。 GraphQLのエラーハンドリングについては "GraphQL エラー" で検索するとトップにヒットするこちらの記事が大変分かり…

GraphQL Subscriptionを Redis KeySpaceで実装する ~その2~

今回は 前回に続き GraphQLのSubscriptionをRedisのkeyspace notificationを使って実装していきたいと思います。 前回はkeyspaceの概要編でしたが今回は実践編です。 以下の技術を使用します。 - Go - gqlgen v0.13.0 - go-redis v8 今回実装する機能 今回は…

GraphQL Subscriptionを Redis KeySpaceで実装する ~その1~

今回はRedisのkeyspaceを使用してGraphQLのSubscriptionを実装したいと思います。以前にRedisのPub/Subを使って実装した記事を書きました。 Go GraphQl Redis PubSub でリアルタイムチャット (gqlgen websocket) - matsu tech blog 今回はGraphQLのSubscript…

Go GraphQL AWS S3への画像アップロード

今回はGraphQLで画像のアップロードを行なっていきたいと思います。 アップロード先のストレージにはAWSのS3を使用します。 尚、この記事ではS3のバケットポリシーやAWS関連については深掘りしません、aws-sdk-go-v2 というGoのaws-sdkを使用しますがコード…

Go GraphQl Redis PubSub でリアルタイムチャット (gqlgen websocket)

今回は色々なWebサービスで見かけるチャットアプリケーションのバックエンドサーバーを構築していきたいと思います。 様々な技術を使用しますが、主にGoとgo-redisを用いた実装に着目します。 Redis PubSub RedisのPub/SubはRedisの主要機能の一つです。 あ…

Redis PubSub についてまとめてみた。

概要 RedisのPubSubについてまとめてみた。 DockerでCLIを叩いて実際の動きを確認していく。 Pub / Sub とは https://redis.io/topics/pubsub redis.io Pub / Subシステムの登場人物 Subscriber (受信者) Publisher ( 送信者) Channel (部屋) Message(送信者…

gqlgen directive @goField と Global Object Identification

今回はgqlgenの機能を使って Relayの仕様であるGlobal Object Identificationの実装を行なっていく。 Global Object Identificationとは GraphQLのクライアントライブラリRelayで定められたIDフィールドの実装方法。 relay.dev ざっくりとした説明は 全スキ…

GraphQL ページネーション Go gqlgen

GraphQLの必須項目ページネーションの実装方法を理解する。 使用技術 Go1.13 × gqlgen v0.13.0 ページネーションとは APIのクエリを制限する方法。 返却するデータの量を制限する事ができる。 クエリの負荷を事前に計算できる。 GraphQLのページネーション G…

Apollo Client (React) 触ってみた。 Mutations編

前回の続き https://shikatech.hatenablog.com/entry/2021/07/03/222958 Mutations GraphQLのMutationを実行するHooks https://www.apollographql.com/docs/react/data/mutations/#prerequisites const [addTodo, { data }] = useMutation(ADD_TODO); useQue…

Apollo Client (React) 触ってみた。 Query編

Apolloのドキュメントを読んだ時のメモ https://www.apollographql.com/docs/ まずは簡単なgraphQL APIを構築 https://github.com/DaisukeMatsumoto0925/graph_practice Front Next.ts (codegen) Backend Go (gqlgen) Apolloの構築 const createApolloClient…

GraphQL ID設計

きっかけ 本業で初めてGraphQLに触れた。 GraphQLでapiを叩く時、IDの仕様に癖があったので調べてみた。 参考 booth.pm 本題 そもそもGraphQlのスキーマ設計は何を基準に行うべきなのか? GraphQLスキーマ設計ガイド 第2版 - わかめの自動売り場 - BOOTH で…