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

  • Goのテストでファイルの読み書きを扱いたい | フューチャー技術ブログ

    プロセス外部への副作用がないコードならテストは難しくありませんが、ファイルの読み書き、ネットワーク、データベースを使いだすと気にしなければならないことが増えます。今回はファイルの読み書きを扱うテストを書こうとしていろいろ調べたりしたことをまとめます。 単体のファイルの読み書きであれば、io.Readerやio.Writerを引数にすれば解決することも多いですが、複数のファイルがフォルダに格納されており、それを一括で読み書きするようなケースを想定しています。 fs.FSGo 1.16で追加されたのがfs.FSインタフェースです。ファイルシステムを抽象化するインタフェースです。go embedでプログラムに埋め込んだファイル群をアクセスしたり、os.DirFS()で実フォルダのfs.FSインタフェースを取り出したりできます。テスト時はすでに実行ファイルに組み込まれたデータをファイルとして読み込

    Goのテストでファイルの読み書きを扱いたい | フューチャー技術ブログ
    yug1224
    yug1224 2024/10/16
  • Software Design 2024年10月号 受託開発における設計ドキュメントの課題と解決案 作成・管理のヒントを探るへの寄稿 | フューチャー技術ブログ

    はじめに2024年9月18日に発売された、Software Design 2024年10月号の第1特集「再考 設計ドキュメントの課題 二重管理しない,陳腐化させない」の「第1章:受託開発における設計ドキュメントの課題と解決案 作成・管理のヒントを探る」に寄稿させていただきました。 Software Design とは技術評論社が出版している月刊の技術情報誌です。Webサービスを開発するソフトウェア業界のエンジニアにとっては説明不要と言っていいくらい鉄板です。 毎月様々なテーマについて特集を組んで取り扱っており、プログラミングだけでなく、OSやネットワークまで、その内容は多岐に渡ります。入門者・初心者向けの内容から実践的な内容も多く含まれているので、新人からベテランまであらゆるエンジニアにおすすめできる雑誌です。 定期購読をして、業界の最新情報をアップデートするのもおすすめです! 10月号の

    Software Design 2024年10月号 受託開発における設計ドキュメントの課題と解決案 作成・管理のヒントを探るへの寄稿 | フューチャー技術ブログ
    yug1224
    yug1224 2024/09/27
  • curlを讃えよ | フューチャー技術ブログ

    Web開発者を支える重要なツールにcurlがあります。素晴らしいツールなのですが、ウェブAPIのリクエストがJSONという時代にあって、JSON書くのが面倒とかいろいろあるのですが、そのためだけに他のツールを使うのではなく、もうちょっと世の中がcurlでテストしやすいようになったらいいのでは、と思っていました。 curlはJSONがめんどいというか、世の中のWebサービスcurlへの敬意が足りない https://t.co/tIWDToedIg — 渋川よしき (@shibu_jp) September 22, 2024 ということで書いてみました。 curlに合わせるためのミドルウェアというわけで実装しました。環境変数がなければ何もしません。 package glorytocurl import ( "bytes" "encoding/json" "io" "net/http" "ne

    curlを讃えよ | フューチャー技術ブログ
    yug1224
    yug1224 2024/09/25
  • Software Design 2024年9月号 Goのエラーハンドリングと向き合う ベストな設計戦略を徹底解剖を寄稿しました | フューチャー技術ブログ

    Software Design 2024年9月号 Goのエラーハンドリングと向き合う ベストな設計戦略を徹底解剖を寄稿しました はじめに2024年8月17日に発売された、Software Design 2024年9月号の第二特集である、「Goのエラーハンドリングと向き合う ベストな設計戦略を徹底解剖」 の2章を後藤、3章を渋川で執筆し寄稿させていただきました。 このような貴重な機会をいただいた栗木さんをはじめ技術評論社の方々には、心からお礼申し上げます。 みどころGo言語初心者から熟練者まで楽しんでいただける内容になっていると思います。 Go言語を利用する上でエラーハンドリングは必須の知識になるので、ぜひご一読ください。Goに馴染みのない方でもGo特有のエラー処理の方法を知ることで、普段触れている言語の理解を深めることができると思います。他言語と比較した、Go言語のエラーの特徴もみどころの

    Software Design 2024年9月号 Goのエラーハンドリングと向き合う ベストな設計戦略を徹底解剖を寄稿しました | フューチャー技術ブログ
    yug1224
    yug1224 2024/08/28
  • 夏の自由研究連載2024をはじめます | フューチャー技術ブログ

    こんにちは。技術ブログ運営の伊藤です。 夏の自由研究連載 2024のインデックス記事です。 夏の自由研究連載とは皆さんも一度は通ったことのある小学生の自由研究。時にはやってみたいことをテーマにして前のめりにやり続けていたり、反対に面倒なことを題材にしてしまったこともあったり、楽しかったり苦かったりする思い出のひとつかもしれません。 夏の自由研究連載とは、そんな気持ちを思い出しつつ、寄稿者の普段の興味をベースとして、 普段手をつけられなかったけど、連載を機に何か手をつけてみる 童心を思い出して、何かをじっくり研究、工作してみる などなど、「あの頃の無邪気なココロ」をブログにする連載です。 投稿スケジュール今年の投稿スケジュールです。 今年は、夏ならではのネタよりは個人の研究に近い記事の方が多くなりました。

    夏の自由研究連載2024をはじめます | フューチャー技術ブログ
    yug1224
    yug1224 2024/08/20
  • Go 1.23リリース連載 Go Telemetry | フューチャー技術ブログ

    はじめにこんにちは。CSIGの棚井です。 Go 1.23 Release Notes の内容を紹介する「フューチャー技術ブログ Go 1.23 リリース連載」の記事です。 Go toolchain に追加された Go Telemetry を取り上げます。 TL;DR Go 開発チームに「Go ツールチェーン(go, gopls, govulncheck)の利用状況、動作状況」をフィードバックするために追加されました Go Telemetry のデフォルトは local mode のため、意図的にステータスを変更しない限りリモートアップロードは行われません opt-in により有効化した場合、自動アップロード後に telemetry.go.dev で集計結果が公開されます ユーザ環境固有の情報は、Telemetry には含まれません 現時点(2024/07/25)ではアップロード数が少ない状

    Go 1.23リリース連載 Go Telemetry | フューチャー技術ブログ
    yug1224
    yug1224 2024/07/27
  • Go 1.23リリース連載 keep-alive,Cookieのアップデート | フューチャー技術ブログ

    はじめにTIG所属の大江です。Go 1.23リリース連載の7目です。 記事では以下の内容を取り上げます。 netでKeep-Aliveの詳細な設定が可能になりました net/httpにおけるCookieの扱いのアップデート 1. netでKeep-Aliveの詳細な設定が可能になりましたKeep-Aliveに関してより細かい設定が出来るようになりました。 新しく導入されたtype、KeepAliveConfigによって指定できます。 KeepAliveConfigは以下のように定義されています。 type KeepAliveConfig struct { // If Enable is true, keep-alive probes are enabled. Enable bool // Idle is the time that the connection must be idle

    yug1224
    yug1224 2024/07/27
  • Go 1.23リリース連載 os.CopyFS & path/filepath | フューチャー技術ブログ

    はじめにGo1.23連載の6目です。 Go1.23のos.CopyFSの追加、path/filepath パッケージの更新について解説します。 更新内容os.CopyFS の追加プロポーサルは#62484です。 io.fs/FSをローカルにコピーできるようになりました。 バージョン1.22まではディレクトリのコピーなどは、filepath.Walkなどを使い再帰的にコピーを行うか、外部ライブラリなどを利用する必要がありました。 1.23では標準パッケージを利用しつつ簡単な実装でディレクトリコピーをできるようになりました。 main.gopackage main import ( "fmt" "os" ) func main() { err := os.CopyFS("to_dir", os.DirFS("from_dir")) if err != nil { panic(err) //

    Go 1.23リリース連載 os.CopyFS & path/filepath | フューチャー技術ブログ
    yug1224
    yug1224 2024/07/27
  • 2024年版のDockerfileの考え方&書き方 | フューチャー技術ブログ

    最近はお客さんとの勉強会でDockerのドキュメントをつまみいして読むというのをやっていますが、改めて最新版を読んでみて、いろいろ思考が整理されました。2020年の20.10のマルチステージビルドの導入で大きく変わったのですが、それ以前の資料もweb上には多数あり「マルチステージビルドがよくわからない」という人も見かけるので過去の情報のアンラーニングに使っていただけるように改めて整理していきます。 仕事Pythonコンテナをデプロイする人向けのDockerfile (1): オールマイティ編で触れた内容もありますが改めてそちらに含む内容も含めて書き直しています。 エントリーの執筆には@tk0miya氏から多大なフィードバックをいただきました。ありがとうございます。 基的なメンタルモデル現代的な使い方を見ていくために「Dockerを使ってビルドする」というのはどのようなものか考えを整

    2024年版のDockerfileの考え方&書き方 | フューチャー技術ブログ
    yug1224
    yug1224 2024/07/27
  • Go 1.23リリース連載 text/template | フューチャー技術ブログ

    はじめにTIGの辻です。Go1.23連載の5目です。 この記事では、マイナーアップデートから text/template パッケージを取り上げて紹介します。 text/template のアップデート内容 テンプレートが新しいアクション “else with” をサポートするようになりました(#57646) テンプレートが新しいアクション “else with” をサポートするようになりました(#57646)text/template はテンプレートを用意し、データをテンプレートの値として当てはめて、テキスト出力できる便利なパッケージです。 FutureのいくつかのOSSでも、この text/template パッケージを利用しています。たとえば future-architect/vuls があります。 text/template パッケージで利用できる以下のようなテンプレートを用意し、

    Go 1.23リリース連載 text/template | フューチャー技術ブログ
    yug1224
    yug1224 2024/07/26
  • Go1.23 リリース連載 slices/maps(+ unique) | フューチャー技術ブログ

    はじめにGo 1.23リリース連載 の4目です。 Go 1.23の目玉機能でもあるイテレータの導入に合わせて、slices パッケージと maps パッケージにも新たな関数が追加されました。 記事では新たに追加された関数をサンプルコードとともに紹介します。 イテレータの詳細については、連載3目の記事「Go 1.23リリース連載 range over funcとiterパッケージ」を参照してください。 関連する Issues今回のアップデートは、range over function(#61405)の追加に伴うものとなります。iter パッケージの追加(#61897)をはじめとする標準ライブラリの一連のアップデートの内の1つとして位置付けられています。 slices と maps に関する Issue は次の2つです。 slices: add iterator-related func

    Go1.23 リリース連載 slices/maps(+ unique) | フューチャー技術ブログ
    yug1224
    yug1224 2024/07/19
  • Go 1.23リリース連載 range over funcとiterパッケージ | フューチャー技術ブログ

    Relesse Note に合わせて、言語仕様にも3つのシグネチャ(func(func() bool), func(func(V) bool), func(func(K, V) bool))が追加されています(Go1.22時点での言語仕様はこちら) Range expression 1st value 2nd value array or slice a [n]E, *[n]E, or []E index i int a[i] E string s string type index i int see below rune map m map[K]V key k K m[k] V channel c chan E, <-chan E element e E integer value n integer type, or untyped int value i see below fun

    Go 1.23リリース連載 range over funcとiterパッケージ | フューチャー技術ブログ
    yug1224
    yug1224 2024/07/19
  • Go 1.23リリース連載 archive/tar | フューチャー技術ブログ

    合計は500[byte]です。記載していませんが残りの12byteはパディングされて保持されます。 Uname、Gnameとは何か先ほどの表にある、12.所有者ユーザ名(uname)・13.所有者グループ名(gname)が該当します。 Uname、Gnameのルールさて、今回問題になるのはtar作成時の話です。 tarの作成時にはuname、 gname を取得するため、uid、gid を元に /etc/passwd、/etc/group を検索します。Go上では os/user の LookupId()と LookupGroupId() を呼び出しています。この操作により、TARファイルには、uid/gid と uname/gname の両方が格納されます。 今回のアップデートと関係はないですが、ちなみにtarの展開時における uname、gname と 3のuid、4の gid の扱い

    Go 1.23リリース連載 archive/tar | フューチャー技術ブログ
    yug1224
    yug1224 2024/07/19
  • Go 1.23リリース連載始まります&timeパッケージ | フューチャー技術ブログ

    1.23の更新内容の概要Go 1.23のアップデートとしては以下のようなものがあります。多いので、Win/mac/LinuxAMD/ARM関連以外は省略しています。リリースノートはこちらです。RC1の時点で書いているため、まだギリギリ変更があるかもしれません。 言語 range-over-func(1.22連載で説明済み)がオプションなしでビルドできるようになりました ツール Goチームにツール群が壊れていないかの統計情報をフィードバックするためのgo telemetryという機能が入りました。デフォルトでは送信しない、オプトインとなっています go env -changed を実行するとデフォルトから変更されたものだけを表示するようになりました go mod tidy -diffで、go mod tidyをドライランして実行時の影響を事前表示できるようになりました go.modとgo.

    Go 1.23リリース連載始まります&timeパッケージ | フューチャー技術ブログ
    yug1224
    yug1224 2024/07/19
  • go-smtp-mockをSMTPのモックサーバにして単体テストする | フューチャー技術ブログ

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

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

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

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

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

    署名付きURLを利用したファイルアップロードWeb API設計の勘所 | フューチャー技術ブログ
    yug1224
    yug1224 2024/07/07
  • [入門]Webフロントエンド E2E テスト を出版しました | フューチャー技術ブログ

    先日(2024年6月19日)、技術評論社さまから「[入門]Webフロントエンド E2E テスト ──PlaywrightによるWebアプリの自動テストから良いテストの書き方まで」をフューチャーの有志と共に出版いたしました。 書はエンジニア選書と言われるシリーズの1つとなります。 既にご購入いただいた方、誠にありがとうございます。 購入を検討されている方、詳しくはこちらをご覧ください。 https://gihyo.jp/book/2024/978-4-297-14220-9 書籍の概要E2Eテストをこれから導入しようとしている方を主な対象とし、必要なノウハウを詰め込んだ書籍となっています。書では、E2Eテストを学ぶ際の実装手段(ツール)として、近年人気が急上昇しているPlaywrightを中心に据えました。 章の構成は次のようになっています。 第1章 Playwrightハンズオン 第2

    [入門]Webフロントエンド E2E テスト を出版しました | フューチャー技術ブログ
    yug1224
    yug1224 2024/07/02
  • 社会人からはじめる競技プログラミング | フューチャー技術ブログ

    記事は「珠玉のアドベントカレンダー記事をリバイバル公開します」企画のために、以前Qiitaに投稿した記事を一部ブラッシュアップしたものになります。 はじめに記事は フューチャー Advent Calendar 2018 の13日目の記事として書かれました。私は弊社に入ってから競技プログラミングなるものを知り、実際に初めてみて約1年が経ちました。競プロって何? 競プロって聞いたことはあるけれどなんだかよくわからない…という方に、競技プログラミングの面白みを少しでも伝えられたらと思い、記事を書きました。 競技プログラミングって何?決められた条件のもとで与えられた問題、課題をプログラミングを用いて解決し、その過程や結果を競うものを競技プログラミングといいます1。 コンテストの種類競技プログラミングといっても様々な分野のコンテストが開催されており、大きく以下の5つの分類のコンテストがあります。

    社会人からはじめる競技プログラミング | フューチャー技術ブログ
    yug1224
    yug1224 2024/06/28
  • package.json dependencies メンテの仕方 最短ルート | フューチャー技術ブログ

    記事は「珠玉のアドベントカレンダー記事をリバイバル公開します」企画のために、以前Qiitaに投稿した記事をブラッシュアップし、フューチャー技術ブログに転載したものになります。Qiita側の元記事もアップデートしています。 はじめにpackage.json の dependencies をメンテナンスするにはどこから手を付ければいいか、を解説します。 Node.js を使っている人にはおなじみ package.json。 package.json の中で一番よく更新されるのが dependencies(個人の感想、次点で scripts)。 そして、依存パッケージが着々とバージョンアップしていくにも関わらず放置されてしまって後々問題になりがちなのも dependencies 。 「npm install で追加したっきり。パッケージのアップデートなんて考えたことなかった」という人や「Git

    package.json dependencies メンテの仕方 最短ルート | フューチャー技術ブログ
    yug1224
    yug1224 2024/06/26