blog.syfm

徒然なるままに考えていることなどを書いていくブログ

Go

go-fuzzyfinder で色をつけられるようになった

個人的にほそぼそと開発をしていた ktr0731/go-fuzzyfinder を使うと fzf のような UI を持つ CLI ツールを非常に簡単につくることができます。go-fuzzyfinder では、Preview Window という、現在選択しているアイテムの詳細情報を知らせるための表示領域を…

ローカルで pkg.go.dev 形式のドキュメントを閲覧する

Go

Go を書くとき公開されている API や、そのコメントに不足や余分がないかチェックするために GoDoc を使っていた。特にプライベートパッケージはインターネットからドキュメントを参照できないため、GoDoc をローカルで起動し、チェックしていた。 syfm.hate…

curl から Go の API クライアントを自動生成する

これは Aizu Advent Calendar 2020 の 10 日目の記事です。9 日目は虚無さん、11 日目は虚無さんです。 curl を使って API クライアントやリクエスト・レスポンス型を自動生成したいと思ったことはありませんか?わたしはあります。ということでつくりました…

Go の t.Cleanup がとてもべんり

Go 1.14 で testing パッケージに新しく t.Cleanup(func()) や b.Cleanup(func()) が導入されました。 最初は今まで defer を使っていたところを置き換えられるくらいしか良いところがないかな〜と思っていましたが、想像以上に柔軟な使い方ができるので今ま…

pkg/errors から徐々に Go 1.13 errors へ移行する

Go

Go 1.13 からの新しい errors Go 1.13 からエラー処理が強化され、errors パッケージに As と Is 関数が追加されました。これにより、今までは pkg/errors のようなライブラリを使用しなければ実現するのが難しかった、型情報を保持したままの wrap/unwrap …

Pull Request と共に GoDoc を生成してくれる GitHub Action をつくった

これは Go5 Advent Calendar 2019 の 13 日目の記事です。12 日目は shiimaxx さん、14 日目は nsega さんです。 以前、以下のような記事を書いており、その中で GoDoc を通してソフトウェアを見ることでドキュメントや仕様の質を確認しやすくなるといったメ…

Go 1.13 にアップデートするとテスト時に "flag provided but not defined" エラーが発生するケース

Go でテストを実行する際は動的に生成された main 関数がエントリポイントとなっています。 Go 1.13 からはテスト実行時のテストフラグ (-v や -coverprofile など) の登録がこの生成された main 内で行われるようになったため、 main より先に実行される in…

モノレポで Go Modules を使う

Multi-Module Repository Go Modules では Git で管理されているリポジトリ内に複数のモジュールを定義することが可能です。*1 これを利用すると、たとえばプロジェクト内で使う Go ツールの依存管理をプロジェクトのコードとは異なる go.mod で行うことがで…

Go 1.13 に向けて知っておきたい Go Modules とそれを取り巻くエコシステム

Go

はじめに 今年の 8 月にリリースが予定されている Go 1.13 では、Go 1.11 で導入された Go modules に加え、Go module proxy といった新しいエコシステムが登場します。 そこで、そもそも Go modules は何を行っているのかや、何ができるのか、どういった要…

Go Conference 2019 Spring で発表してきた

先日行われた Go Conference 2019 Spring で "Fuzzy finder as a Go library" というタイトルで発表してきました。 gocon.connpass.com 発表スライドは以下。 speakerdeck.com Fuzzy finder をライブラリとしてつくる、という結構マニアックな発表にもかかわ…

GoDoc を多用している

最近は設計をする際にできる限り API 仕様を正確に記述するようにしている。このことを意識し始めた大きな要因は主に次の 2 つだと思う。 1 つ目は以前、前職で働いているときに柴田さんに API 仕様の重要性を教えてもらったことから。この時に聞いたことは…

gRPC における IDL と codec

codec gRPC は非常に柔軟に設計されていて、例えば RPC でメッセージをやりとりする際に、どういうシリアライザでエンコードするかを自由に選ぶことができます。gRPC の公式ドキュメントではシリアライザとして Protocol Buffers のみが利用されていますし、…

esa、Google Cloud Functions、Hugo、Netlify で簡易 CMS をつくる

Hugo は、Markdown ファイルを元にブログポストの HTML を静的に生成することのできるツールです。Hugo で生成した HTML を Netlify や GitHub Pages にデプロイすることでブログをホストするためのサーバを用意せずにブログを公開することができます。 しか…

fzf ライクな fuzzy-finder を提供する Go ライブラリを書いた

fuzzy-finder fzf や fzy、skim などの fuzzy-search (あいまい検索) を提供する CLI ツールの登場により、コマンドラインでの操作はますます表現豊かになっています。 例えば、カレントシェルのコマンドヒストリの一覧から fuzzy-finder を使って選択したり…

dept を使った Go ツールの依存管理

はじめに ツールのバージョン管理が煩雑 ツールの統一的なインストール方法がない ktr0731/dept Go Modules におけるツールの依存管理 dept を使った依存管理 dept の実装 まとめ はじめに Go プロジェクトでは、しばしば静的解析ツールが使用されます。例え…

技術書典 5 で Go & Kotlin 本を頒布します

技術書典 5 の「う11」で「Go & Kotlin Playground」というタイトルの本を頒布します。 以下のような本です。表紙は入稿 1 時間前につくりました。 Go & Kotlin Playground ホームページもつくりました。 gcf.syfm.me 割とニッチな章ばかりかなぁと思います…

自作 CLI ツールのワークフローとそれを支える技術

去年の秋頃から作っていた gRPC クライアントツールである Evans が今年に入り、徐々にいろんな方々に使われ始めました。 github.com Issue や Pull Request を頂けてとてもありがたい反面、それらを反映したバグフィックスや機能追加がツールに取り込まれて…

ある構造体型の変数の値をもう一方の変数にコピーするライブラリを書いた

書いたもの github.com 使用例 type Foo struct { Hoge string Fuga string piyo string } v1 := Foo{Hoge: "dummy", Fuga: "FUGA", piyo: "dummy"} v2 := Foo{Hoge: "HOGE"} ires, _ := mapstruct.Map(v1, v2) res := ires.(Foo) fmt.Println("%#v", res) …

gofmt を理解する

これは Aizu LT feat. CyberAgent での発表に補足を加えた記事です。 発表資料は speakerdeck.com gofmt Go には標準でさまざまなツールが揃っています。 その中でも自分が好きなものに gofmt があります。 gofmt は所謂コードフォーマッタの一つで、ソース…

Clean Architecture で Go 製の API サーバを書く

この記事は Aizu Advent Calendar の 20 日目の記事です。 adventar.org 前日は id:nktafuse の 、 nktafuse.hatenablog.com 明日は id:ywkw1717 です。 ywkw1717.hatenablog.com きっかけ 最近職場で Clean Architecture を取り入れたアプリケーションを Py…

より気軽に、簡単にテストができる gRPC クライアントをつくった

先日の A(izu)LT 0x09 で「Evans: more expressive universal gRPC client」 というタイトルで発表してきました。 タイトルの通り、gRPC クライアントをつくった話です atnd.org ALT は、会津大学の有志によって年に二回ほど開催されている LT (Lightning T…

Go にコントリビュートするまでの手順

最近、ついに Go (golang/go) にコントリビュートしました! 正確にはレビュー中で、レビューが通ってもマージされるのは Go 1.10 なので、だいぶ先は長いですが取り敢えず自分のできることは一通り終わりました。 Go ではレビューシステムに GitHub は使っ…

任意のコマンドのサブコマンドにエイリアスを設定できる salias をつくった

動機 最近のコマンドは大抵サブコマンド形式になっています。 $ docker pull hello-world このように、コマンド名 + サブコマンド + 対象 みたいな形式。 サブコマンドには大きく2種類あって、サブコマンドに動詞を指定するタイプと、リソースを指定するタイ…

iTunes をコマンドラインから操作するためのツールを書いた

ふと iTunes をコマンドラインから操作したいなぁ…と思い、絶対あるだろうとググってみたら案の定あったのですが、いくつか気に入らないところがあるものばかりだったので作りました。 その他の理由としては、UNIX という考え方 という本を読んでいて CLI ツ…

 なかったのでグルコスのマイページの情報を取得するライブラリを書いた

概要 BEMANI の音ゲーの一つである SDVX や弐寺、Jubeat なんかは非公式でもスコアデータを取得するアプリなりライブラリがある。そのどれもが根強い人気を誇っているのは多分音ゲーをやっている/やっていた人ならばわかるはず。 Groove Coaster (グルコス) …

イラストを Git で管理したかったのでツールをつくった

イラストの管理 自分はたまにイラストを描いたりするのですが、以前からその管理方法に苦労していました。 苦労していた点は主に次の 2 点です。 バックアップ 制作過程 Gif をつくるのが面倒くさい 強い人は、短時間でもさらっとイラストを描いてしまいます…