中級者向け

ネットワーク

【ネットワーク】pingとtracerouteでネットワークの疎通を調べる

こんにちは、かつコーチです。ここまでIPアドレス、DNS、HTTP、TCP/UDPと通信の仕組みを学んできました。今回はいよいよ実践編として、「相手先に通信できているか」を実際に手を動かして確認するpingとtracerouteコマンドを解...
ネットワーク

【ネットワーク】TCPとUDPの違い:確実さとスピードのトレードオフ

こんにちは、かつコーチです。前回はOSI参照モデルで通信全体の地図を確認し、トランスポート層(第4層)にTCPとUDPが登場することを紹介しました。今回はそのトランスポート層の主役であるTCPとUDPを掘り下げ、何が違い、どう使い分けられて...
ネットワーク

【ネットワーク】OSI参照モデルとは?通信を7つの階層で理解する

こんにちは、かつコーチです。ここまでTCP/IP、IPアドレス、ポート番号、DNS、HTTP/HTTPSと、通信の要素を一つずつ見てきました。今回はそれらを一度整理して、通信全体を俯瞰する「地図」にあたるOSI参照モデルを解説します。「レイ...
ネットワーク

【ネットワーク】HTTPSとは?SSL/TLSで通信を暗号化する仕組み

こんにちは、かつコーチです。前回はHTTPメソッド(GET・POST・PUT・DELETE)の使い分けを解説しました。今回は、URLの先頭が「http://」ではなく「https://」になっている、あの「s」の正体を掘り下げます。ブラウザ...
ネットワーク

【ネットワーク】 HTTPメソッド(GET・POST・PUT・DELETE)の使い分け

こんにちは、かつコーチです。前回の記事で、HTTPは「依頼状(リクエスト)と返信(レスポンス)のやり取り」だと解説しました。では、その依頼状には具体的にどんな「依頼の種類」があるのでしょうか。この記事では、代表的なHTTPメソッドであるGE...
ネットワーク

【ネットワーク】名前解決の流れをたどってみる(ブラウザ→DNSサーバー)

こんにちは、かつコーチです。前回の記事で、DNSは「ドメイン名とIPアドレスを紐付ける電話帳のような仕組み」だと解説しました。では実際にブラウザにURLを入力してから、IPアドレスが返ってくるまでの間、裏側では何が起きているのでしょうか。こ...
ネットワーク

【ネットワーク中級】サブネットマスクとCIDR表記の考え方

こんにちは、かつコーチです。IPアドレスの仕組みがわかってくると、次にぶつかる壁が「サブネットマスク」と「CIDR表記」です。255.255.255.0や/24といった表記を見て、何を意味しているのかわからず戸惑った経験はないでしょうか。こ...
SQL

【SQL】ACID特性とは?トランザクションが守る4つの性質

こんにちは、かつコーチです。前回はEXPLAINで実行計画を読む方法を解説しました。ここから2本は、パフォーマンスと並んでデータベースの根幹をなす「整合性」の話に入っていきます。以前の記事でトランザクションのCOMMITとROLLBACKを...
SQL

【SQL】インデックスとは?なぜ検索が速くなるのか

こんにちは、かつコーチです。前回まではCREATE TABLEやデータ型、正規化といったテーブル設計の話を扱ってきました。テーブル設計をきちんと行っても、データ件数が増えてくると検索が遅くなる場面が出てきます。そこで登場するのがインデックス...
SQL

【SQL】トランザクションの基本:COMMIT・ROLLBACKでデータ操作を安全にする

こんにちは、かつコーチです。前回はDELETE文で、WHERE句を書き忘れると取り返しのつかない事故につながるという話をしました。「もし途中で間違いに気づいたら、実行前の状態に戻したい」——そう思ったことはないでしょうか。その願いを叶えてく...
SQL

【SQL】サブクエリの基本:クエリの中にクエリを書く|SQL中級者への第一歩

こんにちは、かつコーチです。「一度取得した結果を、もう一度別の条件で絞り込みたい」「他のテーブルの集計結果と比較したい」——そんな場面でJOINだけでは書きづらいと感じたことはありませんか。この記事では、そうした悩みを解決するサブクエリの基...
SQL

【SQL】HAVINGでグループ集計結果を絞り込む|WHEREとの違いを整理

こんにちは、かつコーチです。前回の記事「GROUP BYでグループごとに集計する」で、GROUP BYを使うとグループ単位の集計ができることを解説しました。そこで一つ壁にぶつかった方も多いのではないでしょうか。「集計した結果を条件で絞り込み...
PHP

【PHP】PHPの名前空間(namespace)とautoloadの基本

こんにちは、かつコーチです。前回はtry-catchによる例外処理を解説し、独自の例外クラスを作る方法にも触れました。クラスの数が増えてファイルを分割するようになると、次にぶつかるのが「クラス名の衝突」と「ファイルの読み込み管理」という問題...
PHP

【PHP】PHPのエラーハンドリング:try-catchで例外処理を書く方法

こんにちは、かつコーチです。前回は正規表現でパターンマッチングを行う方法を解説しました。今回は、プログラムの実行中に想定外のエラーが起きたときに備える「例外処理」を扱います。正規表現やファイル操作、後々学ぶデータベース接続など、外部の要因で...
PHP

【PHP】PHPの正規表現入門:preg_match・preg_replaceの使い方

こんにちは、かつコーチです。前回はファイルの読み書きを扱いました。今回は、文字列のパターンマッチングに使う「正規表現」を解説します。「なんだか記号だらけで難しそう」と敬遠されがちなテーマですが、入力チェックやデータの抽出など、実務での出番が...
PHP

【PHP】PHPの無名関数・クロージャ(use)をわかりやすく解説

こんにちは、かつコーチです。前回はデフォルト引数と可変長引数を使って、関数の引数をより柔軟に扱う方法を解説しました。今回は少しレベルを上げて、「名前を持たない関数」である無名関数と、そこから発展したクロージャを扱います。最初は「なぜ名前をつ...
SQL

【SQL】UNION・UNION ALLで結果セットを結合する

こんにちは、かつコーチです。「今月の注文テーブル」と「過去の注文アーカイブテーブル」を1つのリストとしてまとめて表示したい。こうした「複数のSELECT結果を縦に連結したい」場面で使うのがUNION・UNION ALLです。これまで解説して...
SQL

【SQL】3つ以上のテーブルを結合する

こんにちは、かつコーチです。実務のデータベースは、2つのテーブルだけで完結することはほとんどありません。「会員」「注文」「商品」のように、3つ、4つとテーブルが連鎖している構成が一般的です。今回は、複数テーブルを連結して結合する方法と、多対...
SQL

【SQL】LEFT JOIN・RIGHT JOINの違いと使いどころ

こんにちは、かつコーチです。前回はINNER JOINで「一致する行だけ」を取得する方法を解説しました。今回は、「一致しない行も含めて取得したい」ときに使うLEFT JOINとRIGHT JOINを解説します。「一度も注文したことがない会員...
SQL

【SQL】NULLの扱い方:IS NULL・IS NOT NULLでハマらないために

こんにちは、かつコーチです。「WHERE column = NULLと書いたのに、なぜか1件もヒットしない」——SQLを書き始めた人がほぼ必ず一度はハマる落とし穴です。今回は、NULL(値が存在しない、未入力であることを示す特殊な状態)の正...