Go

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

Go

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

Go言語の振り返り

Go

こんにちは、マットです。 都内ITベンチャーのエンジニアです。 Go/Next.jsを使っています。 Go言語を使い出してもうすぐ一年が経ちます。 この機会にGo言語の振り返りをしたいと思います。 Go言語のメリット Goを学習して感じたメリット 可読性が高い gofmt…

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

こんにちは、マットです。 都内ITベンチャーのエンジニアです。 普段はGo/Next.jsを中心に使っています。 今回はGraphQLとOpenAPIの開発を比較していきたいと思います。 筆者は本業のプロジェクトでGraphQLを、副業でOpenAPIを使用しています。 アプリケーシ…

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

こんにちは、マットです。 都内ITベンチャーのエンジニアです。 Go/Next.js/GraphQLを使っています。 2022年の1月から副業業務委託としてtoB SaaSの開発をお手伝いさせて頂いています。 以下の技術スタックで開発してます。 Go DynamoDB OpenAPI3 DynamoDB, …

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

こんにちは、マットです。 都内ITベンチャーのエンジニアです。 Go/Next.js/GraphQLを使っています。 今回はgoldieというライブラリを使ったGolden testを実装していきます。 Golden Test Goleden Testとは .golden拡張子のファイルにAPIの結果(jsonなどを)…

Go logLevel設計 logrus echo

こんにちは、マットです。 都内ITベンチャーのエンジニアです。 Go/Next.js/GraphQLを使っています。 今回はGo言語でログ出力を実装します。 Go言語には標準でlog パッケージがありますが、今回はよりリッチな logrus を使ったログ設計を行なっていきます。 …

Go CSV download API

こんにちは、マットです。 都内ITベンチャーのエンジニアです。 Go/Next.js/GraphQLを使っています。 今回はGo製のAPIでCSVをダウンロードする方法を見ていきたいと思います。 普段はGraphQLについて発信していますが、今回はRestで実装し、"encoding/csv"パ…

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

こんにちは、マットです。 都内ITベンチャーのエンジニアです。 Go/Next.js/GraphQLを使っています。 今回は本業で開発しているGoのAPIで時刻の概念をドメインとして扱ったのでその時に学んだことを復習したいと思います。 TL;DR 要件はDateTimeのような日付…

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

こんにちは、マットです。 都内ITベンチャーのエンジニアです。 Go/Next.js/GraphQLを使っています。 前回の続きです。 今回はDDDのサービスについて振り返りたいと思います。 shikatech.hatenablog.com アプリケーションサービス 前回に続きこちらの記事か…

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

こんにちは、マットです。 都内ITベンチャーのエンジニアです。 Go/Next.js/GraphQLを使っています。 今回は以前から気になっていたDDDの技術書とGo×DDDの実装記事を読んだので振り返りをします。 今回読んだ書籍と記事は以下です。 本: ドメイン駆動設計入…

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

こんにちは、マットです。 都内ITベンチャーのエンジニアです。 Go/Next.js/GraphQLを使っています。 今回はGitHub ActionsでGoのAPIサーバーのCI構築を行いたいと思います。 GitHub Actionsのチュートリアル的な部分には触れませんのでご留意ください。 TL;…

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

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

GraphQL APIエラー Go gqlgenで実装

こんにちは、マットです。 都内ITベンチャーのエンジニアです。 Go/Next.js/GraphQLを使っています。 今回はGraphQLのエラーについて復習してみました。 また、簡単ではありますがgqlgenを使ってカスタムエラーを実装してみたいと思います。 GraphQLのエラー…

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

こんにちは、マットです。 都内ITベンチャーのエンジニアです。 Go/Next.js/GraphQLを使っています。 今回は 前回に続き GraphQLのSubscriptionをRedisのkeyspace notificationを使って実装していきたいと思います。 前回はkeyspaceの概要編でしたが今回は実…

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

こんにちは、マットです。 都内ITベンチャーのエンジニアです。 Go/Next.js/GraphQLを使っています。 今回はGraphQLで画像のアップロードを行なっていきたいと思います。 アップロード先のストレージにはAWSのS3を使用します。 尚、この記事ではS3のバケット…

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

こんにちは、マットです。 都内ITベンチャーのエンジニアです。 Go/Next.js/GraphQLを使っています。 今回は色々なWebサービスで見かけるチャットアプリケーションのバックエンドサーバーを構築していきたいと思います。 様々な技術を使用しますが、主にGoと…

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…

Go 埋め込み

きっかけ こちらの記事でクリーンアーキテクチャを勉強していたときに埋め込みについてさらっと使用されていたので自分なりに深堀ってみた。 https://qiita.com/hirotakan/items/698c1f5773a3cca6193e type UserRepository struct { SqlHandler } func (repo…

Go migrateion goose setup

Goのマイグレーションツール goose bitbucket.org Go製のmigration ツールでは人気のある方? 業務でも採用されていたので使ってみました。 情報にバラつきがありセットアップまでに時間がかかりました。 goose bitbucket版 と github版があります。 github…

Go API開発の環境構築 テンプレート アーキテクチャ、ホットリロード、ロギング、Docker

GoでAPIを作るときのテンプレです。 ホットリロード、ロギング、コンテナ、DB、まとめて構築していきます。 以下の技術を使用します。 Docker docker-compose ホットリロードライブラリair https://github.com/cosmtrek/air フレームワークgin https://githu…