goに関するkanda_kのブックマーク (12)

  • マイクロサービスアーキテクチャへのIntegration Test導入のすゝめ

    こんにちは、バックエンドを中心に開発をしています、野島といいます。 ソフトウェアテスト自動化カンファレンス2023に「マイクロサービスアーキテクチャへのIntegration Test導入のすゝめ」というお題で登壇しました。 そちらで発表した内容を記事にしつつ、当日話しきれなかった内容についても書きます。 発表は下記の内容を話しました。 Integration Testの導入を決意した背景にあった課題 Integration Testの導入/運用での工夫 Integration Testを導入して得られたメリット まとめ 記事では、Integration Testを以下の定義で扱います。 マイクロサービスが依存する外部コンポーネントをモック化せずに行うAPIテスト。 外部コンポーネントとは、具体的にはデータストア、外部サービス、テスト対象が依存するマイクロサービス、などを指します。 テス

    マイクロサービスアーキテクチャへのIntegration Test導入のすゝめ
  • APIの自動テストとモックAPIを駆使してTDD風に開発する

    こんにちは、バックエンドを中心に開発をしている野島と申します。 最近下記の流れで開発をしており、とても開発しやすいと感じているので共有します。 APIの自動テストの作成 モックAPIの作成 APIの処理の実装 TDDは下記の順序で行いますが、それを拡張してAPI開発にあてはめたようなスタイルです。 レッド:動作しない、おそらく最初のうちはコンパイルも通らないテストを1つ書く。 グリーン:そのテストを迅速に動作させる。このステップでは罪を犯してもよい。 リファクタリング:テストを通すために発生した重複をすべて除去する。 テスト駆動開発 p.ⅹより引用。 それでは、内容に入っていきます。 0. 前提 Go言語でAPI開発し、テストツールにはscenarigoを利用するとします。 scenarigoYAML でテストシナリオを記述するAPIテストツールです。簡潔に記載できるので、どのような

    APIの自動テストとモックAPIを駆使してTDD風に開発する
  • Go言語による各種データ構造の扱い方(やや競プロer向け)

    こんにちは株式会社スマートショッピング ソフトウェアエンジニアの葛西伸樹です。 今年の1月ごろから競技プログラミングのコンテスト(AtCoder)にGo言語で参加し始めたのですが、使用人口も少なく情報が見つからずなかなか苦戦しましたので現在わかっている範囲でGo言語による各種データ構造の扱い方についてまとめました。 指摘やコメントがあればぜひお願いします! この記事で説明すること/しないこと この記事では競技プログラミングでよく使われるデータ構造のGo言語による扱い方とおおよその実行速度について説明していきます。 今回説明するデータ構造は以下の通りです。 配列 動的配列 キュー/スタック 優先度付きキュー HashMap/HashSet TreeMap/TreeSet また 各種データ構造自体の説明 各種データ構造を使用した具体的なアルゴリズム については説明を省略します。 早速各データ構

    Go言語による各種データ構造の扱い方(やや競プロer向け)
  • 【Go】Mapの内部構造とO(1)のメカニズム

    はじめに こんにちは、株式会社スマートショッピング エンジニアのhi6okuniです。 フロントエンドエンジニアとして主にReactを用いた開発に従事してきましたが、この半年間は幸運にも自社のバックエンドをGoで開発する機会に恵まれました。Goらしいコードを書く技術も日々学習中ですが、最近ではデータ構造そのものにも興味が湧いてきました。そこで今回、GoMapの内部構造がどのように作られているのかを深堀りしてみることにしました。主な焦点はruntime/map.gomapassign関数の解析になります。 ざっくり理解 始めにruntime/map.goファイルのMapのコメントを読んでみましょう。データ構造/仕組みが記載されています。 A map is just a hash table. The data is arranged into an array of buckets. E

    【Go】Mapの内部構造とO(1)のメカニズム
    kanda_k
    kanda_k 2023/09/15
  • Go/Docker/GitHub Actions環境でのDBテスト方法検討

    はじめまして2022/11に入社しましたソフトウェアエンジニアの葛西です。 主にバックエンド開発を担当しています。 社内で競プロ部を立ち上げたのでいつか機会があれば記事にしたいなと思っています! はじめに チーム内で現在のプロジェクトDB(リポジトリ層)単体テストをどういう風にやろうかという話になり、色々悩みながらやり方を検討していったのでその過程と最終的にどのように実装したかを残しておきたいと思い記事にしました。 技術スタック まずDBテスト方法を検討する際の前提条件として現在のプロジェクトで使用している技術スタックを書いておきます。 言語 Go DBマイグレーションツール sql-migrate スキーマ変更用のSQLを用意しておけばコマンドでスキーマ変更などを反映してくれるというツールです。 スキーマ変更用のSQLはこのプロジェクトのディレクトリに直接置いています。 ORMライブラ

    Go/Docker/GitHub Actions環境でのDBテスト方法検討
  • ジョブに対する自動テスト実装のアプローチ

    はじめに こんにちは、バックエンドを中心に開発をしている野島と申します。 最近は、弊社プロダクトであるSmartMat Cloudに対する自動テストの拡充を推し進めています。 SmartMat Cloudは在庫の重量を計測し、閾値を下回った際に自動で発注を行う機能を有するIoTプロダクトです。この記事ではその発注機能、特にジョブに対するテストについて共有します。 発注ジョブに対する自動テストを作成する中で、下記の課題がありました。 どのようにしてジョブを実行するか ジョブの実行結果はどう評価するか これらに対するアプローチを共有します。 どのようにしてジョブを実行するか 発注ジョブはCronで定期的に実行されており、テストをしたい任意のタイミングでどのように発注処理を実行するかが課題でした。 そこで、テスト用のWebAPIを作成し、これを呼び出すことでジョブと同じ処理を実行することにしまし

    ジョブに対する自動テスト実装のアプローチ
  • gqlgenによるGraphQL Subscription実装

    はじめに こんにちは株式会社スマートショッピング ソフトウェアエンジニアの葛西伸樹です。 現在のプロジェクトGraphQLライブラリのgqlgenを使用しているのですが、GraphQLにおけるリアルタイム通信用のコマンドであるSubscriptionに関する知識がなかったので簡単に実装してその内容をまとめました。 この記事で説明しないこと この記事ではSubscriptionの仕組みと実装方法に焦点を当てているので GraphQLの概要 gqlgenによるQuery, Mutationの実装方法 については説明を省略します。 Subscriptionとは SubscriptionはGraphQLのデータ取得操作の一つで、リクエストを投げて結果を取得するQueryとは違いコネクションを接続することでサーバー側からのプッシュ通知によるデータ取得が可能になっています。 Subscription

    gqlgenによるGraphQL Subscription実装
  • Re: 結局、Go言語をやめる理由はなかった件 - Hateburo: kazeburo hatenablog

    すみません、ISUCONのアレに火がついてしまったので..。 Advent Calendarとはとくに関係がありません。 qiita.com qiita.com こちらの記事をみて、気になってしまったので interpolateParams の追加とMySQLチューニングをしてベンチマークを回してみました。 ベンチマークの環境が公開されているのは素晴らしいですね。 github.com 8vCPU/16GB Memのc5a.2xlargeなEC2のインスタンスを起動して、以下の手順にしたがってdockerdocker-composeをインストールしました。OSはUbuntu 20.04を使いました。 docs.docker.com docs.docker.com 上記のbenchmarkのrepositoryをgit cloneし、compose build && compose upし

    Re: 結局、Go言語をやめる理由はなかった件 - Hateburo: kazeburo hatenablog
  • Go言語でのgRPCコード生成(2020年10月以降版)|Dentsu Digital Tech Blog

    でご紹介したGo言語でのgRPCコード生成の状況の続報(2020年末)をお伝えしたいと思います。 概要としては前回の記事に記載した通りで ・Protocol Buffer側のレポジトリは golang/protobuf から protocolbuffers/protobuf-go に移行 ・gPRC側のレポジトリのgrpc/grpc-goに新たにprotoc-gen-go-grpcコマンドができた なのですが、以下が追加になりました。 ・gPRC用のコードを生成するには Protocol Buffersのメッセージやシリアライズに protocolbuffers/protobuf-go のprotoc-gen-go、gPRCのサーバ/クライアントに grpc/grpc-goのprotoc-gen-go-grpc、と両方を使うことになった 以降で詳細をご紹介します。 経緯2020年3月のpr

    Go言語でのgRPCコード生成(2020年10月以降版)|Dentsu Digital Tech Blog
    kanda_k
    kanda_k 2020/11/17
    goのprotoc周りのツールは、どれを使えばいいのか混乱していたので朗報
  • 「プログラミング言語Go完全入門」の「完全」公開のお知らせ | メルカリエンジニアリング

    メルペイ エキスパートチームの@tenntennです。稿は Merpay Tech Openness Month の11日目の記事です。 「プログラミング言語Go完全入門」の期間限定公開のお知らせでも書いたように、メルペイでは、社外の方向けにGopher道場という体系的にGoを学べる場を無償で提供してきました。Goの普及を目的にこれまでに8回開催し100人以上の方に参加していただきました。 また、Gopher道場の動画や資料はGopher道場 自習室として誰でも利用できるようになっており、現時点で300名以上の方が利用されています。 Gopher道場の資料のベースになっている「プログラミング言語Go完全入門」は、2020年7月31日までの限定公開になっていましたが、日より公開期限を撤廃し、完全公開することになりました。 また、日8月31日から始まる「Online Summer Int

    「プログラミング言語Go完全入門」の「完全」公開のお知らせ | メルカリエンジニアリング
    kanda_k
    kanda_k 2020/09/01
    これはありがたい
  • GoでWebアプリ開発時にあるあるだったレビューコメント | フューチャー技術ブログ

    The Gopher character is based on the Go mascot designed by Renée French. はじめにTIG DXユニット 1の真野です。 コードレビューについては3,4年ほど前に、コードレビューにおけるレビュアー側のアンチパターン って記事を書いたりもしました。当時はレビュアーの伝え方って大事だよなって話をしてました。いつしかレビュイーからレビュアーに比重が変わることが増えてきました。相互レビューは当たり前にしていますがが、比較的こうしたらもっと良くなるんじゃないかな?と提案される回数より、自分が提案する回数の方が増えてくるタイミングってありますよね? そういうわけで、最近Goで主にバックエンドのWebAPIや、AWS Lambdaで動くETLアプリ、たまにCLIツールを開発する時に、2回以上同じ指摘したコメントをまとめてます。Go言語

    GoでWebアプリ開発時にあるあるだったレビューコメント | フューチャー技術ブログ
    kanda_k
    kanda_k 2020/07/10
    errorラップしないならそのまんまreturnとかめっちゃわかる
  • gRPC ServerのエラーをInterceptorでgRPC Error Statusにマッピング(Go言語版)|Dentsu Digital Tech Blog

    電通デジタルでバックエンドの開発をしている齋藤です。弊社では社内/グループ会社向けデジタル広告運用実績の管理システムバックエンド APIgRPC を利用しています。 記事では gRPC サーバ内で発生したエラーを gRPC Server Interceptor で gRPC Error Status にマッピングする試作をご紹介します。 ユースケースgRPC を使った API サーバでエラーが発生した場合、エラーハンドリングとロギングをした後に gRPC クライエントへのエラーを伝えます。ここで、サーバのエラーを gRPC クライアントに伝えるエラーに変換する処理が発生します。クライアントに伝えるエラーメッセージはサーバで発生したことそのままではなく、クライアントに必要な情報にする必要があります。この処理は全ての gRPC のメソッド呼び出しで実施します。そこで、処理を gRPC

    gRPC ServerのエラーをInterceptorでgRPC Error Statusにマッピング(Go言語版)|Dentsu Digital Tech Blog
  • 1