もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

piniaのデータを永続化したい

はじめに

こんばんは。

最近関わっているプロジェクトでフロントエンドの状態管理に pinia を使っています。

このpiniaで管理しているデータをLocalStorageなりに入れて永続化してみました。

本題

以前状態管理に vuexを使っていて同じく 永続化したい要望があって、以下のライブラリを使ってました。 (もうメンテされないのですね...)

github.com

piniaでも似たようなものないかなと探していたら見つけました。

何個かあるみたいですね。

github.com

github.com

設定は大体同じで piniaのスクリプトファイルに persist: true などを追加するだけです。

違う記述方法でsessionStorageに保存することも可能です。

import { defineStore } from 'pinia'
import { TUser } from '../types/user'

export const useUserStore = defineStore('userStore', {
  state: () => ({
    user: {} as TUser
  }),
  getters: {
    getUser: (state) => state.user
  },
  actions: {
    setUser(user: TUser) {
      this.$state.user.user
    }
  },
  persist: true  // ← これが重要

//  SessionStorageに保存する場合はこんな感じ
//  persist: {
//    storage: sessionStorage,
//    paths: ['someState'],
//  },
})

終わりに

かんたんな備忘録でした。

フロントエンドは初めてやることばっかりで面白いです。

現場からは以上です。

dockerで立ち上げたamazon linuxイメージで Failed to get D-Bus connection: No such file or directoryというエラーが出る

はじめに

こんばんは。

結構ハマってしまったので、備忘録残しておきます。

調べたら結構出てきてハマっている方も多い感じでした。

mac => monterey 12.6

docker for mac => 4.12.0 (85629)

本題

最近 docker for macを最新に updateして docker-composeを使用して 各イメージを 起動したところ、起動はできたけど立ち上がっているコンテナの webサーバにアクセスできないという現象が起きました。

ビルドし直したりポート変更したりdocker再起動したり、いろいろやっても変わらず。

該当コンテナには入れるのでコンテナ内はいって内部で wgetを試してたら connection refused。

うーん。nginxが立ち上がってないのかな?とおもって systemctl start nginx で起動したところ以下のエラーが発生しました。

Failed to get D-Bus connection: No such file or directory

全然見たことなかったのでググってみたところ、バッチリ出てきました。

qiita.com

こちらの記事を参考に ~/Library/Group\ Containers/group.com.docker/settings.json を修正しました。

その後、docker for macを再起動して立ち上げ直すと無事アクセスできました。

終わりに

めちゃめちゃハマって、1時間以上時間が溶けました...

現場からは以上です。

laravelのエラーClass "Doctrine\DBAL\Driver\AbstractMySQLDriver" not foundがでた

はじめに

こんばんは。

laravelのマイグレーションでカラム変更しようとした際にエラーが出たので、備忘録しておきます。

本題

1

今回試した際に発生したエラーは以下です。

Class "Doctrine\DBAL\Driver\AbstractMySQLDriver" not found

こちらを解決するには、以下のパッケージが必要です。

github.com

下記コマンドでインストールすれば問題なくマイグレーションを実行できます。

$ composer require doctrine/dbal

2

別のマイグレーション実行時に出たエラーでありました。

TINYINTの方を変更しようとした際にエラーが起きました。

調べてみると、tinyintは変更できないみたいです。

readouble.com

Note: 以降のカラムタイプを変更できます。bigInteger、binary、boolean、date、dateTime、dateTimeTz、decimal、integer、json、longText、mediumText、smallInteger、string、text、time、unsignedBigInteger、unsignedInteger、unsignedSmallInteger、uuid。timestampのカラムタイプを変更するには、Doctrineタイプを登録する必要があります。

対処法は ALTER TABLEを直接実行する方法がベターのようです。

DB::statement('ALTER TABLE xxxx CHANGE COLUMN `xxxx` `xxxx` BIGINT UNSIGNED');

調べると結構出てきますが、 laravel8になっても発生していました。

終わりに

かんたんだけど備忘録として残しておきます。

最近laravelばっかりやってますが、別のこともやりたいな。

おわり。

7〜8月のダイエット結果

はじめに

こんばんは。

7〜8月のダイエット結果です。

前回はこちら

kojirooooocks.hatenablog.com

本題

7月、8月は暑いのもあり、疲れたためダイエットが億劫になってきた時期でした。

運動はいつものとおり下記

有酸素運動は FitBoxing

無酸素運動は腹筋ローラー

です。

ただし、先に行ったように億劫になっていたので、 30分やってたボクシングを 20分にしたり、腹筋ローラーも疲れてやらなくなったりしてました。。。

幸運だったのは、ご飯をあんまり食べなくなったので少食になったのか、運動してない日はあんまり食べないというダイエットを行えることができました。

おかげでそこまで運動しなくても体重増加は抑えられました。

ただし、運動しないと落ちませんでした。

なので、8月の終わりに頑張ってボクシングやりまくりまして、8月31日の段階で 66.0kg!!!!

今年の目標では 年末76kgだったみたいなので、ついに -10kgです。

ながかったなぁ。。。

kojirooooocks.hatenablog.com

終わりに

ついに66kgまで来ましたが、まだまだ肥満体型です。 目標は 60kg。

頑張ります!

github action でキャッシュを使う

はじめに

こんばんは。

先週から目眩と頭痛が続いていて体調が悪く死んでおりました。

今回は github action のキャッシュをつかってみたので備忘録として残しておきます。

docs.github.com

本題

本体はこちら

name: Test

on:
  push:
    branches:
      - main

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: shivammathur/setup-php@v2
        with:
          php-version: '8.1'

      - uses: actions/checkout@v3

      - name: Setup ENV
        run: |
          cp .env.example .env

      #### キャッシュのコード
      - name: Get Composer Cache Directory
        id: composer-cache
        uses: actions/cache@v3
        with:
          path: ${{ github.workspace }}/vendor
          key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
          restore-keys: ${{ runner.os }}-composer-
      - name: Install Dependencies
        if: steps.composer-cache.outputs.cache-hit != 'true'
        run: |
          composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
      #### キャッシュのコード

      - name: Execute Test
        run: |
          php artisan key:generate && ./vendor/bin/phpunit

これを使ってまず動かしてみます。

キャッシュが作られてないのでnot foundとなり、後続の composer installが実行されています。

つぎに、適当にファイルを修正して pushしてみます(mainブランチへのpushがトリガーなので動いてくれます)

キャッシュがヒットして後続のcomposer installは実行されていません!

終わりに

phpはこんな感じでできますが、jsもおんなじ要領でできます。

ただ、jsは setup-node でもキャッシュできるみたいです。

個人的には書き方統一したいなと思うので、jsもおんなじように書いちゃいたいです。

こんな感じで終わり。

来週からは体調治るといいな。。。

laravelのページネーションリンクにパラメータを渡す

はじめに

こんばんは。

またまた恥ずかしい話です。

久々に bladeファイル触っていて完全にやり方忘れていたので、備忘録で残しておきます。

本題

めちゃめちゃかんたんですがよくあるページネーションリンクに検索クエリを渡す方法です。

方法は以下。

{{ $users->onEachSide(5)->appends(Request::all())->links() }}

appends() が本体です。

github.com

内部でaddQuery()を実行してくれている感じです。

その後 links()を呼んでるのでページネーションリンクが生成されます。

このlinkで検索クエリがついてくれます。

ちなみにappendsは渡されたデータを内部で保持しているので、よくある管理画面で上下にlinkを表示する場合は、最初に呼ばれる方にだけ appendsを呼べばOKです。

終わりに

めちゃんこかんたんな話になりましたが、恥をかいて覚えていくスタイルなので、これからも恥かきながら進んでいきます。

リレーション先のレコード件数を取得する

はじめに

こんばんは。

今回も恥ずかしくも知らなかった件です。

本題

今までリレーション先のレコード数を確認するのって with() とかで指定してとってきたコレクションをcountしていました。

ただ、laravelでは withCount() ってのを提供していました。

readouble.com

<?php

$team = Team::query()->withCount(['users'])->where('id', $teamId)->firstOrFail();
dd($team->users_count); ← n件

便利なもんですね。。。 また、公式にものってたのですが、 withMin() withMax() withSum() とかよく使う系のものがいっぱいありました。

でもこれって Collectionでもおんなじこと簡単にできますよね??

phpでやるかDBでやるかどっちがいいんだろうと思いました。

結局自分の結論は 件数が多ければ DB 少なければ php という感じにしておきました。

終わりに

他にもいろんな知らないところいっぱいありそうです。。。

恥をかきつつ今日も勉強勉強。

現場からは以上です。

PS.

vue3おもろい