カテゴリー
コンピューター

Vue.js 3 に組み込んだ Bootstrap 5 をカスタマイズできるようにする方法

カスタマイズ導入方法まとめ

  • Vue.js 3 に Bootstrap 5 を組込む手順メモ – oki2a24 の続きであることが前提。
  • yarn add sass-loader@^10 sass で依存パッケージをインストールします。ここで @^10 とバージョンを指定しているのは、最新版をインストールするとビルド時にエラーが発生したため。公式ドキュメントにも注釈がある。→ Working with CSS | Vue CLI
  • src/scss/custom.scss を作成し、 @import "node_modules/bootstrap/scss/bootstrap"; を記述する。カスタマイズ内容は、この行よりも上に書くこと。
  • src/main.jsimport "@/scss/custom.scss"; を記述し custom.scss を読み込む。今まで読み込んできた素の Bootstrap である import "bootstrap/dist/css/bootstrap.min.css"; 行は不要となるので削除する。
カテゴリー
コンピューター

Vue.js 3 に Bootstrap 5 を組込む手順メモ

まとめ

  • yarn add bootstrap@next @popperjs/core
  • src/main.js に次を追加する。
    import "bootstrap";
    import "bootstrap/dist/css/bootstrap.min.css";
    
カテゴリー
コンピューター

Vue.js 、例えば検索を実行して同ページに結果を表示する時に、検索条件を URL クエリ引数に反映させたい。その方法

こんなケースを想定してみる

ページの検索フォームに入力して検索ボタンをクリックすると AJAX で検索用 API を実行する。この時に、検索パラメータを URL のクエリパラメータとして URL へ反映することはできるのか?

また、ブラウザでの戻る、進むをクリックした時も、検索結果をページに表示するのはもちろん、 URL クエリ引数や検索フォームに検索キーワードを反映させたい。

実装方法まとめ

以下、 Vue.js 2 (Options API) での勘所です。 Compotision API でもポイントは同じで、メソッドを適宜置き換えてください。どちらの実装例も本記事にあるので、具体例を参考にするのも、良いと思います。

  • ページ初回表示時は created メソッド内でリソースサーバからデータ取得を行う。
  • 検索ボタンをクリックしたら自分のページへ URL クエリ引数つきで Vue Router の push を行う。例えば this.$router.push({ name: "AboutA, query: { base: "JPY" } }) となる。これにより beforeRouteUpdate メソッドが実行され、ここでリソースサーバからデータ取得を行う。
  • リソースサーバからデータ取得を行う処理 (メソッド) では次を気をつけると良い。
    • 引数として、クエリパラメータを受け取る。
    • メインの処理 (リソースサーバからのデータ取得) 以外に、検索フォームへ対応する URL クエリ引数の値を設定する、などの処理を行う。

読むべき公式ページ

これらの Vue Router の公式ページをしっかりと読み込んで理解できれば、本ページでやりたいことは実現できました。

コード例

カテゴリー
Linux

PHP で複数の検索キーワード (needle) が文字列に含まれているか調べ、存在すれば一致する検索キーワードを得るやり方

こんな時に役に立つ

住所の中にどの都道府県が含まれているのかを知りたい時。

まとめ

カテゴリー
Linux

tmux 起動中に新規セッションを追加する方法

tmux 起動中に新規セッションを追加する方法

  • プレフィックスキー (C-b (Ctrl-b)) + :new
カテゴリー
Linux

Visual Studio Code Remote Container を利用してもしなくても (Vim とかと docker-compose コマンド) 最強のローカル環境とデプロイ用のコンテナ化環境を作る方法、 Vue.js を例に添えて。

まとめ

作ったもの

docker-compose コマンドだけで環境をうまく切り替える方法

  • docker-compose -f オプションを使うことで、使用する YAML ファイルを取捨選択できるようになった。これを利用して、開発環境用ではボリューム共有を使い、サーバ環境用では別のサービスを追加する、といったことが可能になる。
  • docker-compose -f オプションで毎回 YAML ファイルを指定するのはとても手間がかかるが、解決することができる。Compose の設定に用いられる環境変数のデフォルト値を .env という 環境ファイル で行うことができる。このファイルに COMPOSE_FILE という CLI 変数 を定義し、その値に使用する YAML ファイルを指定することで -f オプションを省略することができる。
  • Dockerfile のマルチステージビルド を使うことによって、複数の環境を一つの Dockerfile で表現することができる。

Visual Studio Code で開発環境コンテナも使う方法

  • Visual Studio Code の Remote – Containers – Visual Studio Marketplace 拡張機能で実現する。
  • コマンドパレットから "Remote-Containers: Add Development Container Configuration File…" を選んで設定ファイルを自動生成するのが楽。
    • .devcontainer/devcontainer.json が独自の設定ファイル。 .devcontainer/docker-compose.yml はただの Docker Compose ファイル。
    • .devcontainer/devcontainer.json.devcontainer/docker-compose.yml の難しい箇所は本投稿の続きに記載した。
カテゴリー
コンピューター

マルチテナントアーキテクチャのアプリをより安全にするために PostgreSQL の行レベルセキュリティ (行セキュリティポリシー、 Row Level Security) をすぐに体験できるようにした記録

5.8. 行セキュリティポリシー を利用することで単一データベースかつ単一スキーマ方式を採用したマルチテナントアーキテクチャをより安全にすることができそうです。

実際にシステムやアプリに組み込む前に、 PostgreSQL の Row Level Security とはそもそもどのような物なのか、手を動かすことで体験いたしました。

本投稿では、その時の動きをまとめます。また、時間が経ってもう一度 PostgreSQL の Row Level Security をおさらいしたくなったり、新たに挙動を確かめたくなったりした時のために、すぐにお試しの環境を作れるように記録を残します。

カテゴリー
Linux

Laravel7 のバリデーションで公式ドキュメントで触れられていないルールオブジェクトの便利な使い方

Laravel7 で入力値そのものと入力値を分割した配列の両方を一度にバリデーションするためのルールの書き方 – oki2a24 を改善する話です。

ルールオブジェクトまとめ

公式ドキュメントに書いてあること

  • ルールオブジェクトの使用 – カスタムバリデーションルールのメソッドを定義
  • php artisan make:rule <name> コマンドで app/Rules ディレクトリに新しいルールオブジェクトのファイルを生成できる。
  • passes($attribute, $value) メソッドでバリデーションを行う。
    • $attribute: フォームの属性名
    • $value: フォームに入力された属性値。これをバリデーションすることになる。
  • フォームリクエストクラスの rule メソッでのルールオブジェクトの使用方法は、ルールを書く場所にインスタンス化すれば良い。そのため、ルールを書く際は文字列を | で区切るのではなく、配列で定義することになる。

公式ドキュメントに書いてないこと (こちらを本ページで扱う)

  • クロージャの使用 – カスタムバリデーションルールのメソッドを定義 のみを使う場合、カスタムバリデーションルールが 2 つ以上になるとテスト時にどのクロージャがテストに該当するのかわからなくなる。そのため、クロージャを利用せずにルールオブジェクトのみを使うのも良いと思う。
  • どうやらルールオブジェクトは 1 回のバリデーションで使ったオブジェクトをそのままエラーメッセージ出力時でも使うようだ。したがって、ルールオブジェクトクラスのコンストラクタやプロパティ (クラスのメンバ変数) を使って応用を効かせることができる。
  • passes メソッドで $attribute$value 以外の値を使いたい (例えばバリデーション時の判定に使う最大数とか) 場合は、ルールオブジェクトのコンストラクタで渡す。
  • message メソッドで例えば passes メソッド内で出てきた値を使いたい場合は、passes メソッド内からプロパティに渡してやればよい。
カテゴリー
Linux

Laravel7 で入力値そのものと入力値を分割した配列の両方を一度にバリデーションするためのルールの書き方

ポイント

  • フォーム値の事前加工 は使えない。なぜなら加工前の値もバリデーションしたいため。
  • クロージャの使用 – カスタムバリデーションルールのメソッドを定義 し、その中でフォーム値を加工してバリデーションを行う。
    • ただし、 rules メソッド内に 2 つ以上のクロージャのルールが存在するとテスト時にどのクロージャがテストに該当するのかわからなくなる。そのため試してはいないが ルールオブジェクトの使用 – カスタムバリデーションルールのメソッドを定義 をした方が良いと思われる。
    • 今回はクロージャの使用を押し通したため、テストではエラーメッセージを確認することでどのルールで不正となったかを確かめている。
  • カスタムバリデーションルールのメソッド内では 'required', 'email:rfc,spoof' といったバリデーションルールを宣言できない。とはいえ該当するバリデーションロジックを書くのは車輪の再開発となり、おかしい。探すと、 Illuminate\Validation\Concerns\ValidatesAttributes トレイトに各バリデーションルールの実装となっているのでこれを use して利用する。
カテゴリー
Linux

Laravel のイベントリスナーメソッドをユニットテストする方法

例。ユーザー削除時に連携するサービスも削除するイベント

実際に書いたコードから少し内容を変えており、実際に動かない可能性がありますことを最初にお断りします。エッセンスを伝えるためのコードとなります。

例えば、ログインに外部の OpenId Connect サービスを使う場合、今回は Google としましょうか。ユーザーを作成したときは Laravel の googles テーブルに連携時のデータを保存しているものとし、モデルでは user->google でアクセスできるものとします。

ユーザーを削除する時にイベントを実行し、リスナーで Laravel の google レコードを削除するとします。この時のリスナーの handle メソッドを、次のようにテストしました。