2023 年振り返り

仕事 CI やデプロイ、ライブラリ更新など非機能要件に関する作業が多い一年でした。来年はもう少し機能要件にも関わっていけるといいなと思いました。 OSS 仕事に使っているライブラリに機能追加しました。 github.com 今年は Goa にたくさん Pull request …

ErrorsWithStack という Goa v3 プラグインを作った

errorswithstack はGoa v3 のプラグインで、オリジナルのサービスエラーにスタックトレースを追加します。このプラグインは github.com/cockroachdb/errors/withstack に依存しています。 github.com プラグインの有効化 プラグインを有効にするには、下記の…

AutoTrailingSlash という Goa v3 プラグインを作った

autotrailingslash は Goa v3 のプラグインで、末尾スラッシュのついた HTTP リクエストをハンドリングできるようにします。 Goa v3 は、v3.13.0 でデフォルトの HTTP ルーターを chi に切り替えました。この変更により、末尾にスラッシュが付いているリクエ…

子供に文字の読み方を教える用 Web アプリを作った

作りました。 tchssk.github.io 画面にアルファベットを 1 文字ずつ表示するだけのシンプルなアプリです。 元々、アルファベット表を 1 文字ずつ指差しながら読んであげて復唱してもらう、という遊びをやっていたのですが、何度もやっていると指差しが面倒に…

2022 年振り返り

ライフイベント 息子が生まれました。 受託開発 昨年から継続しています。使っている技術について記事を書きました。 zenn.dev 自分が経験したベストプラクティスを集めた構成になっているので、一般化できる部分は今後も記事にしていきたいと思っています。…

2021 年振り返り

個人での受託開発 知り合いの会社からシステム開発を依頼され、春先から個人での受託開発を始めました。日中の本業がフルタイムなので、夜間の副業として作業できる時間数で契約しています。インフラからアプリケーションまで、技術面のすべてを担当している…

GORM v1 から v2 に移行してみた

ふと思い立って個人プロジェクトの GORM を v1 から v2 に移行してみました。 まずはプロジェクトに GORM v2 をインストールします。 $ go get gorm.io/gorm import を github.com/jinzhu/gorm から gorm.io/gorm に変更します。 gofmt での一括置換が便利で…

2020 年振り返り

ライフイベント 娘が生まれました。 OSS Goa v3 のプラグインを作りました。 tchssk.hatenablog.com Goa v1 から v3 への design 移行をサポートするツールを公式に移譲しました。 tchssk.hatenablog.com 買い物 リングフィット アドベンチャー ヨドバシ.com…

Goa v1 から v3 へのマイグレーションツールを公式に移譲した

これは Go2 Advent Calendar 2020 の 13 日目の記事です。 以前作った Goa v1 から v3 へのマイグレーションツールを Goa 公式の GitHub Organization に移譲しました。 Thank you @tchssk for contributing the Goa design upgrader tool! This tool helps …

CodegenDisabler という Goa v3 プラグインを作った

codegendisabler は Goa v3 のプラグインで、コードジェネレータの部分的な無効化を可能にします。 github.com プラグインの有効化 プラグインを有効にするには、下記のように codegendisabler の package を import します。 import ( _ "github.com/tchssk…

React でタギロン用 Web アプリを作った

昨年購入したタギロンというボードゲームが面白くて、友人が遊びに来たときによくやっています。 たぎる、論理 TAGIRON タギロン 新装版発売日: 2018/09/28メディア: おもちゃ&ホビー このゲームはターン毎にメモを取るのが大事で、今までは JELLY JELLY CA…

2019 年振り返り

OSS Goa v3 がリリースされたので、仕事で Goa v1 を使っているプロジェクトを v3 に移行し始めています。使ってみると気になる挙動が見つかるので本家に Pull request を送りながら進めているのですが、 v1 の最初の頃にも同じように Pull request を送って…

golang.org/x/tools/go/analysis を使ってコードを自動修正する

これは Go3 Advent Calendar 2019 の 3 日目の記事です。 今年 2 月にリリースされた Go 1.12 において、 公式の静的解析ツールである go vet が golang.org/x/tools/go/analysis を使う形に書き直されました。 Analyzer golang.org/x/tools/go/analysis は …

Goa v1 と v3 の DSL の比較

前回の記事ではプリミティブ型の比較を行いましたが、今回は DSL の比較を行っていきます。各 DSL の詳細については随時追記していきます。 v1 v3 API API APIKeySecurity APIKeySecurity(APIKey)(APIKeyField) AccessCodeFlow (廃止) - Action Method Appli…

Goa v1 と v3 のプリミティブ型の比較

Goa v3 では design に使うプリミティブ型が v1 から変更になっています。この記事では Swagger データ型も交えながら v1 と v3 のプリミティブ型を比較してみます。 v1 のプリミティブ型 出典: https://godoc.org/gopkg.in/goadesign/goa.v1/design#pkg-con…

2018 年振り返り

仕事 サーバサイドでは引き続き Go を書いていました。フロントエンドでは React を書く機会があったのが良かったです。 OSS 今年もコツコツ goa に機能追加したりしていました。 tchssk.hatenablog.com tchssk.hatenablog.com multipart/form-data でファイ…

Go 1.11 Modules でパッケージ管理を行う

これは Go4 Advent Calendar 2018 の 22 日目の記事です。 今年の 8 月に Go 1.11 がリリースされました。このバージョンでは Modules と呼ばれる新しいコンセプトが導入されています。これはバージョニングとパッケージ配布の仕組みで、 GOPATH 配下以外で…

goa が返すエラーレスポンスの Content-Type を変更する

Web API がエラーレスポンスを返す際にはレスポンスボディでエラーの詳細を示すのが一般的です。 goa には goa.ErrorResponse という型が組み込まれており、 controller に到達する前の処理でエラーが発生した際のレスポンスに使われています。また controll…

goa で multipart/form-data を扱う (ファイルアップロード編)

前回 goa で multipart/form-data を扱う方法についてご紹介しました。 tchssk.hatenablog.com multipart/form-data に関連してよく取り上げられるのがファイルアップロードですね。 HTML フォームを介したサーバへのファイル送信は多くのウェブサービスで利…

goa で multipart/form-data を扱う

multipart/form-data という MIME タイプがあります。これは主に HTML フォームの内容をサーバに対して POST する際に用いられます。 goa の Request Context には http.Request が埋まっているので、そこから MultipartReader() や ParseMultipartForm() を…

2017 年振り返り

OSS 昨年に引き続き goa にコミットしていました。 2018 年は v2 が形になるといいですね。 tchssk.hatenablog.com 勉強会 goa 勉強会で発表もしました。 tchssk.hatenablog.com 転職 2 年半勤めた前職を辞めて 11 月から Pacific Porter で働いています。引…

Go で書かれた API Gateway "KrakenD"

これは Go3 Advent Calendar 2017 の 10 日目の記事です。 小さな役割を持つサービス群でアプリケーションを構成する、いわゆる Microservices が流行して久しいですね。サービスが細かく分割されるとき、それらを取りまとめるサービスが必要になることがあ…

goa で静的ファイル配信に go-bindata を使う

goa には静的ファイル配信のための DSL として Files が用意されており、以下のような定義を行うと FileServer を生成してくれます。 Files("/swagger/*filepath", "public/swagger/") 生成される FileServer は http.FileSystem という interface を通して…

goa へのプルリクエストの送り方 (バックポート編)

goa へのプルリクエストの送り方 (バックポート編) です。 goa では互換性維持のため master と v1 を別ブランチで管理しています。そのため、プルリクエストが master にマージされたあと、その変更を v1 ブランチにバックポートするようお願いされることが…

goa へのプルリクエストの送り方 (プルリクエスト編)

goa へのプルリクエストの送り方 (プルリクエスト編) です。本記事の内容を実施する前に準備編を済ませておいてください。 1. リポジトリに移動 コンソールで以下のコマンドを実行します。 $ cd $GOPATH/src/github.com/goadesign/goa 2. master から新しい…

goa へのプルリクエストの送り方 (準備編)

goa へのプルリクエストの送り方 (準備編) です。本記事の内容は、プルリクエストを送るための準備として最初に一回だけ行う必要があります。 1. GitHub で goa をフォーク https://github.com/goadesign/goa を開きます。 ページの右上にある Fork をクリッ…

goa へのプルリクエストの送り方

goa へのプルリクエストの送り方について 3 回に分けて解説する連載記事です。これを見れば誰でもコントリビュートできるようになるはずです! 目次 goa へのプルリクエストの送り方 (準備編) goa へのプルリクエストの送り方 (プルリクエスト編) goa へのプ…

goa勉強会 in 六本木一丁目で発表してきた

発表してきました。 connpass.com 国内の goa の勉強会としては golang: goa勉強会に次いで 2 回目になるかと思います。当日カミングアウトしましたが私はまだ goa の本番運用をしたことがないので、実際にサービス運用している視点での話がたくさん聞けてよ…

goa 公式サイトを日本語翻訳した & goa の開発メンバーになった

goa 公式サイトを日本語翻訳した 昨年始めた goa 公式サイトの日本語翻訳が終わりました。 goa.design 日本の開発者にあまり使われてないのは日本語のリソースが少ないからでは、ということで昨年末に ikawaha さんとプロジェクトを開始したのですが、結構分…

なぜ goa の DSL はブランク識別子への代入が必要なのか

goa のトップレベル DSL goa の design は DSL をネストさせながら記述しますが、その一番上の階層に来るものをトップレベル DSL と呼びます。標準で用意されている apidsl では以下の DSL がそれに当たります。 API() Resource() Type() MediaType() 前提と…