miyazi888の覚え書き日記

学習したことを書き留めてます。

GoのAPIサーバーでmiddlewareを適用する時にaliceを使って楽をする

GoでAPIサーバを作っている時にmiddlewareを適用することはよくあると思うのですが、数が多いと下のようにゴテゴテした感じになると思います。 func main() { mux := http.NewServeMux() mux.HandleFunc("/handler1", handler1) handler := middle1(middle2(…

GoのAPIサーバのレスポンスをgzip圧縮する

今、仕事で作っているGoで作られたAPIサーバは比較的、レスポンスが巨大なものが多く、gzip圧縮した方が良さそうに感じた。 APIサーバはGCP上のAPI gatewayが前段にあり、その後ろでCloud Runで実際の処理が動いている構成。 最初はAPI gatewayとかにgzip圧…

Cloud Run jobsを試してみた

タイトルどおり、Cloud Run jobsを使ったことがなかったので試してみた。 手順 検証用のアプリ作成 main.go package main import "fmt" func main() { fmt.Println("start process") fmt.Println("something process") fmt.Println("finish process") } Dock…

GCP Cloud RunでDockerfileを作らなくてもデプロイして動作が可能か検証

Cloud Runで何かのアプリをデプロイする時にはコンテナイメージを作ったり、githubと連携したりする必要がある、と誤解していましたが、デプロイコマンドの--sourceオプションを使用することでローカルのソースからデプロイまで可能という記事を読んで、自分…

entでgroup byで集約した結果のcountでorder byする方法

タイトルどおり。 select count(*) as cnt from items group by type order by cnt desc みたいにgroup byして指定した項目毎に件数で並び替えたい、というケースがある場合、entではどうやったら記述できるのか調べた。 本当にこれが正解なのかはわからなか…

yarnでバージョンを切り替えられない現象への対応

yarnコマンドについては自前のPCでは特にv3系のしていて特に不便は感じてなくてそのままだった。 ただ、仕事関連のフロントエンドがv1系だったので、仕事の時だけ切り替える必要が出てきた。 最近のyarnは自前でバージョンを切り替え可能なようで、早速切り…

viteで開発サーバを起動しても何も表示されなくなる現象への対応

仕事のフロントエンド開発ではviteを使用しています。 ただ最近viteコマンドで開発サーバを起動しても何も表示されなくなる(画面は真っ白)、という事象に遭遇しました。 chromeのコンソールを確認すると以下のような文字列だけが表示されていました。 Fail…

Go言語のDefined Typeについて

仕事中のコードに出てきて、最初、知らなくて戸惑ったのが、このDefined Type。 以前はNamed Typeと呼ばれていたらしい。 機能としては、ある型を別の型として定義することができる機能。 型としてメソッドも追加できる。 何かの特別な形式を持つ文字列とか…

entで条件抽出に直接クエリを記述する

ExprP()を使うことで実現可能だった。 これでDBに用意されている関数などを使用することもできる。 具体的例は以下のとおり。 この例ではitemテーブルのnameが5桁以上の文字列のものだけを抽出する。 items, err := r.ent().Item.Query(). Where(func(s *sql…

VSCodeでカーソル下にある単語で検索を行う拡張機能

VScodeを使う以前はvimを使っていて、現在カーソルが当たっている単語で検索をする、ということをよくやっていた。 VScodeでは同じことが出来なさそうで諦めていたけれども、リンク先の拡張機能を試したら、実現できたので紹介。 marketplace.visualstudio.c…

entでクエリを確認する方法

entでクエリを確認がわからなかったのでメモ。 全てのクエリを出力したい場合 optionsで指定する clientを作成する時にoptionsにDebugを指定することで実現可能 func NewDBClient() *ent.Client { user := "user" password := "pass" port := "5432" host :=…

entのmixinを使ってスキーマ共通の項目を設定する

Mixin スキーマ共通の項目を定義して各スキーマで適用することが可能。 ここでは以下の記事で作成したUserテーブルに作成日時(created_at)と更新日時(updated_at)を追加する例を示す。 entを試してみた - miyazi888の覚え書き日記 共通項目の定義 ent/mixin/…

VS CodeでのGo言語のデバック

以下の場合にどうやってデバッカーを起動するのか、少し迷ってしまったので、その防備録。 エントリポイントが./main.go以外の時 テストコードをデバック エントリポイントが./main.go以外の時のデバック ./main.goにエントリポイントがある場合は素直にブレ…

entを試してみた その2(関連テーブル追加とJOIN)

前回のブログでentの基本的なCRUDの使い方がなんとなくわかったので今回は関連テーブルがある場合についてを検証したブログとなる。 前回 https://miyazi888.hatenablog.com/entry/2023/05/05/114518 関連テーブルを追加 ent new Comment スキーマ変更 この…

entを試してみた

仕事で使いそうだったのでORマッパーのentを試してみた。 公式はこちら。 https://entgo.io/ja 検証用のディレクトリ作成 mkdir test cd test go mod init test 検証用のDB(postgres)を作成 検証用のDBを作成する touch docker-compose.yml 以下のようにDBを…

samber/loを試した

すでにgo1.19がリリースされてしまっていますが、1.18がリリースされた際にGoにGenericsが導入されて大きな話題になりました。 で、Genericsが導入されたら、絶対にどこかの誰かがfilterやmap関数みたいなののライブラリを作ると思っていたら、やっぱりあり…

minikubeでingressを使う

k8sを学習していく中でingressという単語に遭遇し、どうやらLoad Balancer的なものであるらしい、ということまでは理解した。 ただ、実際に触ってみた方が理解しやすいかと思い、minikubeでingressを動作させてみた。 前提 以下の環境で動作確認した。 ubunt…

minikubeでローカルのdockerイメージを使う

きっかけ kubernetesの学習目的でminikubeをインストール。 学習中、minikubeでもローカルのdocker imageを使用したくなった。 ネットで検索するとだいたい、下記のような方法が記載されていた。 eval $(minikube docker-env) ところが、自分の環境では、こ…

2020年振り返り

立ち位置 フリーでプログラマとしてプロジェクトに参加。今年は3月まではA社。4月からはB社のプロジェクトに参画中。 利用した技術 Go / Gin Frmaework A社はGoでバックエンドを書いてた。それからGoの仕事が舞い込みそうな話しがきたので個人的にサンプル的…

echoでリクエストパラメータをチェックするには

echoでリクエストパラメータを取得し、構造体に割り当てる方法はわかったのですが、ここまで出来ると今度はvalidateの方法が知りたくなり、調べてみました。 echoにはvalidateそのものは用意されていないのですが、インターフェイスだけが用意されていて、こ…

Golangで構造体の配列を持つ構造体を初期化

微妙にわからなかったのでメモ代わりに。 Golangで以下のような構造があった時、初期化する方法がわからなかった。 構造体配列を持つ、構造体の時の初期化方法がわかってなかった。 type Store struct { Items []Item `validate:"dive"` } type Item struct …

echoでリクエストパラメータを構造体に割り当てる

昨日のブログでリクエストパラメータの取得方法はわかりました。 ただ、昨日のやり方ではパラメータを一つ一つ変換するコードを書かないといけません。 Railsであれば、ParamにHashですべて格納されているので悩む必要もないのですが・・・ 昨日のブログ htt…

echoのリクエストパラメータの受け取り方

リクエストパラメータの受け取り方を公式サイトを見ながら検証してみました。 と言ってもほぼ公式サイトに載ってるサンプルではあるのですが・・・ リクエストパラメータを取得する方法もシンプルなので下のプログラムを見たら、すぐにわかると思います。 リ…

echoのルーティング

echoのルーティングを試してみた。 と言ってもシンプルなので、特に迷うことはなかった。 実際にこれで何か作る時にはルーティング部分のみ、切り出して別関数化する感じになると思う。Railsで言うroute.rbの設定ファイルみたいな感じがイメージに近い。 プ…

golangのechoフレームワークを試してみた

GoでAPIサーバを立てて何かしたい、って時に何か良いのはないかと思ったら、あった。 echo.labstack.com Rubyで言うところのsinatraあたりの位置づけなのかと思った。 APIとかに特化している感じ。 Railsに当たるのにはbeegoってのがあるようだけども、とり…

vimでマークダウンファイルをリアルタイムプレビューする

これまで使っていたマークダウン関連のプラグインが何故か動作しなくなっていて、原因探るのも面倒くさかったので、何か新しいプラグインとか開発している人がいるんじゃないか、と思って探したら、いました。 github.com starもいっぱい付いてるし、README…

OpenAPI3の定義ファイルを元にモックサーバを起動する

OpenAPI3の定義ファイルを元にモックサーバを起動する きっかけ 仕事でAPIドキュメントを記述する必要があったので、OpenAPI3.0の学習がてら、定義ファイルから簡単にモックサーバを起動することができないか、調べてみました。 前提条件 mac os 10.13 High …

neovimでcheckhealthした時にOKにならない時のメモ

neovimを普段使っているんですが、時々、何かが動作うまく動作しなくなる時があって、そんな時は:checkhealthとか打つと大抵、何かがNGになっている。 特にpython系でOKでない時に、いろいろと時間を食ってしまうので、メモしておきます。 pyenv、virtualenv…

vim内でターミナルを開く時、開いたターミナルだけ、編集中のバッファのカレントディレクトリに移動する方法

vim

タイトルどおりです。 vim内でターミナル開いて作業する時にやりたいことは、僕の場合、ほとんどがファイル編集になります。 おまけにそのファイル編集はその時開いているバッファのディレクトリで作業したいことがほとんどだったりするので、ターミナルを開…

vimで現在開いてるファイルのファイル名を変更する

vim

プログラム書いてて、今編集中のファイルの名前を変更したい時、これまでは ctrl+zでvimを一旦停止して該当のディレクトリまで移動、mvコマンドでファイル名を変更後、fgでvimに復帰 :terminalでターミナル開いて、該当ディレクトリまで移動後、mvコマンドで…