中級者向け

PostgreSQL

【PostgreSQL】CTE(WITH句)の基本:クエリを読みやすく整理する

こんにちは、かつコーチです。サブクエリを何段もネストしたSQLを書いて、自分で見返したときに「これ何をやっているんだっけ」と迷った経験はありませんか。今回はそんなときに役立つCTE(Common Table Expression、共通テーブ...
PostgreSQL

【PostgreSQL】JSONB型とGINインデックスで半構造化データを扱う

こんにちは、かつコーチです。前回は配列型・範囲型といったPostgreSQL固有のデータ型を紹介しました。今回はPostgreSQLの中でもとりわけ活用の幅が広いJSONB型と、それを高速に検索するためのGINインデックスを解説します。「柔...
PostgreSQL

【PostgreSQL】PostgreSQL固有のデータ型(配列型・範囲型など)

こんにちは、かつコーチです。前回まではPostgreSQLの環境構築を扱ってきました。ここからは「入門・環境構築」編を離れ、PostgreSQLならではのデータ型を扱う新しいカテゴリに入ります。MySQLしか触ったことがない人にとって、Po...
MySQL

【MySQL】MySQLとPostgreSQL、実務でどちらを選ぶべきか比較検証

こんにちは、かつコーチです。これでMySQL編は20本目、最終回です。「新しいプロジェクトのDB、MySQLとPostgreSQLどっちにしよう」これは、案件のDB選定のたびに必ず出てくる議論です。どちらも無料で使えるオープンソースのRDB...
MySQL

【MySQL】文字化けトラブルシューティング

こんにちは、かつコーチです。「絵文字を保存しようとしたらエラーになった」「日本語のデータが???や縺薙s縺ォ縺。縺ッのような文字化けで表示される」MySQLを触っていると、一度は文字コードのトラブルに遭遇するのではないでしょうか。文字コード...
MySQL

【MySQL】SQLインジェクション対策とプレースホルダの使い方

こんにちは、かつコーチです。「ログインフォームに' OR '1'='1と入力するだけで、誰でもログインできてしまう」こんな話を聞いたことはないでしょうか。これはSQLインジェクション(ユーザーの入力値をそのままSQL文に組み込むことで、意図...
MySQL

【MySQL】ユーザー権限管理:GRANT・REVOKEの基本

こんにちは、かつコーチです。「アプリのDB接続用ユーザーに、うっかりrootを使い続けていませんか」開発中はつい楽なのでrootユーザーで全部済ませてしまいがちですが、これは本番運用ではかなり危険な状態です。もしアプリにSQLインジェクショ...
MySQL

【MySQL】mysqldumpでバックアップ・リストアする方法

こんにちは、かつコーチです。前回はレプリケーションの仕組みを解説しましたが、レプリケーションはあくまで「複製」であり、誤ってデータを消してしまった場合には複製先にも同じ削除が伝わってしまいます。そのため、レプリケーションとは別にバックアップ...
JavaScript

【Nuxt.js】Vitestでコンポーネントをテストする入門

こんにちは、かつコーチです。コンポーネントを作るたびに、ブラウザで手動確認していませんか。画面が増えてくると、修正のたびに全ページを目視確認するのは現実的ではなくなります。そこで今回は、Nuxtの公式テストツールである@nuxt/test-...
JavaScript

【Nuxt.js】Piniaで状態管理を行う(Nuxtでの導入方法)

こんにちは、かつコーチです。前回は server/api を使って、Nuxtアプリの中に自前のAPIを作る方法を解説しました。今回は、そのAPIから取得したデータや、ログイン情報のようにアプリ全体で使い回したい状態を管理する Pinia(P...
JavaScript

【Nuxt.js】server/apiディレクトリでサーバーAPIを作る

こんにちは、かつコーチです。前回は useFetch ・ useAsyncData を使ってAPIからデータを取得する方法を解説しました。今回はその取得先、つまり「APIそのもの」をNuxtアプリの中に作る方法を扱います。「バックエンドを別...
JavaScript

【Nuxt.js】useFetch・useAsyncDataでデータを取得する(違いも解説)

こんにちは、かつコーチです。Nuxt.jsでAPIからデータを取得しようとすると、必ず出てくるのが useFetch と useAsyncData という2つのComposable(Composable:Vueの合成関数。状態やロジックをま...
JavaScript

【Nuxt.js】ルートミドルウェアでページ遷移を制御する

こんにちは、かつコーチです。前回は.vueを使った動的ルート・ネストされたルートの書き方を解説しました。今回は「ログインしていないユーザーを弾く」など、ページ遷移そのものを制御するルートミドルウェアを扱います。「未ログインなのに管理画面が見...
JavaScript

【Nuxt.js】動的ルート・ネストされたルートの書き方

こんにちは、かつコーチです。前回はlayouts/を使った共通レイアウトの管理方法を解説しました。今回は一歩進んで「/posts/1のようにIDが変わるページ」を作る動的ルートを扱います。「ブログ記事の詳細ページってどう作るの」という悩みを...
JavaScript

【Vue】Pinia入門:Vueの状態管理ライブラリ

こんにちは、かつコーチです。前回まででComposition API編(provide/inject、ライフサイクルフック、コンポーザブル)を一通り解説してきました。今回からは新しいテーマ、「状態管理」に入っていきます。最初のテーマは、Vu...
JavaScript

【Vue】コンポーザブル(Composable)を自作してロジックを再利用する

こんにちは、かつコーチです。前回はライフサイクルフック(onMounted など)の使い方を解説しました。今回は、Composition API編の締めくくりとして「コンポーザブル(Composable)」を扱います。同じようなロジックを何...
JavaScript

【Vue】ライフサイクルフック(onMounted等)の使い方

こんにちは、かつコーチです。前回は provide / inject によるProps drillingの解消を解説しました。今回は、コンポーネントの「生まれてから消えるまで」の各タイミングにコードを差し込める、ライフサイクルフックを扱いま...
JavaScript

【Vue】provide/injectでProps drillingを解消する

こんにちは、かつコーチです。前回は「スロット(slot)で再利用可能なコンポーネントを作る」を解説しました。今回は、コンポーネントの階層が深くなったときに必ずぶつかる「Props drilling」という問題と、それを解決する provid...
JavaScript

【Vue】スロット(slot)で再利用可能なコンポーネントを作る

こんにちは、かつコーチです。前回は、子コンポーネントから親コンポーネントへイベントを伝える emit を解説しました。今回は、Props・emitと並んでコンポーネント設計の要となる「スロット(slot)」を扱います。スロットを使いこなせる...
JavaScript

【Vue】watchとwatchEffectの使い分け

こんにちは、かつコーチです。前回は <script setup> の基本と、ref ・ reactive の使い分けを解説しました。今回は、データの変化を検知して処理を実行する「監視」の仕組み、watch と watchEffect を扱い...