Go gorm mysql の構成でデッドロックに立ち向かう ~retry処理, retry-go~
What OAuth, OIDC, Auth0, Cognito など認証認可にまつわるプロトコルやIDaaSを調べ直すことが多い。 毎回同じ記事を検索していたのでインデックスとして残しておく。 要約とインデックス OAuth2.0 OIDC Auth0・Cognito アクセストークンの要求方法とそれに…
Go言語を使い出してもうすぐ一年が経ちます。 この機会にGo言語の振り返りをしたいと思います。 Go言語のメリット Goを学習して感じたメリット 可読性が高い gofmtが世界標準になっていて、プロジェクト毎に設定する必要がない 標準パッケージが充実している…
今回は SSOTの考え方についての学習録です。 SSOTとは Wikipedia 情報システムの設計と理論においては、すべてのデータが1か所でのみ作成、あるいは編集されるように、情報モデルと関連するデータスキーマとを構造化する方法である。データへのリンクで可能…
今回はGraphQLとOpenAPIの開発を比較していきたいと思います。 筆者は本業のプロジェクトでGraphQLを、副業でOpenAPIを使用しています。 アプリケーション開発時にどちらを選定するか迷っている方の参考になれば幸いです。 使用技術概要 GraphQL OpenAPI バ…
2022年の1月から副業業務委託としてtoB SaaSの開発をお手伝いさせて頂いています。 以下の技術スタックで開発してます。 Go DynamoDB OpenAPI3 DynamoDB, OpenAPIは初めて触る技術でした。 新しい技術のキャッチアップはかなり負荷のかかる学習ですが、同時…
今回はgoldieというライブラリを使ったGolden testを実装していきます。 Golden Test Goleden Testとは .golden拡張子のファイルにAPIの結果(jsonなどを)保持しておき、テスト時に出力結果に変更がないかを比較するテスト手法です。 goldie goldieはGo言語用…
今回はGo言語でログ出力を実装します。 Go言語には標準でlog パッケージがありますが、今回はよりリッチな logrus を使ったログ設計を行なっていきます。 レベル設計 ログをレベル単位で分けることでバグの検出を容易にするだけでなく、特定のレベルが出力さ…
今回はGo言語のエラー処理におけるカスタムエラーの実装を行なっていきます。 GraphQLのサーバーから構築している為、実装をGraphQL仕様に寄せています。 それでは独自のエラー構造体を定義してカスタムエラーを作成していきます。 Go 言語でカスタムエラー …
今回はGo製のAPIでCSVをダウンロードする方法を見ていきたいと思います。 普段はGraphQLについて発信していますが、今回はRestで実装し、"encoding/csv"パッケージなどメイン機能部分のみ解説していきます。 ルーター Restなのでまずはルーティングを作りま…
業務でも使用しているSkyWayのJavaScript SDK チュートリアルをやってみました。 SkyWayはwebRTC 技術のSDK API を提供しているサービスです。 無料、有料プランがありチュートリアルレベルなら無料で十分試す事ができます。 webrtc.ecl.ntt.com コード コー…
今回はGoでcookieを扱うパッケージ gorilla/sessionsを触ってみます。https://github.com/gorilla/sessions 最初は公式のサンプルコードを見て、次に用意された構造体やメソッドの中身を見ていきたいと思います。 公式のサンプルコード 以下サンプルコード v…
今回は本業で開発しているGoのAPIで時刻の概念をドメインとして扱ったのでその時に学んだことを復習したいと思います。 TL;DR 要件はDateTimeのような日付ではなく、時刻のみを扱い比較した結果に応じてビジネスロジックを振り分けるようなイメージです。 以…
前回の続きです。 今回はDDDのサービスについて振り返りたいと思います。 shikatech.hatenablog.com アプリケーションサービス 前回に続きこちらの記事からコードを引用します。 How to Implement Domain-Driven Design (DDD) in Golang | by Percy Bolmér |…
今回は以前から気になっていたDDDの技術書とGo×DDDの実装記事を読んだので振り返りをします。 今回読んだ書籍と記事は以下です。 本: ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本 記事: towardsdatascience.com 尚、DDDの概念や思想…
今回はGitHub ActionsでGoのAPIサーバーのCI構築を行いたいと思います。 GitHub Actionsのチュートリアル的な部分には触れませんのでご留意ください。 TL;DR 以下の構成でCI構築を行います。 CIはdocker-composeを使用する docker-composeのある親ディレクト…
Go, Golang の echo, Gin それぞれのフレームワークでHTTP Headerのmiddlewareをカスタマイズ(custom)する方法 Http Request から Originを取得する方法
Go言語 そのものの力を伸ばしたいと思って メルカリのtenntennさんが開催しているGopher道場の課題に挑戦してみました。 課題1では画像形式を変更するコマンドラインを作成します。 今回はその時使ったパッケージや気づきを紹介したいと思います。 車輪の再…
今回はGraphQLのエラーについて復習してみました。 また、簡単ではありますがgqlgenを使ってカスタムエラーを実装してみたいと思います。 GraphQLのエラーハンドリングについては "GraphQL エラー" で検索するとトップにヒットするこちらの記事が大変分かり…
今回は 前回に続き GraphQLのSubscriptionをRedisのkeyspace notificationを使って実装していきたいと思います。 前回はkeyspaceの概要編でしたが今回は実践編です。 以下の技術を使用します。 - Go - gqlgen v0.13.0 - go-redis v8 今回実装する機能 今回は…
今回はRedisのkeyspaceを使用してGraphQLのSubscriptionを実装したいと思います。以前にRedisのPub/Subを使って実装した記事を書きました。 Go GraphQl Redis PubSub でリアルタイムチャット (gqlgen websocket) - matsu tech blog 今回はGraphQLのSubscript…
今回はGraphQLで画像のアップロードを行なっていきたいと思います。 アップロード先のストレージにはAWSのS3を使用します。 尚、この記事ではS3のバケットポリシーやAWS関連については深掘りしません、aws-sdk-go-v2 というGoのaws-sdkを使用しますがコード…
今回は色々なWebサービスで見かけるチャットアプリケーションのバックエンドサーバーを構築していきたいと思います。 様々な技術を使用しますが、主にGoとgo-redisを用いた実装に着目します。 Redis PubSub RedisのPub/SubはRedisの主要機能の一つです。 あ…
概要 RedisのPubSubについてまとめてみた。 DockerでCLIを叩いて実際の動きを確認していく。 Pub / Sub とは https://redis.io/topics/pubsub redis.io Pub / Subシステムの登場人物 Subscriber (受信者) Publisher ( 送信者) Channel (部屋) Message(送信者…
今回はgqlgenの機能を使って Relayの仕様であるGlobal Object Identificationの実装を行なっていく。 Global Object Identificationとは GraphQLのクライアントライブラリRelayで定められたIDフィールドの実装方法。 relay.dev ざっくりとした説明は 全スキ…
GraphQLの必須項目ページネーションの実装方法を理解する。 使用技術 Go1.13 × gqlgen v0.13.0 ページネーションとは APIのクエリを制限する方法。 返却するデータの量を制限する事ができる。 クエリの負荷を事前に計算できる。 GraphQLのページネーション G…
前回の続き 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のドキュメントを読んだ時のメモ https://www.apollographql.com/docs/ まずは簡単なgraphQL APIを構築 https://github.com/DaisukeMatsumoto0925/graph_practice Front Next.ts (codegen) Backend Go (gqlgen) Apolloの構築 const createApolloClient…
きっかけ 本業で初めてGraphQLに触れた。 GraphQLでapiを叩く時、IDの仕様に癖があったので調べてみた。 参考 booth.pm 本題 そもそもGraphQlのスキーマ設計は何を基準に行うべきなのか? GraphQLスキーマ設計ガイド 第2版 - わかめの自動売り場 - BOOTH で…