Skip to content

Posts

コンテナ実行環境比較

AWSとAzureとGCPで、コンテナ実行環境の比較をしてみたくなった。

GCPのCloud Run: コンテナを秒単位で本番環境にデプロイ  |  Google Cloudみたいなやつ。

AWSはAWS App Runner – フルマネージド型のコンテナアプリケーション - Amazon Web Services、AzureはAzure Container Apps | Microsoft Azureが比較対象となるかな?

AWSは選択できる最低スペックが1vCPU/2GBメモリなので、GCPとAzureもこれに合わせた見積もりにする。 なお、メモリはAzureは最低1GBから、GCPは最低128MBから選択できる。

Read more

OpenAPI Generator

Generators Listを眺めていたら、mysql-schemaなんてのがあったので、試してみた。

$ wget https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml
$ docker run --rm \
  -v ${PWD}:/local openapitools/openapi-generator-cli generate \
  -i /local/petstore.yaml \
  -g mysql-schema \
  -o /local/out
$ ls -R out/
out/:
Model  README.md  mysql_schema.sql

out/Model:
ApiResponse.sql  Category.sql  Order.sql  Pet.sql  Tag.sql  User.sql

out/mysql_schema.sqlにDDLが作成されていた。

out/Modelには、CRUD用SQLのテンプレートが作られていた。

petstore.yamlcomponents > schemasの定義がもとになっているのかな。

Read more

PocketbaseのMigration

昨日、Migratinが用意されているのを知って、試してみたけれど思ったように動かず。

マイグレーションにしか使わないパッケージもいくつかimportが必要だし、明示的にmigrate upしないといけない。

であれば、普通にHTTP APIでCreate Collectionしても良いかなという気持ちになっている。

Read more

Goのエラー処理

fmt.Errorf("~~: %w", err)の書き方にルールあるのかな、と思って調べたら、先人の記事があった。

いつもその時の雰囲気で書いていたので、こういったルールで揃えられるのは良い。

もうひとつ、template.Executeでエラーになったときに、どうするべきなのかという疑問。これも解決されていた。

Read more

PocketbaseのCollections

コンテナで起動時にコレクションを作成したい時のやり方が見つからない。

MySQLとかだと、/docker-entrypoint-initdb.dにSQLを置いておけば実行してくれる、そういうやつ。

DB migrations - Docs - PocketBase

Pocketbaseの起動時に初期化するのではなく、利用するアプリ側でマイグレーションを実行する方式らしい。

Read more

Goのredirect

ログアウトの処理(GET /logout)実行後にトップページにリダイレクトしようとした。

http.Redirect(w, r, “/”, 301)

おや?動作しない時がある。。

301だと、ブラウザはリダイレクト先を覚えて、次からはリダイレクト先を最初から叩くっぽい。

なので、302にしてあげないと思ったような動きにならない。

ところで、Goのhttpパッケージに定義されているステータスコードhttp.StatusTemporaryRedirect307なんだけど、これはPOSTの処理のリダイレクトもPOSTで行う(元のメソッドと同じにする)ので、トップページとかGETしか定義していないところへのリダイレクトがエラーになる。

Read more

mermaidのER図

VS Codeのmermaid拡張でER図を試していて、カラム名に日本語使えなくて論理名と物理名両方書きたいのにどうしようかと思ったら、コメントとして書けば日本語も通ることに気づいた。

mermaid - Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.

つまり、こう書ける。

erDiagram

user {
  bigint id PK "ID Auto increment"
  text email  "メール"
  text name  "名前"
}

型とカラム名はどっちが先でも通るっぽい。

Read more

GoのJSON

PocketBaseのユーザー作成をGoからHTTP叩いて実行しようとして、正常時とエラー時で戻ってくるJSONの形式が違っていた。

structを別々に用意して、Unmarshalでエラーになったらもう片方を使う?とか思ったけど、 golang は ゆるふわに JSON を扱えまぁす! — KaoriYaによると、interface{}(Go1.18以降ならanyか)を使えば、structを事前に用意する必要がないと。

Read more