ぷっぽプログラミング備忘録

linux, javascript, php, C#, そのうちScalaとかアプリ開発とかやってみたいです。

nuxt3 + vuetifyの簡単インストール

結論

nuxt3をインストールした後

yarn add -D vuetify-nuxt-module

する。

yarn add @mdi/font

をしてもいいとのこと。

あとは、nuxt.config.ts を編集するだけでOK。

export default defineNuxtConfig({
  devtools: { enabled: true },
  modules: [
    'vuetify-nuxt-module'
  ],
}

引用元

Nuxt3 で Vuetify3 + SASS/SCSS を使う (vuetify-nuxt-module 使用) #Nuxt - Qiita

dockerで一部のサブディレクトリだけvolumesの範囲から除外したい

概要(結論)

空のnamed volumesで除外したいサブディレクトリを上書きすればよい

version: "3.9"

services:
  frontend:
    build: ./xserver
    ports:
      - 3000:3000
    volumes:
      - ./xserver:/app
      - dummy-volumes:/app/node_modules # node_modules はホストPCと共用しない(すると動かない)
    environment:
      - HOST=0.0.0.0
      - port=3000
    tty: true
    working_dir: /app
    entrypoint: yarn dev -o

volumes:
  dummy-volumes: # ダミー用volume

上記の例でいいますと、 ホストPC側には、./xserver/node_modules が存在し、 volumes で、./xserverをコンテナの/appに紐づけちゃうと、/app/node_modulesがホストPCの./xserver/node_modulesと同じ内容になってしまう状態です。
それを避けたいため、 dummy-volumesという空のnamed volumesを作成し、それをコンテナ内の/app/node_modules に設定することで、ホストの./xserver/node_modulesだけはコンテナに紐づかないので、コンテナの/app/node_modulesがコンテナで作成した内容になります。(ホストの内容で上書きされずに済みます)

参考

Docker Compose の bind mounts から node_modules を除外する方法

DockerでVolumeをマウントするとき一部を除外する方法 #JavaScript - Qiita

phpのPDOで、 postgresqlのjsonb演算子(?)を使いたい場合

概要

php(PDO) + postgresql の生SQLを実行時に Invalid parameter number: mixed named and positional parameters が発生。

原因、postgresqlのjsonbの演算子などではよく「?」を使うことがあるが、これと、phpのPDOのプリペアドステートメントの「?」(疑問符パラメータ)と勘違いされてエラー

例) foo_table.bar ? 'fuga_colum_name' といったpostgrsqlのjsonbの演算子(fuga_colum_nameというキーがbarカラムの中に存在するかを調べる)

解決方法

php(PDO)に渡すSQL文に「?」を使いたい場合は、「??」というふうにすれば使える。

PHP 7.4.0 以降では、クエスチョンマークを2回続けることで、 クエスチョンマークそのものをエスケープすることができます。 これは、?? という文字列が、 クエリをデータベースに送信する時に ? に変換されるということです。

参考文献

PHP: PDO::prepare - Manual

postgresql 中身が配列になっているjsonb型の検索

前提

[
    {
        "foo": "foo内容1",
        "bar": "bar内容1",
        "kore": "kore1"
    },
    {
        "foo": "foo内容2",
        "bar": "bar内容2"
    },
    {
        "foo": "foo内容3",
        "bar": "bar内容3"
    }
]

上記のように、配列の中にさらにjsonが入っているタイプのデータがjsonbカラムに入っていた場合。

したいこと

"kore":"kore1"というデータが存在する行だけ取得したい("kore":"kore1"を含まないデータは除外したい)

SELECT * FROM target_table t
WHERE 
  t.target_column @> '[{"kore":"kore1"}]'

でOKのようです。ポイントは[]配列の中に、存在を確認したいキーと値の組み合わせを入れるという…。これでいちおう配列jsonの格納されたjsonbタイプのデータで、含まれているものだけが抽出されました。 (直観的ではないですが…)

以下のようなカラムを持つ行は取得されません。 - "kore"キーを持つjsonデータがない

[
    {
        "foo": "foo内容1",
        "bar": "bar内容1",
    },
    {
        "foo": "foo内容2",
        "bar": "bar内容2"
    },
    {
        "foo": "foo内容3",
        "bar": "bar内容3"
    }
]
  • "kore"キーの値が"kore1"ではない
[
    {
        "foo": "foo内容1",
        "bar": "bar内容1",
    },
    {
        "foo": "foo内容2",
        "bar": "bar内容2",
        "kore": "kore999"
    },
    {
        "foo": "foo内容3",
        "bar": "bar内容3"
    }
]

postgresqlのテーブルのシーケンスを調べる方法

概要

SELECT pg_get_serial_sequence('foo_bar_table', 'hoge_column');

foo_bar_table: 調べたいテーブルの名前
hoge_column: 調べたいテーブルのカラム名

だいたいは、カラム名はidとかが多いんじゃないでしょうか。

参考

Postgresqlのserial型カラムのシーケンスを取得・設定したい