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

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

LaravelのSeederでダンプしたSQLファイルを読み込みたい

はじめに

こんばんは。

今回もLaravelでかんたんな備忘録です。

ある案件で、LaravelのSeederでダンプしたSQLファイルを読み込ませたい状況が出てきました。

今まで Factory/Seederを作ってテストデータを作ってたのですが、SQLファイルを読み込ませるのはやったことなかったので、調べてみました。

本題

やり方はかんたんで以下のような感じで作ります。

Seederファイル

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DumpDataSeeder extends Seeder
{
    /**
     * @return void
     */
    public function run(): void
    {
        $path = __DIR__ . '/sql/dump-data.sql';
        \DB::unprepared(file_get_contents($path));
    }
}

実行

$ php artisan db:seed --class=DumpDataSeeder

これで問題なくデータが入ります。

終わりに

かんたんですが、現場からは以上です。

base64した値をファイルに書き込む際にlinux sed unterminated `s' commandのエラーが出た対応

はじめに

こんばんは。

めっちゃかんたんな備忘録です。

とあるjsonファイルをbase64にして、その結果をとあるファイルに向けて置換したいというシェルスクリプトを書いてたのですが、どうも linux sed unterminated s' command が取れず悩んでたのですが、しょうもない結果だったので、過去の自分を戒めるために残しておきます。

本題

HASH_DATA=$(base64 ./key.json)

sed -i -e "e/KEH_HASH='';/KEY_HASH='${HASH_DATA}';/g" ./params.config

これを実行すると linux sed unterminated s' command というエラーが出てしまいました。

base64コードを普通に実行したら問題なく変換される。

base64化した結果を変数を使わずにsedで変換しようとすると問題なく成功する。

変数に入れたときだけだめ...?

とうーんうーんと必死に悩んでいたのですが。。。

結果答えとしては、 改行が入っていて変数展開時にエラーが出てた だけでした。

なので、base64コードを

HASH_DATA=$(base64 -w 0 ./key.json)

にすれば問題なく完了しました...

終わりに

久々にシェルスクリプト触ったので解決に時間かかりました。

現場からは以上です。

m1 macにphpenvでphp8.1をインストール

はじめに

こんばんは。

毎度おなじみphpインストール記事です。

今回M1 Macに買い替えたのでphpをインストールし直すタイミングありましたので、再度ブログ書いておこうと思います。

前回の記事

kojirooooocks.hatenablog.com

kojirooooocks.hatenablog.com

本題

1. homebrewのインストール

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
$ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/xxx/.zprofile
$ eval "$(/opt/homebrew/bin/brew shellenv)"
$ brew -v
Homebrew 3.6.5

2. anyenv, phpenvのインストール

$ brew install anyenv
$ anyenv install --init
$ anyenv -v
anyenv 1.1.5

$ anyenv install phpenv

$ vi ~/.zprofile
export PATH="$HOME/.anyenv/envs/nodenv/bin:$PATH"
if [ -d $HOME/.anyenv ];then
  export PATH="$HOME/.anyenv/bin:$PATH"
  eval "$(anyenv init -)"
  for D in `\ls $HOME/.anyenv/envs`
  do
    export PATH="$HOME/.anyenv/envs/$D/shims:$PATH"
  done
fi

3. phpをインストールするまでの各種インストール

$ brew install pkg-config bzip2 libjpeg libpng libiconv tidy-html5 libzip autoconf openssl libxml2 oniguruma pcre2

4. php8.1のインストール

$ PKG_CONFIG_PATH="/opt/homebrew/opt/jpeg/lib/pkgconfig" PHP_BUILD_CONFIGURE_OPTS="--with-bz2=$(brew --prefix bzip2) --with-iconv=$(brew --prefix libiconv) --with-tidy=$(brew --prefix tidy-html5) --with-external-pcre=$(brew --prefix pcre2)" phpenv install 8.1.10

5. phpのインストール確認

$ phpenv versions
8.1.10

$ phpenv global 8.1.10
8.1.10

$ php -v
PHP 8.1.10 (cli) (built: Oct 14 2022 00:22:21) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.10, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.10, Copyright (c), by Zend Technologies
    with Xdebug v3.1.5, Copyright (c) 2002-2022, by Derick Rethans

$ composer -v
Composer version 2.4.2 2022-09-14 16:11:15

終わりに

M1になったから前回同様とは行かないかな?と思ってましたが、そこまではまらず行けました。

現場からは以上です。

husky - .git can't be found の解決法

はじめに

こんばんは。

最近 husky を使ってみているのですが、 husky - .git can't be found (see https://typicode.github.io/husky/#/?id=custom-directory) というエラーが出てしまったので、そちらの解決方を備忘録として残しておきます。

huskyのバージョンは v8.0.1 です。

github.com

本題

答えはエラー分で表示されているドキュメントURLに記載されているのですが、 .gitフォルダとpackage.jsonが同一ディレクトリにないとだめのようです。

対応方法も上記ドキュメントに記載されています。

typicode.github.io

// package.json
{
  "scripts": {
    "prepare": "cd .. && husky install front/.husky"
  }
}

めちゃめちゃかんたんでした...w

ディレクトリを移動して、ディレクトリを指定して実行するということでした。

終わりに

フロントは色々知らないことが勉強できていいですね。

次もhuskyで遊んでみたブログを上げるかもしれません。

現場からは以上です。

vue3でのcomputedのgetter, setter

はじめに

こんばんは。 かんたんな備忘録ですが、vue3では初めて書いたので残しておきます。

本題

propsのデータを 子コンポーネントに存在するフォームのmodelで使用したい

そして、変更の結果を emitしたいみたいなパターンで使ってます。

vue2 ではこんな感じで使ってました。

vue2

props: {
  item: {
    type: String,
    required: true
  }
},
computed: {
    computedItem: {
      get() {
        return this.item
      },
      set(value) {
        this.$emit('changeItem', value)
      }
    }
  }

それをvue3ではこんな表現します。

vue3

const props = defineProps({
  item: {
    type: String,
    required: true
  }
})
const emit = defineEmits(['changeItem'])
const computedItem = computed({
  get: () => props.item.value,
  set: (value) => emit('changeItem', value)
})

vue3まだ慣れてないので、個人的にはまだvue2のほうが書き方的に慣れてますが、そのうち慣れてくのかな?

終わりに

最近うまく勉強できない日が続いています。

できないことでテンションを下げちゃっているのですが、できない自分を認めて、できるところからやっていこうと思います。

現場からは以上です。

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時間以上時間が溶けました...

現場からは以上です。