ブックマーク / future-architect.github.io (25)

  • go-smtp-mockをSMTPのモックサーバにして単体テストする | フューチャー技術ブログ

    はじめにTIG真野です。 バックエンドのアプリケーションの上で、メール送信するコードがある場合の単体テストをどう実現するか悩みました。 メールには、タイトル・文・From・TO・CC・BCCなど複数の設定値がありますし、SMTPサーバの接続情報もあります。これらを表現する構造体のモデルだけに絞った検証に留めることは、気が進みませんでした。時代はインフラレベルでダミーサーバを動かしモックする方向で動いています。SMTPでメール送信し、その送信結果をテストコード上で取得&検証する一連の流れを行って動作を確かめたいと思いました。 方法として、澁川さんのMailSlurperを使って6桁のコードの送信コードのテストをするで紹介されたMailSlurperを使うか迷いましたが、以下の点で牛刀だなと感じました。 メール送信するのはごく一部の機能(私の場合は1機能。今後増える見込みは現時点で見えなかっ

    go-smtp-mockをSMTPのモックサーバにして単体テストする | フューチャー技術ブログ
    yfnt
    yfnt 2024/07/11
  • AWS SDK for Go でエンドポイントの向き先を httptest.NewServer() にしてテスト | フューチャー技術ブログ

    はじめにTIG真野です。 AWS SDK for Go を使ったコードをクラウドサービスに依存無しでローカルにてテストするとき、次のような手法が考えられます。 外部アクセス部分をインターフェースにしてテスト時はモックコードに差し替えよく見る手法だが、テスト目的のみでインターフェースを作る手間があるSDKのmiddlewareを使用詳細はAWS SDK for Go V2でinterfaceのモック”無し”でテスト - 365歩のテックを参考くださいインターフェースの作成を抑えられるメリットがあるLocalStackなどのモックサービスを利用別プロセス(いわゆる、テストサイズはMedium)になるため。実行時間は1,2より増える。実環境に近い環境でテストできるため品質を上げやすい利点があるhttptest.NewServer() でモックするフューチャーで実績が多いのはLocalStackで

    AWS SDK for Go でエンドポイントの向き先を httptest.NewServer() にしてテスト | フューチャー技術ブログ
    yfnt
    yfnt 2024/07/10
  • Mockoonで簡単モックサーバー | フューチャー技術ブログ

    ちょっとしたウェブアクセスクライアントのコードを書いていて、サーバー側に正しくリクエストが送られているかの確認をする場合、モックサーバーを建てることが多いと思います。ウェブフロントエンド開発とかだとMock Service Workerが便利ですし、Playwrightのネットワークフック機能も便利です。GETだけならPythonでいつもやってしまうのですが、今回はPowerShellで作ったちょっとした自動化ツールかつエラーレスポンスを返したい、という状況だったので、Goあたりで適当なサーバーでも書くかな、と思っていたところ、ふと思い立ってぐぐってみたところでMockoonという良さげなツールを見つけて、使ってみたら便利だったので紹介します。 Mockoonとは僕は知らなかったのですが、2017年ごろからあるモックを作成するツールのようです。 GUIが提供されており、APIの定義やログ閲

    Mockoonで簡単モックサーバー | フューチャー技術ブログ
    yfnt
    yfnt 2024/07/10
  • 署名付きURLを利用したファイルアップロードWeb API設計の勘所 | フューチャー技術ブログ

    はじめに現代のWebアプリケーションにおいて、ユーザが写真や動画などのファイルをアップロードする機能は、しばしば求められます。 記事では、ファイルアップロードを実現するための一手段として、「署名付きURL」を利用した方式を取り上げ、その設計について詳しく解説します。 今回は、Amazon Web Services(AWS)を利用する前提のもと、このアプローチを探求していきます。 前半部分は署名付きURLをそもそもよく知らない方向けの導入部となっていますので、要点だけ抑えたい方は設計上のポイントから読まれることをお勧めします。 ファイルアップロードの実現方式パターン署名付きURLの話をする前に、ファイルアップロード機能をWeb APIとして実現する方式について、いくつか代表的なものを紹介します。 Pattern 1. multipart/form-datamultipart/form-da

    署名付きURLを利用したファイルアップロードWeb API設計の勘所 | フューチャー技術ブログ
    yfnt
    yfnt 2024/07/06
  • PostgreSQLのPub/Sub機能とJavaのクライアント実装 | フューチャー技術ブログ

    記事は「珠玉のアドベントカレンダー記事をリバイバル公開します」企画のために、以前Qiitaに投稿した記事を改訂したものです。 はじめにPub/Sub型のメッセージングアーキテクチャを採用するにあたっては、kafkaなどのブローカーミドルウェアや、Amazon SNSGoogle Cloud Pub/Subなどのマネージドサービスを利用するケースが多いかと思います。ところでPostgreSQLでも実はPub/Subができます。 すでに業務でPostgreSQLを使っていれば、新たにPub/Subブローカーを構築しなくても、疎結合なシステム間通信を簡易的に実現できます。 記事ではこの機能の紹介と、Pub/SubクライアントをJavaで実装する場合の選択肢、考慮点を示しています。 ※実行環境はPostgreSQL 16.2とJava 21です ※データベースの文字コードはUTF-8としてい

    PostgreSQLのPub/Sub機能とJavaのクライアント実装 | フューチャー技術ブログ
    yfnt
    yfnt 2024/06/29
  • 個人的docker composeおすすめtips 9選 | フューチャー技術ブログ

    記事は「珠玉のアドベントカレンダー記事をリバイバル公開します」企画のために、以前Qiitaに投稿した記事を一部ブラッシュアップしたものになります。 はじめにみなさん、docker composeを利用しているでしょうか? 複数のdockerコンテナをまとめて立ち上げたり、環境変数を定義できたり便利ですよね。 この記事ではある程度docker composeを利用している方向けに私が便利、便利そうと感じたdocker composeの機能を挙げてみました。 docker compose cli v2を利用docker-composeではなく docker composeコマンドも利用可能になっています。 Docker Desktopでは v3.4.0から利用可能で、基的にはコマンドの互換性あります。 ファイル監視による自動更新docker compose 2.20.0からCompose

    個人的docker composeおすすめtips 9選 | フューチャー技術ブログ
    yfnt
    yfnt 2024/06/21
  • SQLファイルから型安全なコードを生成するsqlc | フューチャー技術ブログ

    TIGの辻です。GoのORマッパー連載8日目です。記事では sqlc を紹介します。早速ですが、結論から行きましょう。 sqlc まとめ SQLファイルからデータベースにアクセスできる型安全なGoのコードを生成するライブラリ 構造体のモデルの手書き実装不要 複数テーブルをJOINしたときのマッパー実装不要 生成されるコードは不要なリフレクションなし SQLをがんがん書きたい、でも面倒なマッパー構造体は書きたくない、という開発者にとっては大きな味方になります。 sqlc の紹介 sqlc はSQLファイルからGoのアプリケーションコードを生成するライブラリです。2020/2に v1.0.0 をリリースし、着々とスターを伸ばしています。2021/08現在は v1.8.0 をリリースしています。資料で生成しているコードも v1.8.0 を用いています。 https://star-histor

    SQLファイルから型安全なコードを生成するsqlc | フューチャー技術ブログ
    yfnt
    yfnt 2022/12/16
  • CSV処理における共通処理をDecoratorパターンで実現する | フューチャー技術ブログ

    はじめにTechnogoly Innovation Group 辻です。 システム間のデータ連携として、他システムが出力した CSV ファイルを Go で読み込んでリレーショナルデータベースにファイルのデータを保存する、という処理がありました。CSV の値をデコードしたあとに共通的な処理を差し込みたいユースケースで Decorator パターンを使って実装をしました。コードベースをシンプルに保ちつつ共通処理をフックできます。実用的なユースケースで Decorator パターンを紹介する記事は少ないと思ったので、記事を書きました。 まず Decorator パターンが必要になった背景を説明したあとに具体的な Go の実装を見ていきます。 背景他システムが出力した CSV ファイルを Go でデコードして、PostgreSQL にデータを投入するような処理がありました。簡略化したイメージは以

    CSV処理における共通処理をDecoratorパターンで実現する | フューチャー技術ブログ
    yfnt
    yfnt 2022/10/21
  • ファイルダウンロード完全マスター | フューチャー技術ブログ

    Real World HTTPでも紹介したネタですが、お仕事で受けている技術コンサル中に質問をいただいた時に、微妙にで紹介した内容では少し足りなかったので、改めて整理のためにブログ記事にしてみました。次回、が改訂されることがあればこのブログエントリーの内容も入れて加筆したいと思います。 Real World HTTPだとGoを使っていましたが、フロントとサーバーを同時にいじるので、エントリーではNext.jsをサンプルに使います。Next.jsプロジェクトを作って(npx create-next-app@latest –ts)、適当なプロジェクト名を入れてアプリケーションの雛形を作っておいてください。 Next.jsでは、1つのスクリプトファイルを作成すると、それがサーバーAPI(/pages/api以下)と、フロントの画面(/pages/以下のapi以外)になります。Next.j

    ファイルダウンロード完全マスター | フューチャー技術ブログ
    yfnt
    yfnt 2022/06/23
  • OpenAPIからモックサーバを建てられるPrismを実際のプロジェクトに導入してみた | フューチャー技術ブログ

    こんにちは!フューチャー22卒内定者の大岩と申します。現在は、TIG DXユニットでアルバイトとして従事しています。 はじめに私が参加しているプロジェクトで、OpenAPI定義ファイルからモックサーバを建てることができるOSSツール「Prism」を導入することになりました。この記事では、Prism導入の手順や、躓いた点などを紹介します。 導入の背景現プロジェクトでは、フロントエンドVue.jsを採用し、バックエンドはGo言語で書かれたAPIサーバ2台で構成されています。これまでフロントエンドの開発を行う際には、ローカルでAPIサーバとDBを立ち上げる必要があり、フロントエンドを少しだけ変更したいという場合でもかなりの手間が掛かっていました。そこでモックサーバを構築し、画面の開発の際にはそこからデータを取得出来れば、フロントエンドの作業が格段に楽になると考えました。 バックエンドのAPI

    OpenAPIからモックサーバを建てられるPrismを実際のプロジェクトに導入してみた | フューチャー技術ブログ
    yfnt
    yfnt 2022/06/20
  • JSレスBootstrapなdaisyUIの秘密 | フューチャー技術ブログ

    使い方は、CSSのクラスにちょっと書き足すだけで動きます。使い勝手はBootstrapみたいですね。ドキュメントが検索しやすくて、サンプルが豊富で、シンプルに書かれているので、フロントエンドが苦手でCopy And Paste from Stack Overflowな人にも使いやすいと思います。 <button class="btn">neutral</button> <button class="btn btn-primary">primary</button> <button class="btn btn-secondary">secondary</button> <button class="btn btn-accent">accent</button> <button class="btn btn-ghost">ghost</button> <button class="btn b

    yfnt
    yfnt 2021/11/25
  • Go 1.17のtesting新機能 | フューチャー技術ブログ

    TIGの伊藤真彦です。 この記事はGo1.17連載の3記事目です。 Go1.17からのtestingにおける新機能Go1.17のリリースノートにこのような記載があります。 testing Added a new testing flag -shuffle which controls the execution order of tests and benchmarks. The new T.Setenv and B.Setenv methods support setting an environment variable for the duration of the test or benchmark. テストとベンチマークの実行順序を制御する新しいテストフラグ-shuffleを追加しました。 新しいT.SetenvおよびB.Setenvメソッドは、テストまたはベンチマークの期間中の

    Go 1.17のtesting新機能 | フューチャー技術ブログ
    yfnt
    yfnt 2021/08/12
  • Go 1.17連載が始まります: コンパイラとgo mod | フューチャー技術ブログ

    また毎回恒例のGo 1.17リリースパーティも開催予定です。ぜひご参加ください。 コンパイラ関数呼び出しが5%高速化1.16の時に予告されていたレジスタベースの関数呼び出しが入りました。呼び出し速度が5%、バイナリサイズが2%改善されました。特にコードの変更なく恩恵に授かれます。 あとはpanic時のスタックトレースの表示が改善され、今まで16進数で表示されていたのが改善されたらしいのですが、よくわかりませんでした。16進数は出なくなりましたが、試したが、…となるだけでした。 クロージャを含む関数がインライン展開されるようにもなりました。これもコード修正必要なく、パフォーマンスアップにつながる可能性があります。 なお、unsafeで怪しく引数を触ったりするとトラブルが発生する可能性がありますが、通常のGoの使用方法では問題になることはなさそうです。 build constraintのコメン

    Go 1.17連載が始まります: コンパイラとgo mod | フューチャー技術ブログ
    yfnt
    yfnt 2021/08/10
  • 100%型安全なgolangORM「ent」を使ってみた | フューチャー技術ブログ

    はじめにgolang ORM連載の2記事目となります。TIGの宮崎将太です。 突然ですがみなさん、O/Rマッパは何を使用していますか? golangだとGORMがデファクトスタンダードの位置を勝ち取りつつあり、当社でも特に理由がない限りはGORMを使用するケースが多い印象です。 今回は新たな可能性としてFacebook社謹製のent/entを検証します。個人的なO/Rマッパ経験としてはRuby on RailsのActiveRecordから始まり、当社謹製のUroboroSQLというO/RマッパからGORMまで割と多めに触れているので、大体どのO/Rマッパでも気になる機能を中心に作りながら検証します。 entとは 公式から引用してくると以下の通りとのこと。 データベーススキーマをグラフ構造として簡単にモデル化 スキーマをプログラムのGoコードとして定義 コード生成に基づく静的型付け データ

    100%型安全なgolangORM「ent」を使ってみた | フューチャー技術ブログ
    yfnt
    yfnt 2021/07/29
  • Goのおすすめのフレームワークはnet/http | フューチャー技術ブログ

    僕としてはGoのおすすめのフレームワークを聞かれたら、標準ライブラリのnet/httpと答えるようにしています。というよりも、Goの他のフレームワークと呼ばれているものは、このnet/httpのラッパーでしかないからです。 Goでアプリケーションを作成する場合のイメージは次の通り。battery includedなアプローチは他の言語でもたまにありますが、ついてくる機能が今時のものが多くて、標準ライブラリで済むことが多いです。ウェブ開発についてもそんな感じです。 PythonとかRubyとかもそうですが、言語組み込みのウェブサーバー機能はテスト用で番運用には機能が足りない、性能が足りない、ということから「プロダクションに耐えうるフレームワークを別に入れないと」と思う人も多いんじゃないかな、と思いますが、Goの場合は組み込みのサーバーで問題なかったりします。Node.jsに近いかも? 世間

    Goのおすすめのフレームワークはnet/http | フューチャー技術ブログ
    yfnt
    yfnt 2021/07/14
  • サーバーアプリ開発環境(Python/FastAPI) | フューチャー技術ブログ

    Pythonでお仕事する前提で、現在のところで自分が最適と考えるチーム開発のための環境整備についてまとめてみました。今までももろもろ散発的に記事に書いたりしていたのですが、Poetryで環境を作ってみたのと、過去のもろもろの情報がまとまったものが個人的にも欲しかったのでまとめました。前提としては次の通りです。 パッケージ管理や開発環境整備でPoetryを使う 今時はコードフォーマッター、静的チェックは当たり前ですよね? コマンドでテスト実行、コードチェックとか実行とかができる(CI/CD等を考えて) VSCodeでもコマンドで実行しているのと同じコードチェックが可能(ここコンフリクトすると困る) デプロイはDockerイメージ コンテナのデプロイ環境でコンテナに割り当てられたCPU能力を比較的引き出せて、スケールさせたら線形にパフォーマンスアップできるようなasyncioを前提とした環境構

    サーバーアプリ開発環境(Python/FastAPI) | フューチャー技術ブログ
    yfnt
    yfnt 2021/06/12
  • Go 1.16のembedとgo-swaggerを組み合わせてフルスタック自動生成フレームワークを作る | フューチャー技術ブログ

    TIGの伊藤真彦です。 渋川さんが投稿された Go 1.16のembedとchiとSingle Page Application Go 1.16のgo:embedとNext.jsの相性が悪い問題と戦う に近い研究記事です。 やりたいこと 私の最近の仕事go-swaggerによるバックエンドAPI開発です。流はバックエンドですが、必要に応じてクラウドインフラを弄ったり、ちょっとしたフロントエンドアプリケーションを作ったりといった動き方で働いています。 ある時、go-swaggerで作ったバックエンドAPIの資産を使って、ちょっとした開発者向けアプリケーションを作りたくなりました。 ローカル環境でサーバーとフロントエンドアプリケーションを両方起動すると、サーバーがlocalhost:3000 フロントエンドlocalhost:8080を占拠してしまいます。また、フロントエンドとバックエン

    Go 1.16のembedとgo-swaggerを組み合わせてフルスタック自動生成フレームワークを作る | フューチャー技術ブログ
    yfnt
    yfnt 2021/04/27
  • Go 1.16からリリースされたgo:embedとは | フューチャー技術ブログ

    TIGの伊藤真彦です。 この記事はGo 1.16連載の1記事目です。 トップバッターとしてgo:embedについて記事を書きます。 go:embedとはプロポーザルとなるissueはこちら、2020年9月のissue作成から約5ヶ月の時を経てgo:embedがリリースに含まれることになりました。 embedとは埋め込みという意味です、その名の通りファイル埋め込みをサポートするためのパッケージです。ファイルを読み込むだけならosやio/ioutilでも行うことが可能ですが、go:embedならではの特徴を説明します。 ちなみにio/ioutilはGo 1.16でdeprecatedになりました、詳しくは連載の他の記事で説明します。 利用方法手始めにサンプルコード、main.goを書いてみました。 main.gopackage main import ( _ "embed" "encoding

    Go 1.16からリリースされたgo:embedとは | フューチャー技術ブログ
    yfnt
    yfnt 2021/02/09
  • Goのデバッグ環境 on VSCode | フューチャー技術ブログ

    はじめにこんにちは。TIG/DXユニットの富山です。 私の使用するテキストエディタはVim一択でしたが、最近はVSCode浮気気味です(言わずもがな Vimプラグインは入れています) 今回はVSCodeGo言語用のデバッグ環境をテーマします! 環境構築前提条件: VSCodeがインストール済であること Goがインストール済であること Step 1:プラグインのインストールGoogleが公開しているVSCode用のGoプラグインである、Go for Visual Studio Codeをインストールします(2020年6月に開発管理がMicrosoftからGoogleGo開発チームへ移管されました)。 インストールが終わったら、Goプラグインに必要な各種ツールをインストールしていきます。 コマンドパレットを開く(Windows: Ctrl + Shift + p / Mac: Comma

    Goのデバッグ環境 on VSCode | フューチャー技術ブログ
    yfnt
    yfnt 2020/11/18
  • GoのWebアプリ開発でフラットパッケージにした話 | フューチャー技術ブログ

    2023.10.5追記: Goチームからプロジェクトの目的に応じたディレクトリ構造についてのドキュメントが公式に公開されています。 https://go.dev/doc/modules/layout 2020/11/13 「やってみてよかったことまとめ」「やってみて困ったこと」「外部モックサービスを使ったユニットテストの未来」の章を追記 2020/11/18 「やってみてよかったことまとめ」にSNSでもらったフィードバック内容を追記 はじめにこんにちは、TIG 真野です。秋のブログ週間連載の第9弾です。 1年弱ほどGo言語でWeb APIアプリケーション開発を行っていますが、かなり割り切った構成・テスト方針を採用しました。そろそろ1年弱になり機能開発も比較的落ち着き、保守運用フェーズの割合も徐々に増えてきた頃合いなので、やったこと・学び・反省といった振り返りを共有します。 Goのパッケージ

    GoのWebアプリ開発でフラットパッケージにした話 | フューチャー技術ブログ
    yfnt
    yfnt 2020/11/18