<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>ROOTFUL</title><description>No description</description><link>https://rootful.net/</link><language>ja</language><item><title>CORSとは？設定方法やプリフライトについてわかりやすく解説！</title><link>https://rootful.net/posts/what-is-cors/</link><guid isPermaLink="true">https://rootful.net/posts/what-is-cors/</guid><pubDate>Wed, 13 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この記事で解決できるお悩み&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#1&quot;&gt;CORSエラーが出たけど意味がわからない...&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#2&quot;&gt;CORSの設定方法は？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#3&quot;&gt;プリフライトリクエストって何？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[st-kaiwa2 html_class=&quot;wp-block-st-blocks-st-kaiwa&quot;]&lt;/p&gt;
&lt;p&gt;こんな悩みを解決できます！&lt;/p&gt;
&lt;p&gt;営業職から会社員WEBエンジニア、&lt;br /&gt;
その後フリーランスWEBエンジニアに転向した自分が解説します。&lt;/p&gt;
&lt;p&gt;[/st-kaiwa2]&lt;/p&gt;
&lt;p&gt;この記事ではCORSとは何か、CORSの設定方法などを初心者にもわかりやすく解説します。&lt;/p&gt;
&lt;p&gt;この記事を読み終えれば、CORSエラーが出ても慌てることはなくなりますよ！&lt;/p&gt;
&lt;h2&gt;CORS（オリジン間リソース共有）とは？&lt;/h2&gt;
&lt;p&gt;CORSとは&lt;code&gt;Cross-Origin Resource Sharing&lt;/code&gt;の略で、日本語では&lt;code&gt;オリジン間リソース共有&lt;/code&gt;と呼ばれます。&lt;/p&gt;
&lt;p&gt;一言で表すと、異なるオリジンとのリソースのやり取りを可能にする仕組みです。&lt;/p&gt;
&lt;p&gt;といってもよくわからないと思うので、順を追って説明していきます。&lt;/p&gt;
&lt;h3&gt;オリジンとは&lt;/h3&gt;
&lt;p&gt;まずはオリジンとは何か説明します。&lt;/p&gt;
&lt;p&gt;オリジンとはURL内の&lt;code&gt;スキーム&lt;/code&gt;+&lt;code&gt;ホスト&lt;/code&gt;+&lt;code&gt;ドメイン&lt;/code&gt;+&lt;code&gt;ポート番号&lt;/code&gt;のことです。&lt;/p&gt;
&lt;p&gt;ただしポート番号は一般的に省略されるので、下の例だと&lt;code&gt;https//www.hogehoge.com&lt;/code&gt;がオリジンになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/01.png&quot; alt=&quot;オリジンとは&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;同一オリジンポリシー（SOP）とは&lt;/h3&gt;
&lt;p&gt;CORSを理解する上で欠かせない知識として、&lt;code&gt;同一オリジンポリシー&lt;/code&gt;があります。&lt;/p&gt;
&lt;p&gt;同一オリジンポリシーは、英語では&lt;code&gt;Same-Origin Policy&lt;/code&gt;の略でSOPと呼ばれます。&lt;/p&gt;
&lt;p&gt;一言で言うと、あるオリジンから取得したリソースから別のオリジンのリソースの取得を禁止するブラウザの仕組みです。&lt;/p&gt;
&lt;p&gt;リソース = ファイルやデータのことです。&lt;/p&gt;
&lt;p&gt;例えば&lt;code&gt;https://aaaaa.com&lt;/code&gt;のページにアクセスしたとしましょう。&lt;/p&gt;
&lt;p&gt;その状態で同一オリジンである&lt;code&gt;https://aaaaa.com/image.png&lt;/code&gt;から画像ファイルを取得して表示することは問題ありません。&lt;/p&gt;
&lt;p&gt;しかしオリジンが違う&lt;code&gt;https://bbbbb.com/image.png&lt;/code&gt;から画像ファイルを取得しようとすると、エラーが発生し画像を表示することができません。&lt;/p&gt;
&lt;p&gt;これが同一オリジンポリシーです。&lt;/p&gt;
&lt;p&gt;同一オリジンポリシーによって不正な処理が行われたりなどの被害を防ぐことができます。&lt;/p&gt;
&lt;h3&gt;CORSとは&lt;/h3&gt;
&lt;p&gt;では改めてCORS（オリジン間リソース共有）とは何かを説明します。&lt;/p&gt;
&lt;p&gt;同一オリジンポリシーによってセキュリティが高まるのは良いことですが、自分のブログ記事にYouTubeの動画を埋め込みたい時など、別オリジンのリソースを読み込みたい時はよくあります。&lt;/p&gt;
&lt;p&gt;そんな時、YouTubeが「このオリジンならリソース使わせてやってもいいよ」とCORSの設定を行うことで異なるオリジンでもYouTubeのリソースを使用することが可能になります。&lt;/p&gt;
&lt;p&gt;つまり、標準では異なるオリジン間でのリソースのやり取りは禁止されているため、例外的に特定のオリジンとのリソースのやり取りを可能にするための仕組みがCORSということです。&lt;/p&gt;
&lt;h2&gt;CORSの設定方法&lt;/h2&gt;
&lt;p&gt;ここからは具体的にCORSをどう設定するかを説明します。&lt;/p&gt;
&lt;p&gt;特定のオリジンとのリソースのやり取りを許可するにはレスポンスに&lt;code&gt;Access-Control-Allow-Origin&lt;/code&gt;ヘッダを指定する必要があります。&lt;/p&gt;
&lt;p&gt;レスポンス？ヘッダ？となる方は先にこちらの記事を読むことをおすすめします。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;832&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;p&gt;&lt;code&gt;https://aaaaa.com&lt;/code&gt;からのリソースの読み込みを許可したい時はこのようにレスポンスヘッダを指定します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Access-Control-Allow-Origin: https://aaaaa.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;全てのオリジンからのアクセスを許可する場合には&lt;code&gt;*&lt;/code&gt;を設定できます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Access-Control-Allow-Origin: *
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;CORSを使用したリクエストの種類&lt;/h2&gt;
&lt;p&gt;CORSを用いたリクエストには主に2種類あります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;シンプルリクエスト（単純リクエスト）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;プリフライトリクエスト&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;それぞれ詳しく説明します。&lt;/p&gt;
&lt;h3&gt;シンプルリクエスト&lt;/h3&gt;
&lt;p&gt;リクエストがサーバーの情報に影響を与えないと考えられる場合、直接そのリクエストを送信します。&lt;/p&gt;
&lt;p&gt;これをシンプルリクエストと呼びます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/02.png&quot; alt=&quot;シンプルリクエスト&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;条件&lt;/h4&gt;
&lt;p&gt;シンプルリクエストを送信するには以下のような条件を満たす必要があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;メソッドが以下のいずれか&lt;br /&gt;
GET, HEAD, POST&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ヘッダーは以下のみ&lt;br /&gt;
Accept, Accept-Language, Content-Language, Content-Type, Range&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Content-Typeヘッダーで指定されるTypeは以下のみ&lt;br /&gt;
application/x-www-form-urlencoded, multipart/form-data, text/plain&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;その他の条件に関しては&lt;a href=&quot;https://developer.mozilla.org/ja/docs/Web/HTTP/CORS#%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E5%88%B6%E5%BE%A1%E3%82%B7%E3%83%8A%E3%83%AA%E3%82%AA%E3%81%AE%E4%BE%8B&quot;&gt;オリジン間リソース共有 (CORS) - HTTP | MDN&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;h4&gt;確認方法&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://misc.laboradian.com/web-test/001/&quot;&gt;CORS のプリフライト・リクエストを観察する&lt;/a&gt;を参考に、シンプルリクエストを確認する方法を説明します。&lt;/p&gt;
&lt;p&gt;シンプルリクエストを送信し、デベロッパーツールで確認してみます。&lt;/p&gt;
&lt;p&gt;デベロッパーツールの開き方&lt;br /&gt;
&lt;code&gt;F12&lt;/code&gt;or&lt;code&gt;Ctrl + Shift + i（Windowsの場合）&lt;/code&gt;or&lt;code&gt;Cmd + Option + I（Macの場合）&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;すると以下のように、送信しているリクエストは1つだけであることがわかります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/03.png&quot; alt=&quot;シンプルリクエストの例&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;プリフライトリクエスト&lt;/h3&gt;
&lt;p&gt;リクエストがサーバーの情報に影響を与える可能性がある場合、本命のリクエストを送る前にそのリクエストを送って問題ないか確認する用のリクエストを送信します。&lt;/p&gt;
&lt;p&gt;これをプリフライトリクエストと呼びます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/04.png&quot; alt=&quot;プリフライトリクエスト&quot; /&gt;&lt;/p&gt;
&lt;p&gt;プリフライトリクエストは&lt;code&gt;OPTIONS&lt;/code&gt;メソッドで送信されます。&lt;/p&gt;
&lt;p&gt;プリフライトリクエストの例は以下のようになります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;OPTIONS /doc HTTP/1.1
...
Origin: https://aaaaa.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type,original-header
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上の例のように、プリフライトリクエストには送信したいリクエストの情報として&lt;code&gt;Origin&lt;/code&gt;と&lt;code&gt;Access-Control-Request-Method&lt;/code&gt;、&lt;code&gt;Access-Control-Request-Headers&lt;/code&gt;をヘッダーに含める必要があります。&lt;/p&gt;
&lt;p&gt;これらのヘッダーで、送信したいリクエストがどのメソッドで何のヘッダーを持っているかをサーバーに伝えます。&lt;/p&gt;
&lt;p&gt;このリクエストに対して、このようなレスポンスが返ってきます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;HTTP/1.1 204 No Content
...
Access-Control-Allow-Origin: https://aaaaa.com
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: Original-Header, Content-Type
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;Access-Control-Allow-Origin&lt;/code&gt;でアクセス可能なオリジンを、&lt;code&gt;Access-Control-Allow-Methods&lt;/code&gt;で送信可能なメソッドを、&lt;code&gt;Access-Control-Allow-Headers&lt;/code&gt;で指定可能なヘッダーを設定しています。&lt;/p&gt;
&lt;p&gt;今回の例では全て問題ないので続けて実際のリクエストを送信できますが、このチェックに引っかかってしまった場合は不正なリクエストとみなされ本命のリクエストを送信することはできません。&lt;/p&gt;
&lt;h4&gt;確認方法&lt;/h4&gt;
&lt;p&gt;シンプルリクエストと同じく、プリフライトリクエストを確認してみましょう。&lt;/p&gt;
&lt;p&gt;プリフライトを発生させるリクエストを送信し、デベロッパーツールで確認してみます。&lt;/p&gt;
&lt;p&gt;すると以下のように2つのリクエストを送信していることがわかります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/05.png&quot; alt=&quot;プリフライトリクエストの例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;それぞれのリクエストを詳しくみてみると以下のように&lt;code&gt;OPTIONS&lt;/code&gt;メソッドリクエストが送信された後、&lt;code&gt;GET&lt;/code&gt;メソッドリクエストが送信されていることがわかります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/06.jpg&quot; alt=&quot;プリフライトリクエストの詳細&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/07.jpg&quot; alt=&quot;本命リクエストの詳細&quot; /&gt;&lt;/p&gt;
&lt;p&gt;このようにプリフライトリクエストでは、先に&lt;code&gt;OPTIONS&lt;/code&gt;メソッドで本命のリクエストを送信して問題ないか確認し、問題なければ本命のリクエストを送信するという流れをとります。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;この記事ではCORSとは何か、CORSの設定方法、CORSを使ったリクエストの種類を説明しました。&lt;/p&gt;
&lt;p&gt;最後にもう一度ポイントをまとめておきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;CORSとは異なるオリジンとのリソースのやり取りを可能にする仕組み&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Access-Control-Allow-Originヘッダーを指定することでCORSを設定できる&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CORSを使ったリクエストにはシンプルリクエストとプリフライトリクエストの2種類がある&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;HTTPについてより詳しく勉強したい！という方向けに、おすすめの教材を紹介します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/dp/4774142042&quot;&gt;Webを支える技術 -HTTP、URI、HTML、そしてREST&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;こちらの本は正直初心者にとってはやや難しい内容もあります。&lt;/p&gt;
&lt;p&gt;ですがHTTPやステータスコードについて非常に詳しく書かれているため、当ブログなどで簡単に理解した後にさらに理解を深めるための教材として活用してみてください！&lt;/p&gt;
&lt;p&gt;参考&lt;br /&gt;
&lt;a href=&quot;https://developer.mozilla.org/ja/docs/Web/HTTP/CORS&quot;&gt;オリジン間リソース共有 (CORS) - HTTP | MDN&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://developer.mozilla.org/ja/docs/Web/Security/Same-origin_policy&quot;&gt;同一オリジンポリシー - ウェブセキュリティ | MDN&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://qiita.com/Hirohana/items/9b5501c561954ad32be7&quot;&gt;オリジン間リソース共有 (CORS)とは&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://misc.laboradian.com/web-test/001/&quot;&gt;CORS のプリフライト・リクエストを観察する&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>HTTPとは？仕組み、HTTPSとの違いについてわかりやすく解説</title><link>https://rootful.net/posts/what-is-http/</link><guid isPermaLink="true">https://rootful.net/posts/what-is-http/</guid><pubDate>Thu, 07 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この記事で解決できるお悩み&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#1&quot;&gt;HTTPって何...？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#1-1&quot;&gt;HTTPを理解するには何を勉強すればいいの？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#7&quot;&gt;HTTPとHTTPSの違いは？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[st-kaiwa2 html_class=&quot;wp-block-st-blocks-st-kaiwa&quot;]&lt;/p&gt;
&lt;p&gt;こんな悩みを解決できます！&lt;/p&gt;
&lt;p&gt;営業職から会社員WEBエンジニア、&lt;br /&gt;
その後フリーランスWEBエンジニアに転向した自分が解説します。&lt;/p&gt;
&lt;p&gt;[/st-kaiwa2]&lt;/p&gt;
&lt;p&gt;この記事ではHTTPとは何か、HTTPの仕組みなどを初心者にもわかりやすく解説します！&lt;/p&gt;
&lt;p&gt;この記事を読めばHTTPについての理解を深めることができますよ！&lt;/p&gt;
&lt;h2&gt;HTTP（&lt;strong&gt;H&lt;/strong&gt;yper&lt;strong&gt;T&lt;/strong&gt;ext &lt;strong&gt;T&lt;/strong&gt;ransfer &lt;strong&gt;P&lt;/strong&gt;rotocol）とは&lt;/h2&gt;
&lt;p&gt;一言で言うと、インターネット通信のルールです。&lt;/p&gt;
&lt;p&gt;私が英語で、あなたが日本語で会話しても意味が通じませんよね？&lt;/p&gt;
&lt;p&gt;それと同じで、インターネット通信も共通のルールに基づいて行う必要があります。&lt;/p&gt;
&lt;p&gt;その「インターネット通信のルール」として定められているのがHTTPです。&lt;/p&gt;
&lt;p&gt;ただし、インターネット通信のルールにはHTTP以外にもDNSやFTPなどがあるため、HTTPはそのうちの1つです。&lt;/p&gt;
&lt;p&gt;HTTPはホームページを見るために必要なファイルの受け渡しについてのルールを定めています。&lt;/p&gt;
&lt;p&gt;HTTP（HyperText Transfer Protocol）をざっくり日本語に訳すと&lt;br /&gt;
HyperText = ホームページ用のファイルを&lt;br /&gt;
Transfer = 送受信する&lt;br /&gt;
Protocol = ルール&lt;br /&gt;
となります。&lt;/p&gt;
&lt;h3&gt;HTTPの全体像&lt;/h3&gt;
&lt;p&gt;HTTPについて詳しく解説する前に、HTTPの全体像を説明します。&lt;/p&gt;
&lt;p&gt;詳しくは後ほど説明するので、まずはなんとなく眺めてみてください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/01.png&quot; alt=&quot;HTTPの全体像&quot; /&gt;&lt;/p&gt;
&lt;p&gt;この記事ではHTTPを理解する上で欠かせない以下5つについて解説します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;クライアント・サーバー&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;リクエスト・レスポンス&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;HTTPメソッド&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ステータスコード&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cookie&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;クライアント・サーバー&lt;/h2&gt;
&lt;p&gt;HTTPを使用したインターネット通信は、クライアントとサーバーと呼ばれる機器の間で行われます。&lt;/p&gt;
&lt;p&gt;我々がブラウザや動画を見るときに使うスマホやPCのように、サービスや機能を利用する側の機器のことを&lt;strong&gt;クライアント&lt;/strong&gt;と呼びます。&lt;/p&gt;
&lt;p&gt;一方で、Webページやアプリケーションなどのソースコードやデータを持ち、クライアントにサービスや機能を提供する側の機器のことを&lt;strong&gt;サーバー&lt;/strong&gt;と呼びます。&lt;/p&gt;
&lt;p&gt;今あなたはインターネットを利用してこのページを見ていますが、今このページを見ているあなたのスマホやPCはクライアントになります。&lt;/p&gt;
&lt;p&gt;そしてこのページのHTMLファイルや画像ファイルなどを提供している機器がサーバーになります。&lt;/p&gt;
&lt;p&gt;このように、インターネットを利用する際はクライアントとサーバーの2者間で通信が行われます。&lt;/p&gt;
&lt;h2&gt;リクエスト・レスポンス&lt;/h2&gt;
&lt;p&gt;HTTP通信はクライアントとサーバーの間で行われることは説明しました。&lt;/p&gt;
&lt;p&gt;その時、クライアントからサーバーへ送られる「◯◯のページが見たいです」「◯◯の機能を利用したいです」などのお願いのことをリクエストと呼びます。&lt;/p&gt;
&lt;p&gt;それに対し、「お求めのページ/機能はこちらですよ」のようにリクエストに対しての応答をレスポンスと呼びます。&lt;/p&gt;
&lt;p&gt;リクエスト・レスポンスは以下のように、それぞれ決まった形式に沿ってメッセージをやり取りすることで行われます。&lt;/p&gt;
&lt;p&gt;下記の例で使われているHTTP/1.1は比較的古いバージョンで、現在の主流はHTTP/2、HTTP/3です。&lt;br /&gt;
リクエスト・レスポンスの形式は違いますが基本的な部分は同じなため、この記事ではHTTP/1.1を参考にしています。&lt;/p&gt;
&lt;h3&gt;リクエスト&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;POST /test HTTP/1.1
Host: example.com
Content-Length: 12
Content-Type: application/x-www-form-urlencoded
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;
testtesttest
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;POST /test HTTP/1.1
Host: example.com
Content-Length: 12
Content-Type: application/x-www-form-urlencoded

testtesttest
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上2行で「どんなリクエストをどのサーバーに送るか」を指定しています。&lt;/p&gt;
&lt;p&gt;2~4行目はヘッダと呼ばれ、リクエストの送信元や送信するデータのサイズなどの追加情報を付与することができます。&lt;/p&gt;
&lt;p&gt;クライアントからサーバーに向けて何かデータを送信する場合は、ヘッダから1行あけてリクエストボディが追加されます。&lt;/p&gt;
&lt;h3&gt;レスポンス&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;HTTP/1.1 200 OK
Date: Thu, 26 Sep 2024 09:16:25 GMT
Vary: Accept-Encoding
Content-Type: text/html; charset=UTF-8
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;ja&quot; class=&quot;s-navi-right s-navi-search-overlay &quot;&amp;gt;
...
&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;HTTP/1.1 200 OK
Date: Thu, 26 Sep 2024 09:16:25 GMT
Vary: Accept-Encoding
Content-Type: text/html; charset=UTF-8

&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;ja&quot; class=&quot;s-navi-right s-navi-search-overlay &quot;&amp;gt;
...
&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;先頭の行には「リクエストが成功したかどうか」が書かれています。&lt;/p&gt;
&lt;p&gt;2~4行目はリクエストと同じくヘッダです。&lt;/p&gt;
&lt;p&gt;そしてレスポンスの値として返したいデータがレスポンスボディとして設定されます。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;リクエスト・レスポンスについての詳しい解説はこちらの記事でしています。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;832&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h2&gt;HTTPメソッド&lt;/h2&gt;
&lt;p&gt;HTTPメソッドとはリクエストの種類を表します。&lt;/p&gt;
&lt;p&gt;リクエストの例だと&lt;code&gt;POST&lt;/code&gt;の部分がHTTPメソッドになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/02.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;ここまでで説明したように、HTTP通信ではクライアントからサーバーに向けてリクエストを送ることでWebページを閲覧するなどのサービスや機能を利用することができます。&lt;/p&gt;
&lt;p&gt;ですが実際にはWebページ閲覧だけでなく、ファイルを更新したりフォーム送信したりと、リクエストにはいくつか種類があります。&lt;/p&gt;
&lt;p&gt;「◯◯のページが見たいです」「◯◯のデータを送ります」「◯◯のファイルを削除してください」などのリクエストに名前をつけたものがHTTPメソッドです。&lt;/p&gt;
&lt;p&gt;主に使われるメソッドは&lt;code&gt;GET&lt;/code&gt;と&lt;code&gt;POST&lt;/code&gt;の2種類ですが、全て含めると9種類あり、それぞれの詳しい内容を知りたい方はこちらの記事がおすすめです。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;779&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h2&gt;ステータスコード&lt;/h2&gt;
&lt;p&gt;ステータスコードとはリクエストが成功したか、失敗したかどうかを表す3桁の数字です。&lt;/p&gt;
&lt;p&gt;ステータスコードは100番台~500番台の大きく5つに分けられており、それぞれ大まかな内容が決まっています。&lt;/p&gt;
&lt;p&gt;そのため、先頭の数字を見れば通信が成功したか失敗したかを判断することができます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;1xx : 処理中&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2xx : 成功&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;3xx : リダイレクト&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;4xx : クライアントエラー&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;5xx : サーバーエラー&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ステータスコードは送信されたリクエストの結果として、レスポンスとして返却されます。&lt;/p&gt;
&lt;p&gt;レスポンスの例で言うと赤枠の部分です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/03.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;それぞれのステータスコードの詳しい解説はこちらの記事でしています。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;740&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h2&gt;Cookie&lt;/h2&gt;
&lt;p&gt;Cookieはユーザーの状態を維持したり管理するための仕組みです。&lt;/p&gt;
&lt;p&gt;HTTPではリクエストとレスポンスの1往復で通信が完結し、前回のリクエスト・レスポンスの内容を記録することはしません。&lt;/p&gt;
&lt;p&gt;そのため、「5分前に〇〇のサイトにログインした」「ショッピングカートに商品を追加した」などの状態を維持することができません。&lt;/p&gt;
&lt;p&gt;するとアクセスの度に毎回ログインしなくてはいけない、商品をカートに入れたはずなのに消えてしまうなどなど、大変面倒なことになってしまいます。&lt;/p&gt;
&lt;p&gt;そんな面倒をなくすため使われるのがCookieという仕組みです。&lt;/p&gt;
&lt;p&gt;Cookieを使うとサーバーから受け取った情報をブラウザに保存することができ、その情報をリクエストと一緒に送ることで以前ログインしたことのあるユーザーであることの証明などを行うことができます。&lt;/p&gt;
&lt;p&gt;下記はログインが必要なサイトにアクセスする場合のCookieの流れです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/04.png&quot; alt=&quot;Cookieを使った通信の流れ&quot; /&gt;&lt;/p&gt;
&lt;p&gt;ログインをするとサーバーからCookie情報としてユーザーIDのようなものが渡され、それをブラウザに保存します。&lt;/p&gt;
&lt;p&gt;2回目以降のアクセスではそのCookieを付与してリクエストを送ることで再度ログインすることなくサービスを利用することができます。&lt;/p&gt;
&lt;p&gt;Cookieについての詳しい説明はこちらの記事でしています。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;872&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h2&gt;HTTPとHTTPS（HyperTest Transfer Protocol Secure）&lt;/h2&gt;
&lt;p&gt;インターネットでサイトを見るとき、URLの先頭に「http://」や「https://」がついているのを見たことがあると思います。&lt;/p&gt;
&lt;p&gt;これらはそれぞれ「HTTPプロトコルで通信するよ」「HTTPSプロトコルで通信するよ」ということを意味します。&lt;/p&gt;
&lt;p&gt;これらの違いは通信が暗号化されているかどうかです。&lt;/p&gt;
&lt;p&gt;HTTPプロトコルでは通信内容が暗号化されないため、パスワードやクレジットカード情報などが簡単に盗まれてしまいます。&lt;/p&gt;
&lt;p&gt;一方でHTTPSは通信内容を暗号化してくれるため、通信を盗み見たとしても簡単に情報を盗むことはできません。&lt;/p&gt;
&lt;p&gt;そのため現在ではHTTPSが主流となっており、HTTPを使用しているサイトは危険なためできる限り利用しない方が良いでしょう。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;この記事ではHTTPとは何か、HTTPを理解するために必要な知識について解説しました。&lt;/p&gt;
&lt;p&gt;全体を理解してもらうため細かい説明は省いたので、詳細はそれぞれの記事を読んでもらうか他のサイトや参考書で調べてみてください！&lt;/p&gt;
&lt;p&gt;最後にポイントをまとめます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;HTTPとはインターネット通信のルールである&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;HTTP通信はクライアントとサーバーの2者間でやり取りが行われる&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;クライアントからサーバーへの通信をリクエスト、サーバーからクライアントへの通信をレスポンスと呼ぶ&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;HTTPメソッドはリクエストの種類を表す&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ステータスコードはリクエストが成功か失敗かを表す数字である&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cookieはユーザーの状態を維持・管理するための仕組み&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;HTTPSは通信内容が暗号化されるため安全に通信ができる&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最後に「HTTPについてもっと知りたい！」という方向けにおすすめの教材を紹介します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/dp/4774142042&quot;&gt;Webを支える技術 -HTTP、URI、HTML、そしてREST&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;こちらの本は正直初心者にとってはやや難しい内容もあります。&lt;/p&gt;
&lt;p&gt;ですがHTTPやステータスコードについて非常に詳しく書かれているため、当ブログなどで簡単に理解した後にさらに理解を深めるための教材として活用してみてください！&lt;/p&gt;
</content:encoded></item><item><title>HTTPセッションとは？関連知識から初心者にもわかりやすく解説！</title><link>https://rootful.net/posts/what-is-http-session/</link><guid isPermaLink="true">https://rootful.net/posts/what-is-http-session/</guid><pubDate>Thu, 24 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この記事で解決できるお悩み&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#1&quot;&gt;セッションって何...？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#3&quot;&gt;セッションの仕組みは？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#2-4&quot;&gt;セッションとCookieってどういう関係？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[st-kaiwa2 html_class=&quot;wp-block-st-blocks-st-kaiwa&quot;]&lt;/p&gt;
&lt;p&gt;こんな悩みを解決できます！&lt;/p&gt;
&lt;p&gt;営業職から会社員WEBエンジニア、&lt;br /&gt;
その後フリーランスWEBエンジニアに転向した自分が解説します。&lt;/p&gt;
&lt;p&gt;[/st-kaiwa2]&lt;/p&gt;
&lt;p&gt;この記事ではセッションとは何か、その仕組みなどについて初心者向けにわかりやすく解説します！&lt;/p&gt;
&lt;p&gt;この記事を読み終えれば、セッションについての理解を深めることができますよ！&lt;/p&gt;
&lt;h2&gt;セッションとは？&lt;/h2&gt;
&lt;p&gt;一言で言うと、ユーザーの状態を維持して行う一連の処理のことです。&lt;/p&gt;
&lt;p&gt;例えばあなたがショッピングサイトにログインして以下の操作を行ったとします。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;商品検索&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;カートに入れる&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;購入&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;カード情報変更&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらの処理をまとめてセッションと呼びます。&lt;/p&gt;
&lt;p&gt;つまり、あなたがログインして行う全てのアクションを1つのまとまりとして管理するものです。&lt;/p&gt;
&lt;p&gt;セッションの仕組みを使うことで、商品の閲覧履歴やカートの中身を維持したりすることが可能になります。&lt;/p&gt;
&lt;h2&gt;セッションに関わる知識&lt;/h2&gt;
&lt;p&gt;といってもよくわからないと思うので、順を追って説明します。&lt;/p&gt;
&lt;h3&gt;HTTP&lt;/h3&gt;
&lt;p&gt;英語と日本語の会話では意味が通じないように、インターネット通信も共通のルールに基づいて行う必要があります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;その「インターネット通信のルール」として定められているのがHTTPです。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;セッションもHTTPの上に成り立っています。&lt;/p&gt;
&lt;h3&gt;クライアント・サーバー&lt;/h3&gt;
&lt;p&gt;HTTP通信における重要な要素として、&lt;strong&gt;クライアント&lt;/strong&gt;と&lt;strong&gt;サーバー&lt;/strong&gt;があります。&lt;/p&gt;
&lt;p&gt;HTTPでは、スマホやPCなどのインターネットを利用する側であるクライアントと、Webページやアプリケーションなどのソースコードやデータを持ち、クライアントに提供するサーバーの2者間で通信が行われます。&lt;/p&gt;
&lt;p&gt;クライアントは「◯◯のページが見たいです」などのお願いをサーバーに送り、サーバーはそれを受けて「これが◯◯のページです」と応答することで、クライアント、つまり我々ユーザーはWebページを閲覧することができます。&lt;/p&gt;
&lt;p&gt;この時のクライアントからサーバーに対するお願いをリクエスト、サーバーからクライアントへの応答をレスポンスと呼びます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/01.png&quot; alt=&quot;クライアントとサーバー&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;ステートレスな通信&lt;/h3&gt;
&lt;p&gt;HTTPではリクエストとレスポンスの1往復で通信が完結します。&lt;/p&gt;
&lt;p&gt;つまり「5分前に〇〇のサイトにログインした」「ショッピングカートに商品を追加した」などの状態を維持することができません。&lt;/p&gt;
&lt;p&gt;このようにクライアントの状態を維持できないことをステートレスと呼びます。&lt;/p&gt;
&lt;p&gt;ステートレスな通信では、アクセスの度に毎回ログインしなくてはいけない、カートに入れたはずなのに消えてしまうなどなど、大変面倒なことになってしまいます。&lt;/p&gt;
&lt;p&gt;そこで、クライアントの状態を維持した状態で通信を行うために使われるのがセッションの仕組みです。&lt;/p&gt;
&lt;h3&gt;Cookie&lt;/h3&gt;
&lt;p&gt;セッションを実現する上で欠かせないのがCookieです。&lt;/p&gt;
&lt;p&gt;一言で言うと、&lt;strong&gt;Cookieとはユーザーの状態を維持したり管理するための仕組み&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;Cookieはログインした時などにサーバーからクライアントに送信され、クライアント側（ブラウザ）で保存されます。&lt;/p&gt;
&lt;p&gt;そして再度同じサーバーにアクセスした時に保存していたCookieをサーバーへ送ることで、以前ログインしたことのあるユーザーであることを証明できます。&lt;/p&gt;
&lt;p&gt;Cookieについてより詳しく知りたい方はこちらの記事がおすすめです。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;872&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h2&gt;セッションの仕組み&lt;/h2&gt;
&lt;p&gt;それでは実際にセッションがどのようにして実現されているか説明していきます。&lt;/p&gt;
&lt;p&gt;ここではログインが必要なサイトにアクセスする場合を例に挙げて説明します。&lt;/p&gt;
&lt;h3&gt;初回アクセス&lt;/h3&gt;
&lt;p&gt;まずクライアントがログインすると、サーバーへリクエストが送信されます。&lt;/p&gt;
&lt;p&gt;するとリクエストを受け取ったサーバーはセッションファイルと呼ばれるものを作成します。&lt;/p&gt;
&lt;p&gt;その際、セッションファイルにセッションIDと呼ばれるユーザー番号のようなものと、ユーザーの情報を記録します。&lt;/p&gt;
&lt;p&gt;そして&lt;code&gt;Set-Cookieヘッダ&lt;/code&gt;にセッションIDを付与してレスポンスを返却します。&lt;/p&gt;
&lt;p&gt;それを受け取ったクライアントはブラウザにセッションIDをCookieとして保存します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/02.png&quot; alt=&quot;セッションの仕組み : 初回ログイン&quot; /&gt;&lt;/p&gt;
&lt;p&gt;ヘッダとはリクエスト・レスポンスに付与できる追加情報のようなものです。&lt;br /&gt;
詳しくは以下の記事で解説しています。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;832&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h3&gt;2回目アクセス&lt;/h3&gt;
&lt;p&gt;再度同じサイトにアクセスすると、クライアントは保存してあるCookieを&lt;code&gt;Cookieヘッダ&lt;/code&gt;に付与してサーバーに送信します。&lt;/p&gt;
&lt;p&gt;Cookieの中のセッションIDを取得したサーバーはそれをセッションファイルと照合し、対象のユーザー情報があればログイン済みと判断します。&lt;/p&gt;
&lt;p&gt;そうすることで、サーバーはユーザーがログイン済みか判断することができます。&lt;/p&gt;
&lt;p&gt;ログイン判定後はそのユーザーに適したコンテンツをクライアントに返却します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/03.png&quot; alt=&quot;セッションの仕組み : 2回目アクセス&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;この記事ではセッションとは何か、セッションに関わる知識と仕組みについて解説しました。&lt;/p&gt;
&lt;p&gt;この記事でセッションについての理解が少しでも深まってくれたら嬉しいです！&lt;/p&gt;
&lt;p&gt;最後にもう一度ポイントをまとめておきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;セッションとはユーザーの状態を維持して行う一連の処理のこと&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;セッションはCookieを使うことで実現できる&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;セッションファイルでユーザー情報を管理し、セッションIDをやり取りすることで認証ができる&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最後に「HTTPについてもっと知りたい！」という方向けにおすすめの教材を紹介します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/dp/4774142042&quot;&gt;Webを支える技術 -HTTP、URI、HTML、そしてREST&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;こちらの本は正直初心者にとってはやや難しい内容もあります。&lt;/p&gt;
&lt;p&gt;ですがHTTPやステータスコードについて非常に詳しく書かれているため、当ブログなどで簡単に理解した後にさらに理解を深めるための教材として活用してみてください！&lt;/p&gt;
&lt;p&gt;参考&lt;br /&gt;
&lt;a href=&quot;https://qiita.com/fujishiro380/items/d29bc37c9faa4fc818c2&quot;&gt;【初学者向け】セッションの概念と仕組みをCookie抜きで説明する #HTTP - Qiita&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://qiita.com/mrshouuge/items/387b1408160022acae94&quot;&gt;セッション管理 #HTTP - Qiita&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>HTTP Cookieとは？用途や確認方法含めわかりやすく解説！</title><link>https://rootful.net/posts/what-is-http-cookie/</link><guid isPermaLink="true">https://rootful.net/posts/what-is-http-cookie/</guid><pubDate>Sat, 12 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この記事で解決できるお悩み&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#1&quot;&gt;Cookieってよく聞くけど何かよくわからない...&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#4&quot;&gt;Cookieって何に使われるの？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#6&quot;&gt;Cookieの確認方法が知りたい&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[st-kaiwa2 html_class=&quot;wp-block-st-blocks-st-kaiwa&quot;]&lt;/p&gt;
&lt;p&gt;こんな悩みを解決できます！&lt;/p&gt;
&lt;p&gt;営業職から会社員WEBエンジニア、&lt;br /&gt;
その後フリーランスWEBエンジニアに転向した自分が解説します。&lt;/p&gt;
&lt;p&gt;[/st-kaiwa2]&lt;/p&gt;
&lt;p&gt;この記事ではCookieとは何かの説明から始まり、用途や確認方法まで初心者にもわかりやすく解説します。&lt;/p&gt;
&lt;p&gt;この記事を読み終える頃にはCookieについての理解が深まっているはずです！&lt;/p&gt;
&lt;h2&gt;Cookieとは？&lt;/h2&gt;
&lt;p&gt;一言で言うと、Cookieとはユーザーの状態を維持したり管理するための仕組みです。&lt;/p&gt;
&lt;p&gt;と言ってもよくわからないと思うので順を追って説明します。&lt;/p&gt;
&lt;p&gt;まずはCookieの土台となるHTTPについてです。&lt;/p&gt;
&lt;h3&gt;HTTP（HyperText Transfer Protocol）とは&lt;/h3&gt;
&lt;p&gt;英語と日本語の会話では意味が通じないように、インターネット通信も共通のルールに基づいて行う必要があります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;その「インターネット通信のルール」として定められているのがHTTPです。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;CookieもHTTPの中で定められているルールの1つです。&lt;/p&gt;
&lt;h3&gt;HTTP通信の流れ&lt;/h3&gt;
&lt;p&gt;HTTP通信における重要な要素として、&lt;strong&gt;クライアント&lt;/strong&gt;と&lt;strong&gt;サーバー&lt;/strong&gt;があります。&lt;/p&gt;
&lt;p&gt;HTTPでは、スマホやPCなどのインターネットを利用する側である&lt;strong&gt;クライアント&lt;/strong&gt;と、Webページやアプリケーションなどのソースコードやデータを持ち、クライアントに提供する&lt;strong&gt;サーバー&lt;/strong&gt;の2者間で通信が行われます。&lt;/p&gt;
&lt;p&gt;クライアントは「◯◯のページが見たいです」などのお願いをサーバーに送り、サーバーはそれを受けて「これが◯◯のページです」と応答することで、クライアント、つまり我々ユーザーはWebページを閲覧することができます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/01.png&quot; alt=&quot;HTTP通信の流れ&quot; /&gt;&lt;/p&gt;
&lt;p&gt;しかしHTTPはステートレスな通信、つまり「5分前に〇〇のサイトにログインした」などの状態を維持せずに通信を行います。&lt;/p&gt;
&lt;p&gt;そうなると、同じサイトにアクセスしてもサーバーからはクライアントがログイン済みかどうか判断できず、アクセスの度に毎回ログインしなくてはいけなくなり大変面倒です。&lt;/p&gt;
&lt;p&gt;そんな面倒をなくすため使われるのがCookieという仕組みです。&lt;/p&gt;
&lt;h3&gt;Cookie = ユーザーの情報を維持・管理するための仕組み&lt;/h3&gt;
&lt;p&gt;Cookieを使うことで「サイトにログインした」「〇〇のサイトにアクセスした」などのユーザーの状態を維持することができます。&lt;/p&gt;
&lt;p&gt;そうすることで、一度ログインしたサイトに再びアクセスした時にまたログインする必要がなくなったり、今まで閲覧したサイトの情報から自分に合った広告を表示してくれたりといったことが可能になります。&lt;/p&gt;
&lt;p&gt;ここまでの説明でCookieとはユーザーの状態を維持したり管理するための仕組みという意味がわかったでしょうか。&lt;/p&gt;
&lt;h2&gt;Cookieを使った通信の流れ&lt;/h2&gt;
&lt;p&gt;ここからは具体的にCookieがHTTP通信の中でどのように使われるのかを説明します。&lt;/p&gt;
&lt;p&gt;クライアントがログインすると、サーバーはログインした証明としてCookie情報をクライアントに送信します。&lt;/p&gt;
&lt;p&gt;それを受け取ったクライアントはCookie情報をブラウザに保存し、再度アクセスした時にそのCookie情報をサーバーに送信します。&lt;/p&gt;
&lt;p&gt;するとサーバーは「この前ログインした奴だな」と判断して、ログイン済みユーザー向けのページを表示する、といった流れになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/02.png&quot; alt=&quot;Cookieを使った通信の流れ&quot; /&gt;&lt;/p&gt;
&lt;p&gt;上の図ではこの記事では説明していないワードがいくつかあるので簡単に説明します。&lt;/p&gt;
&lt;p&gt;①ヘッダ ... クライアントからサーバーへのリクエスト、サーバーからクライアントへのレスポンスに付加できる追加情報&lt;br /&gt;
②リソース ... サーバーからクライアントに渡されるファイルやデータのこと&lt;/p&gt;
&lt;p&gt;リクエスト・レスポンス、ヘッダなどについて詳しく知りたい方はこちらの記事がおすすめです。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;832&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h2&gt;Cookieの中身&lt;/h2&gt;
&lt;p&gt;それでは次にCookieにはどんな情報が入っているか説明します。&lt;/p&gt;
&lt;p&gt;サーバーからクライアントへ送られる&lt;code&gt;Set-Cookie&lt;/code&gt;ヘッダは以下のような形式で送られます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Set-Cookie: id=1234abcd; Path=/; Domain=example.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この例の&lt;code&gt;id&lt;/code&gt;、&lt;code&gt;Path&lt;/code&gt;、&lt;code&gt;Domain&lt;/code&gt;などを属性と呼び、各属性にはCookieの情報を付与することができます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Set-Cookie&lt;/code&gt;ヘッダに定義できる主な属性はこちらです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;属性&lt;/th&gt;
&lt;th&gt;説明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Name&lt;/td&gt;
&lt;td&gt;Cookieの名前と値（ヘッダの先頭に置かれ、属性名はNameでなくても可）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Expires&lt;/td&gt;
&lt;td&gt;Cookieの有効期限を日時で指定&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max-Age&lt;/td&gt;
&lt;td&gt;Cookieの有効時間を秒数で指定&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain&lt;/td&gt;
&lt;td&gt;Cookieが有効なドメイン範囲の指定   これに &lt;code&gt;sosotech.info&lt;/code&gt; が指定されている場合、それ以外のドメインでは有効なCookieとして扱われない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;Cookieが有効なパスの範囲を指定   これに &lt;code&gt;/http/cookie（この記事のパス）&lt;/code&gt; が指定されている場合、それ以外のページでは有効なCookieとして扱われない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secure&lt;/td&gt;
&lt;td&gt;HTTPS通信時にのみCookieを送信&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HttpOnly&lt;/td&gt;
&lt;td&gt;CookieをJavaScriptからアクセスできないよう制限&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Cookieの用途&lt;/h2&gt;
&lt;p&gt;ではCookieは実際にどんなことに使われるのでしょうか？&lt;/p&gt;
&lt;p&gt;ここではCookieの主な用途を3つ紹介します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;セッション管理（Session Management）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;パーソナライゼーション（Personalization）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;トラッキング（Tracking）&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;セッション管理（Session Management）&lt;/h3&gt;
&lt;p&gt;Cookieを使ってログイン状態を維持することができます。&lt;/p&gt;
&lt;p&gt;あなたがログインすると、サーバーからクライアントへSet-Cookieヘッダが送信され、クライアントはそれをブラウザに保存します。&lt;/p&gt;
&lt;p&gt;そしてまた同じサイトにアクセスした時に、先ほど保存したCookieをサーバーへ送信することでCookieの有効期限中であればログインなしでアクセスすることができます。&lt;/p&gt;
&lt;h3&gt;パーソナライゼーション（Personalization）&lt;/h3&gt;
&lt;p&gt;Cookieを使用することでユーザーの利便性を高めることができます。&lt;/p&gt;
&lt;p&gt;あなたがログインフォームを送信した時に、ユーザー名がCookieに保存されます。&lt;/p&gt;
&lt;p&gt;すると再度ログインしようとした時にユーザー名の欄に自動的に前回入力した内容を表示するといったことができます。&lt;/p&gt;
&lt;h3&gt;トラッキング（Tracking）&lt;/h3&gt;
&lt;p&gt;Cookieを使用することでユーザーごとに特化した広告表示ができます。&lt;/p&gt;
&lt;p&gt;もしあなたがプログラミングスクールのサイトにアクセスした場合、そのサイトにアクセスしたという履歴がCookieに保存されます。&lt;/p&gt;
&lt;p&gt;その後トラッキングを行う別のサイトにアクセスすると、あなたが興味のあるプログラミングスクールの広告を表示するといったことができます。&lt;/p&gt;
&lt;p&gt;トラッキングは全てのサイトで行われるわけではありません。&lt;br /&gt;
また、ブラウザの設定でトラッキングを許可しないよう設定することもできます。&lt;/p&gt;
&lt;h2&gt;Cookieの種類&lt;/h2&gt;
&lt;p&gt;Cookieには大きく分けて2種類あります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;ファーストパーティクッキー（1st Party Cookie）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;サードパーティクッキー（3rd Party Cookie）&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;ファーストパーティCookie（1st Party Cookie）&lt;/h3&gt;
&lt;p&gt;アクセスしたドメインから発行されたCookieのことです。&lt;/p&gt;
&lt;p&gt;例えばこのブログのドメインは&lt;code&gt;sosotech.info&lt;/code&gt;ですが、このブログにアクセスした時に発行された&lt;code&gt;Domain=sosotech.info&lt;/code&gt;のような属性を持つCookieはファーストパーティCookieに分類されます。&lt;/p&gt;
&lt;h3&gt;サードパーティCookie（3rd Party Cookie）&lt;/h3&gt;
&lt;p&gt;アクセスしたドメインとは別のドメインから発行されたCookieのことです。&lt;/p&gt;
&lt;p&gt;例えばブログに広告が表示されることがありますが、あれは広告用のサーバーが提供しているものです。&lt;/p&gt;
&lt;p&gt;そのためCookieを発行するドメインも別となり、サードパーティCookieに分類されます。&lt;/p&gt;
&lt;p&gt;サードパーティCookieを使うことで前述したトラッキングをすることができます。&lt;/p&gt;
&lt;p&gt;このブログにアクセスして&lt;code&gt;hogehogead.com&lt;/code&gt;からCookieが発行された後に別のサイトにアクセスしたとします。&lt;/p&gt;
&lt;p&gt;その時にまた&lt;code&gt;hogehogead.com&lt;/code&gt;が提供する広告が表示されていた場合、ブラウザに保存されていたCookieが広告Webサーバーに送信され、このブログにアクセスした履歴があることがわかります。&lt;/p&gt;
&lt;p&gt;そうしてユーザーに特化した広告を表示するといった流れです。&lt;/p&gt;
&lt;p&gt;別のサイトを見ているのに同じような広告が表示されるのはこういった仕組みの元に成り立っています。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;ドメインについて詳しく知りたい方はこちらの記事がおすすめです。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;617&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h2&gt;Cookieの確認方法&lt;/h2&gt;
&lt;p&gt;それでは、実際にブラウザに保存されているCookieの確認方法を説明します。&lt;/p&gt;
&lt;p&gt;ここではChromeを使った確認方法を説明します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;F12&lt;/code&gt;or&lt;code&gt;Ctrl + Shift + i（Windowsの場合）&lt;/code&gt;or&lt;code&gt;Cmd + Option + I（Macの場合）&lt;/code&gt;を押してデベロッパーツールを開く&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;「Application」を選択&lt;br /&gt;
&lt;img src=&quot;./images/03.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;「Storage」欄にある「Cookie」を開き、閲覧したいドメインをクリック&lt;br /&gt;
すると、右側にそのドメインから発行されたCookie情報を一覧で見ることができます。&lt;br /&gt;
&lt;img src=&quot;./images/04.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;この記事ではCookieとは何か、Cookieの用途、Cookieの確認方法などについて解説しました。&lt;/p&gt;
&lt;p&gt;Cookieについての理解が少しでも深まってくれれば嬉しいです。&lt;/p&gt;
&lt;p&gt;最後にもう一度ポイントをまとめておきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Cookieとはユーザーの状態を維持したり管理するための仕組み&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cookieの主な用途はセッション管理、パーソナライゼーション、トラッキングの3つ&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CookieはファーストパーティCookieとサードパーティCookieに分類できる&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最後に「HTTPについてもっと知りたい！」という方向けにおすすめの教材を紹介します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/dp/4774142042&quot;&gt;Webを支える技術 -HTTP、URI、HTML、そしてREST&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;こちらの本は正直初心者にとってはやや難しい内容もあります。&lt;/p&gt;
&lt;p&gt;ですがHTTPやステータスコードについて非常に詳しく書かれているため、当ブログなどで簡単に理解した後にさらに理解を深めるための教材として活用してみてください！&lt;/p&gt;
&lt;p&gt;参考&lt;br /&gt;
&lt;a href=&quot;https://www.infraexpert.com/study/tcpip16.6.html&quot;&gt;HTTP Cookie（クッキー）とは&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies&quot;&gt;HTTP Cookie の使用 - HTTP | MDN&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>HTTPリクエスト・レスポンスとは？仕組みをわかりやすく解説</title><link>https://rootful.net/posts/what-is-http-request-response/</link><guid isPermaLink="true">https://rootful.net/posts/what-is-http-request-response/</guid><pubDate>Sat, 28 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この記事で解決できるお悩み&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#1&quot;&gt;HTTPのリクエスト、レスポンスって何...?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#4&quot;&gt;リクエストとレスポンスをどうやって確認したら良いかわからない&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#2&quot;&gt;リクエストとレスポンスの内容を理解できるようにしたい&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[st-kaiwa2 html_class=&quot;wp-block-st-blocks-st-kaiwa&quot;]&lt;/p&gt;
&lt;p&gt;こんな悩みを解決できます！&lt;/p&gt;
&lt;p&gt;営業職から会社員WEBエンジニア、&lt;br /&gt;
その後フリーランスWEBエンジニアに転向した自分が解説します。&lt;/p&gt;
&lt;p&gt;[/st-kaiwa2]&lt;/p&gt;
&lt;p&gt;この記事ではリクエスト・レスポンスとは何か？それぞれの内容について初心者向けにわかりやすく解説します。&lt;/p&gt;
&lt;p&gt;この記事を読み終えれば、リクエスト・レスポンスを見てどんなデータが受け渡しされているか理解できるようになりますよ！&lt;/p&gt;
&lt;h2&gt;リクエスト・レスポンスとは？&lt;/h2&gt;
&lt;p&gt;リクエストとは、クライアントからサーバーに送られるお願いのことです。&lt;/p&gt;
&lt;p&gt;レスポンスはそのお願いを受けて、サーバーからクライアントに送られる応答のことです。&lt;/p&gt;
&lt;p&gt;クライアント？サーバー？となる方向けに順を追って説明しますね。&lt;/p&gt;
&lt;h3&gt;HTTP**（HyperText Transfer Protocol）**とは？&lt;/h3&gt;
&lt;p&gt;英語と日本語の会話では意味が通じないように、インターネット通信も共通のルールに基づいて行う必要があります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;その「インターネット通信のルール」として定められているのがHTTPです。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;リクエスト・レスポンスもHTTPの中で定められているルールの1つです。&lt;/p&gt;
&lt;h3&gt;HTTP通信の流れ&lt;/h3&gt;
&lt;p&gt;HTTP通信における重要な要素として、クライアントとサーバーがあります。&lt;/p&gt;
&lt;p&gt;HTTPでは、スマホやPCなどのインターネットを利用する側であるクライアントと、Webページやアプリケーションなどのソースコードやデータを持ち、クライアントに提供するサーバーの2者間で通信が行われます。&lt;/p&gt;
&lt;p&gt;クライアントは「◯◯のページが見たいです」などのお願いをサーバーに送ります。&lt;/p&gt;
&lt;p&gt;これがリクエストです。&lt;/p&gt;
&lt;p&gt;サーバーはそれを受けて「これが◯◯のページです」と応答することで、クライアントはWebページを閲覧することができます。&lt;/p&gt;
&lt;p&gt;これがレスポンスです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/01.png&quot; alt=&quot;リクエストとレスポンス&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;リクエスト&lt;/h2&gt;
&lt;p&gt;それでは実際にクライアントからサーバーへ送られるリクエストの中身を見てみましょう。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;POST /test HTTP/1.1
Host: example.com
Content-Length: 23
Content-Type: application/x-www-form-urlencoded

key1=value1&amp;amp;key2=value2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このリクエストには下記の要素が含まれています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;メソッド&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;リクエストURI&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;プロトコルバージョン&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ヘッダ&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ボディ&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;./images/02.png&quot; alt=&quot;リクエストの中身&quot; /&gt;&lt;/p&gt;
&lt;p&gt;上記の例で使われているHTTP/1.1は比較的古いバージョンで、現在の主流はHTTP/2、HTTP/3です。&lt;br /&gt;
リクエスト・レスポンスの形式は違いますが基本的な部分は同じなため、この記事ではHTTP/1.1を参考にしています。&lt;/p&gt;
&lt;p&gt;それぞれ詳しく解説していきます。&lt;/p&gt;
&lt;h3&gt;①メソッド&lt;/h3&gt;
&lt;p&gt;メソッドはリクエストの種類を表します。&lt;/p&gt;
&lt;p&gt;クライアントからサーバーに送られるリクエストは「◯◯のページを見たいです」「フォーム内容を送信します」など、いくつか種類があります。&lt;/p&gt;
&lt;p&gt;それらの種類に名前をつけたものがメソッドです。&lt;/p&gt;
&lt;p&gt;主に見ることになるのは&lt;code&gt;GET&lt;/code&gt;と&lt;code&gt;POST&lt;/code&gt;の2種類です。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;GET&lt;/code&gt;は指定したURIのリソース（HTMLや画像ファイル）を取得し、&lt;code&gt;POST&lt;/code&gt;は指定したURIに対して何らかのデータを送信します。&lt;/p&gt;
&lt;p&gt;メソッドについてより詳しく知りたい方はこちらの記事がおすすめです。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;779&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h3&gt;②リクエストURI&lt;/h3&gt;
&lt;p&gt;リクエストURIは、サーバーとそのサーバー内にあるファイルの場所を表します。&lt;/p&gt;
&lt;p&gt;インターネット上の住所のようなものになります。&lt;/p&gt;
&lt;p&gt;URIは大きく3ブロックに分かれており、それぞれ使用するプロトコル、リクエスト送信先のサーバー、リクエスト送信先のファイルを指定します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/03.png&quot; alt=&quot;URI&quot; /&gt;&lt;/p&gt;
&lt;p&gt;上記の例の&lt;code&gt;/test&lt;/code&gt;のような相対パスと、&lt;code&gt;https://example.co.jp/test&lt;/code&gt;のような絶対パスを指定することができます。&lt;/p&gt;
&lt;p&gt;似たような言葉で&lt;code&gt;URL&lt;/code&gt;がありますが、ほぼ同じものだと思ってもらって差し支えありません。&lt;/p&gt;
&lt;h3&gt;③プロトコルバージョン&lt;/h3&gt;
&lt;p&gt;どのプロトコルのどのバージョンを使用するかを表します。&lt;/p&gt;
&lt;p&gt;上記の例では「HTTPのバージョン1.1を使って通信します」ということを宣言しています。&lt;/p&gt;
&lt;p&gt;ちなみにプロトコルという言葉で何だか難しそうなものに聞こえますが、&lt;strong&gt;プロトコル = ルール&lt;/strong&gt;と考えてもらうと理解しやすいと思います。&lt;/p&gt;
&lt;p&gt;HTTPもインターネット通信を行う際のルールを定めたものです。&lt;/p&gt;
&lt;h3&gt;④ヘッダ&lt;/h3&gt;
&lt;p&gt;ヘッダとは送信日時、ファイルサイズなどのリクエスト情報のことです。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ヘッダ名:値&lt;/code&gt;の形で記述し、複数設定することができます。&lt;/p&gt;
&lt;p&gt;以下に主なリクエストヘッダをまとめました。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ヘッダ名&lt;/th&gt;
&lt;th&gt;説明&lt;/th&gt;
&lt;th&gt;例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;リクエストを送信するホスト（ドメイン）とポート番号&lt;/td&gt;
&lt;td&gt;example.com&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;td&gt;メッセージを生成した日時&lt;/td&gt;
&lt;td&gt;Fri, 27 Sep 2024 08:02:46 GMT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User-Agent&lt;/td&gt;
&lt;td&gt;クライアントブラウザのタイプ&lt;/td&gt;
&lt;td&gt;Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accept&lt;/td&gt;
&lt;td&gt;クライアントが受付可能なMIMEタイプ&lt;/td&gt;
&lt;td&gt;text/html,application/xhtml+xml&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accept-Charset&lt;/td&gt;
&lt;td&gt;クライアントが受付可能な文字エンコーディング&lt;/td&gt;
&lt;td&gt;utf-8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accept-Language&lt;/td&gt;
&lt;td&gt;クライアントが受付可能な言語&lt;/td&gt;
&lt;td&gt;en-US,ja-JP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accept-Encoding&lt;/td&gt;
&lt;td&gt;クライアントが受付可能なコンテンツのエンコーディング&lt;/td&gt;
&lt;td&gt;gzip&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Content-Length&lt;/td&gt;
&lt;td&gt;ボディの長さ&lt;/td&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Referer&lt;/td&gt;
&lt;td&gt;現在のページのリンク元&lt;/td&gt;
&lt;td&gt;https://rootful.net/&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cache-Control&lt;/td&gt;
&lt;td&gt;キャッシュ制御するための情報&lt;/td&gt;
&lt;td&gt;max-age=0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;⑤ボディ&lt;/h3&gt;
&lt;p&gt;ボディはクライアントからサーバーに送られるデータです。&lt;/p&gt;
&lt;p&gt;具体的にはフォーム入力されたID・パスワードや、SNSの投稿内容などがボディに格納されます。&lt;/p&gt;
&lt;p&gt;GETメソッドのようにサーバーからデータを取得するだけの場合、ボディには何も入りません。&lt;/p&gt;
&lt;h2&gt;レスポンス&lt;/h2&gt;
&lt;p&gt;次にレスポンスについても見ていきましょう。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;HTTP/1.1 200 OK
Date: Thu, 26 Sep 2024 09:16:25 GMT
Vary: Accept-Encoding
Content-Type: text/html; charset=UTF-8

&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;ja&quot; class=&quot;s-navi-right s-navi-search-overlay &quot;&amp;gt;
...
&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このレスポンスに含まれる要素は下記になります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;プロトコルバージョン&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ステータスコード&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ヘッダ&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ボディ&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;./images/04.png&quot; alt=&quot;レスポンス&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;①プロトコルバージョン&lt;/h3&gt;
&lt;p&gt;こちらは&lt;a href=&quot;#2-3&quot;&gt;リクエスト&lt;/a&gt;と同じです。&lt;/p&gt;
&lt;p&gt;どのプロトコルのどのバージョンを使用するかを表します。&lt;/p&gt;
&lt;h3&gt;②ステータスコード&lt;/h3&gt;
&lt;p&gt;ステータスコードはリクエストが成功か失敗かを示す3桁の数字です。&lt;/p&gt;
&lt;p&gt;上記の例で返ってきている200番台はリクエスト成功を意味します。&lt;/p&gt;
&lt;p&gt;それ以外にも400番台はクライアントが原因のエラー、といったように先頭の数字によって大きく分類されています。&lt;/p&gt;
&lt;p&gt;ステータスコードについて、詳しくはこちらの記事で解説しています。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;740&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h3&gt;③ヘッダ&lt;/h3&gt;
&lt;p&gt;こちらも&lt;a href=&quot;#2-4&quot;&gt;リクエスト&lt;/a&gt;と同じく、レスポンス情報を表します。&lt;/p&gt;
&lt;p&gt;主なレスポンスヘッダは下記になります。（リクエストヘッダで記載したものは省略）&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ヘッダ名&lt;/th&gt;
&lt;th&gt;説明&lt;/th&gt;
&lt;th&gt;例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Access-Control-Allow-Origin&lt;/td&gt;
&lt;td&gt;リソースを共有できるオリジンを指定&lt;/td&gt;
&lt;td&gt;*, https://rootful.net&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Content-Encoding&lt;/td&gt;
&lt;td&gt;リソースのエンコード方式&lt;/td&gt;
&lt;td&gt;gzip&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Etag&lt;/td&gt;
&lt;td&gt;リソースのバージョン情報   前回の応答からリソースに変更がない場合は再送しないなど、前回の応答との連携に使われる&lt;/td&gt;
&lt;td&gt;W/&quot;0815&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Last-Modified&lt;/td&gt;
&lt;td&gt;リソースの最終更新日時&lt;/td&gt;
&lt;td&gt;Fri, 27 Sep 2024 08:02:46 GMT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Server&lt;/td&gt;
&lt;td&gt;サーバー側で使用したソフトウェア情報&lt;/td&gt;
&lt;td&gt;Apache/2.4.1 (Unix)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Set-Cookie&lt;/td&gt;
&lt;td&gt;サーバーからクライアントへクッキーを送信する&lt;/td&gt;
&lt;td&gt;sessionId=38afes7a8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transfer-Encoding&lt;/td&gt;
&lt;td&gt;ボディのエンコード方式&lt;/td&gt;
&lt;td&gt;chunked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vary&lt;/td&gt;
&lt;td&gt;リソースの表現にどのヘッダーを使用したか&lt;/td&gt;
&lt;td&gt;User-Agent&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;④ボディ&lt;/h3&gt;
&lt;p&gt;こちらはリクエストとは逆で、サーバーからクライアントへ送られるデータです。&lt;/p&gt;
&lt;p&gt;具体的には見たいページのHTML・CSS・JSファイルや画像ファイルなどなどが入ります。&lt;/p&gt;
&lt;h2&gt;リクエスト・レスポンスの確認方法&lt;/h2&gt;
&lt;p&gt;「リクエスト・レスポンスについてはわかったけどどうやって確認するの？」という方向けに、リクエスト・レスポンスの確認方法をいくつか紹介します。&lt;/p&gt;
&lt;h3&gt;デベロッパーツール&lt;/h3&gt;
&lt;p&gt;最もお手軽な方法がChromeのデベロッパーツールを使用する方法です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;F12&lt;/code&gt;or&lt;code&gt;Ctrl + Shift + i（Windowsの場合）&lt;/code&gt;or&lt;code&gt;Cmd + Option + I（Macの場合）&lt;/code&gt;を押してデベロッパーツールを開く&lt;br /&gt;
&lt;img src=&quot;./images/05.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;「Network」を選択&lt;br /&gt;
&lt;img src=&quot;./images/06.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;リクエスト・レスポンスを確認したいURIをクリック&lt;br /&gt;
「Headers」タブでヘッダ情報、「Response」タブでボディ情報が確認できます&lt;br /&gt;
※何も表示されていない場合はページを更新してみてください&lt;br /&gt;
&lt;img src=&quot;./images/07.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;curlコマンド&lt;/h3&gt;
&lt;p&gt;curlは様々なプロトコルで通信データの送受信を行うことができるコマンドです。&lt;/p&gt;
&lt;p&gt;もちろんHTTPにも対応しているのでリクエスト・レスポンスの確認に便利です。&lt;/p&gt;
&lt;p&gt;コマンドラインを開き&lt;code&gt;curl リクエストURI&lt;/code&gt;を実行すると、リクエストURIに対しGETを実行してくれます。&lt;/p&gt;
&lt;p&gt;&amp;lt;figure&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/08.jpg&quot; alt=&quot;curlコマンド&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;Screenshot&lt;/p&gt;
&lt;p&gt;&amp;lt;/figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;p&gt;インストール作業が必要になる場合があります。&lt;/p&gt;
&lt;p&gt;オブションなしだとレスポンスボディのみが出力されますが&lt;code&gt;-i&lt;/code&gt;オプションをつけるとヘッダー部分も出力してくれます。&lt;/p&gt;
&lt;p&gt;他にも様々なオプションがあるので詳しくは調べてみてください！&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;この記事ではHTTPリクエスト・レスポンスの説明とその確認方法を解説しました。&lt;/p&gt;
&lt;p&gt;最後にもう一度ポイントをまとめておきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;リクエストとは、クライアントからサーバーに送られるお願い&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;レスポンスはそのお願いを受けて、サーバーからクライアントに送られる応答&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;リクエスト・レスポンスはそれぞれプロトコルバージョン、ヘッダ、ボディなどの情報を含んでいる&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;デベロッパーツールやcurlコマンドを使用することでリクエスト・レスポンスの中身を確認することができる&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;HTTPについてより詳しく勉強したい！という方向けに、おすすめの教材を紹介します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/dp/4774142042&quot;&gt;Webを支える技術 -HTTP、URI、HTML、そしてREST&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;こちらの本は正直初心者にとってはやや難しい内容もあります。&lt;/p&gt;
&lt;p&gt;ですがHTTPやステータスコードについて非常に詳しく書かれているため、当ブログなどで簡単に理解した後にさらに理解を深めるための教材として活用してみてください！&lt;/p&gt;
&lt;p&gt;参考&lt;br /&gt;
・&lt;a href=&quot;https://gihyo.jp/admin/serial/01/http3/0001&quot;&gt;第1章 進化するHTTPの歩み ～ HTTP/1.1とHTTP/2をおさらいし、HTTP/3の基本を知る | gihyo.jp&lt;/a&gt;&lt;br /&gt;
・&lt;a href=&quot;https://developer.mozilla.org/ja/docs/Glossary/Request_header&quot;&gt;Request header (リクエストヘッダー) - MDN Web Docs 用語集: ウェブ関連用語の定義 | MDN&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>HTTPメソッドとは？各メソッドについて図解付きでわかりやすく解説</title><link>https://rootful.net/posts/what-is-http-method/</link><guid isPermaLink="true">https://rootful.net/posts/what-is-http-method/</guid><pubDate>Sat, 21 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この記事で解決できるお悩み&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#1&quot;&gt;HTTPメソッドって何？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#4&quot;&gt;各メソッドの使い道がわからない...&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[st-kaiwa2 html_class=&quot;wp-block-st-blocks-st-kaiwa&quot;]&lt;/p&gt;
&lt;p&gt;こんな悩みを解決できます！&lt;/p&gt;
&lt;p&gt;営業職から会社員WEBエンジニア、&lt;br /&gt;
その後フリーランスWEBエンジニアに転向した自分が解説します。&lt;/p&gt;
&lt;p&gt;[/st-kaiwa2]&lt;/p&gt;
&lt;p&gt;この記事ではHTTPメソッドとは何か、各メソッドの使われ方を初心者にもわかりやすく解説します。&lt;/p&gt;
&lt;p&gt;この記事を読み終えればHTTPメソッドについて理解でき、業務や個人開発に役立てることができますよ！&lt;/p&gt;
&lt;h2&gt;HTTPメソッドとは&lt;/h2&gt;
&lt;p&gt;HTTPメソッドとは、クライアントからサーバーに発行されるリクエストの種類です。&lt;/p&gt;
&lt;p&gt;といってもよくわからないと思うので順を追って説明します。&lt;/p&gt;
&lt;p&gt;まずはHTTPメソッドのルールを定めているHTTPプロトコルについてです。&lt;/p&gt;
&lt;h3&gt;HTTP（HyperText Transfer Protocol）&lt;/h3&gt;
&lt;p&gt;英語と日本語の会話では意味が通じないように、インターネット通信も共通のルールに基づいて行う必要があります。&lt;/p&gt;
&lt;p&gt;その「インターネット通信のルール」として定められているのがHTTPです。&lt;/p&gt;
&lt;p&gt;HTTPメソッドもHTTPの中で定められているルールの1つです。&lt;/p&gt;
&lt;h3&gt;HTTP通信の流れ&lt;/h3&gt;
&lt;p&gt;HTTP通信における重要な要素として、クライアントとサーバーがあります。&lt;/p&gt;
&lt;p&gt;HTTPでは、スマホやPCなどのインターネットを利用する側であるクライアントと、Webページやアプリケーションなどのソースコードやデータを持ち、クライアントに提供するサーバーの2者間で通信が行われます。&lt;/p&gt;
&lt;p&gt;クライアントは「◯◯のページが見たいです」などのリクエスト（要求）をサーバーに送ります。&lt;/p&gt;
&lt;p&gt;サーバーはそれを受けて「これが◯◯のページです」というレスポンス（応答）を返すことで、クライアントはWebページを閲覧することができます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/01.png&quot; alt=&quot;HTTP通信&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;改めてHTTPメソッドとは&lt;/h3&gt;
&lt;p&gt;ここまでで説明したように、HTTP通信ではクライアントからサーバーに向けてリクエストを送ることでWebページを閲覧することが可能になります。&lt;/p&gt;
&lt;p&gt;ですが実際にはWebページ閲覧だけでなく、ページを更新したりフォーム送信したりと、リクエストにはいくつか種類があります。&lt;/p&gt;
&lt;p&gt;「◯◯のページが見たいです」「◯◯のデータを送ります」「◯◯のファイルを削除してください」などのリクエストに名前をつけたものがHTTPメソッドです。&lt;/p&gt;
&lt;p&gt;ここまでの説明で、冒頭に言った「HTTPメソッドとは、クライアントからサーバーに発行されるリクエストの種類」という意味が理解できたでしょうか。&lt;/p&gt;
&lt;h2&gt;URI（Uniform Resource Identifier）とは&lt;/h2&gt;
&lt;p&gt;リクエストを送信する際に必要なものとしてURIがあります。&lt;/p&gt;
&lt;p&gt;URIはリクエストの送信先情報です。&lt;/p&gt;
&lt;p&gt;郵便で言うところの配達先住所ですね。&lt;/p&gt;
&lt;p&gt;例えばこの記事のURIは&lt;code&gt;https://rootful.net/http-method&lt;/code&gt;ですが、下記3つの情報が含まれています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;使用するプロトコル&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;リクエストを送信するサーバー&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ファイルの場所&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;./images/02.png&quot; alt=&quot;URI&quot; /&gt;&lt;/p&gt;
&lt;p&gt;このページを見ている皆さんは、この記事のリンクをクリックした時に&lt;code&gt;sosotech.info&lt;/code&gt;のサーバーに対して「&lt;code&gt;/http-method&lt;/code&gt;のページが見たいです」というリクエストを送っています。&lt;/p&gt;
&lt;p&gt;またURIにはクエリパラメータと呼ばれる機能があります。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;https://rootful.net/http-method?page=2&lt;/code&gt;のようにURIの末尾に&lt;code&gt;?パラメータ名=値&lt;/code&gt;を付けることで、サーバーに「2ページ目が見たいです」などの追加情報を送ることができます。&lt;/p&gt;
&lt;p&gt;URIはHTTPメソッドを説明する上でよく出てくる言葉なので理解しておいてください。&lt;/p&gt;
&lt;p&gt;よく聞く言葉で「URL」がありますが、「URI」とほぼ同じものだという認識で問題ありません。&lt;/p&gt;
&lt;h2&gt;HTTPメソッド一覧&lt;/h2&gt;
&lt;p&gt;HTTPメソッドの一覧が下記になります。&lt;/p&gt;
&lt;p&gt;9種類ありますが、実際にユーザーや開発者が使用するのはGETとPOSTがほとんどだと思います。&lt;/p&gt;
&lt;p&gt;このうちTRACEとCONNECTはほとんど使われていないため詳細な説明は割愛します。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;メソッド名&lt;/th&gt;
&lt;th&gt;説明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;リソースの取得&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;POST&lt;/td&gt;
&lt;td&gt;リソースにデータを送信&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PUT&lt;/td&gt;
&lt;td&gt;リソースの更新&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DELETE&lt;/td&gt;
&lt;td&gt;リソースの削除&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HEAD&lt;/td&gt;
&lt;td&gt;リソースのヘッダ（メタデータ）の取得&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OPTIONS&lt;/td&gt;
&lt;td&gt;リソースがサポートしているメソッドの取得&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PATCH&lt;/td&gt;
&lt;td&gt;リソースの部分的な更新&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TRACE&lt;/td&gt;
&lt;td&gt;自分宛にリクエストメッセージを返す試験&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CONNECT&lt;/td&gt;
&lt;td&gt;プロキシ動作のトンネル接続への変更&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;リソースとは、サーバーからのレスポンスに含まれるHTMLファイルや画像ファイルなどのことです。&lt;/p&gt;
&lt;h2&gt;各メソッドの説明&lt;/h2&gt;
&lt;h3&gt;GET&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;./images/03.png&quot; alt=&quot;GETメソッド&quot; /&gt;&lt;/p&gt;
&lt;p&gt;GETメソッドは指定したURIの情報を取得します。&lt;/p&gt;
&lt;p&gt;Webページや画像、動画の取得など、私たちがインターネットを使用する上で欠かせないメソッドです。&lt;/p&gt;
&lt;p&gt;あなたが今このページを見れているのも、ブラウザが&lt;code&gt;https://rootful.net/http-method&lt;/code&gt;というURIに対してGETリクエストを送信しているからです。&lt;/p&gt;
&lt;h3&gt;POST&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;./images/04.png&quot; alt=&quot;POSTメソッド&quot; /&gt;&lt;/p&gt;
&lt;p&gt;POSTメソッドは指定したURIに対しデータを送信します。&lt;/p&gt;
&lt;p&gt;POSTの主な使われ方は以下の3つです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;フォーム情報の送信&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;リソースの作成&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;リソースの更新&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;それぞれ解説します。&lt;/p&gt;
&lt;h4&gt;フォーム情報の送信&lt;/h4&gt;
&lt;p&gt;会員登録やネットショッピングなど、インターネットを利用していてフォームを入力する機会は多いです。&lt;/p&gt;
&lt;p&gt;フォームで入力した氏名、住所、カード情報などのデータはPOSTリクエストによって指定のURIに送信されます。&lt;/p&gt;
&lt;p&gt;そして送られた先ではデータベースに格納したりまた次の処理を行ったりといったことが可能です。&lt;/p&gt;
&lt;p&gt;フォームで入力した情報はクエリパラメータでも送信することは可能ですが、URIにくっついているため住所やパスワードなどの情報が外部に筒抜けになってしまうリスクがあります。&lt;/p&gt;
&lt;p&gt;一方でPOSTメソッドで送信した場合は、大切な情報が外部から見られることはありません。&lt;/p&gt;
&lt;p&gt;そのため個人データなどを扱う場合は基本的にPOSTメソッドを使用します。&lt;/p&gt;
&lt;h4&gt;リソースの作成&lt;/h4&gt;
&lt;p&gt;指定したURIに対して新しいリソースを作成します。&lt;/p&gt;
&lt;p&gt;例えばこのブログでは記事を作成するときは&lt;code&gt;https://rootful.net/wp-admin/post_new.php&lt;/code&gt;というファイルを使います。&lt;/p&gt;
&lt;p&gt;このURIに対して、POSTメソッドで新しい記事のデータを送信することで&lt;code&gt;https://rootful.net/&lt;/code&gt;配下に記事リソースを作成してくれます。&lt;/p&gt;
&lt;h4&gt;リソースの更新&lt;/h4&gt;
&lt;p&gt;指定したURIのリソースを更新します。&lt;/p&gt;
&lt;p&gt;このブログでは記事を編集する場合、下記のように&lt;code&gt;post.php&lt;/code&gt;に対して記事IDとアクション名をクエリパラメータで渡しています。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;https://rootful.net/wp-admin/post.php?post=779&amp;amp;action=edit&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;このURIに対してPOSTメソッドで更新したい内容を送信すると記事データを更新してくれます。&lt;/p&gt;
&lt;h3&gt;PUT&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;./images/05.png&quot; alt=&quot;PUTメソッド&quot; /&gt;&lt;/p&gt;
&lt;p&gt;PUTメソッドの機能は2つです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;リソースの作成&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;リソースの更新&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;リソースの作成&lt;/h4&gt;
&lt;p&gt;指定したURIに対して新しいリソースを作成します。&lt;/p&gt;
&lt;p&gt;できることとしてはPOSTメソッドと同じですが、細かな違いがあります。&lt;/p&gt;
&lt;p&gt;それはPOSTメソッドではリソースのURIを指定できないが、PUTメソッドはリソースのURIを指定できる、という点です。&lt;/p&gt;
&lt;p&gt;例えば&lt;code&gt;https://rootful.net/wp-admin/post_new.php&lt;/code&gt;に対してPOSTメソッドとPUTメソッドそれぞれで記事データを送信したとします。&lt;/p&gt;
&lt;p&gt;POSTメソッドではサーバー側が「じゃあ&lt;code&gt;https://rootful.net/http-method&lt;/code&gt;にリソース作成するわ！」と自由に決めることができますが、PUTメソッドでは強制的に&lt;code&gt;https://rootful.net/wp-admin/post_new.php&lt;/code&gt;にリソース作成されてしまいます。&lt;/p&gt;
&lt;p&gt;そのため意図しない動作を引き起こす可能性があり、基本的にはPOSTメソッドを使うことを推奨します。&lt;/p&gt;
&lt;h4&gt;リソースの更新&lt;/h4&gt;
&lt;p&gt;指定したURIのリソースを更新します。&lt;/p&gt;
&lt;p&gt;こちらも上と同じ理由でPOSTメソッド推奨です。&lt;/p&gt;
&lt;h3&gt;DELETE&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;./images/06.png&quot; alt=&quot;DELETEメソッド&quot; /&gt;&lt;/p&gt;
&lt;p&gt;DELETEメソッドは指定したURIのリソースを削除します。&lt;/p&gt;
&lt;h3&gt;HEAD&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;./images/07.png&quot; alt=&quot;HEADメソッド&quot; /&gt;&lt;/p&gt;
&lt;p&gt;HEADメソッドは指定したURIのヘッダ（メタデータ）のみを取得します。&lt;/p&gt;
&lt;p&gt;GETメソッドで&lt;code&gt;https://rootful.net/http-method&lt;/code&gt;というURIにリクエストすると記事データと一緒に記事データの拡張子、文字コード、更新日時などのメタデータが取得できますが、HEADはメタデータのみを取得し、記事データは取得しません。&lt;/p&gt;
&lt;p&gt;何らかの処理を行う前にリソース情報を調べたい場合に使われます。&lt;/p&gt;
&lt;h3&gt;OPTIONS&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;./images/08.png&quot; alt=&quot;OPTIONSメソッド&quot; /&gt;&lt;/p&gt;
&lt;p&gt;OPTIONSメソッドはリソースが対応しているメソッドを取得することができます。&lt;/p&gt;
&lt;p&gt;例えば新規投稿作成用のURIである&lt;code&gt;https://rootful.net/wp-admin/post_new.php&lt;/code&gt;はPOSTメソッドしか受け付けないよう設定されているとすると、このURIにOPTIONSメソッドでリクエストを送信すると&lt;code&gt;POST&lt;/code&gt;のみ返却されます。&lt;/p&gt;
&lt;p&gt;そのためOPTONSメソッドは、これから送信するリクエストのメソッドが対応しているかなどを打診するために使われることがあります。&lt;/p&gt;
&lt;p&gt;これをプリフライトリクエストと呼び、詳しくはこちらの記事で解説しています。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;948&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h3&gt;PATCH&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;./images/09.png&quot; alt=&quot;PATCHメソッド&quot; /&gt;&lt;/p&gt;
&lt;p&gt;PATCHメソッドは指定したURIのリソースを一部分更新します。&lt;/p&gt;
&lt;p&gt;POSTやPUTメソッドがリソースを丸ごと送信するのに対して、PATCHメソッドは更新したい箇所だけ送信すれば良いのでパフォーマンス向上の効果があります。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;この記事ではHTTPメソッドとは何か、HTTPメソッドの種類を解説しました。&lt;/p&gt;
&lt;p&gt;最後にもう一度ポイントをまとめておきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;HTTPメソッドとはクライアントからサーバーに発行されるリクエストの種類&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;HTTPメソッドは9種類あるが、よく使われるのはGETとPOSTの2種類&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;HTTPについてより詳しく勉強したい！という方向けに、おすすめの教材を紹介します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/dp/4774142042&quot;&gt;Webを支える技術 -HTTP、URI、HTML、そしてREST&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;こちらの本は正直初心者にとってはやや難しい内容もあります。&lt;/p&gt;
&lt;p&gt;ですがHTTPやステータスコードについて非常に詳しく書かれているため、当ブログなどで簡単に理解した後にさらに理解を深めるための教材として活用してみてください！&lt;/p&gt;
&lt;p&gt;参考&lt;br /&gt;
・&lt;a href=&quot;https://developer.mozilla.org/ja/docs/Web/HTTP/Methods&quot;&gt;HTTP リクエストメソッド - HTTP | MDN&lt;/a&gt;&lt;br /&gt;
・&lt;a href=&quot;https://www.amazon.co.jp/dp/4774142042&quot;&gt;Webを支える技術 -HTTP、URI、HTML、そしてREST&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>HTTPステータスコードとは？意味と確認方法をわかりやすく解説</title><link>https://rootful.net/posts/what-is-http-status-code/</link><guid isPermaLink="true">https://rootful.net/posts/what-is-http-status-code/</guid><pubDate>Sat, 14 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この記事で解決できるお悩み&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#1&quot;&gt;ステータスコードって何？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#3&quot;&gt;たまに見る404とか500って数字は何の意味があるの？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#2&quot;&gt;ステータスコードはどうやって確認するの？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[st-kaiwa2 html_class=&quot;wp-block-st-blocks-st-kaiwa&quot;]&lt;/p&gt;
&lt;p&gt;こんな悩みを解決できます！&lt;/p&gt;
&lt;p&gt;営業職から会社員WEBエンジニア、&lt;br /&gt;
その後フリーランスWEBエンジニアに転向した自分が解説します。&lt;/p&gt;
&lt;p&gt;[/st-kaiwa2]&lt;/p&gt;
&lt;p&gt;この記事ではステータスコードとは何か、ステータスコードの意味をわかりやすく解説します。&lt;/p&gt;
&lt;p&gt;この記事を読めば、ステータスコードを見るだけでインターネット通信の状況を読み取ることができるようになります！&lt;/p&gt;
&lt;h2&gt;ステータスコードとは？&lt;/h2&gt;
&lt;p&gt;一言で言うと、ステータスコードとはインターネット通信が成功したか、失敗したかどうかを表す3桁の数字です。&lt;/p&gt;
&lt;p&gt;ステータスコードの説明をする前に、その大元であるHTTPについて簡単に説明します。&lt;/p&gt;
&lt;h3&gt;HTTP（HyperText Transfer Protocol）&lt;/h3&gt;
&lt;p&gt;ステータスコードはHTTPの一要素です。&lt;/p&gt;
&lt;p&gt;英語と日本語の会話では意味が通じないように、インターネット通信も共通のルールに基づいて行う必要があります。&lt;/p&gt;
&lt;p&gt;そのため「インターネット通信のルール」としてHTTPが定められています。&lt;/p&gt;
&lt;p&gt;ステータスコードもHTTPの中で定められているルールの1つです。&lt;/p&gt;
&lt;p&gt;今現在、HTTPはWebサイトの閲覧やWebアプリケーションの利用には必ずと言っていいほど使われています。&lt;/p&gt;
&lt;p&gt;URLの先頭につく「http://」や「https://」は「HTTPを使って通信を行いますよ」という宣言です。&lt;/p&gt;
&lt;h3&gt;クライアントとサーバー&lt;/h3&gt;
&lt;p&gt;ステータスコードを理解する上で重要な要素としてクライアントとサーバーがあります。&lt;/p&gt;
&lt;p&gt;HTTPでは、スマホやPCなどのインターネットを利用する側であるクライアントと、Webページやアプリケーションなどのソースコードやデータを持ち、クライアントに提供するサーバーの2者間で通信が行われます。&lt;/p&gt;
&lt;p&gt;クライアントは「◯◯のページが見たいです」などのリクエスト（要求）をサーバーに送ります。&lt;/p&gt;
&lt;p&gt;サーバーはそれを受けて「これが◯◯のページです」というレスポンス（応答）を返すことで、クライアントはWebページを閲覧することができます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/01.png&quot; alt=&quot;クライアントとサーバー&quot; /&gt;&lt;/p&gt;
&lt;p&gt;サーバーからのレスポンスに含まれるHTMLファイルや画像ファイルなどのことを&lt;strong&gt;リソース&lt;/strong&gt;と呼びます。&lt;/p&gt;
&lt;p&gt;ですが、何かしらの異常が発生して通信がうまくいかないことは往々にしてあります。&lt;/p&gt;
&lt;p&gt;そんな時にサーバーから何も返事が返ってこないとクライアント側は困ってしまいますよね？&lt;/p&gt;
&lt;p&gt;そのため、通信が成功か失敗かをクライアント側に伝えるための情報が必要です。&lt;/p&gt;
&lt;p&gt;この、クライアントに通信結果を伝えるための情報 = ステータスコードです。&lt;/p&gt;
&lt;p&gt;HTTPについて詳しく知りたい方はこちらの記事をおすすめします。&lt;/p&gt;
&lt;p&gt;こちらの記事は現在準備中です。&lt;/p&gt;
&lt;h2&gt;ステータスコードの確認方法&lt;/h2&gt;
&lt;p&gt;ステータスコードは誰でも確認することができます。&lt;/p&gt;
&lt;p&gt;この記事ではChromeのデベロッパーツールを使った方法を紹介します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;F12&lt;/code&gt;or&lt;code&gt;Ctrl + Shift + i（Windowsの場合）&lt;/code&gt;or&lt;code&gt;Cmd + Option + I（Macの場合）&lt;/code&gt;を押してデベロッパーツールを開く&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/02.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;「Network」を選択&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/03.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;対象URLの「Status」欄を確認&lt;br /&gt;
赤枠で囲まれている「200」やその下の「204」といった数字がステータスコードになります。&lt;br /&gt;
この例ではページが問題なく表示されているので通信成功を表す「200」が表示されています。&lt;br /&gt;
※何も表示されていない場合はページを更新してみてください&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/04.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;ステータスコードの意味&lt;/h2&gt;
&lt;p&gt;ステータスコードは3桁の数字で、先頭の数字によって以下の5つに分類されています。&lt;/p&gt;
&lt;p&gt;そのため先頭の数字を見れば通信が成功したか失敗したかを判断することができます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;1xx : 処理中&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2xx : 成功&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;3xx : リダイレクト&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;4xx : クライアントエラー&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;5xx : サーバーエラー&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この後各ステータスコードの意味を説明していきます。&lt;/p&gt;
&lt;p&gt;1つ1つのステータスコードの意味を覚える必要はありません。&lt;br /&gt;
知らないステータスコードが出てきたらその都度調べるぐらいの気持ちで大丈夫です。&lt;/p&gt;
&lt;h3&gt;100番台 - 処理中&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;./images/05.png&quot; alt=&quot;100番台 - 処理中&quot; /&gt;&lt;/p&gt;
&lt;p&gt;100番台は処理が継続していることを表します。&lt;/p&gt;
&lt;p&gt;クライアントはそのまま処理を継続する、また追加の情報を付け加えてサーバーに再送信するといったアクションを行います。&lt;/p&gt;
&lt;p&gt;我々が見かけることはあまりありません。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;HTTPステータスコード&lt;/th&gt;
&lt;th&gt;説明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;100 Continue&lt;/td&gt;
&lt;td&gt;リクエスト継続可能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;101 Switching Protocols&lt;/td&gt;
&lt;td&gt;プロトコル切り替え&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;102 Processing&lt;/td&gt;
&lt;td&gt;処理中&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;103 Early Hints&lt;/td&gt;
&lt;td&gt;ヘッダの事前送信&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;200番台 - 成功&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;./images/06.png&quot; alt=&quot;200番台 - 成功&quot; /&gt;&lt;/p&gt;
&lt;p&gt;200番台はリクエストが成功したことを表します。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;HTTPステータスコード&lt;/th&gt;
&lt;th&gt;説明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;200 OK&lt;/td&gt;
&lt;td&gt;リクエスト成功&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;201 Created&lt;/td&gt;
&lt;td&gt;リクエスト成功後に新たなリソースを作成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;202 Accepted&lt;/td&gt;
&lt;td&gt;リクエストは受理されたがまだ実行されていない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;203 Non-Authoritative Information&lt;/td&gt;
&lt;td&gt;リクエストは成功したが信用が低いリソースが返却された&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;204 No Content&lt;/td&gt;
&lt;td&gt;リクエストは成功したが返却するリソースが無い&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;205 Reset Content&lt;/td&gt;
&lt;td&gt;クライアントに対しリクエストを送信したドキュメントをリセットするよう指示&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;206 Partial Content&lt;/td&gt;
&lt;td&gt;クライアントが&lt;code&gt;Range&lt;/code&gt;ヘッダーを送信した時のみ&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;300番台 - リダイレクト&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;./images/07.png&quot; alt=&quot;300番台 - リダイレクト&quot; /&gt;&lt;/p&gt;
&lt;p&gt;300番台は他のリソースへのリダイレクトを表します。&lt;/p&gt;
&lt;p&gt;具体的には、アクセスしたURLに目当てのページがもう存在せず、別のURLに飛ばされる時などに返却されます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;HTTPステータスコード&lt;/th&gt;
&lt;th&gt;説明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;300 Multiple Choices&lt;/td&gt;
&lt;td&gt;リクエストに対して複数のレスポンスがあることを示す&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;301 Moved Permanently&lt;/td&gt;
&lt;td&gt;リソースのURIが永遠に変更されたことを示す&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;302 Found&lt;/td&gt;
&lt;td&gt;リソースの URI が一時的に変更されたことを示す&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;303 See Other&lt;/td&gt;
&lt;td&gt;別のURIをGETメソッドで参照するようクライアントに指示&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;304 Not Modified&lt;/td&gt;
&lt;td&gt;リソースが更新されていないことを示す&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;307 Temporary Redirect&lt;/td&gt;
&lt;td&gt;別のURIを始めのリクエストと同じメソッドで参照するようクライアントに指示&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;308 Permanent Redirect&lt;/td&gt;
&lt;td&gt;リソースのURIが永遠に変更されたことを示し、変更先のURIにリクエストを送る場合は始めのリクエストと同じメソッドで参照するようクライアントに指示&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;400番台 - クライアントエラー&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;./images/08.png&quot; alt=&quot;400番台 - クライアントエラー&quot; /&gt;&lt;/p&gt;
&lt;p&gt;400番台はクライアントエラーを表します。&lt;/p&gt;
&lt;p&gt;通信エラーが起こったけど悪いのはクライアント側だよ、ということを意味します。&lt;/p&gt;
&lt;p&gt;具体的には存在しないページにアクセスしようとする、不正な値を送信する、認証が必要なリソースを認証なしで取得しようとした時などに発生します。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;HTTPステータスコード&lt;/th&gt;
&lt;th&gt;説明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;400 Bad Request&lt;/td&gt;
&lt;td&gt;クライアントエラーのせいでサーバーがリクエストを処理できない、もしくは処理しない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;401 Unauthorized&lt;/td&gt;
&lt;td&gt;認証を必要としているが未認証&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;403 Forbidden&lt;/td&gt;
&lt;td&gt;クライアントにコンテンツのアクセス権がない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;404 Not Found&lt;/td&gt;
&lt;td&gt;サーバーがリクエストされたリソースを発見できない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;405 Method Not Allowed&lt;/td&gt;
&lt;td&gt;サーバーが禁止しているメソッドである&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;406 Not Acceptable&lt;/td&gt;
&lt;td&gt;クライアントから与えられた条件に合うコンテンツが見つからない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;407 Proxy Authentication Required&lt;/td&gt;
&lt;td&gt;プロキシサーバーが認証を必要としているが未認証&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;408 Request Timeout&lt;/td&gt;
&lt;td&gt;リクエスト処理時間切れ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;409 Conflict&lt;/td&gt;
&lt;td&gt;リクエストがサーバーの現在の状態と矛盾する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;410 Gone&lt;/td&gt;
&lt;td&gt;リクエストされたコンテンツがサーバーから永久に削除された&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;411 Length Required&lt;/td&gt;
&lt;td&gt;サーバーが&lt;code&gt;Content-Length&lt;/code&gt;ヘッダーフィールドを要求しているが、リクエストに付与されていない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;412 Precondition Failed&lt;/td&gt;
&lt;td&gt;サーバー側で適合しない前提条件がクライアント側のヘッダーに含まれている&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;413 Payload Too Large&lt;/td&gt;
&lt;td&gt;リクエストの本体がサーバーで定めている上限を超えている&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;414 URI Too Long&lt;/td&gt;
&lt;td&gt;リクエストした URI がサーバーで扱える長さを超えている&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;415 Unsupported Media Type&lt;/td&gt;
&lt;td&gt;リクエストされたデータのメディア形式をサーバーが対応していない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;416 Range Not Satisfiable&lt;/td&gt;
&lt;td&gt;リクエスト内の &lt;code&gt;Range&lt;/code&gt; ヘッダーフィールドで指定された範囲を満たすことができない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;417 Expectation Failed&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Expect&lt;/code&gt; リクエストヘッダーで指定された内容がサーバー側と適合しない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;418 I&apos;m a teapot&lt;/td&gt;
&lt;td&gt;コーヒーポットではなくやかんにリクエストを送った   ※このステータスコードはおふざけで作られました&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;421 Misdirected Request&lt;/td&gt;
&lt;td&gt;リクエストがレスポンスを生成できないサーバーに送られた&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;425 Too Early&lt;/td&gt;
&lt;td&gt;繰り返される可能性のあるリクエストを処理するリスクを拒否&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;426 Upgrade Required&lt;/td&gt;
&lt;td&gt;リクエスト処理するためにアップグレードが必要&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;428 Precondition Required&lt;/td&gt;
&lt;td&gt;リクエストが条件付きになることが必要&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;429 Too Many Requests&lt;/td&gt;
&lt;td&gt;一定の時間内に大量のリクエストを送信した&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;431 Request Header Fields Too Large&lt;/td&gt;
&lt;td&gt;ヘッダーフィールドが大きすぎる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;451 Unavailable For Legal Reasons&lt;/td&gt;
&lt;td&gt;政府によって検閲されたウェブページなどの違法なリソースをリクエスト&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;500番台 - サーバーエラー&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;./images/09.png&quot; alt=&quot;500番台 - サーバーエラー&quot; /&gt;&lt;/p&gt;
&lt;p&gt;500番台はサーバーエラーを表します。&lt;/p&gt;
&lt;p&gt;400番台の場合はクライアント側に原因がありますが、500番台の場合はサーバー側に原因があります。&lt;/p&gt;
&lt;p&gt;そのためWebサイト閲覧時に500番台のエラーが出た場合は、クライアント側からどうにかしてページを見れるようにするといったことは基本的に不可能です。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;HTTPステータスコード&lt;/th&gt;
&lt;th&gt;説明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;500 Internal Server Error&lt;/td&gt;
&lt;td&gt;サーバー側で処理方法がわからない事態が発生&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;501 Not Implemented&lt;/td&gt;
&lt;td&gt;リクエストメソッドをサーバーが対応しておらず扱えない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;502 Bad Gateway&lt;/td&gt;
&lt;td&gt;ゲートウェイとして動作するサーバーが無効なレスポンスを受け取った&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;503 Service Unavailable&lt;/td&gt;
&lt;td&gt;リクエストを処理する準備ができていない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;504 Gateway Timeout&lt;/td&gt;
&lt;td&gt;ゲートウェイとして動作するサーバーが時間内にレスポンスを得られない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;505 HTTP Version Not Supported&lt;/td&gt;
&lt;td&gt;リクエストで使用した HTTP のバージョンにサーバーが対応していない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;506 Variant Also Negotiates&lt;/td&gt;
&lt;td&gt;サーバーに内部構成エラーがある&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;510 Not Extended&lt;/td&gt;
&lt;td&gt;リクエスト拡張が必要&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;511 Network Authentication Required&lt;/td&gt;
&lt;td&gt;クライアントがネットワークでアクセスするために認証が必要&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;【参考】&lt;a href=&quot;https://developer.mozilla.org/ja/docs/Web/HTTP/Status&quot;&gt;https://developer.mozilla.org/ja/docs/Web/HTTP/Status&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;この記事でステータスコードとは何か、ステータスコードが表す意味が理解できれば嬉しいです。&lt;/p&gt;
&lt;p&gt;最後にもう一度ポイントをまとめておきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ステータスコードとはインターネット通信の結果を表す3桁の数字&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ステータスコードはHTTPの中で定められている&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ステータスコードの先頭の数字で大まかな結果がわかる&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ステータスコードについてもっと詳しく知りたい、HTTPを勉強したいという方向けにおすすめの教材を紹介します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/dp/4774142042&quot;&gt;Webを支える技術 -HTTP、URI、HTML、そしてREST&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;こちらの本は正直初心者にとってはやや難しい内容もあります。&lt;/p&gt;
&lt;p&gt;ですがHTTPやステータスコードについて非常に詳しく書かれているため、当ブログなどで簡単に理解した後にさらに理解を深めるための教材として活用してみてください！&lt;/p&gt;
</content:encoded></item><item><title>MACアドレスとは？仕組み・構造・用途をわかりやすく解説！</title><link>https://rootful.net/posts/what-is-mac-address/</link><guid isPermaLink="true">https://rootful.net/posts/what-is-mac-address/</guid><pubDate>Sat, 13 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この記事で解決できるお悩み&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://rootful.net/internet/mac-address#1&quot;&gt;MACアドレスって何...？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://rootful.net/internet/mac-address#3&quot;&gt;MACアドレスは何に使われるの？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#4&quot;&gt;MACアドレスはどうやって調べたらいい？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ネットワークの基礎として重要な『MACアドレス』。&lt;/p&gt;
&lt;p&gt;この記事ではその仕組みや実際の用途、調べ方までを初心者向けに詳しく解説します。&lt;/p&gt;
&lt;h2&gt;MACアドレスとは？&lt;/h2&gt;
&lt;p&gt;MAC（Media Access Control）アドレスとはパソコンやスマホ、ルーターなどのネットワーク機器に割り当てられている識別番号です。&lt;/p&gt;
&lt;p&gt;MACアドレスとAppleが提供するMacシリーズは全く関係ありません。&lt;/p&gt;
&lt;p&gt;人間で言うところのマイナンバーに近いものと考えてもらうと理解しやすいです。&lt;/p&gt;
&lt;p&gt;MACアドレスは&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;00-00-5E-00-53-FF
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;のように6バイトの16進数をハイフンまたはコロンで区切った形で表します。&lt;/p&gt;
&lt;p&gt;MACアドレスは基本的には世界で一意であり、同じMACアドレスは1つとして存在しません。&lt;/p&gt;
&lt;p&gt;ただし、特定のソフトウェアを使用して変更できる場合もあり、その場合重複の可能性があります。&lt;/p&gt;
&lt;h2&gt;MACアドレスの構造&lt;/h2&gt;
&lt;p&gt;MACアドレスの構成要素は大きく分けて2つです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;ベンダーID&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;製造番号&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;MACアドレスの前半6桁はベンダーIDと呼ばれ、機器メーカーを特定するための識別番号です（例：Apple=00-1A-2Bなど）。&lt;/p&gt;
&lt;p&gt;後半6桁は機器ごとに割り当てられる製造番号で、同一メーカー内で重複しないように割り当てられます。&lt;/p&gt;
&lt;p&gt;メーカーごとのユニークなID、メーカー内の機器ごとのユニークなIDを合わせることでMACアドレスは一意性を実現しています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/01.png&quot; alt=&quot;MACアドレスの構造&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;MACアドレスの用途&lt;/h2&gt;
&lt;p&gt;MACアドレスはネットワーク内の通信において、データの送信元と宛先の特定に使われます。&lt;/p&gt;
&lt;p&gt;ネットワーク内にある機器のMACアドレスはスイッチと呼ばれる機器、もしくはスイッチ機能を搭載したルーターで管理することができます。&lt;/p&gt;
&lt;p&gt;スイッチはどのポート（LANケーブルの接続口）にどの機器が接続しているかをMACアドレスで管理しています。&lt;/p&gt;
&lt;p&gt;そのため受信したデータの宛先MACアドレスを確認して、該当ポートにのみデータを転送することができます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/02.png&quot; alt=&quot;MACアドレスを使った通信&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;MACアドレスとIPアドレスの関係&lt;/h3&gt;
&lt;p&gt;MACアドレスと似たものにIPアドレスがあります。&lt;/p&gt;
&lt;p&gt;IPアドレスは&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;192.0.2.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;のような形で表され、インターネット上におけるネットワーク機器の住所を表します。&lt;/p&gt;
&lt;p&gt;IPアドレスについて詳しく知りたい方はこちらの記事がおすすめです。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;601&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;p&gt;IPアドレスもMACアドレスと同じく、データをやり取りする相手を特定するために使われます。&lt;/p&gt;
&lt;p&gt;ではMACアドレスとIPアドレスの違いは何かというと、MACアドレスは『次の目的地』を表し、IPアドレスは『最終目的地』を表します。&lt;/p&gt;
&lt;p&gt;MACアドレスは郵便における受取人名、IPアドレスは住所に例えられます。&lt;/p&gt;
&lt;p&gt;例えばインターネット上で動画を再生しようとした時、最終目的地は『動画を保存しているサーバー』です。&lt;/p&gt;
&lt;p&gt;ですがそこに辿り着くまでには、&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;自分のPC → 自宅のルーター&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;自宅のルーター → 別のネットワークのルーター&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;別のネットワークのルーター → 目的のネットワークのルーター&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;目的のネットワークのルーター → 目的のサーバー&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;というように最終目的地に行くためにいくつかの機器を経由します。&lt;/p&gt;
&lt;p&gt;上の手順①の『自分のPC』から見た『自宅のルーター』、②の『自宅のルーター』から見た『別のネットワークのルーター』が次の目的地にあたり、これらはMACアドレスで表されます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/03.png&quot; alt=&quot;MACアドレスとIPアドレスを使った通信&quot; /&gt;&lt;/p&gt;
&lt;p&gt;このようにIPアドレスは最終目的地を表すので変わることはなく、MACアドレスは次の目的地を表すので毎回変わることになります。&lt;/p&gt;
&lt;h2&gt;MACアドレスの確認方法&lt;/h2&gt;
&lt;p&gt;Windows、MacそれぞれでのMACアドレスの確認方法を説明します。&lt;/p&gt;
&lt;h3&gt;Windows11&lt;/h3&gt;
&lt;p&gt;Windows11での確認方法は以下の手順です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;「設定」を開く&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;「ネットワークとインターネット」を選択し、「ネットワークの詳細設定」をクリック&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;「ハードウェアと接続のプロパティを表示」をクリック&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;「物理アドレス(MAC)」を確認&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;「Wifi」と「イーサネット」それぞれに「物理アドレス(MAC)」が記載されていると思います。&lt;/p&gt;
&lt;p&gt;インターネットに無線で繋いでいる場合は「Wifi」、有線で繋いでいる場合は「イーサネット」が今使っている機器のMACアドレスになります。&lt;/p&gt;
&lt;h3&gt;Mac&lt;/h3&gt;
&lt;p&gt;Macでの確認方法は以下の手順です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;「システム環境設定」を開く&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;「ネットワーク」をクリック&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;「Ethernet」を選択し、「詳細」をクリック&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;「ハードウェア」を選択し、「MACアドレス」を確認&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;./images/04.png&quot; alt=&quot;MacでのMacアドレス確認方法&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;最後にもう一度ポイントをまとめておきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;MACアドレスとはネットワーク機器に割り当てられている識別番号&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MACアドレスはデータをやり取りする機器を特定するために使われる&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MACアドレスは『次の目的地』、IPアドレスは『最終目的地』として使われる&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MACアドレスはネットワークの基礎知識として非常に重要です。&lt;/p&gt;
&lt;p&gt;仕組みを理解することで、効率的なネットワーク設計やトラブルシューティングが可能になります。&lt;/p&gt;
&lt;p&gt;ぜひ自分のデバイスのMACアドレスを確認し、実践に活用してみてください。&lt;/p&gt;
&lt;p&gt;ネットワークについて基礎から勉強したい方向けにおすすめの教材を紹介します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/dp/4815617678&quot;&gt;イラスト図解式　この一冊で全部わかるネットワークの基本 第2版&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;インターネットはルールや要素が多くて混乱しがちですが、こちらの本では順を追ってわかりやすく説明してくれているので初めてインターネット関連の本を読む方におすすめです！&lt;/p&gt;
</content:encoded></item><item><title>ポート番号とは？図解付きで初心者にもわかりやすく解説！</title><link>https://rootful.net/posts/what-is-port-number/</link><guid isPermaLink="true">https://rootful.net/posts/what-is-port-number/</guid><pubDate>Mon, 08 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この記事で解決できるお悩み&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://rootful.net/what-is-port-number#1&quot;&gt;ポート番号って何...？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://rootful.net/what-is-port-number#3&quot;&gt;ポート番号はどうやって使われるの？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;インターネットを使う上で欠かせない要素のひとつが『ポート番号』です。&lt;/p&gt;
&lt;p&gt;しかし、その仕組みや役割を詳しく知っている方は少ないかもしれません。&lt;/p&gt;
&lt;p&gt;本記事では、初心者の方でも理解しやすいように、図解を交えながらポート番号の基本を解説します！&lt;/p&gt;
&lt;h2&gt;ポート番号とは？&lt;/h2&gt;
&lt;p&gt;ポート番号とはアプリケーションの識別番号です。&lt;/p&gt;
&lt;p&gt;ポート番号は &lt;code&gt;0~65535&lt;/code&gt; の間の数字で表されます。&lt;/p&gt;
&lt;p&gt;インターネット通信ではIPアドレスというものを使い通信相手を特定します。&lt;/p&gt;
&lt;p&gt;しかし通信相手のコンピュータ内ではブラウザアプリやメールアプリなど複数のアプリケーションが動いており、どのアプリケーションと通信を行うかを指定する必要があります。&lt;/p&gt;
&lt;p&gt;そのために必要なのがポート番号です。&lt;/p&gt;
&lt;p&gt;ポート番号を指定することで、相手のコンピュータは受信したデータがどのアプリケーション向けのものか判断することができます。&lt;/p&gt;
&lt;p&gt;IPアドレスについて詳しく知りたい方はこちらの記事がおすすめです。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;601&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h2&gt;ポート番号の種類&lt;/h2&gt;
&lt;p&gt;ポート番号は3種類に分けられています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;ウェルノウンポート番号&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;登録済みポート番号&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ダイナミック/プライベートポート番号&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;ウェルノウンポート番号&lt;/h3&gt;
&lt;p&gt;ポート番号のうち&lt;code&gt;0~1023&lt;/code&gt;はウェルノウンポート番号と呼ばれ、主要なアプリケーションごとに番号が割り振られています。&lt;/p&gt;
&lt;p&gt;これらの番号はIANA（Internet Assigned Numbers Authority : アイアナ）という機関で管理されています。&lt;/p&gt;
&lt;p&gt;例えば、Webサイトを閲覧にはポート番号&lt;code&gt;80&lt;/code&gt;、メールの読み出しにはポート番号&lt;code&gt;110&lt;/code&gt;が割り当てられています。&lt;/p&gt;
&lt;p&gt;以下に代表的なウェルノウンポート番号をまとめました。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ポート番号&lt;/th&gt;
&lt;th&gt;プロトコル&lt;/th&gt;
&lt;th&gt;主な用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td&gt;HTTP&lt;/td&gt;
&lt;td&gt;Webへのアクセス&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;443&lt;/td&gt;
&lt;td&gt;HTTPS&lt;/td&gt;
&lt;td&gt;暗号化されたWebへのアクセス&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;110&lt;/td&gt;
&lt;td&gt;POP3&lt;/td&gt;
&lt;td&gt;メールボックスの読み出し&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;143&lt;/td&gt;
&lt;td&gt;IMAP4&lt;/td&gt;
&lt;td&gt;メールボックスへのアクセス&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;SMTP&lt;/td&gt;
&lt;td&gt;サーバー間のメール送信&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;587&lt;/td&gt;
&lt;td&gt;SMTP submission&lt;/td&gt;
&lt;td&gt;コンピュータからメールサーバーへのメール送信&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;FTP data&lt;/td&gt;
&lt;td&gt;ファイル転送（データ転送用）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;FTP control&lt;/td&gt;
&lt;td&gt;ファイル転送（制御用）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;登録済みポート番号&lt;/h3&gt;
&lt;p&gt;ポート番号のうち&lt;code&gt;1024~49151&lt;/code&gt;は登録済みポート番号と呼ばれ、「ウェルノウンポート番号のように主要なものではないが比較的よく使われる」アプリケーションに割り振られています。&lt;/p&gt;
&lt;p&gt;こちらも IANAで管理されています。&lt;/p&gt;
&lt;p&gt;代表的なポート番号としては、データベース管理システムであるMySQLの&lt;code&gt;3306&lt;/code&gt;やPostgreSQLの&lt;code&gt;5432&lt;/code&gt;などがあります。&lt;/p&gt;
&lt;h3&gt;ダイナミック/プライベートポート番号&lt;/h3&gt;
&lt;p&gt;ポート番号のうち&lt;code&gt;49152~65535&lt;/code&gt;はダイナミック/プライベートポート番号と呼ばれる、用途が特定されていないポート番号です。&lt;/p&gt;
&lt;p&gt;インターネット上で通信を行う際には相手コンピュータのポート番号を指定しますが、同様に自分側のポート番号も指定する必要があります。&lt;/p&gt;
&lt;p&gt;その際、ダイナミック/プライベートポート番号から自動的に割り当てられます。&lt;/p&gt;
&lt;p&gt;自分側のポート番号は相手からデータを送り返してもらう時などに使用されます。&lt;/p&gt;
&lt;h2&gt;ポート番号を使った通信の流れ&lt;/h2&gt;
&lt;p&gt;ここまでポート番号について説明してきましたが、ここから具体的な通信の流れについて説明します。&lt;/p&gt;
&lt;p&gt;ここではインターネット通信をするために必要な要素として以下の4つを取り上げます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;自身のIPアドレス&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;自身のポート番号&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;相手のIPアドレス&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;相手のポート番号&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これらを使った通信の流れを図示したものが以下になります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/01.png&quot; alt=&quot;ポートを使ったインターネット通信&quot; /&gt;&lt;/p&gt;
&lt;p&gt;まずデータをやり取りしたいコンピュータをIPアドレスで指定し、対象のサービスをポート番号で指定します。&lt;/p&gt;
&lt;p&gt;そうして指定した相手に自分のIPアドレスとポート番号、「Webページのデータが欲しい」などのリクエストを飛ばします。&lt;/p&gt;
&lt;p&gt;リクエストを受け取った相手は送信元のIPアドレス、ポート番号に対してリクエストされたデータを送信します。&lt;/p&gt;
&lt;p&gt;といった流れで通信が行われます。&lt;/p&gt;
&lt;p&gt;またポート番号には、下図のように相手の同じポート番号に複数のアクセスが発生した場合に、どちらにどのデータを送るかを区別する役割もあります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/02.png&quot; alt=&quot;ポートを使ったデータ送信先の区別&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;最後にもう一度ポイントをまとめておきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ポート番号とはアプリケーションの識別番号である&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;IPアドレスで相手のコンピュータを特定し、ポート番号でデータをやり取りするアプリケーションを特定する&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ポート番号はウェルノウンポート番号、登録済みポート番号、ダイナミック/プライベートポート番号の3種類に分けられている&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ネットワークについて基礎から勉強したい方向けにおすすめの教材を紹介します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/dp/4815617678&quot;&gt;イラスト図解式　この一冊で全部わかるネットワークの基本 第2版&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;インターネットは多くのルールと要素があり混乱しがちですが、こちらの本では順を追ってわかりやすく説明してくれているので初めてインターネット関連の本を読む方におすすめです！&lt;/p&gt;
</content:encoded></item><item><title>ドメイン名とは？構造やDNSについて初心者にもわかりやすく解説！</title><link>https://rootful.net/posts/what-is-domain-name/</link><guid isPermaLink="true">https://rootful.net/posts/what-is-domain-name/</guid><pubDate>Thu, 04 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この記事で解決できるお悩み&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#1&quot;&gt;ドメイン名って何...?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://rootful.net/what-is-domain-name#2&quot;&gt;ドメイン名の構造を知りたい&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#3&quot;&gt;ドメイン名とIPアドレスを紐付ける仕組みについて知りたい&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[st-kaiwa2 html_class=&quot;wp-block-st-blocks-st-kaiwa&quot;]&lt;/p&gt;
&lt;p&gt;こんな悩みを解決できます！&lt;/p&gt;
&lt;p&gt;営業職から会社員WEBエンジニア、&lt;br /&gt;
その後フリーランスWEBエンジニアに転向した自分が解説します。&lt;/p&gt;
&lt;p&gt;[/st-kaiwa2]&lt;/p&gt;
&lt;h2&gt;ドメイン名とは？&lt;/h2&gt;
&lt;p&gt;ドメイン名とはインターネットにおけるコンピュータの住所です。&lt;/p&gt;
&lt;p&gt;インターネット上に存在する無数のコンピュータの中から目当てのものを特定するために使われます。&lt;/p&gt;
&lt;p&gt;ドメイン名は&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;example.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;のように文字列をドットで区切った形で扱われます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/01.png&quot; alt=&quot;ドメイン名とは&quot; /&gt;&lt;/p&gt;
&lt;p&gt;ドメイン名はURLやメールアドレスの一部として使われています。&lt;/p&gt;
&lt;p&gt;URLやメールアドレスにドメイン名を使うことで、コンピュータ側が『どのコンピュータとデータをやり取りするか』を判断できるようになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/02.png&quot; alt=&quot;ドメイン名の使われ方&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;IPアドレスとの関係&lt;/h3&gt;
&lt;p&gt;ドメイン名はIPアドレスを人間が読みやすい形に変換したものです。&lt;/p&gt;
&lt;p&gt;IPアドレスはドメイン名と同じくインターネットにおけるコンピュータの住所を表しますが、コンピュータ内部で使われる値です。&lt;/p&gt;
&lt;p&gt;コンピュータ内部では&lt;code&gt;11000000.00000000.00000010.00000000&lt;/code&gt;のように2進数で扱われますが、人間にとっては非常に読みづらいので通常以下のように10進数表記で扱われます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;192.0.2.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ですが、人間にとってはこのままでも非常に覚えづらいです。&lt;/p&gt;
&lt;p&gt;そのため、この数字の羅列を人間が覚えやすい形に変換したものがドメイン名になります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/03.png&quot; alt=&quot;IPアドレスはドメイン名を変換したもの&quot; /&gt;&lt;/p&gt;
&lt;p&gt;IPアドレスについて詳しく知りたい方はこちらの記事がおすすめです。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;601&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h2&gt;ドメイン名の構成&lt;/h2&gt;
&lt;p&gt;ドメイン名は文字列をドットで繋げた形で構成されます。&lt;/p&gt;
&lt;p&gt;ドメイン名を構成する要素は右から順番に、&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;TLD（Top Level Domain : トップレベルドメイン）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2LD（2nd Level Domain : セカンドレベルドメイン）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;3LD（3rd Level Domain : サードレベルドメイン）&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;と呼ばれます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/04.png&quot; alt=&quot;ドメイン名の構造&quot; /&gt;&lt;/p&gt;
&lt;p&gt;「.jp」や「.com」は代表的なTLDです。&lt;/p&gt;
&lt;h3&gt;TLDの種類&lt;/h3&gt;
&lt;p&gt;ドメイン名のうち、TLD（Top Level Domain）には大きく分けて2種類あります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;ccTLD（Country Code Top Level Domain）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;gTLD（Generic Top Level Domain）&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ccTLDは国や地域ごとに割り当てられるTLDです。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Japan =&amp;gt; .jp&lt;/code&gt; &lt;code&gt;China =&amp;gt; .cn&lt;/code&gt; &lt;code&gt;United Kingdom =&amp;gt; .uk&lt;/code&gt; など、国名を2文字で表したものになります。&lt;/p&gt;
&lt;p&gt;gTLDは国や地域によらないTLDです。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.com&lt;/code&gt; や&lt;code&gt;.net&lt;/code&gt; など、個人が簡単に取得できるものが多いです。&lt;/p&gt;
&lt;p&gt;ただ一部米国の教育機関限定の &lt;code&gt;.edu&lt;/code&gt; や、同じく米国の政府機関限定の &lt;code&gt;.gov&lt;/code&gt; など、特定の制限が設けられているgTLDも存在します。&lt;/p&gt;
&lt;h2&gt;ドメイン名とIPアドレスを紐付ける仕組み&lt;/h2&gt;
&lt;p&gt;私たちがWebサイトを閲覧する時はURLとしてドメイン名を指定しますが、コンピュータ側が欲しいのはIPアドレスです。&lt;/p&gt;
&lt;p&gt;そのため、ドメイン名をIPアドレスに変換してあげる仕組みが必要です。&lt;/p&gt;
&lt;p&gt;この「ドメイン名に紐づけられたIPアドレスを取得する」仕組みのことを『名前解決』と言います。&lt;/p&gt;
&lt;p&gt;名前解決を行うための仕組みは以下の2つです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;HOSTSファイル&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DNS（Domain Name System）&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;HOSTSファイル&lt;/h3&gt;
&lt;p&gt;HOSTSファイルとは、IPアドレスとそれに紐づくドメイン名をまとめたテキストファイルです。&lt;/p&gt;
&lt;p&gt;以下のようにIPアドレスとそれに対応する名前をつけることで、名前解決を行ってくれます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# IPアドレス ホスト名 別名
192.0.2.0 example example.co.jp
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この例だと &lt;code&gt;https://example.co.jp/&lt;/code&gt; にアクセスすると &lt;code&gt;192.0.2.0&lt;/code&gt; のコンピュータに接続できるようになります。&lt;/p&gt;
&lt;p&gt;まだ開発中でインターネット上に公開されていないサイトにドメイン名を使ってアクセスしたい時などに使われます。&lt;/p&gt;
&lt;p&gt;昔はHOSTSファイルを使ってインターネット全体の名前解決を行っていたのですが、インターネットの普及に伴ってコンピュータの数が激増し、管理に限界が来てしまいました。&lt;/p&gt;
&lt;p&gt;その結果、現在は後述のDNS（Domain Name System）がメインで扱われています。&lt;/p&gt;
&lt;p&gt;HOSTSファイルはほとんどのOSに存在します。&lt;br /&gt;
Windowsでは &lt;code&gt;C:\Windows\System32\drivers\etc\hosts&lt;/code&gt;&lt;br /&gt;
Macでは &lt;code&gt;/private/etc/hosts&lt;/code&gt;&lt;br /&gt;
にあります。&lt;/p&gt;
&lt;h3&gt;DNS（Domain Name System）&lt;/h3&gt;
&lt;p&gt;DNS（Domain Name System）とは、「ドメイン名に紐づけられたIPアドレスを取得する」処理を行うシステムです。&lt;/p&gt;
&lt;p&gt;以下の図は &lt;code&gt;example.co.jp&lt;/code&gt; というドメイン名を名前解決する時の流れになります。&lt;/p&gt;
&lt;p&gt;まずは全体像をざっと把握してみてください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/05.png&quot; alt=&quot;DNSの処理の流れ&quot; /&gt;&lt;/p&gt;
&lt;p&gt;DNSでは大きく分けて3つの登場人物がいます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;スタブリゾルバー&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;フルリゾルバー&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;権威サーバー&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;スタブリゾルバー&lt;/h4&gt;
&lt;p&gt;『名前解決の窓口』です。&lt;/p&gt;
&lt;p&gt;私たちが使うPCやスマートフォン上で動作します。&lt;/p&gt;
&lt;p&gt;この後説明するフルリゾルバーに「名前解決お願いします」と依頼をして、名前解決の結果得た情報を受け取ります。&lt;/p&gt;
&lt;h4&gt;フルリゾルバー&lt;/h4&gt;
&lt;p&gt;『名前解決の請負人』です。&lt;/p&gt;
&lt;p&gt;スタブリゾルバーから名前解決を依頼されると、権威サーバーにIPアドレスを問い合わせます。&lt;/p&gt;
&lt;p&gt;また同じサイトに何度もアクセスするのに毎回問い合わせを行うのは非効率なため、一度名前解決を行なって得た情報をフルリゾルバー内に保存しておくことができます。&lt;/p&gt;
&lt;p&gt;保存された情報は『キャッシュ』と呼ばれるため、フルリゾルバーは別名『キャッシュDNSサーバー』とも呼ばれます。&lt;/p&gt;
&lt;h4&gt;権威サーバー&lt;/h4&gt;
&lt;p&gt;『ドメイン名とIPアドレスの管理者』です。&lt;/p&gt;
&lt;p&gt;権威サーバーは複数存在し、階層構造でドメイン名を管理しています。&lt;/p&gt;
&lt;p&gt;最上位管理者であるルートは直下のTLD（下図で言うところの「jp」「com」「net」）を管理します。&lt;/p&gt;
&lt;p&gt;そして各TLDの管理者は各々の直下にある2LD（「jp」であれば「example」「co」「tokyo」）を管理します。&lt;/p&gt;
&lt;p&gt;そして各2LDの管理者は各々の直下にある3LDを...といった形で管理が行われています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/06.png&quot; alt=&quot;DNSの管理方法&quot; /&gt;&lt;/p&gt;
&lt;p&gt;それぞれのサーバーは&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;自分で管理するドメイン情報&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;子サーバーが管理しているドメイン名&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;の2つを持っています。&lt;/p&gt;
&lt;h3&gt;名前解決の流れ&lt;/h3&gt;
&lt;p&gt;登場人物の概要がわかったところで、名前解決の流れを説明します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;スタブリゾルバーからフルリゾルバーに対して「名前解決お願いします」という依頼がされる&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;フルリゾルバーは最初にルートサーバーに対して問い合わせをする&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ルートサーバーはドメイン名の情報は持っていないが、どの子サーバーが該当のドメイン名を管理しているのか知っているので、その子サーバーの情報を教える&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;フルリゾルバーは教えてもらったサーバーに対して問い合わせをする&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;問い合わせを受けたサーバーがドメイン名の情報を持っていればフルリゾルバーへ渡す、持っていなければそのドメイン名を管理している子サーバーの情報を渡す&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ドメイン名の情報を受け取ったフルリゾルバーは、スタブリゾルバーへ情報を渡す&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;上記の流れを知った上で改めて以下の図を見てもらうと、DNSの処理の流れが理解しやすいと思います。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/05.png&quot; alt=&quot;DNSの処理の流れ&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;最後にもう一度ポイントをまとめておきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ドメイン名とはインターネットにおけるコンピュータの住所&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ドメイン名はIPアドレスを人間が覚えやすい形に変換したもの&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ドメインに紐づいたIPアドレスを取得する仕組みとして、HOSTSファイルとDNSがある&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この記事で、まずはドメイン名の全体像を把握できるよう努めました。&lt;/p&gt;
&lt;p&gt;特にDNSは奥が深いので、気になった方は調べてみることをお勧めします。&lt;/p&gt;
&lt;p&gt;DNSについてわかりやすく解説しているおすすめの教材は紹介こちらです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/dp/479739448X&quot;&gt;DNSがよくわかる教科書&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>IPアドレスとは？IPv4・IPv6の仕組みをわかりやすく解説！</title><link>https://rootful.net/posts/what-is-ip-address/</link><guid isPermaLink="true">https://rootful.net/posts/what-is-ip-address/</guid><pubDate>Wed, 03 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この記事で解決できるお悩み&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://rootful.net/what-is-ip-address#1&quot;&gt;IPアドレスが何なのかわからない...&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://rootful.net/what-is-ip-address#2&quot;&gt;IPv4、IPv6って何？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#5&quot;&gt;自分のIPアドレスを確認する方法を知りたい&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[st-kaiwa2 html_class=&quot;wp-block-st-blocks-st-kaiwa&quot;]&lt;/p&gt;
&lt;p&gt;こんな悩みを解決できます！&lt;/p&gt;
&lt;p&gt;営業職から会社員WEBエンジニア、&lt;br /&gt;
その後フリーランスWEBエンジニアに転向した自分が解説します。&lt;/p&gt;
&lt;p&gt;[/st-kaiwa2]&lt;/p&gt;
&lt;h2&gt;IPアドレスとは？&lt;/h2&gt;
&lt;p&gt;IPアドレスとは、インターネットにおけるコンピュータの住所です。&lt;/p&gt;
&lt;p&gt;例えばYouTubeで動画を見たい時には、インターネット上の無数のコンピュータの中からYouTubeのコンピュータ（サーバー）を見つける必要があります。&lt;/p&gt;
&lt;p&gt;そんな時に使われるのがIPアドレスです。&lt;/p&gt;
&lt;p&gt;IPアドレスを使うことでデータをやり取りしたい相手の場所を特定することができます。&lt;/p&gt;
&lt;p&gt;そのため、基本的には同じIPアドレスはこの世に1つとして存在しません。&lt;/p&gt;
&lt;p&gt;現在主に使われているIPアドレスはIPv4（Internet Protocol version 4）です。&lt;/p&gt;
&lt;p&gt;この記事ではIPv4をメインに解説しつつ、IPアドレスの新バージョンであるIPv6についても解説していきます。&lt;/p&gt;
&lt;h2&gt;IPアドレスの構造&lt;/h2&gt;
&lt;p&gt;IPアドレス（IPv4）は&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;192.0.2.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;のように10進数で表された4つの数字をドットで区切った形で使われます。&lt;/p&gt;
&lt;p&gt;ただこれは人間が読みやすいようにした形で、コンピュータ内部では2進数で扱われています。&lt;/p&gt;
&lt;p&gt;上のIPアドレスを2進数に直すと&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;11000000.00000000.00000010.00000000
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;になります。&lt;/p&gt;
&lt;p&gt;このように、IPアドレスはコンピュータ内部では8ビットの数値をドット区切りで4つ並べた合計32ビットの形で扱われます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/01.png&quot; alt=&quot;IPv4とは&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;ネットワーク部とホスト部&lt;/h3&gt;
&lt;p&gt;IPアドレスには『ネットワーク部』と『ホスト部』が存在します。&lt;/p&gt;
&lt;p&gt;ネットワーク部とは、そのコンピュータがどのネットワーク（LAN）にあるかを示す値です。&lt;/p&gt;
&lt;p&gt;住所で言うところの都道府県からマンション名までにあたります。&lt;/p&gt;
&lt;p&gt;一方でホスト部とは、そのネットワーク（LAN）内のどのコンピュータかを示す値です。&lt;/p&gt;
&lt;p&gt;住所で言うところのマンションの部屋番号にあたります。&lt;/p&gt;
&lt;p&gt;『LAN』とは、自宅やオフィスなどの1拠点内にあるネットワークのことです。&lt;/p&gt;
&lt;p&gt;ネットワーク部とホスト部は、IPアドレスの左から何ビット分がネットワーク部、残りはホスト部というように分けられます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/02.png&quot; alt=&quot;ネットワーク部とホスト部&quot; /&gt;&lt;/p&gt;
&lt;p&gt;ネットワーク部とホスト部の分け方は大きく分けて2種類あります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;クラス&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CIDR（Classless Inter-Domain Routing : サイダー）&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;クラス&lt;/h4&gt;
&lt;p&gt;クラスではネットワーク部の長さが固定されています。&lt;/p&gt;
&lt;p&gt;例えばクラスAでは左から8ビットがネットワーク部、残り24ビットはホスト部、というようにネットワーク部の長さが決まっています。&lt;/p&gt;
&lt;p&gt;クラスはA~Eまでありますが、ここではよく使われるクラスA~Cについて紹介します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/03.png&quot; alt=&quot;クラスA,B,C&quot; /&gt;&lt;/p&gt;
&lt;p&gt;クラスではクラスAなら先頭は&lt;code&gt;0&lt;/code&gt;、クラスBなら先頭は&lt;code&gt;10&lt;/code&gt;、のようにそれぞれの先頭数ビットの値は決まっています。&lt;/p&gt;
&lt;p&gt;そのため、IPアドレスの先頭を見ればどのクラスが使われているか推測することができます。&lt;/p&gt;
&lt;p&gt;また、ネットワーク部が長くなればなるほどホストとして割り当てられるコンピュータの数も少なくなるので、ネットワークの規模に応じてどのクラスにするか決めることになります。&lt;/p&gt;
&lt;h4&gt;CIDR（Classless Inter-Domain Routing : サイダー）&lt;/h4&gt;
&lt;p&gt;クラスの場合はネットワーク部の長さは固定です。&lt;/p&gt;
&lt;p&gt;一方でCIDRという表記方法を使えばネットワーク部の長さをより柔軟に設定することができます。&lt;/p&gt;
&lt;p&gt;CIDRを使用する場合はネットワーク部の長さが固定ではないため、以下のように「左から何ビット目までがネットワーク部か」を表す数字をIPアドレスの末尾に付けます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;192.0.2.0/24
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この場合は&lt;code&gt;192.0.2.0&lt;/code&gt; を2進数に変換した数値の左から24ビットまでがネットワーク部ということになります。&lt;/p&gt;
&lt;p&gt;ここまでネットワーク部とホスト部について話してきましたが、普段のインターネット利用で意識することはないと思います。&lt;br /&gt;
IPアドレスを見てネットワーク部・ホスト部を判断し、相手のコンピュータを特定するのはルーターの役割です。&lt;/p&gt;
&lt;h2&gt;IPアドレスの枯渇対策&lt;/h2&gt;
&lt;p&gt;ここまでIPv4（Internet Protocol version 4）について解説しました。&lt;/p&gt;
&lt;p&gt;現状はIPv4が主流であると言いましたが、IPv4で表せるIPアドレスの数は約43億通りなのに対し、現在の地球の人口が約80億人なので全く足りていないというIPアドレス枯渇問題が発生しています。&lt;/p&gt;
&lt;p&gt;その問題を解消するため、主に2つの対策が行われています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;グローバルIPとプライベートIP&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;IPv6&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;グローバルIPアドレスとプライベートIPアドレス&lt;/h3&gt;
&lt;p&gt;1つ目の対策は、IPアドレスを使い回すことができるようにする、です。&lt;/p&gt;
&lt;p&gt;具体的にはIPアドレスの種類を以下の2つに分けました。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;プライベートIPアドレス ... LAN内だけで使用できる【使い回し可能】&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;グローバルIPアドレス ... インターネット上での通信に使用できる【使い回し不可能】&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;こうすることで、LANが異なれば同じプライベートIPアドレスを使い回して割り当てられるというルールにしました。&lt;/p&gt;
&lt;p&gt;ただしプライベートIPアドレスを使ったインターネット通信はできないため、LAN内の機器のうち1つにはグローバルIPアドレスを割り当てる必要があります。&lt;/p&gt;
&lt;p&gt;グローバルIPアドレスは基本的にルーターに割り当てられ、スマホ・PCとインターネットとの中継役を担います。&lt;/p&gt;
&lt;p&gt;そうすることで各機器がルーターを経由してインターネットと通信することが可能になります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/04.png&quot; alt=&quot;グローバルIPアドレスとプライベートIPアドレス&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;IPv6（Internet Protocol version 6）&lt;/h3&gt;
&lt;p&gt;2つ目の対策は、新しいIPアドレスを使う、です。&lt;/p&gt;
&lt;p&gt;IPv4では32ビットで表していたところを、その4倍の128ビットで表すIPv6（Internet Protocol version 6）が登場しました。&lt;/p&gt;
&lt;p&gt;IPv6では340澗個（340兆の1兆倍の1兆倍）のIPアドレスを扱うことができるので全世界のコンピュータに不足なく割り当てられると考えられています。&lt;/p&gt;
&lt;p&gt;また十分な数のIPアドレスを扱えるため、全ての機器にグローバルIPアドレスを割り当てることができます。&lt;/p&gt;
&lt;h4&gt;構造&lt;/h4&gt;
&lt;p&gt;IPv6は&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;2001:0db8:0000:0000:0000:0000:0000:0000
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;のように16進数をコロンで8分割した形で扱われます。&lt;/p&gt;
&lt;p&gt;またIPv6では省略形で記述することが推奨されており、&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;先頭の0は省略する&lt;br /&gt;
&lt;code&gt;0db8&lt;/code&gt; =&amp;gt; &lt;code&gt;db8&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;0000&lt;/code&gt;が連続する場合は&lt;code&gt;::&lt;/code&gt;の形で省略する&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;などのルールに従って下記のように表記されることがほとんどです。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;2001:db8::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ちなみに2進数に変換すると上記のIPアドレスは&lt;br /&gt;
0010000000000001:0000110110111000:0000000000000000:0000000000000000:&lt;br /&gt;
0000000000000000:0000000000000000:0000000000000000:0000000000000000&lt;br /&gt;
となり、128ビットの値をコロンで16ビット×8個に分割した形になります。&lt;/p&gt;
&lt;h4&gt;ネットワーク部とホスト部&lt;/h4&gt;
&lt;p&gt;IPv4におけるネットワーク部とホスト部は、IPv6だと呼び名が変わり、それぞれ『プレフィックス』と『インターフェースID』と呼ばれます。&lt;/p&gt;
&lt;p&gt;プレフィックスの長さはIPv4と同じく、&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;2001:db8::/32
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;のように記載され、上記の場合「2進数表記の左から32ビットがプレフィックス（ネットワーク部）」と判断することができます。&lt;/p&gt;
&lt;h2&gt;動的IPアドレス、固定IPアドレス&lt;/h2&gt;
&lt;p&gt;IPアドレスは自宅の機器にどのように設定されるのでしょうか？&lt;/p&gt;
&lt;p&gt;IPアドレスはISP（Internet Service Provider）と呼ばれるインターネット接続窓口がルーターを経由して各機器に割り当てます。&lt;/p&gt;
&lt;p&gt;『ISP』とはいわゆる『プロバイダ』と呼ばれる業者のことです。&lt;/p&gt;
&lt;p&gt;IPアドレスの割り当てには以下の2種類があります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;動的IPアドレス&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;固定IPアドレス&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;動的IPアドレスは、インターネットに接続するたびに機器のIPアドレスが変わります。&lt;/p&gt;
&lt;p&gt;家庭用Wi-fiや公衆Wi-fiなどはこちらのタイプがほとんどです。&lt;/p&gt;
&lt;p&gt;一方で固定IPアドレスはその名の通り変わることがありません。&lt;/p&gt;
&lt;p&gt;固定IPアドレスは基本的にオプションなので、ISPへの追加料金が発生することが多いです。&lt;/p&gt;
&lt;p&gt;ISPの役割について詳しく知りたい方は下記の記事をおすすめします。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;578&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h2&gt;IPアドレスの調べ方&lt;/h2&gt;
&lt;p&gt;では最後に、自分の機器のIPアドレスの調べ方を解説します。&lt;/p&gt;
&lt;h3&gt;グローバルIPアドレス&lt;/h3&gt;
&lt;p&gt;こちらはルーターなどのIPアドレスになります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.cman.jp/network/support/go_access.cgi&quot;&gt;CMAN&lt;/a&gt;にアクセスすると現在インターネットに接続している機器のIPアドレスを表示してくれます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/05.jpg&quot; alt=&quot;CMANの画面キャプチャ&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;プライベートIPアドレス&lt;/h3&gt;
&lt;p&gt;こちらは自宅や社内で扱っているスマートフォンやPCなどのIPアドレスになります。&lt;/p&gt;
&lt;p&gt;確認方法は機器によって違いますが、ここではiPhoneでの確認方法を説明します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;「設定」を開く&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;「Wi-Fi」をタップ&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;現在接続しているWi-Fiのℹ️マークをタップ&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;「IPアドレス」欄を確認&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;./images/06.png&quot; alt=&quot;iPhoneでのIPアドレス確認&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;IPアドレスから個人情報がバレる？&lt;/h3&gt;
&lt;p&gt;バレません。&lt;/p&gt;
&lt;p&gt;IPアドレスからは国や地域などの大まかな情報しか取得することができません。&lt;/p&gt;
&lt;p&gt;ただし、インターネット契約のために登録しているプロバイダには個人情報が保管されているため、開示請求によって公開されることはあり得ます。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;最後にもう一度ポイントをまとめておきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;IPアドレスとはインターネットにおけるコンピュータの住所&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;IPv4は枯渇しており、プライベートIPアドレスやIPv6などの対策が講じられている&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;IPアドレスの割り当てには、定期的にIPアドレスが変わる動的IPアドレスと、変わることがない固定IPアドレスがある&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;IPアドレスとは切っても切り離せない要素として、ドメイン名があります。&lt;/p&gt;
&lt;p&gt;ドメイン名についても知りたいという方はこちらの記事を読んでみてください。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;617&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;p&gt;また、ネットワークについて基礎から勉強したい方向けにおすすめの教材を紹介します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/dp/4815617678&quot;&gt;イラスト図解式　この一冊で全部わかるネットワークの基本 第2版&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;インターネットはルールや関わる要素が多くて混乱しがちですが、こちらの本では順を追ってわかりやすく説明してくれているので初めてインターネット関連の本を読む方におすすめです！&lt;/p&gt;
</content:encoded></item><item><title>インターネットとは何か？仕組みや技術についてわかりやすく解説！</title><link>https://rootful.net/posts/what-is-internet/</link><guid isPermaLink="true">https://rootful.net/posts/what-is-internet/</guid><pubDate>Fri, 28 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この記事で解決できるお悩み&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#1&quot;&gt;インターネットって何？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#2&quot;&gt;インターネットの仕組みが全然わからない...&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#4&quot;&gt;インターネットについて勉強したいんだけど何から始めたら良いかわからない...&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[st-kaiwa2 html_class=&quot;wp-block-st-blocks-st-kaiwa&quot;]&lt;/p&gt;
&lt;p&gt;こんな悩みを解決できます！&lt;/p&gt;
&lt;p&gt;営業職から会社員WEBエンジニア、&lt;br /&gt;
その後フリーランスWEBエンジニアに転向した自分が解説します。&lt;/p&gt;
&lt;p&gt;[/st-kaiwa2]&lt;/p&gt;
&lt;p&gt;この記事ではインターネットについて、言葉の意味、仕組み、使われている技術などについてできるだけわかりやすく解説します！&lt;/p&gt;
&lt;p&gt;この記事を読み終えた時にはインターネットとは何か理解できているはずです！！&lt;/p&gt;
&lt;h2&gt;インターネットとは？&lt;/h2&gt;
&lt;p&gt;インターネットとは一言で言うと、全世界のコンピュータ間でデータのやり取りをできるようにする仕組みです。&lt;/p&gt;
&lt;p&gt;私たちがYouTubeで全世界の動画を見ることができるのも、クリエイターがYouTubeに動画をアップできるのもインターネットがあることで可能になっています。&lt;/p&gt;
&lt;h2&gt;インターネットの構造&lt;/h2&gt;
&lt;p&gt;次にインターネットがどのように作られているか説明していきます。&lt;/p&gt;
&lt;p&gt;ざっくりと説明すると、インターネットは世界中に無数にある小さなネットワークを1つに繋げることで作られています。&lt;/p&gt;
&lt;p&gt;まず全体像を掴んでもらうため、下のネットワークのイメージ図を眺めてみてください。&lt;/p&gt;
&lt;p&gt;以下のイメージでは3つの要素が存在しています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#2-1&quot;&gt;LAN&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#2-2&quot;&gt;WAN&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#2-3&quot;&gt;ISP&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;それぞれについて、細かく解説していきます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/01.png&quot; alt=&quot;インターネットのイメージ図&quot; /&gt;&lt;/p&gt;
&lt;p&gt;実際にはもっと色々な要素が組み合わさってできているのですが、わかりやすくするために簡略化しています。&lt;/p&gt;
&lt;h3&gt;LAN（Local Area Network）&lt;/h3&gt;
&lt;p&gt;LAN（Local Area Network）とはオフィスや家庭など、同じ建物や敷地内にあるコンピュータ同士が繋がってできるネットワークのことを指します。&lt;/p&gt;
&lt;p&gt;つまりあなたの家には1つのLANが存在し、隣の家にはまた別のLANが存在しています。&lt;/p&gt;
&lt;p&gt;ケーブルなどを使ってコンピュータ同士を直接繋げて作る有線LANと、Wifiルーターなどを使って電波でデータをやり取りする無線LANが存在します。&lt;/p&gt;
&lt;p&gt;LANの特徴として、外部のコンピュータが無断でデータをやり取りすることはできません。&lt;/p&gt;
&lt;p&gt;それができてしまうと個人情報が漏洩したりデータが改竄されたりとプライバシーもくそもなくなってしまうので当然ですね。&lt;/p&gt;
&lt;h3&gt;WAN（Wide Area Network）&lt;/h3&gt;
&lt;p&gt;WAN（Wide Area Network）はLAN同士を結んだネットワークのことを指します。&lt;/p&gt;
&lt;p&gt;自宅の機器を繋げてLANを作っても、インターネットに繋がなければGoogle検索や動画再生などはすることができません。&lt;/p&gt;
&lt;p&gt;そのため自宅のLANと、どこかに存在するGooleやYoutubeのLANを繋げる必要があります。&lt;/p&gt;
&lt;p&gt;実際にはLAN同士を直接繋ぐわけではなく、後述するISPと呼ばれる窓口を経由してそれぞれのLANが繋がり、WANが作られます。&lt;/p&gt;
&lt;p&gt;WANで使われる回線は基本的に回線業者が管理しているため回線利用料を支払う必要があります。また、インターネットへアクセスするためにはISPを経由する必要があるのでそちらにもプロバイダ利用料を支払う必要があります。&lt;br /&gt;
つまり一般的に言われる『インターネット料金』とは回線使用料とプロバイダ利用料を合わせたもの、ということですね。&lt;/p&gt;
&lt;h3&gt;ISP（Internet Service Provider）&lt;/h3&gt;
&lt;p&gt;ISP（Internet Service Provider）はインターネットへの接続窓口です。&lt;/p&gt;
&lt;p&gt;自宅のネット環境を整備する時によく出てくる『プロバイダ』というのがこれにあたります。&lt;/p&gt;
&lt;p&gt;ISPは各国に複数存在しており、ISP同士がネットワークを形成しています。&lt;/p&gt;
&lt;p&gt;そのため自宅のLANがISPに繋がると別の地域や別の国にあるISPを経由して、遠くにあるLANとデータをやり取りすることができるようになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/02.png&quot; alt=&quot;ISPのイメージ図&quot; /&gt;&lt;/p&gt;
&lt;p&gt;具体的には、日本における J:COM、ドコモ光、NURO光などの業者のことを指します。&lt;/p&gt;
&lt;h3&gt;インターネットは世界中のコンピュータを1つに繋げたもの&lt;/h3&gt;
&lt;p&gt;ここまでの話をまとめると、&lt;/p&gt;
&lt;p&gt;小さなネットワークである『LAN』を『ISP』を経由して繋げることで、大きなネットワーク『WAN』が作られます。&lt;/p&gt;
&lt;p&gt;そうして世界中にある無数のコンピュータを1つに繋げたもの = インターネットです。&lt;/p&gt;
&lt;h2&gt;インターネット通信のルール&lt;/h2&gt;
&lt;p&gt;インターネットが構築されて世界中のコンピュータと繋がっても、『どうやってデータの送受信先を特定するか』『データをどうやって送るか』などのルールが決まっていないとどうすればデータのやり取りができるかわかりません。&lt;/p&gt;
&lt;p&gt;そのためインターネットを使用する際の取り決めとして、さまざまなルールが定められています。&lt;/p&gt;
&lt;p&gt;ここでは特に重要な以下3つについて説明します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#3-1&quot;&gt;TCP/IPプロトコル&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#3-2&quot;&gt;IPアドレス&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#3-3&quot;&gt;ドメイン&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;TCP/IPプロトコル&lt;/h3&gt;
&lt;p&gt;TCP/IPプロトコルとは「インターネットを使うときはこの手順に従ってデータをやり取りしてくださいね」という、インターネット通信全体について定められているルールです。&lt;/p&gt;
&lt;p&gt;TCP/IPプロトコルではインターネット通信のやり取りを大きく4つに分けています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;ネットワークインターフェース層 ... 直接接続された機器同士のデータのやり取りをする（LAN内でのデータのやり取り）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;インターネット層 ... 他のネットワークとのデータのやり取りをする（WANを使ったデータのやり取り）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;トランスポート層 ... 品質重視のデータ送信、速度重視のデータ送信など、目的に合ったデータ送信を行う&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;アプリケーション層 ... メールやWebなどのサービスを行う&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;それぞれの層で細かいルールが定められています。&lt;/p&gt;
&lt;p&gt;一旦はネットワークの諸々のルールをまとめている『TCP/IPプロトコル』というものがあるんだな、と理解してもらえると良いと思います。&lt;/p&gt;
&lt;p&gt;ちなみにトランスポート層で定められている『TCPプロトコル』と、インターネット層で定められている『IPプロトコル』から名前を取り『TCP/IPプロトコル』と呼ばれています。&lt;/p&gt;
&lt;p&gt;詳細は別記事にまとめる予定です。&lt;/p&gt;
&lt;h3&gt;IPアドレス&lt;/h3&gt;
&lt;p&gt;IPアドレスとはコンピュータの住所を表す数値です。&lt;/p&gt;
&lt;p&gt;インターネットの中では無数にコンピュータが存在しているため、データをやり取りしたいコンピュータを特定するための情報が必要になります。&lt;/p&gt;
&lt;p&gt;それがIPアドレスで、&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;192.0.2.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;のように10進数で表した数値をドットで4つの塊に区切った形で扱われます。&lt;/p&gt;
&lt;p&gt;上記のものは『IPv4』と呼ばれる形式のIPアドレスで、新しいIPアドレスとして『IPv6』が導入されつつあります。&lt;/p&gt;
&lt;p&gt;『IPv6』は&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;2001:0db8:1234:5678:90ab:cdef:0000:0000
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;のように16進数で表した数値をコロンで8つの塊に区切った形で扱われます。&lt;/p&gt;
&lt;p&gt;これらは基本的に世界に1つしかない数値であり、各コンピュータにユニークなIPアドレスが割り当てられています。&lt;/p&gt;
&lt;p&gt;コンピュータへのIPアドレスの割り当てや、IPアドレスを見て送り先を特定するなどの処理は『&lt;a href=&quot;#3-1&quot;&gt;TCP/IPプロトコル&lt;/a&gt;』のインターネット層にあたります。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;601&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h3&gt;ドメイン名&lt;/h3&gt;
&lt;p&gt;ドメイン名とはIPアドレスを人間が読みやすい形に変換したものです。&lt;/p&gt;
&lt;p&gt;IPアドレスを使うことで相手のコンピュータを特定できると言いましたが、&lt;code&gt;192.0.2.0&lt;/code&gt;のような数字の羅列は人間にとっては非常に覚えづらいです。&lt;/p&gt;
&lt;p&gt;そのため「それぞれのIPアドレスに人間が覚えやすいような名前を付けよう！」ということでドメイン名が生まれました。&lt;/p&gt;
&lt;p&gt;ドメイン名は&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;example.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;のように英数字で表されます。&lt;/p&gt;
&lt;p&gt;ドメイン名はIPアドレスと1対1で紐づいており、同じドメイン名は世界に1つとして存在しません。&lt;/p&gt;
&lt;p&gt;例えばブラウザで &lt;code&gt;https://example.com/index.html&lt;/code&gt;にアクセスすると、ルーターなどの機器が「&lt;code&gt;example.com&lt;/code&gt;に対応するIPアドレスは...これだ！」といった感じで相手のコンピュータの住所を特定してくれます。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;617&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;この記事ではインターネットとは何か、インターネットの仕組みなどについて解説しました。&lt;/p&gt;
&lt;p&gt;この記事で少しでもインターネットに対する理解が深まってくれると嬉しいです。&lt;/p&gt;
&lt;p&gt;最後にもう一度ポイントをまとめておきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;インターネットとは全世界のコンピュータ間でデータのやり取りをできるようにする仕組みのこと&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;インターネットは世界中のコンピュータを繋げることで作られている&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;インターネット通信のルールとしてTCP/IPプロトコルなどが定められている&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;「これからインターネットについてじっくり学んでいきたい！」という方向けに、おすすめの本を1冊紹介します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/dp/4815617678&quot;&gt;イラスト図解式　この一冊で全部わかるネットワークの基本 第2版&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;インターネットはルールや関わる要素が多くて混乱しがちですが、こちらの本では順を追ってわかりやすく説明してくれているので初めてインターネット関連の本を読む方におすすめです！&lt;/p&gt;
</content:encoded></item><item><title>正規表現の繰り返し回数指定と最長一致・最短一致について徹底解説！</title><link>https://rootful.net/posts/regex-quantifier/</link><guid isPermaLink="true">https://rootful.net/posts/regex-quantifier/</guid><pubDate>Fri, 10 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この記事で解決できるお悩み&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#1&quot;&gt;正規表現で繰り返し回数を指定するにはどうしたらいい？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#2&quot;&gt;それぞれの量指定子の意味と使い方を知りたい&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[st-kaiwa2 html_class=&quot;wp-block-st-blocks-st-kaiwa&quot;]&lt;/p&gt;
&lt;p&gt;こんな悩みを解決できます！&lt;/p&gt;
&lt;p&gt;営業職から会社員WEBエンジニア、&lt;br /&gt;
その後フリーランスWEBエンジニアに転向した自分が解説します。&lt;/p&gt;
&lt;p&gt;[/st-kaiwa2]&lt;/p&gt;
&lt;p&gt;この記事では正規表現で繰り返し回数を指定するための方法を解説していきます。&lt;/p&gt;
&lt;p&gt;この記事を読み終えれば正規表現の繰り返し回数の指定方法を理解し、実践に活かすことができますよ！&lt;/p&gt;
&lt;h2&gt;正規表現で繰り返し回数を指定するには？&lt;/h2&gt;
&lt;p&gt;正規表現での文字列の繰り返し回数の指定は『量指定子』と呼ばれるメタ文字を使うことで可能です。&lt;/p&gt;
&lt;p&gt;メタ文字とは、正規表現内で特殊な効果を発揮する記号のことです。&lt;/p&gt;
&lt;p&gt;そのメタ文字の中でも、文字列の繰り返し回数を指定することができるものを『量指定子』と呼びます。&lt;/p&gt;
&lt;p&gt;「そもそも正規表現ってなんなのかよくわからないよ！」という方は先に以下の記事を読んでみてください。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;450&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h2&gt;量指定子の一覧&lt;/h2&gt;
&lt;p&gt;まずは全体像を把握するため、一覧をざっと眺めてみてください。&lt;/p&gt;
&lt;p&gt;最長一致・最短一致とありますが、記事の後半で解説しているので今は気にしなくて大丈夫です。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;メタ文字   （最長一致）&lt;/th&gt;
&lt;th&gt;メタ文字   （最短一致）&lt;/th&gt;
&lt;th&gt;名前&lt;/th&gt;
&lt;th&gt;意味&lt;/th&gt;
&lt;th&gt;詳細&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;??&lt;/td&gt;
&lt;td&gt;疑問符&lt;/td&gt;
&lt;td&gt;直前の文字が0個または1つ&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#3-1&quot;&gt;&amp;gt;&amp;gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;td&gt;*?&lt;/td&gt;
&lt;td&gt;スター   （アスタリスク）&lt;/td&gt;
&lt;td&gt;直前の文字が0個以上&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#3-2&quot;&gt;&amp;gt;&amp;gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;td&gt;+?&lt;/td&gt;
&lt;td&gt;プラス&lt;/td&gt;
&lt;td&gt;直前の文字が1個以上&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#3-3&quot;&gt;&amp;gt;&amp;gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;{N}&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;範囲指定&lt;/td&gt;
&lt;td&gt;直前の文字がN個&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#3-4-1&quot;&gt;&amp;gt;&amp;gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;{min,}&lt;/td&gt;
&lt;td&gt;{min,}?&lt;/td&gt;
&lt;td&gt;範囲指定&lt;/td&gt;
&lt;td&gt;直前の文字が min 個以上&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#3-4-2&quot;&gt;&amp;gt;&amp;gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;{,max}&lt;/td&gt;
&lt;td&gt;{,max}?&lt;/td&gt;
&lt;td&gt;範囲指定&lt;/td&gt;
&lt;td&gt;直前の文字が max 個以下&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#3-4-3&quot;&gt;&amp;gt;&amp;gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;{min,max}&lt;/td&gt;
&lt;td&gt;{min,max}?&lt;/td&gt;
&lt;td&gt;範囲指定&lt;/td&gt;
&lt;td&gt;直前の文字が min 個以上 max 個以下&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#3-4-4&quot;&gt;&amp;gt;&amp;gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;使用するツールによっては若干記述方法が異なる可能性があります。&lt;/p&gt;
&lt;h2&gt;量指定子の説明&lt;/h2&gt;
&lt;p&gt;それではそれぞれの量指定子について詳しい使い方を説明します。&lt;/p&gt;
&lt;p&gt;「自分でも試してみたい！」という方は&lt;a href=&quot;https://regex101.com/&quot;&gt;regex101&lt;/a&gt;という正規表現チェッカーを使うことをおすすめします。&lt;/p&gt;
&lt;p&gt;詳しい使い方やその他の正規表現チェッカーについては以下の記事で解説しています。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;301&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h3&gt;?&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;?&lt;/code&gt;は直前の文字が0個または1個ある場合にマッチします。&lt;/p&gt;
&lt;p&gt;つまり『なくてもいいし、あってもいい』という意味です。&lt;/p&gt;
&lt;p&gt;例えば&quot;こんにちは&quot;という文字列に加えて、&quot;こんにちは！&quot;のようにびっくりマークが付いてる場合もマッチさせたい場合はこのように書きます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;こんにちは！?
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現を使ったマッチ結果は以下のようになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/01.png&quot; alt=&quot;疑問符を使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;水色にマーキングされている箇所がマッチ箇所です。&lt;/p&gt;
&lt;p&gt;びっくりマークがあってもなくてもマッチしていることがわかります。&lt;/p&gt;
&lt;p&gt;このように&lt;code&gt;?&lt;/code&gt;は直前の文字がない、もしくは1個ある場合にマッチします。&lt;/p&gt;
&lt;h3&gt;*&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;*&lt;/code&gt;は直前の文字が0個以上ある場合にマッチします。&lt;/p&gt;
&lt;p&gt;つまり『なくてもいいし、ある場合はいくつあってもいい』という意味です。&lt;/p&gt;
&lt;p&gt;例えば&quot;うわ！&quot;という文字列に加えて&quot;うわー！&quot;や&quot;うわーー！&quot;のように伸ばし棒があるときもマッチさせたい場合はこのように書きます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;うわー*！
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現を使ったマッチ結果は以下のようになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/02.png&quot; alt=&quot;スター（アスタリスク）を使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;伸ばし棒が何個あろうとなかろうと、全ての&quot;うわ！&quot;にマッチします。&lt;/p&gt;
&lt;p&gt;このように&lt;code&gt;*&lt;/code&gt;は直前の文字がない、もしくは1個以上ある場合にマッチします。&lt;/p&gt;
&lt;h3&gt;+&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;+&lt;/code&gt;は直前の文字が1個以上ある場合にマッチします。&lt;/p&gt;
&lt;p&gt;つまり『少なくとも一つはあって欲しい』という意味です。&lt;/p&gt;
&lt;p&gt;こちらは上のスターの例で使った正規表現です。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;うわー*！
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現の&lt;code&gt;*&lt;/code&gt;を&lt;code&gt;+&lt;/code&gt;に変えて試してみましょう。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;うわー+！
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現を使ったマッチ結果は以下のようになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/03.png&quot; alt=&quot;プラスを使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;*&lt;/code&gt;を使った場合は&quot;うわ！&quot;にもマッチしましたが、&lt;code&gt;+&lt;/code&gt;を使った場合は伸ばし棒が少なくとも1つはないといけないのでマッチしません。&lt;/p&gt;
&lt;p&gt;このように&lt;code&gt;+&lt;/code&gt;は直前の文字が1個以上ある場合にのみマッチします。&lt;/p&gt;
&lt;h3&gt;{...}&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;{...}&lt;/code&gt;を使えば『直前の文字列が最低何個、最大何個ある場合にマッチする』といった指定が可能になります。&lt;/p&gt;
&lt;p&gt;範囲指定にはいくつかバリエーションがあるのでそれぞれ説明します。&lt;/p&gt;
&lt;h4&gt;{N}&lt;/h4&gt;
&lt;p&gt;「直前の文字がぴったりN個ある時だけマッチさせたい！」という時にはこちらを使います。&lt;/p&gt;
&lt;p&gt;&quot;うわー！&quot;という文字列の伸ばし棒が6個ある時だけマッチさせる場合はこのように書きます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;うわー{6}！
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現を使ったマッチ結果は以下のようになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/04.png&quot; alt=&quot;範囲指定（回数指定）を使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;このように伸ばし棒が6個ちょうどある文字列にのみマッチします。&lt;/p&gt;
&lt;h4&gt;{min,}&lt;/h4&gt;
&lt;p&gt;「直前の文字が最低~個ある時はマッチさせたい！」という時はこちらを使います。&lt;/p&gt;
&lt;p&gt;&quot;うわー！&quot;の伸ばし棒が3個以上ある時だけマッチさせる場合はこのように書きます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;うわー{3,}！
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現を使ったマッチ結果は以下のようになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/05.png&quot; alt=&quot;範囲指定（最低回数指定）を使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;このように伸ばし棒が3個以上ある文字列にのみマッチします。&lt;/p&gt;
&lt;h4&gt;{,max}&lt;/h4&gt;
&lt;p&gt;「直前の文字が最大~個ある時はマッチさせたい！」という時はこちらを使います。&lt;/p&gt;
&lt;p&gt;&quot;うわー！&quot;の伸ばし棒が3個以下ある時だけマッチさせる場合はこのように書きます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;うわー{,3}！
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現を使ったマッチ結果は以下のようになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/06.png&quot; alt=&quot;範囲指定（最大回数指定）を使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;このように伸ばし棒が3個以下ある文字列にのみマッチします。&lt;/p&gt;
&lt;h4&gt;{min, max}&lt;/h4&gt;
&lt;p&gt;「直前の文字が最低~個、最大~個ある時はマッチさせたい！」という時はこちらを使います。&lt;/p&gt;
&lt;p&gt;&quot;うわー！&quot;の伸ばし棒が2個以上、6個以下ある時だけマッチさせる場合はこのように書きます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;うわー{2,6}！
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現で検索した結果はこちらです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/07.png&quot; alt=&quot;範囲指定（最低・最大回数指定）を使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;このように伸ばし棒が2~6個ある文字列にのみマッチします。&lt;/p&gt;
&lt;h2&gt;量指定子の適用範囲を広げる方法&lt;/h2&gt;
&lt;p&gt;ここまで量指定子について説明してきましたが、どれも『直前の』文字列に対して繰り返し回数を指定するものです。&lt;/p&gt;
&lt;p&gt;つまり直前の1文字にしか効果が適用されません。&lt;/p&gt;
&lt;p&gt;では例えば&quot;うわー！&quot;や&quot;うわー！うわー&quot;のように、&quot;うわー！&quot;という文字列が繰り返されている文字列全てにマッチさせたい、という時はどうすれば良いでしょうか？&lt;/p&gt;
&lt;p&gt;このような場合は括弧を使って以下のように書けます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(うわー！)+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現で検索した結果はこちらです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/08.png&quot; alt=&quot;量指定子と括弧を使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;このように括弧を使って文字列を囲んであげることで、文字列のかたまりに対して量指定子の効果を適用できます。&lt;/p&gt;
&lt;p&gt;正規表現における括弧の使い方について詳しく知りたい方はこちらの記事も読んでみてください。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;481&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h2&gt;最長一致・最短一致とは&lt;/h2&gt;
&lt;p&gt;量指定子には『&lt;strong&gt;最長一致・最短一致&lt;/strong&gt;』というものがあります。&lt;/p&gt;
&lt;p&gt;簡単にいうと最長一致はできるだけ多くの文字列をマッチさせるやり方で、最短一致はできるだけ少ない文字列をマッチさせるやり方です。&lt;/p&gt;
&lt;p&gt;例として、以下の文字列の中から&quot;私は~。&quot;のように&quot;私は&quot;から始まり、&quot;。&quot;で終わる文字列をマッチさせたいとします。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;私は起きました。私は顔を洗いました。私はパンをかじりました。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この時に以下のような正規表現を書いてみました。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;私は.+。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;.（ドット） は『なんでもいい任意の1文字』を表すメタ文字です。&lt;br /&gt;
つまり&quot;私は&quot;と&quot;。&quot;の間に何かしらの文字があるものをマッチさせようとしています。&lt;/p&gt;
&lt;p&gt;この正規表現で検索した結果はこちらです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/09.png&quot; alt=&quot;最長一致の量指定子を使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&quot;私は&quot;から始まり、&quot;。&quot;で終わる文字列が3つあるのにも関わらず、マッチ結果は1つになっています。&lt;/p&gt;
&lt;p&gt;これは量指定子がデフォルトで最長一致、つまりできるだけ多くの文字列をマッチさせようとしてしまうため起こります。&lt;/p&gt;
&lt;p&gt;ですが量指定子の後ろに?をつけることで最短一致、つまりできるだけ少ない文字列にマッチさせることができます。&lt;/p&gt;
&lt;p&gt;先ほどの正規表現に?を追加したものを実行してみましょう。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;私は.+?。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現で検索した結果はこちらです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/10.png&quot; alt=&quot;最短一致の量指定子を使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;先ほどとは違い、&quot;私は起きました。&quot; &quot;私は顔を洗いました。&quot; &quot;私はパンをかじりました。&quot;がそれぞれ独立した文字列として、3つの文字列にマッチしていることがわかります。&lt;/p&gt;
&lt;p&gt;このように最長一致・最短一致の違いによってマッチ結果が大きく変わるので量指定子を使う時は注意が必要です。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;正規表現での繰り返し回数の指定について解説しました。&lt;/p&gt;
&lt;p&gt;ここで学んだ知識をベースに個人開発や業務に役立てていってください！&lt;/p&gt;
&lt;p&gt;最後にもう一度ポイントをまとめておきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;正規表現で繰り返し回数を指定するためには『量指定子』を使う&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;量指定子は基本的に直前の1文字にしか効果がないが、括弧を使うことで効果範囲を広げることができる&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;量指定子は最長一致・最短一致という2つのマッチ方法がある&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;「より深く量指定子や正規表現について理解したい！」という方にはこちらの書籍がおすすめです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/dp/4873113598&quot;&gt;詳説 正規表現 第3版&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;なんとなくとっつきにくいイメージがあるオライリー本ですが、こちらは正規表現に馴染みのない方でも読みやすく初心者にもおすすめです！&lt;/p&gt;
</content:encoded></item><item><title>正規表現の括弧を使ったグループ化・キャプチャについて徹底解説</title><link>https://rootful.net/posts/regex-parentheses/</link><guid isPermaLink="true">https://rootful.net/posts/regex-parentheses/</guid><pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この記事で解決できるお悩み&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#1&quot;&gt;正規表現で使われている括弧ってどういう意味？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#2&quot;&gt;グループ化って聞いたことあるけど具体的にどういうこと？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#3&quot;&gt;キャプチャって何？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[st-kaiwa2 html_class=&quot;wp-block-st-blocks-st-kaiwa&quot;]&lt;/p&gt;
&lt;p&gt;こんな悩みを解決できます！&lt;/p&gt;
&lt;p&gt;営業職から会社員WEBエンジニア、&lt;br /&gt;
その後フリーランスWEBエンジニアに転向した自分が解説します。&lt;/p&gt;
&lt;p&gt;[/st-kaiwa2]&lt;/p&gt;
&lt;p&gt;この記事では正規表現における括弧の意味と詳しい使い方について解説します。&lt;/p&gt;
&lt;p&gt;この記事を読み終えれば括弧の使い方を理解し、正規表現のレベルを一段階レベルアップさせることができますよ！&lt;/p&gt;
&lt;h2&gt;正規表現における括弧の意味は？&lt;/h2&gt;
&lt;p&gt;正規表現における括弧の使い道は大きく分けると2つです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;グループ化&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;キャプチャグループ&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;それぞれについて詳しく説明していきます！&lt;/p&gt;
&lt;p&gt;自分でも試してみたい！という方は&lt;a href=&quot;https://regex101.com/&quot;&gt;regex101&lt;/a&gt;という正規表現チェッカーをおすすめします。&lt;/p&gt;
&lt;p&gt;詳しい使い方やその他の正規表現チェッカーについてはこちらの記事で解説しています。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;301&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h2&gt;グループ化&lt;/h2&gt;
&lt;p&gt;グループ化とは複数の文字を1つのかたまりとして扱うことです。&lt;/p&gt;
&lt;p&gt;グループ化は主に2通りの使い方をされます。&lt;/p&gt;
&lt;h3&gt;選択（or）の範囲を指定する&lt;/h3&gt;
&lt;p&gt;グループ化をするとパイプを使った選択（or）の範囲を指定することができます。&lt;/p&gt;
&lt;p&gt;例えば&quot;彼は「初めまして」と言いました。&quot;と&quot;彼は「さようなら」と言いました。&quot;という2つの文字列に正規表現をマッチさせたい場合はどうすれば良いでしょうか？&lt;/p&gt;
&lt;p&gt;もちろん以下のように2つの文字列をパイプで区切ればどちらにもマッチさせることができます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;彼は「初めまして」と言いました。|彼は「さようなら」と言いました。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;しかし&quot;初めまして&quot;と&quot;さようなら&quot;以外は全く同じ文字列なのにこれはあまりに非効率的です。&lt;/p&gt;
&lt;p&gt;そこで、括弧を使うと必要な部分だけを選択（or）の対象にすることができます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;彼は「(初めまして|さようなら)」と言いました。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ここでは混乱を防ぐためただの括弧を使用していますが、基本的にはこの後紹介する『名前付きキャプチャグループ』か『非キャプチャグループ』を使うことをおすすめします。&lt;/p&gt;
&lt;p&gt;この正規表現を実行した結果はこちらです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/01.png&quot; alt=&quot;グループ化を使い選択範囲指定を指定した正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;この記事ではregex101という正規表現チェッカーを使用しています。&lt;br /&gt;
「REGULAR EXPRESSION」欄には正規表現を、「TEST STRING」には検索対象の文字列を入力することで正規表現にマッチする文字列がマーキングされます。&lt;/p&gt;
&lt;p&gt;期待通り&quot;彼は「初めまして」と言いました。&quot;と&quot;彼は「さようなら」と言いました。&quot;の2つにマッチしていることがわかります。&lt;/p&gt;
&lt;p&gt;このようにグループ化を使えば選択（or）の範囲を指定することができます。&lt;/p&gt;
&lt;h3&gt;量指定子の適用範囲を指定する&lt;/h3&gt;
&lt;p&gt;疑問符やスター（アスタリスク）、プラスなどの量指定子の効果は直前の1文字に適用されます。&lt;/p&gt;
&lt;p&gt;ですが括弧を使えば複数の文字のまとまりに対して繰り返し回数の指定をすることができます。&lt;/p&gt;
&lt;p&gt;例えば&quot;彼は「ありがとう」と言いました。&quot;&quot;彼は「ありがとうありがとう」と言いました。&quot;といったように&quot;ありがとう&quot;は何個あってもマッチさせたいとします。&lt;/p&gt;
&lt;p&gt;まずは括弧を使わずに以下のような正規表現を書いてみます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;彼は「ありがとう+」と言いました。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これでは&lt;code&gt;+&lt;/code&gt;は直前の文字列&lt;code&gt;う&lt;/code&gt;にだけ影響するので、&quot;彼は「ありがとうう」と言いました。&quot;や&quot;彼は「ありがとうううう」と言いました。&quot;にはマッチしますが&quot;彼は「ありがとうありがとう」と言いました。&quot; にはマッチしません。&lt;/p&gt;
&lt;p&gt;そこで括弧を使ってグループ化することによって&quot;ありがとう&quot;という文字列のかたまりに対して量指定子の効果を適用させることができます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;彼は「(ありがとう)+」と言いました。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ここでは混乱を防ぐためただの括弧を使用していますが、基本的にはこの後紹介する『名前付きキャプチャグループ』か『非キャプチャグループ』を使うことをおすすめします。&lt;/p&gt;
&lt;p&gt;この正規表現を実行した結果はこちらです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/02.png&quot; alt=&quot;グループ化を使い量指定子の範囲を指定した正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;このようにグループ化することによって量指定子の適用範囲を指定することができます。&lt;/p&gt;
&lt;h2&gt;キャプチャグループ&lt;/h2&gt;
&lt;p&gt;括弧によるキャプチャグループの機能を使えば一部の正規表現にマッチした文字列だけ取得することができます。&lt;/p&gt;
&lt;p&gt;キャプチャグループには3種類あるのでそれぞれ詳しく解説していきます。&lt;/p&gt;
&lt;h3&gt;通常キャプチャグループ&lt;/h3&gt;
&lt;p&gt;キャプチャグループの基本形です。&lt;/p&gt;
&lt;p&gt;括弧で囲んだ部分にマッチした文字列を取得することができます。&lt;/p&gt;
&lt;p&gt;例えば&quot;2024-04-01&quot; など年月日を表す文字列にマッチさせたい場合に以下のような正規表現を書いたとします。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/*
  \d = 半角数字1文字
  {n} = 直前の文字をn回繰り返す
*/
\d{4}-\d{2}-\d{2}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このうち年・月・日を別々に取得したい場合には、括弧を使いこのように書くことができます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(\d{4})-(\d{2})-(\d{2})
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このように個別で取得したい箇所を括弧で囲むことでキャプチャを行うことができます。&lt;/p&gt;
&lt;p&gt;キャプチャした文字列の使い道は主に2つです。&lt;/p&gt;
&lt;h4&gt;1. 後方参照&lt;/h4&gt;
&lt;p&gt;後方参照とはキャプチャした文字列を同じ正規表現内で参照することができる機能です。&lt;/p&gt;
&lt;p&gt;後方参照は\1 \2 \3のようにバックスラッシュとキャプチャ番号を組み合わせて使います。&lt;/p&gt;
&lt;p&gt;1つ目の括弧でキャプチャした値は&lt;code&gt;\1&lt;/code&gt;で呼び出し、2つ目の括弧でキャプチャした値は&lt;code&gt;\2&lt;/code&gt;で呼び出すといった感じで、キャプチャ番号は何個目の括弧でキャプチャした値かを表します。&lt;/p&gt;
&lt;p&gt;具体的な使い方として、同じ単語を連続で使用していないかのチェックを行うことができます。&lt;/p&gt;
&lt;p&gt;例えば以下の英文では&quot;programming&quot;と&quot;salesperson&quot;が誤って2回続けて書かれています。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;I&apos;m 勉強結構好きマン. I&apos;ve been studying programming programming.
I used to be a salesperson salesperson, but I quit my job and became web engineer.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このように、2回連続で同じ単語を使っている箇所にマッチングする正規表現を書いてみましょう。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/*
  [a-zA-Z] = 小文字もしくは大文字のアルファベット1文字
*/
([a-zA-Z]+) \1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現を日本語で表すと『1文字以上の英単語があり、スペースを挟んで同じ英単語がある文字列』という意味になります&lt;/p&gt;
&lt;p&gt;この正規表現を実行した結果がこちらです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/03.png&quot; alt=&quot;後方参照を使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;このように単語が重複して使われているかどうかをチェックすることができます。&lt;/p&gt;
&lt;h4&gt;2. プログラム内で変数として扱う&lt;/h4&gt;
&lt;p&gt;キャプチャグループで取得した文字列をプログラム内で扱うこともできます。&lt;/p&gt;
&lt;p&gt;先ほどの年月日を取得する例で使ったこちらの正規表現を使って説明します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(\d{4})-(\d{2})-(\d{2})
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現をJavaScriptで文字列&lt;code&gt;&quot;2024-04-01&quot;&lt;/code&gt;に対して実行した結果がこちらです。&lt;/p&gt;
&lt;p&gt;JavaScript&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const regex = /(\d{4})-(\d{2})-(\d{2})/gm;

const str = &quot;2024-04-01&quot;;

let match = regex.exec(str);
console.log(match);
/** 出力 :
    [
      &apos;2024-04-01&apos;,
      &apos;2024&apos;,
      &apos;04&apos;,
      &apos;01&apos;,
      index: 0,
      input: &apos;2024-04-01&apos;,
      groups: undefined
    ]
*/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このように正規表現の実行結果として配列が返ってきます。（8~16行目）&lt;/p&gt;
&lt;p&gt;0番目には通常のマッチ結果が入り、1~3番目にはそれぞれキャプチャ順に年月日の文字列が入っていることがわかります。&lt;/p&gt;
&lt;p&gt;この値を使い&lt;code&gt;&quot;2024年04月01日&quot;&lt;/code&gt;の形式にフォーマットを書き換えるコードを書いてみます。&lt;/p&gt;
&lt;p&gt;JavaScript&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const newStr = `${match[1]}年${match[2]}月${match[3]}日`;
console.log(newStr); // 出力 : 2024年04月01日
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このように、正規表現でキャプチャされた文字列はプログラム内で変数として扱うことができます。&lt;/p&gt;
&lt;p&gt;キャプチャした文字列の扱い方は言語ごとに違うので詳細は使用する言語の公式ドキュメントを参照することをおすすめします。&lt;/p&gt;
&lt;h3&gt;名前付きキャプチャグループ&lt;/h3&gt;
&lt;p&gt;名前付きキャプチャグループとは、その名の通りキャプチャした文字列に対して名前をつけることができる機能です。&lt;/p&gt;
&lt;p&gt;通常キャプチャグループでキャプチャされた文字列は\1の形で後方参照ができると説明しました。&lt;/p&gt;
&lt;p&gt;しかし\1と書かれているだけではぱっと見て何の値を意味しているのかがわかりません。&lt;/p&gt;
&lt;p&gt;さらに、後からキャプチャグループを増やすとなった場合は番号を変える必要も出てきます。&lt;/p&gt;
&lt;p&gt;ですが名前付きキャプチャグループを使えばそういったデメリットを一掃することができます。&lt;/p&gt;
&lt;p&gt;名前付きキャプチャグループは(?&amp;lt;name&amp;gt;...)、名前付きキャプチャグループの後方参照は\k&amp;lt;name&amp;gt;と記述します。&lt;/p&gt;
&lt;p&gt;これを使い、先ほどの同じ英単語が重複しているかをチェックする正規表現を書き直してみましょう。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 通常キャプチャグループを使用した場合
(\w+)\s\1

// 名前付きキャプチャグループを使用した場合
(?&amp;lt;word&amp;gt;\w+)\s\k&amp;lt;word&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;マッチ結果としては通常キャプチャグループを使った場合と変化はありませんが、参照している値が何を意味しているかわかりやすくなります。&lt;/p&gt;
&lt;p&gt;プログラム内でも名前付きキャプチャグループは便利です。&lt;br /&gt;
例えばJavaScriptではmatch.groups.wordのような形でキャプチャ文字列を扱うことができます。&lt;/p&gt;
&lt;p&gt;このように名前付きキャプチャグループは通常キャプチャグループの欠点をカバーしてくれるものなので積極的に使っていくことをおすすめします。&lt;/p&gt;
&lt;p&gt;言語やツールによっては名前付きキャプチャグループに対応していないものもあるようです。&lt;/p&gt;
&lt;h3&gt;非キャプチャグループ&lt;/h3&gt;
&lt;p&gt;非キャプチャグループは括弧がキャプチャを行わないようにする機能です。&lt;/p&gt;
&lt;p&gt;括弧の使い道として、以下のように文字列のグループ化ができると説明しました。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;彼は「(初めまして|さようなら)」と言いました。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この場合は&quot;初めまして&quot;&quot;さようなら&quot;の文字列をキャプチャする必要はありませんが、(...)は通常キャプチャグループ扱いなので無駄なキャプチャが行われてしまいます。&lt;/p&gt;
&lt;p&gt;このようにキャプチャとしての機能が不要な場合には非キャプチャグループが便利です。&lt;/p&gt;
&lt;p&gt;非キャプチャグループは(?: ...)と記述します。&lt;/p&gt;
&lt;p&gt;これを使い上の正規表現を書き換えたものがこちらです。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;彼は「(?:初めまして|さようなら)」と言いました。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;マッチ結果としては変化はありませんが、無駄なキャプチャをしないことで正規表現のパフォーマンス向上につながります。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;この記事を読み終えていただいた皆さんは、正規表現における括弧の意味とその使い方を理解できたかと思います。&lt;/p&gt;
&lt;p&gt;括弧は色々な意味や書き方があって混乱しやすいですが、1つ1つの機能を理解すれば必ず使いこなせるようになります。&lt;/p&gt;
&lt;p&gt;最後にもう一度ポイントをまとめておきます。&lt;/p&gt;
&lt;p&gt;正規表現の括弧のポイントまとめ&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;正規表現における括弧の使い道はグループ化とキャプチャグループの2種類&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;グループ化は主にパイプの選択範囲指定と量指定子の適用範囲の指定に使われる&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;キャプチャグループとは一部の正規表現にマッチした文字列を取得する機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;キャプチャグループには通常キャプチャグループ、名前付きキャプチャグループ、非キャプチャグループの3種類がある&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;正規表現を1から勉強したい！という方はこちらの書籍がおすすめです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/dp/4873113598&quot;&gt;詳説 正規表現 第3版&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;なんとなく初心者にとっつきにくいイメージがあるオライリー本ですが、こちらは正規表現に馴染みのない方でも読みやすく初心者にもおすすめです！&lt;/p&gt;
</content:encoded></item><item><title>正規表現とは何か？正規表現の使い方・書き方をわかりやすく解説</title><link>https://rootful.net/posts/what-is-regex/</link><guid isPermaLink="true">https://rootful.net/posts/what-is-regex/</guid><pubDate>Tue, 30 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この記事で解決できるお悩み&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#1&quot;&gt;正規表現って何なの？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#1-3&quot;&gt;何を勉強すればいいの...？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#2&quot;&gt;記号が何を意味するのかわからない...&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[st-kaiwa2 html_class=&quot;wp-block-st-blocks-st-kaiwa&quot;]&lt;/p&gt;
&lt;p&gt;こんな悩みを解決できます！&lt;/p&gt;
&lt;p&gt;営業職から会社員WEBエンジニア、&lt;br /&gt;
その後フリーランスWEBエンジニアに転向した自分が解説します。&lt;/p&gt;
&lt;p&gt;[/st-kaiwa2]&lt;/p&gt;
&lt;p&gt;この記事では正規表現とは何か、正規表現の基礎的な使い方を解説します。&lt;/p&gt;
&lt;p&gt;この記事を読み終えた時には正規表現とは何かがわかり、簡単な正規表現なら理解できるようになっているはずです！&lt;/p&gt;
&lt;h2&gt;正規表現とは？&lt;/h2&gt;
&lt;p&gt;正規表現とは&lt;code&gt;^&lt;/code&gt;や&lt;code&gt;$&lt;/code&gt;などの特殊な記号を使うことで、複数の文字列をたった一つの文字列で表す方法です。&lt;/p&gt;
&lt;p&gt;正規表現は英語で「&lt;strong&gt;regular expression&lt;/strong&gt;」と呼ばれ、略して「&lt;strong&gt;regex&lt;/strong&gt;」とされることが多いです。&lt;/p&gt;
&lt;p&gt;例えば、以下の文字列が電話番号かどうか判別してくださいと言われたらどうでしょう？&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;090-XXXX-XXXX /* X = 数字 */
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;人間からすれば一目見て電話番号だとわかりますが、コンピュータだとそうはいきません。&lt;/p&gt;
&lt;p&gt;コンピュータに「&lt;code&gt;090-0000-0000&lt;/code&gt;は電話番号だよ、&lt;code&gt;090-0000-0001&lt;/code&gt;は電話番号だよ、&lt;code&gt;090-0000-0002&lt;/code&gt;は...」と1つずつ教えれば判別してくれますが、無駄が多すぎます。&lt;/p&gt;
&lt;p&gt;そこで「&lt;strong&gt;先頭に0~9までの数字が3つ、その後にハイフン、その後ろに...&lt;/strong&gt;」のように電話番号とはどんなパターンの文字列なのかを説明してあげればよいではないか。と昔の偉い人は考えました。&lt;/p&gt;
&lt;p&gt;その説明をするために必要なのが正規表現です。&lt;/p&gt;
&lt;p&gt;電話番号を正規表現で書くと以下のようになります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[0-9]{3}-[0-9]{4}-[0-9]{4} 
/* = 左から、0~9の数字が3つ、ハイフン1つ、0~9の数字が4つ、ハイフン1つ、0~9の数字が4つある文字列 */
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;電話番号をどこまで厳密にチェックしたいかによってこの正規表現は変わります。&lt;/p&gt;
&lt;p&gt;この正規表現を使えばコンピュータ側が電話番号というものを理解し、大量の文章の中から電話番号だけを取得するといったことが可能になります。&lt;/p&gt;
&lt;p&gt;このように欲しい文字列のパターンを指定することで、1つの文字列で複数の文字列を表すことができるのが正規表現です。&lt;/p&gt;
&lt;h3&gt;正規表現の活用方法&lt;/h3&gt;
&lt;p&gt;「正規表現がどんなものか何となくわかってきたけど具体的な使い方のイメージが湧かないな...」という方向けに正規表現を活用できる具体例を2つ紹介します。&lt;/p&gt;
&lt;h4&gt;文字列検索・置換&lt;/h4&gt;
&lt;p&gt;正規表現は『大量の文字列の中から特定のパターンを持つものだけ検索・置換したい』という時に非常に便利です。（そのために使われるのがほとんどです）&lt;/p&gt;
&lt;p&gt;例えば「HTMLファイルの中からh2タグに囲まれた文字列だけ取得したい！」という時はどうするのが良いでしょうか？&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt;で検索して中の文字列をコピペして、また検索してコピペしてを繰り返せば可能ではありますが、チェックしなくてはいけないファイルが大量にあった場合はかなり時間がかかってしまいます。&lt;/p&gt;
&lt;p&gt;そこで、以下のような正規表現を使えばh2タグの中身のみを検索することが可能です。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(?&amp;lt;=&amp;lt;h2&amp;gt;)[^&amp;lt;&amp;gt;]+(?=&amp;lt;\/h2&amp;gt;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;日本語で言うと『左側に&lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt;と言う文字列があり、&lt;code&gt;&amp;lt;&lt;/code&gt;と&lt;code&gt;&amp;gt;&lt;/code&gt;以外の文字列が1文字以上あり、右側に&lt;code&gt;&amp;lt;/h2&amp;gt;&lt;/code&gt;という文字列がある文字列』という意味です。&lt;br /&gt;
つまりは『h2タグに囲まれていて、かつ中に別のタグが存在していない文字列』を指定しています。&lt;/p&gt;
&lt;p&gt;これをVSCode上で実行してみましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/01.jpg&quot; alt=&quot;VSCodeで正規表現を使った検索&quot; /&gt;&lt;/p&gt;
&lt;p&gt;VSCodeで正規表現を使った検索を行う場合は検索窓の右側にある「.*」のボタンを押す必要があります。&lt;/p&gt;
&lt;p&gt;するとこのようにh2タグの中身にのみマッチしていることがわかります。&lt;/p&gt;
&lt;p&gt;検索ができるということは、これを別の文字列に置換したり、まとめて削除することもできるということです。&lt;/p&gt;
&lt;p&gt;このように大量の文字列の中から欲しい文字列だけをピンポイントで検索・置換ができるのが正規表現の大きな強みです。&lt;/p&gt;
&lt;h4&gt;フォーム送信内容チェック&lt;/h4&gt;
&lt;p&gt;フォームから送信されたメールアドレス、電話番号、パスワードなどが正常な値かどうか確認する、いわゆるバリデーションも正規表現を使えば可能です。&lt;/p&gt;
&lt;p&gt;例えばパスワードは「半角英数字のみを使い8文字以上で指定してください」などの条件が指定されることがよくありますが、この条件を正規表現で表すと以下のようになります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[a-zA-Z0-9]{8,}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現を使い、パスワードが条件を満たしているかJavaScriptで確認してみましょう。&lt;/p&gt;
&lt;p&gt;JavaScript&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const regex = /[a-zA-Z0-9]{8,}/gm;

/* 条件を満たしているパスワード */
const validPassword = &apos;Password1&apos;;
console.log(regex.test(password1)); // true

/* 条件を満たしていないパスワード */
const invalidPassword = &apos;Pass2&apos;;
console.log(regex.test(password1)); // false
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;条件を満たしている場合は&lt;code&gt;true&lt;/code&gt;を、そうでない場合は&lt;code&gt;false&lt;/code&gt;を返していることがわかります。&lt;/p&gt;
&lt;p&gt;このように正規表現で文字列の条件を指定し、それにマッチするかどうかでバリデーションを行うことができます。&lt;/p&gt;
&lt;h3&gt;どの言語で使えるのか？&lt;/h3&gt;
&lt;p&gt;基本的にはどの言語でも使えます。&lt;/p&gt;
&lt;p&gt;またコマンドライン上でのgrepコマンドや、VSCodeやAtomなどのコードエディタ上でも使えるので一度覚えてしまえば一生役に立つといっても過言ではありません。&lt;/p&gt;
&lt;p&gt;言語ごとに使えるメタ文字やオプションに若干の違いがあるので、「コピペしたのに動作しない！」という時は言語やツールが正規表現内で使われているメタ文字に対応しているか確認してみてください。&lt;/p&gt;
&lt;h3&gt;正規表現を理解するために必要な知識&lt;/h3&gt;
&lt;p&gt;では正規表現を理解して使いこなすためには何を勉強すれば良いのでしょうか？&lt;/p&gt;
&lt;p&gt;答えは以下の3つです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;メタ文字&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;特殊シーケンス&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;修飾子（オプション）&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;メタ文字と特殊シーケンスは正規表現を構成する要素です。&lt;/p&gt;
&lt;p&gt;正規表現はこの2つと通常の文字列を組み合わせて作ります。&lt;/p&gt;
&lt;p&gt;修飾子（オプション）は正規表現を実行する際の追加ルールのようなものです。&lt;/p&gt;
&lt;p&gt;例えば「大文字/小文字を無視して検索する」「複数行の文字列に対して検索を行う」などがあります。&lt;/p&gt;
&lt;p&gt;それぞれの要素について詳しく解説していきます。&lt;/p&gt;
&lt;h2&gt;メタ文字&lt;/h2&gt;
&lt;p&gt;正規表現上で特別な効果を発揮する記号のことを「メタ文字」と言います。&lt;/p&gt;
&lt;p&gt;電話番号の例で使った&lt;code&gt;[0-9]&lt;/code&gt;や&lt;code&gt;{3}&lt;/code&gt;もメタ文字の1つです。&lt;/p&gt;
&lt;p&gt;これらはただの文字列としてではなく、それぞれ「&lt;strong&gt;0~9までの数字1文字&lt;/strong&gt;」「&lt;strong&gt;直前の文字を3回繰り返す&lt;/strong&gt;」という特別な意味を表しています。&lt;/p&gt;
&lt;h3&gt;メタ文字一覧&lt;/h3&gt;
&lt;p&gt;まずは全体像を掴むため、メタ文字一覧をざっと眺めてみてください。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;メタ文字&lt;/th&gt;
&lt;th&gt;名前&lt;/th&gt;
&lt;th&gt;意味&lt;/th&gt;
&lt;th&gt;リンク&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;.&lt;/td&gt;
&lt;td&gt;ドット&lt;/td&gt;
&lt;td&gt;任意の1文字&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#2-2-1&quot;&gt;詳細&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[...]&lt;/td&gt;
&lt;td&gt;文字クラス&lt;/td&gt;
&lt;td&gt;リストの中の任意の1文字&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#2-2-2&quot;&gt;詳細&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[^...]&lt;/td&gt;
&lt;td&gt;否定文字クラス&lt;/td&gt;
&lt;td&gt;リストに含まれていない任意の1文字&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#2-2-3&quot;&gt;詳細&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\char&lt;/td&gt;
&lt;td&gt;エスケープ文字&lt;/td&gt;
&lt;td&gt;charがメタ文字の場合はただの文字列として扱う&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#2-2-4&quot;&gt;詳細&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;疑問符&lt;/td&gt;
&lt;td&gt;直前の文字が0個または1つ&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#2-3-1&quot;&gt;詳細&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;td&gt;スター&lt;/td&gt;
&lt;td&gt;直前の文字が0個以上&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#2-3-2&quot;&gt;詳細&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;td&gt;プラス&lt;/td&gt;
&lt;td&gt;直前の文字が1個以上&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#2-3-3&quot;&gt;詳細&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;{min, max}&lt;/td&gt;
&lt;td&gt;範囲指定&lt;/td&gt;
&lt;td&gt;直前の文字が min 個以上 max 個以下&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#2-3-4&quot;&gt;詳細&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;^&lt;/td&gt;
&lt;td&gt;キャレット&lt;/td&gt;
&lt;td&gt;行の先頭の位置&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#2-4-1&quot;&gt;詳細&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$&lt;/td&gt;
&lt;td&gt;ドル&lt;/td&gt;
&lt;td&gt;行の末尾の位置&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#2-4-2&quot;&gt;詳細&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(?=...)&lt;/td&gt;
&lt;td&gt;先読み&lt;/td&gt;
&lt;td&gt;右側に指定の文字列がある位置&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#2-4-3&quot;&gt;詳細&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(?&amp;lt;=...)&lt;/td&gt;
&lt;td&gt;後読み&lt;/td&gt;
&lt;td&gt;左側に指定の文字列がある位置&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#2-4-3&quot;&gt;詳細&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(?!...)&lt;/td&gt;
&lt;td&gt;否定先読み&lt;/td&gt;
&lt;td&gt;右側に指定の文字列がない位置&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#2-4-3&quot;&gt;詳細&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(?&amp;lt;!...)&lt;/td&gt;
&lt;td&gt;否定後読み&lt;/td&gt;
&lt;td&gt;左側に指定の文字列がない位置&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#2-4-3&quot;&gt;詳細&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;|&lt;/td&gt;
&lt;td&gt;選択&lt;/td&gt;
&lt;td&gt;区切っている正規表現のどれか&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#2-5-1&quot;&gt;詳細&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(...)&lt;/td&gt;
&lt;td&gt;括弧&lt;/td&gt;
&lt;td&gt;1. 選択の範囲を限定する   2. 量指定子の対象範囲を指定する   3. 後方参照のためにキャプチャする&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;#2-5-2&quot;&gt;詳細&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;ここから各メタ文字の詳しい説明をしていきます。&lt;/p&gt;
&lt;p&gt;実際に自分で試してみたい！という方には&lt;a href=&quot;https://regex101.com/&quot;&gt;regex101&lt;/a&gt;という正規表現チェッカーをおすすめします。&lt;/p&gt;
&lt;p&gt;具体的な使い方やその他の正規表現チェッカーについてはこちらの記事で詳しく説明しています。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;301&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h3&gt;文字を表すメタ文字&lt;/h3&gt;
&lt;h4&gt;.&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;.&lt;/code&gt;（ドット）は任意の1文字にマッチします。&lt;/p&gt;
&lt;p&gt;つまりそれが文字でも数字でも記号でも何でもいいので1文字あればOK、ということです。&lt;/p&gt;
&lt;p&gt;例えば&lt;code&gt;&quot;おつかれさま&quot;&lt;/code&gt;と&lt;code&gt;&quot;おつかれさん&quot;&lt;/code&gt;のどちらも検索したい場合は&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;おつかれさ.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;のように、最後の文字をドットに変えるとどちらにもマッチさせることができます。&lt;/p&gt;
&lt;p&gt;実際にマッチ結果をregex101の画面で確認してみましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/02.png&quot; alt=&quot;ドットを使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;水色にマーキングされている箇所がマッチした文字列です。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&quot;おつかれさま&quot;&lt;/code&gt;と&lt;code&gt;&quot;おつかれさん&quot;&lt;/code&gt;どちらにもマッチしていますね。&lt;/p&gt;
&lt;p&gt;ただ見てわかる通り、ドットは何にでもマッチしてしまうので&lt;code&gt;&quot;**おつかれさい**&quot;&lt;/code&gt; &lt;code&gt;&quot;**おつかれさ1**&quot;&lt;/code&gt; &lt;code&gt;&quot;**おつかれさ（スペース）&quot;**&lt;/code&gt;などにもマッチします。&lt;/p&gt;
&lt;p&gt;このようにドットは何でもいい任意の1文字にマッチします。&lt;/p&gt;
&lt;h4&gt;[...]&lt;/h4&gt;
&lt;p&gt;このメタ文字は『文字クラス』と呼びます。&lt;/p&gt;
&lt;p&gt;ドットはどんな文字にもマッチしてしまいますが、文字クラスを使えば『指定された文字の中でどれか1文字』にマッチさせることができます。&lt;/p&gt;
&lt;p&gt;先ほどの例の&lt;code&gt;&quot;おつかれさま&quot;&lt;/code&gt;と&lt;code&gt;&quot;おつかれさん&quot;&lt;/code&gt;を検索したい場合、ドットを使うといらない文字列も検索に引っかかってしまいますが、文字クラスを使えば欲しい文字列にだけマッチさせることができます。&lt;/p&gt;
&lt;p&gt;文字クラスを使って正規表現を書くとこのようになります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;おつかれさ[まん]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現を使った場合の結果も見てみましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/03.png&quot; alt=&quot;文字クラスを使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;ドットを使った場合は全てにマッチしていたのが、&lt;code&gt;&quot;おつかれさま&quot;&lt;/code&gt;と&lt;code&gt;&quot;おつかれさん&quot;&lt;/code&gt;にだけマッチしていることがわかります。&lt;/p&gt;
&lt;p&gt;このように、文字クラスは指定された文字の中のどれか1文字にマッチします。&lt;/p&gt;
&lt;p&gt;文字クラスを使えば、 &lt;strong&gt;&lt;code&gt;[0-9]&lt;/code&gt; &lt;code&gt;[a-z]&lt;/code&gt; &lt;code&gt;[ぁ-ん]&lt;/code&gt;&lt;/strong&gt; などのように指定したい文字列の範囲をハイフンを使って繋げることで『数字1文字』『アルファベット1文字』『ひらがな1文字』などを指定することもできます。&lt;/p&gt;
&lt;h4&gt;[^...]&lt;/h4&gt;
&lt;p&gt;これは文字クラスの否定形なので、否定文字クラスと呼ばれます。&lt;/p&gt;
&lt;p&gt;意味も文字クラスの逆で、『指定された文字以外のどれか1文字』を表します。&lt;/p&gt;
&lt;p&gt;文字クラスの例とは逆に&lt;code&gt;&quot;おつかれさま&quot;&lt;/code&gt;と&lt;code&gt;&quot;おつかれさん&quot;&lt;/code&gt;だけはマッチさせたくない！という場合は以下のように書きます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;おつかれさ[^まん]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現を使った結果がこちらです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/04.png&quot; alt=&quot;否定文字クラスを使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&quot;おつかれさい&quot;&lt;/code&gt;や&lt;code&gt;&quot;おつかれさ1&quot;&lt;/code&gt;にはマッチしていますが、&lt;code&gt;&quot;おつかれさま&quot;&lt;/code&gt;と&lt;code&gt;&quot;おつかれさん&quot;&lt;/code&gt;にはマッチしていないことがわかります。&lt;/p&gt;
&lt;p&gt;このように、否定文字クラスは指定された文字以外のどれか1文字にマッチします。&lt;/p&gt;
&lt;h4&gt;\char&lt;/h4&gt;
&lt;p&gt;正規表現においてメタ文字は特別な意味を持つと説明しましたが、ではメタ文字として使われているドットやブラケットなどの記号にマッチさせたい時はどうしたら良いでしょう？&lt;/p&gt;
&lt;p&gt;そんな時に使うのが &lt;code&gt;\&lt;/code&gt;（バックスラッシュ）です。&lt;/p&gt;
&lt;p&gt;メタ文字の前にバックスラッシュをつけることで『これはメタ文字扱いして欲しくない』ということを正規表現に伝えることができます。&lt;/p&gt;
&lt;p&gt;このように特別な意味を持つ文字や記号を通常の文字列として扱うことを『エスケープ』と呼びます&lt;/p&gt;
&lt;p&gt;エスケープして&lt;code&gt;**&quot;[...]**&quot;&lt;/code&gt;という文字列を検索した例がこちらです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/05.png&quot; alt=&quot;エスケープを使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;このようにメタ文字であるドットとブラケットの前にバックスラッシュをつけることで&lt;code&gt;**&quot;[...]**&quot;&lt;/code&gt;という文字列にマッチさせることができます。&lt;/p&gt;
&lt;p&gt;正規表現には逆にバックスラッシュをつけることで特別な意味を持つ&lt;strong&gt;特殊シーケンス&lt;/strong&gt;というものがあります。&lt;br /&gt;
詳しくは「特殊シーケンス」の項目で説明します。&lt;/p&gt;
&lt;h3&gt;繰り返し回数を表すメタ文字&lt;/h3&gt;
&lt;p&gt;繰り返し回数を表すメタ文字を『量指定子』と呼びます。&lt;/p&gt;
&lt;p&gt;また中級者向けの内容ではありますが、量指定子には『最長一致』『最短一致』という考え方があり、これを理解することで正規表現のパフォーマンスを最大化することもできます。&lt;/p&gt;
&lt;p&gt;詳しく知りたい方はこちらの記事を読んでみてください。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;536&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h4&gt;?&lt;/h4&gt;
&lt;p&gt;疑問符は直前の文字が0個または1個ある場合にマッチします。&lt;/p&gt;
&lt;p&gt;つまり『なくてもいいし、あってもいい』という意味です。&lt;/p&gt;
&lt;p&gt;例えば &lt;code&gt;&quot;こんにちは&quot;&lt;/code&gt;と検索する時に、&lt;code&gt;&quot;こんにちは！&quot;&lt;/code&gt; とびっくりマークが付いてる場合もマッチさせたい場合はこのように書きます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;こんにちは！?
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現を使ったマッチ結果は以下のようになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/06.png&quot; alt=&quot;疑問符を使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;このようにびっくりマークがあってもなくてもマッチしていることがわかります。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&quot;こんにちは。&quot;&lt;/code&gt;などにもマッチさせたい場合は文字クラスと組み合わせて&lt;br /&gt;
&lt;strong&gt;&lt;code&gt;こんにちは[！。]?&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;
とすればOKです。&lt;/p&gt;
&lt;h4&gt;*&lt;/h4&gt;
&lt;p&gt;スター（またはアスタリスク）は直前の文字が0個以上ある場合にマッチします。&lt;/p&gt;
&lt;p&gt;つまり『なくてもいいし、いくつあってもいい』という意味です。&lt;/p&gt;
&lt;p&gt;例えば&lt;code&gt;&quot;**うわ！**&quot;&lt;/code&gt;という文字列を検索する時に、&lt;code&gt;&quot;**うわー！**&quot;&lt;/code&gt;や&lt;code&gt;**&quot;うわーー！**&quot;&lt;/code&gt;のように伸ばし棒ある場合もマッチさせたい場合はこのように書きます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;うわー*！
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現を使ったマッチ結果は以下のようになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/07.png&quot; alt=&quot;スター（アスタリスク）を使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;このように伸ばし棒の数に関わらず、全ての&lt;code&gt;&quot;**うわ**！&quot;&lt;/code&gt;にマッチします。&lt;/p&gt;
&lt;h4&gt;+&lt;/h4&gt;
&lt;p&gt;プラスは直前の文字が1個以上ある場合にマッチします。&lt;/p&gt;
&lt;p&gt;つまり『少なくとも一つはあって欲しいが、いくつあってもいい』という意味です。&lt;/p&gt;
&lt;p&gt;上のスターの例で使った正規表現をプラスを使うように変えてみましょう。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;うわー+！
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現を先ほどの例と同じ文字列に使用した結果はこのようになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/08.png&quot; alt=&quot;プラスを使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;スターを使った場合は&lt;code&gt;&quot;**うわ！**&quot;&lt;/code&gt;にもマッチしましたが、プラスを使った場合は伸ばし棒が少なくとも1つはないといけないのでマッチしません。&lt;/p&gt;
&lt;p&gt;このようにプラスは直前の文字が1個以上ある場合にのみマッチします。&lt;/p&gt;
&lt;h4&gt;{min, max}&lt;/h4&gt;
&lt;p&gt;ここまでで説明した疑問符やスター、プラスでは直前の文字が最低何個か、最大何個かを指定することはできません。&lt;/p&gt;
&lt;p&gt;しかし &lt;strong&gt;{}&lt;/strong&gt; （ブレスと呼びます）を使えば範囲指定が可能になります。&lt;/p&gt;
&lt;p&gt;先ほどと同じ例を使って、『伸ばし棒が最低2個、最大5個ある』という指定をしてみましょう。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;うわー{2,5}！
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現で検索した結果はこちらです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/09.png&quot; alt=&quot;範囲指定を使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;このように伸ばし棒が2~5個ある場合はマッチしますがそれ以外の場合はマッチしません。&lt;/p&gt;
&lt;p&gt;範囲指定では直前の文字を最低何回、最大何回繰り返すかを指定することができます。&lt;/p&gt;
&lt;p&gt;範囲指定では、&lt;strong&gt;{2}&lt;/strong&gt; で直前の文字が2個ある時のみマッチさせたり、&lt;strong&gt;{2,}&lt;/strong&gt; で2個以上ある時のみマッチさせたりといった使い方もできます。&lt;/p&gt;
&lt;h3&gt;位置を表すメタ文字&lt;/h3&gt;
&lt;p&gt;メタ文字について説明する前に、前提知識として正規表現の「位置へのマッチ」について説明します。&lt;/p&gt;
&lt;p&gt;正規表現のマッチには『文字列へのマッチ』と『位置へのマッチ』の2種類があります。&lt;/p&gt;
&lt;p&gt;例えば&lt;code&gt;&quot;**REGEX**&quot;&lt;/code&gt;という文字列に対して、&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;REG
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;という正規表現を実行すると&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/10.png&quot; alt=&quot;文字列へのマッチ&quot; /&gt;&lt;/p&gt;
&lt;p&gt;このように文字列&lt;code&gt;&quot;**REG**&quot;&lt;/code&gt;にマッチします。&lt;/p&gt;
&lt;p&gt;関数などで実行した場合は文字列&lt;code&gt;**&quot;REG**&quot;&lt;/code&gt;が返り値として取得できると思います。&lt;/p&gt;
&lt;p&gt;これが『文字列へのマッチ』です。&lt;/p&gt;
&lt;p&gt;一方で、文字列&lt;code&gt;**&quot;REGEX**&quot;&lt;/code&gt;に対して&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;^
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;という『行の先頭』を意味する正規表現を実行すると、&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/11.png&quot; alt=&quot;位置へのマッチ&quot; /&gt;&lt;/p&gt;
&lt;p&gt;このように文字列にはマッチせず、『行の先頭』つまり位置にマッチします。&lt;/p&gt;
&lt;p&gt;この場合は文字列にはマッチしていないので関数を実行しても空の値が返ってきます。&lt;/p&gt;
&lt;p&gt;これが「位置へのマッチ」です。&lt;/p&gt;
&lt;p&gt;このセクションで説明するのは全て『位置へのマッチ』であり文字列にはマッチしないということに注意してください。&lt;/p&gt;
&lt;h4&gt;^&lt;/h4&gt;
&lt;p&gt;キャレット（ハットとも呼びます）は行の先頭にマッチします。&lt;/p&gt;
&lt;p&gt;例えば箇条書きリストの&lt;code&gt;&quot;**・**&quot;&lt;/code&gt;にマッチさせたい場合は以下のように書きます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;^・
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この記事の見出しの一部分を箇条書きにしたものにこの正規表現を実行してみた結果がこちらです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/12.png&quot; alt=&quot;キャレット（ハット）を使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;箇条書きリストの中で「&lt;strong&gt;文字列検索・置換&lt;/strong&gt;」という箇所に&lt;code&gt;&quot;**・**&quot;&lt;/code&gt;が含まれているのにも関わらずマッチしていません。&lt;/p&gt;
&lt;p&gt;それはキャレットで『行の先頭にある&lt;code&gt;&quot;**・**&quot;&lt;/code&gt;』を指定しているからです。&lt;/p&gt;
&lt;p&gt;このように、キャレットは行の先頭にマッチします。&lt;/p&gt;
&lt;h4&gt;$&lt;/h4&gt;
&lt;p&gt;ドルは行の末尾にマッチします。&lt;/p&gt;
&lt;p&gt;例えば行末の&lt;code&gt;&quot;**。**&quot;&lt;/code&gt;にマッチさせたい場合は以下のように書きます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;。$
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現を実行した結果がこちらです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/13.png&quot; alt=&quot;ドルを使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&quot;**初めまして。**&quot;&lt;/code&gt; &lt;code&gt;&quot;**よろしくお願いします。**&quot;&lt;/code&gt;など文中にも&lt;code&gt;&quot;**。**&quot;&lt;/code&gt;がありますが、ドルで行の末尾を指定しているので行末の&lt;code&gt;&quot;。&quot;&lt;/code&gt;にのみマッチします。&lt;/p&gt;
&lt;p&gt;このように、ドルは行の末尾にマッチします。&lt;/p&gt;
&lt;h4&gt;(?=...) / (?&amp;lt;=...) / (?!...) / (?&amp;lt;!....)&lt;/h4&gt;
&lt;p&gt;これらは先読み・後読みと呼ばれるメタ文字です。&lt;/p&gt;
&lt;p&gt;それぞれ『右側に指定の文字列がある位置』『左側に指定の文字列がある位置』にマッチします。&lt;/p&gt;
&lt;p&gt;先読み・後読みについては説明が長くなってしまうので別記事で詳しく解説しています。&lt;/p&gt;
&lt;p&gt;しっかり理解したい方はこちらを読んでみてください。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;368&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h3&gt;その他のメタ文字&lt;/h3&gt;
&lt;h4&gt;|&lt;/h4&gt;
&lt;p&gt;パイプは『パイプで区切られた正規表現のどれか』にマッチします。&lt;/p&gt;
&lt;p&gt;つまり『or』です。&lt;/p&gt;
&lt;p&gt;例として&lt;code&gt;&quot;初めまして&quot;&lt;/code&gt;と&lt;code&gt;&quot;さようなら&quot;&lt;/code&gt;のどちらにもマッチさせたい場合、正規表現はこのようになります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;初めまして|さようなら
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現の実行結果は以下のようになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/14.png&quot; alt=&quot;パイプを使った正規表現の例&quot; /&gt;&lt;/p&gt;
&lt;p&gt;このように&lt;code&gt;&quot;初めまして&quot;&lt;/code&gt;と&lt;code&gt;&quot;さようなら&quot;&lt;/code&gt;だけにマッチしていることがわかります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;初めまして|よろしくお願いします|さようなら&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;
のように何個でもパイプを繋げることができます。&lt;/p&gt;
&lt;h4&gt;(...)&lt;/h4&gt;
&lt;p&gt;括弧には主に3つの使い方があります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;選択の範囲を限定する&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;量指定子の対象範囲を指定する&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;後方参照のためにキャプチャする&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;説明すると長くなるので詳しくはこちらの記事でまとめています。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;481&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h2&gt;エスケープシーケンス&lt;/h2&gt;
&lt;p&gt;エスケープシーケンスとは、アルファベット1文字の前にバックスラッシュを付けることで特殊な効果を発揮するものです。&lt;/p&gt;
&lt;p&gt;ここでは一般的な特殊シーケンスのみ紹介します。&lt;/p&gt;
&lt;p&gt;特殊シーケンスは言語やツールによって差があるので詳しくはそれぞれの公式ドキュメントを参照することをおすすめします。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;エスケープシーケンス&lt;/th&gt;
&lt;th&gt;意味&lt;/th&gt;
&lt;th&gt;対応する正規表現&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;\d&lt;/td&gt;
&lt;td&gt;1つの数字にマッチ&lt;/td&gt;
&lt;td&gt;[0-9]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\D&lt;/td&gt;
&lt;td&gt;数字以外の1つの文字にマッチ&lt;/td&gt;
&lt;td&gt;[^0-9]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\w&lt;/td&gt;
&lt;td&gt;単語文字 (アルファベット、数字、アンダースコア) のいずれかにマッチ&lt;/td&gt;
&lt;td&gt;[a-zA-Z0-9_]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\W&lt;/td&gt;
&lt;td&gt;単語文字以外の1つの文字にマッチ&lt;/td&gt;
&lt;td&gt;[^a-zA-Z0-9_]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\n&lt;/td&gt;
&lt;td&gt;改行&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\t&lt;/td&gt;
&lt;td&gt;タブ&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\s&lt;/td&gt;
&lt;td&gt;空白文字 (スペース、タブ、改行など) のいずれかにマッチ&lt;/td&gt;
&lt;td&gt;[ \n\t]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\S&lt;/td&gt;
&lt;td&gt;空白文字以外の1つの文字にマッチ&lt;/td&gt;
&lt;td&gt;[^ \n\t]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\b&lt;/td&gt;
&lt;td&gt;単語の境界にマッチ&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\B&lt;/td&gt;
&lt;td&gt;単語の境界以外の位置にマッチ&lt;/td&gt;
&lt;td&gt;[^\b]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;修飾子（オプション）&lt;/h2&gt;
&lt;p&gt;修飾子（オプション）とは、正規表現を実行する際の追加ルールです。&lt;/p&gt;
&lt;p&gt;オプションの指定方法としては下記のような形で記述したり、関数の第一引数に正規表現を渡し第二引数にオプションを渡すといったものがあります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/正規表現/オプション
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;こちらもエスケープシーケンスと同じく言語やツールによって差異があるため、一般的なもののみ紹介します。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;修飾子&lt;/th&gt;
&lt;th&gt;意味&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;i&lt;/td&gt;
&lt;td&gt;大文字・小文字を区別せずマッチする&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;m&lt;/td&gt;
&lt;td&gt;複数行に渡ってマッチする&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;s&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.&lt;/code&gt;が改行文字にマッチする&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;x&lt;/td&gt;
&lt;td&gt;正規表現を見やすくするため、スペースや改行を挟んで記述することができるようにする&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;この記事を最後まで読んでもらえた方は『正規表現とは何か』をざっくり理解できたかと思います。&lt;/p&gt;
&lt;p&gt;正規表現を使えば業務効率化やシステム開発など様々なことに活用できるのでぜひ自分でも色々試してみることをおすすめします！&lt;/p&gt;
&lt;p&gt;最後にもう一度ポイントをまとめておきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;正規表現とは複数の文字列をたった一つの文字列で表す方法である&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;正規表現を使えば検索・置換・バリデーションなどを様々な言語やツールで使うことができる&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;正規表現を構成する要素は「メタ文字」「エスケープシーケンス」「修飾子」の3つである&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;正規表現を1から勉強したい！という方はこちらの書籍がおすすめです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/dp/4873113598&quot;&gt;詳説 正規表現 第3版&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;なんとなく初心者にとっつきにくいイメージがあるオライリー本ですが、こちらは正規表現に馴染みのない方でも読みやすく初心者にもおすすめです！&lt;/p&gt;
</content:encoded></item><item><title>正規表現の（否定）先読み・後読みについてイメージ付きで解説！</title><link>https://rootful.net/posts/regex-lookahead-lookbehind/</link><guid isPermaLink="true">https://rootful.net/posts/regex-lookahead-lookbehind/</guid><pubDate>Fri, 26 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この記事で解決できるお悩み&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#1&quot;&gt;正規表現の先読み・後読みについてしっかり理解したい！&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#2-3&quot;&gt;先読み・後読みの具体的な使い方を知りたい&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[st-kaiwa2 html_class=&quot;wp-block-st-blocks-st-kaiwa&quot;]&lt;/p&gt;
&lt;p&gt;こんな悩みを解決できます！&lt;/p&gt;
&lt;p&gt;営業職から会社員WEBエンジニア、&lt;br /&gt;
その後フリーランスWEBエンジニアに転向した自分が解説します。&lt;/p&gt;
&lt;p&gt;[/st-kaiwa2]&lt;/p&gt;
&lt;p&gt;この記事では正規表現の先読み・後読みについて、図を使ってそれぞれのイメージを説明しつつ、具体的な活用方法を解説します。&lt;/p&gt;
&lt;p&gt;この記事を読み終えれば、正規表現の先読み・後読みを理解してプロダクト開発に役立てることができますよ。&lt;/p&gt;
&lt;h2&gt;先読み・後読みは『位置へのマッチ』である&lt;/h2&gt;
&lt;p&gt;先読み・後読みについて説明する前に、前提知識として正規表現の「位置へのマッチ」について説明します。&lt;/p&gt;
&lt;p&gt;正規表現のマッチには『&lt;strong&gt;文字列へのマッチ&lt;/strong&gt;』と『&lt;strong&gt;位置へのマッチ&lt;/strong&gt;』の2種類あり、先読み・後読みは『位置へのマッチ』が行われます。&lt;/p&gt;
&lt;p&gt;例えば&lt;code&gt;&quot;REGEX&quot;&lt;/code&gt;という文字列に対して、&lt;code&gt;REG&lt;/code&gt;という正規表現を実行すると&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/01.png&quot; alt=&quot;文字列へのマッチ&quot; /&gt;&lt;/p&gt;
&lt;p&gt;このように文字列&lt;code&gt;&quot;REG&quot;&lt;/code&gt;にマッチします。&lt;/p&gt;
&lt;p&gt;関数などで実行した場合は文字列&lt;code&gt;&quot;REG&quot;&lt;/code&gt;が返り値として取得できると思います。&lt;/p&gt;
&lt;p&gt;これが『文字列へのマッチ』です。&lt;/p&gt;
&lt;p&gt;一方で、&lt;code&gt;&quot;REGEX&quot;&lt;/code&gt;に対して&lt;code&gt;^&lt;/code&gt;という正規表現を実行すると、&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/02.png&quot; alt=&quot;位置へのマッチ&quot; /&gt;&lt;/p&gt;
&lt;p&gt;このように文字列にはマッチせず、『文字列の先頭』つまり位置にマッチします。&lt;/p&gt;
&lt;p&gt;この場合は文字列にはマッチしていないので関数を実行しても空の値が返ってきます。&lt;/p&gt;
&lt;p&gt;これが「位置へのマッチ」です。&lt;/p&gt;
&lt;p&gt;今回説明する先読み・後読みも『位置へのマッチ』なので文字列にはマッチしない、ということに注意してください。&lt;/p&gt;
&lt;h2&gt;先読みと後読み&lt;/h2&gt;
&lt;p&gt;ここから先読みと後読みについて説明します。&lt;/p&gt;
&lt;p&gt;読みながら自分でも実際に試してみたい！という方は &lt;a href=&quot;https://regex101.com/&quot;&gt;regex101&lt;/a&gt; という正規表現チェッカーをおすすめします。&lt;/p&gt;
&lt;p&gt;詳しい使い方やその他の正規表現チェッカーについてはこちらの記事で解説しています。&lt;/p&gt;
&lt;p&gt;[st-postgroup html_class=&quot;&quot; id=&quot;301&quot; rank=&quot;0&quot;]&lt;/p&gt;
&lt;h3&gt;先読み（lookahead）とは&lt;/h3&gt;
&lt;p&gt;先読みとは、今いる位置から右側に指定した文字列があるかチェックする機能です。&lt;/p&gt;
&lt;p&gt;先読みは以下のように記述します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(?=チェックしたい文字列)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;例として&lt;code&gt;&quot;lookahead&quot;&lt;/code&gt;の&lt;code&gt;&quot;look&quot;&lt;/code&gt;、つまり右側に&lt;code&gt;&quot;ahead&quot;&lt;/code&gt;がくっついている文字列&lt;code&gt;&quot;look&quot;&lt;/code&gt;にマッチさせたい場合、正規表現はこのようになります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;look(?=ahead)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現を&lt;code&gt;&quot;lookahead&quot;&lt;/code&gt;という文字列に適用した場合の動きは以下のようなイメージです。&lt;/p&gt;
&lt;p&gt;正規表現エンジンはまず、&lt;code&gt;look(?=ahead)&lt;/code&gt;のうち&lt;code&gt;look&lt;/code&gt;を実行します。&lt;/p&gt;
&lt;p&gt;この時正規表現は左から右に向かって、1文字ずつマッチするかをチェックしていきます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/03.png&quot; alt=&quot;正規表現の先読みの動き1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;すると&lt;code&gt;&quot;lookahead&quot;&lt;/code&gt;に含まれる文字列&lt;code&gt;&quot;look&quot;&lt;/code&gt;がマッチします。&lt;/p&gt;
&lt;p&gt;その後、先読み部分の&lt;code&gt;(?=ahead)&lt;/code&gt;の処理を実行します。&lt;/p&gt;
&lt;p&gt;先読みは『今いる位置から右側に指定の文字列が存在するか』をチェックするので、今回は&lt;code&gt;&quot;look&quot;&lt;/code&gt;の直後の位置から右側に&lt;code&gt;&quot;ahead&quot;&lt;/code&gt;が存在するかチェックします。&lt;/p&gt;
&lt;p&gt;この時正規表現は&lt;code&gt;&quot;ahead&quot;&lt;/code&gt;の方に進んでいくのではなく、あくまで&lt;code&gt;&quot;look&quot;&lt;/code&gt;の直後の位置から&lt;code&gt;&quot;ahead&quot;&lt;/code&gt;があるかどうか眺めているだけ、というイメージを持つと理解しやすいかと思います。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/04.png&quot; alt=&quot;正規表現の先読みの動き2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&quot;ahead&quot;&lt;/code&gt;が存在しない場合はマッチ不成立となりますが、今回は&lt;code&gt;&quot;ahead&quot;&lt;/code&gt;が存在しているので&lt;code&gt;&quot;look&quot;&lt;/code&gt;の直後の位置にマッチします。&lt;/p&gt;
&lt;p&gt;結果、マッチ文字列として&lt;code&gt;&quot;look&quot;&lt;/code&gt;が得られます。&lt;/p&gt;
&lt;p&gt;先にも説明しましたが、先読み・後読みは『位置へのマッチ』が行われるのでマッチ結果として文字列は返ってきません。&lt;/p&gt;
&lt;p&gt;先読みのポイントは2つです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;先読みは今いる位置から右側に文字列があるかチェックする&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;先読みは文字列ではなく位置にマッチする&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;後読み（lookbehind）とは&lt;/h3&gt;
&lt;p&gt;後読みとは、今いる位置から左側に指定した文字列があるかチェックする機能です。&lt;/p&gt;
&lt;p&gt;後読みは以下のように記述します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(?&amp;lt;=チェックしたい文字列)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;&quot;lookbehind&quot;&lt;/code&gt;の&lt;code&gt;&quot;behind&quot;&lt;/code&gt;、つまり左側に&lt;code&gt;&quot;look&quot;&lt;/code&gt;がくっついている&lt;code&gt;&quot;behind&quot;&lt;/code&gt;という文字列にマッチさせたい場合、正規表現はこのようになります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(?&amp;lt;=look)behind
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現を&lt;code&gt;&quot;lookbehind&quot;&lt;/code&gt;という文字列に適用した場合の動きは以下のようなイメージです。&lt;/p&gt;
&lt;p&gt;正規表現エンジンはまず、&lt;code&gt;(?&amp;lt;=look)behind&lt;/code&gt;のうち&lt;code&gt;(?&amp;lt;=look)&lt;/code&gt;を実行します。&lt;/p&gt;
&lt;p&gt;文字列の先頭の位置から左を向いて&lt;code&gt;&quot;look&quot;&lt;/code&gt;があるかチェック、1文字分進んで&lt;code&gt;&quot;l&quot;&lt;/code&gt;の直後の位置に移動、そこから左を向いて&lt;code&gt;&quot;look&quot;&lt;/code&gt;があるかチェック、さらに1文字分進んで...といった具合に、1歩進んで後ろを振り返るような動きを繰り返して&lt;code&gt;&quot;look&quot;&lt;/code&gt;を探します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/05.png&quot; alt=&quot;正規表現の後読みの動き1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&quot;k&quot;&lt;/code&gt;の直後の位置からみると&lt;code&gt;&quot;look&quot;&lt;/code&gt;が存在していることが確認できたので、正規表現&lt;code&gt;(?&amp;lt;=look)&lt;/code&gt;は&lt;code&gt;&quot;k&quot;&lt;/code&gt;の直後の位置にマッチします。&lt;/p&gt;
&lt;p&gt;あとは今の位置から右側に&lt;code&gt;&quot;behind&quot;&lt;/code&gt;が存在するかを見ていくだけです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/06.png&quot; alt=&quot;正規表現の先読みの動き2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;結果&lt;code&gt;&quot;behind&quot;&lt;/code&gt;が存在していたので、マッチ文字列として&lt;code&gt;&quot;behind&quot;&lt;/code&gt;が得られます。&lt;/p&gt;
&lt;p&gt;後読みのポイントは2つです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;後読みは今いる位置から左側に文字列があるかチェックする&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;後読みは文字列ではなく位置にマッチする&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;先読み・後読みの便利な使い方&lt;/h3&gt;
&lt;p&gt;「先読みと後読みが何なのかはわかったけど、具体的にどう使うの？」という方向けに、先読み・後読みの便利な使い方を3つ紹介します。&lt;/p&gt;
&lt;h4&gt;1. タグで囲まれた文字列を取得する&lt;/h4&gt;
&lt;p&gt;HTMLファイルの中で、pタグやh1~6タグに囲まれた文字列だけ取得したい！ということが可能です。&lt;/p&gt;
&lt;p&gt;今回はh2タグに囲まれた文字列だけ取得したい場合の例を紹介します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(?&amp;lt;=&amp;lt;h2&amp;gt;)[^&amp;lt;&amp;gt;]+(?=&amp;lt;\/h2&amp;gt;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現を大きく3つに分けて説明すると、&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(?&amp;lt;=&amp;lt;h2&amp;gt;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;は後読みを使っており、左側に&lt;code&gt;&quot;&amp;lt;h2&amp;gt;&quot;&lt;/code&gt;が存在する位置にマッチします。&lt;/p&gt;
&lt;p&gt;この正規表現だとh2タグにクラスが付与されて &amp;lt;h2 class=&quot;hoge&quot;&amp;gt; となっている場合はマッチしません。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[^&amp;lt;&amp;gt;]+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;こちらはh2タグの中身を指定しています。&lt;/p&gt;
&lt;p&gt;h2タグで囲まれている中に&lt;code&gt;&quot;&amp;lt;&quot;&lt;/code&gt;と&lt;code&gt;&quot;&amp;gt;&quot;&lt;/code&gt;があって欲しくないため、否定文字クラス（&lt;code&gt;[^]&lt;/code&gt;）を使って除外しています。&lt;/p&gt;
&lt;p&gt;結果『&lt;code&gt;&quot;&amp;lt;&quot;&lt;/code&gt;でも&lt;code&gt;&quot;&amp;gt;&quot;&lt;/code&gt;でもない文字が1文字以上ある』という意味になります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(?=&amp;lt;\/h2&amp;gt;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最後に、こちらは先読みを使い右側に&lt;code&gt;&quot;&amp;lt;/h2&amp;gt;&quot;&lt;/code&gt;が存在するかチェックしています。&lt;/p&gt;
&lt;p&gt;先読みと後読みの部分は文字列にはマッチしないため、h2タグに囲まれた文字列だけを取得することができます。&lt;/p&gt;
&lt;h4&gt;2. パスワードに英数字が使われているかチェック&lt;/h4&gt;
&lt;p&gt;以下の正規表現を使えば、『パスワードにアルファベットと数字がそれぞれ1文字以上使われているか』といったチェックが可能です。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;^(?=.*[0-9])(?=.*[a-zA-Z])[a-zA-Z0-9]{8,}$
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;こちらも3ブロックに分けて説明します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(?=.*[0-9])
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;では先読みを使っており、1文字でも数字が使われていればマッチします。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(?=.*[a-zA-Z])
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;こちらも同じく先読みを使い、小文字、大文字関係なくアルファベットが1文字あればマッチします。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[a-zA-Z0-9]{8,}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;こちらは『アルファベットか数字のみを使い8文字以上』をパスワードの条件に設定しています。&lt;/p&gt;
&lt;p&gt;つまりこの正規表現は『&lt;strong&gt;数字を1文字以上使っている&lt;/strong&gt;』『&lt;strong&gt;アルファベットを一文字以上使っている&lt;/strong&gt;』『&lt;strong&gt;アルファベットか数字のみを使い8文字以上&lt;/strong&gt;』の3つの条件を全て満たす文字列にのみマッチするということになります。&lt;/p&gt;
&lt;h4&gt;3. 3桁ごとにカンマ区切りを入れる&lt;/h4&gt;
&lt;p&gt;この正規表現を使えば桁数が多い数値に対して、3桁ごとにカンマ区切りを入れることが可能です。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(?&amp;lt;=\d)(?=(\d\d\d)+$)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;\d&lt;/code&gt;&lt;/strong&gt; は&lt;code&gt;**[0-9]**&lt;/code&gt; と同じ意味です。&lt;/p&gt;
&lt;p&gt;こちらは大きく分けて2ブロックあり、&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(?&amp;lt;=\d)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;こちらは後読みを使って左側に数字があるかチェックしています。&lt;/p&gt;
&lt;p&gt;これは&lt;code&gt;&quot;,100,000&quot;&lt;/code&gt;のように数字の先頭にカンマがつくのを防ぐためです。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(?=(\d\d\d)+$)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;こちらは日本語で表すと「右側に3桁の数字が1組以上あり、行末がある位置」という意味になります。&lt;/p&gt;
&lt;p&gt;ややこしいですが、要は3桁、6桁、9桁、12桁...と3の倍数桁の数字が右側にある位置にマッチします。&lt;/p&gt;
&lt;p&gt;改めてこの正規表現でマッチする箇所を図示するとこのようになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/07.png&quot; alt=&quot;3桁ごとの位置にマッチ&quot; /&gt;&lt;/p&gt;
&lt;p&gt;これでマッチした位置を&lt;code&gt;&quot;,&quot;&lt;/code&gt;で置換すれば3桁ごとにカンマ区切りを入れることができます。&lt;/p&gt;
&lt;h2&gt;否定先読みと否定後読み&lt;/h2&gt;
&lt;p&gt;ここまでで説明した先読み・後読みには否定の形が存在します。&lt;/p&gt;
&lt;p&gt;そのため普通の『先読み・後読み』はそれぞれ『肯定先読み・肯定後読み』と呼ばれることもあります。&lt;/p&gt;
&lt;p&gt;基本的な動きは肯定の形と同じなので、簡単に説明していきます。&lt;/p&gt;
&lt;h3&gt;否定先読みとは&lt;/h3&gt;
&lt;p&gt;先読みの否定形です。&lt;/p&gt;
&lt;p&gt;今いる位置から右側に指定した文字列が&quot;ない&quot;ことをチェックする機能です。&lt;/p&gt;
&lt;p&gt;否定先読みは以下のように記述します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(?!チェックしたい文字列)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;&quot;lookahead&quot;&lt;/code&gt;以外の&lt;code&gt;&quot;look&quot;&lt;/code&gt;にマッチさせたい場合は以下のような正規表現になります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;look(?!ahead)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この場合、&lt;code&gt;&quot;look&quot;&lt;/code&gt;単体や&lt;code&gt;&quot;lookbehind&quot;&lt;/code&gt;などの&lt;code&gt;&quot;look&quot;&lt;/code&gt;にはマッチしますが、&lt;code&gt;&quot;lookahead&quot;&lt;/code&gt;の&lt;code&gt;&quot;**look**&quot;&lt;/code&gt;にはマッチしません。&lt;/p&gt;
&lt;h3&gt;否定後読みとは&lt;/h3&gt;
&lt;p&gt;後読みの否定形です。&lt;/p&gt;
&lt;p&gt;今いる位置から左側に指定した文字列が&quot;ない&quot;ことをチェックする機能です。&lt;/p&gt;
&lt;p&gt;否定後読みは以下のように記述します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(?&amp;lt;!チェックしたい文字列)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;&quot;lookbehind&quot;&lt;/code&gt;以外の&lt;code&gt;&quot;behind&quot;&lt;/code&gt;にマッチさせたい場合は以下のような正規表現になります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(?&amp;lt;!look)behind
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この場合、&lt;code&gt;&quot;behind&quot;&lt;/code&gt;単体や&lt;code&gt;&quot;left behind&quot;&lt;/code&gt;などの&lt;code&gt;&quot;behind&quot;&lt;/code&gt;にはマッチしますが、&lt;code&gt;&quot;lookbehind&quot;&lt;/code&gt;の&quot;look&quot;にはマッチしません。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;この記事を読んで、正規表現の先読み・後読みについて理解できた！という方がいれば嬉しいです。&lt;/p&gt;
&lt;p&gt;具体的な使い方も紹介したので、ぜひ今後の開発に役立てていってください！&lt;/p&gt;
&lt;p&gt;最後にもう一度今回のポイントをまとめておきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;先読み・後読みは文字列ではなく今いる位置にマッチする&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;先読みは今いる位置から右側に指定の文字列があるかチェックする&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;後読みは今いる位置から左側に指定の文字列があるかチェックする&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;否定先読みは今いる位置から右側に指定の文字列がないことをチェックする&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;否定後読みは今いる位置から左側に指定の文字列がないことをチェックする&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;正規表現を一から勉強したい！という方はこちらの書籍がおすすめです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/dp/4873113598&quot;&gt;詳説 正規表現 第3版&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;なんとなく初心者にとっつきにくいイメージがあるオライリー本ですが、こちらは正規表現に馴染みのない方でも読みやすく初心者にもおすすめです！&lt;/p&gt;
</content:encoded></item><item><title>【厳選】Python用正規表現チェッカーおすすめ3選</title><link>https://rootful.net/posts/regex-checker-python/</link><guid isPermaLink="true">https://rootful.net/posts/regex-checker-python/</guid><pubDate>Wed, 24 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この記事で解決できるお悩み&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#2&quot;&gt;Python用の正規表現チェッカーを探しているけどどれがいいか分からない...&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#3-5&quot;&gt;それぞれの正規表現チェッカーの特徴を比較したい&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#4&quot;&gt;正規表現チェッカーの具体的な使い方を知りたい&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[st-kaiwa2 html_class=&quot;wp-block-st-blocks-st-kaiwa&quot;]&lt;/p&gt;
&lt;p&gt;こんな悩みを解決できます！&lt;/p&gt;
&lt;p&gt;営業職から会社員WEBエンジニア、&lt;br /&gt;
その後フリーランスWEBエンジニアに転向した自分が解説します。&lt;/p&gt;
&lt;p&gt;[/st-kaiwa2]&lt;/p&gt;
&lt;p&gt;この記事では「これを使っておけばOK！」という正規表現チェッカーの紹介と、その他のおすすめチェッカーとの比較や使い方をご紹介します。&lt;/p&gt;
&lt;p&gt;この記事を読み終えれば、お気に入りの正規表現チェッカーが見つかっているはずですよ！&lt;/p&gt;
&lt;h2&gt;正規表現とは？&lt;/h2&gt;
&lt;p&gt;正規表現とは&lt;code&gt;^&lt;/code&gt;や&lt;code&gt;$&lt;/code&gt;などの特殊な記号を使うことで、複数の文字列をたった一つの文字列で表す方法です。&lt;/p&gt;
&lt;p&gt;例えば以下の文字列が電話番号かどうか判別してくださいと言われたらどうするでしょうか？&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;090-XXXX-XXXX /* X = 数字 */
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;人間からすれば一目見て電話番号だとわかりますが、コンピュータはそうはいきません。&lt;/p&gt;
&lt;p&gt;コンピュータに「&lt;code&gt;090-0000-0000&lt;/code&gt;は電話番号だよ、&lt;code&gt;090-0000-0001&lt;/code&gt;は電話番号だよ、&lt;code&gt;090-0000-0002&lt;/code&gt;は、、」と1つずつ教えれば判別してくれますが、無駄が多すぎです。&lt;/p&gt;
&lt;p&gt;そこで「&lt;strong&gt;先頭に0~9までの数字が3つ、その後にハイフン、その後ろに...&lt;/strong&gt;」のように電話番号とはどんなパターンの文字列なのかを説明してあげればよいではないか。と昔の偉い人は考えました。&lt;/p&gt;
&lt;p&gt;その説明をするために必要なのが正規表現です。&lt;/p&gt;
&lt;p&gt;電話番号を正規表現で書くと以下のようになります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[0-9]{3}-[0-9]{4}-[0-9]{4} 
/* = 左から、0~9の数字が3つ、ハイフン1つ、0~9の数字が4つ、ハイフン1つ、0~9の数字が4つある文字列 */
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現を使えば、コンピュータ側が電話番号というものを理解し、大量の文章の中から電話番号だけを取得するといったことが可能になります。&lt;/p&gt;
&lt;p&gt;このように欲しい文字列のパターンを指定することで1つの文字列で複数の文字列を表すことができるのが正規表現です。&lt;/p&gt;
&lt;h3&gt;正規表現チェッカーはなぜ必要なのか？&lt;/h3&gt;
&lt;p&gt;上の例のように、正規表現は人間からするとややわかりづらいです。&lt;/p&gt;
&lt;p&gt;なのでその正規表現が意図したものになっているかチェックする必要がありますが、Pythonコード上のチェックでは手間がかかり、出力結果もわかりづらくなりがちです。&lt;/p&gt;
&lt;p&gt;しかし正規表現チェッカーではお手軽かつ視覚的にもわかりやすくチェック結果を出力してくれます！&lt;/p&gt;
&lt;p&gt;正規表現チェッカーを使えば、チェックしたい正規表現とマッチ対象の文字列を入力するだけでマッチ確認、置換結果確認、マッチした文字列のリスト出力などなど...さまざまな機能を提供してくれます！&lt;/p&gt;
&lt;p&gt;正規表現を扱う上でこんなに便利なものはないので、積極的に活用することをおすすめします！&lt;/p&gt;
&lt;h2&gt;結局どれを使えばいいの？&lt;/h2&gt;
&lt;p&gt;結論から言うと**&lt;a href=&quot;https://regex101.com&quot;&gt;regex101&lt;/a&gt;**が圧倒的におすすめです。&lt;/p&gt;
&lt;p&gt;理由はダントツで高機能だからです。&lt;/p&gt;
&lt;p&gt;正規表現チェックや置換機能はもちろん、正規表現解説やステップ数（≒ 正規表現のパフォーマンス）の確認機能まで搭載されています。&lt;/p&gt;
&lt;p&gt;さらにPythonだけでなくJavaScriptやPHP、Javaなどさまざまな言語に対応しているので、正規表現に関しては**このツールを使っておけば間違いない！**と断言できます。&lt;/p&gt;
&lt;p&gt;ただあまりにも多機能だったり、使い方が一目ではわかりづらかったりと、初心者の方には合わない可能性もあります。&lt;/p&gt;
&lt;p&gt;そういった方はこの後紹介するその他の正規表現チェッカーも検討してみてください。&lt;/p&gt;
&lt;h2&gt;Python用の正規表現チェッカーおすすめ3選&lt;/h2&gt;
&lt;p&gt;ここからは、regex101も含めたおすすめ正規表現チェッカーを3つ紹介します。&lt;/p&gt;
&lt;h3&gt;1 : &lt;a href=&quot;https://regex101.com&quot;&gt;regex101&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&amp;lt;figure&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://regex101.com&quot;&gt;&lt;img src=&quot;./images/01.jpg&quot; alt=&quot;regex101の画面キャプチャ&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://regex101.com/&quot;&gt;https://regex101.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;p&gt;自分が把握している正規表現チェッカーの中で最も高機能です。&lt;/p&gt;
&lt;p&gt;このツールには正規表現チェッカーに必要なほぼ全ての機能が搭載されています。&lt;/p&gt;
&lt;p&gt;特にデバッグ機能では正規表現がマッチするまでにかかったステップ数、つまり&lt;strong&gt;正規表現のパフォーマンスを計測することができます&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;普段あまり気にすることはないかもしれませんが、上級者の方にはこれほど便利な機能はないと思います。&lt;/p&gt;
&lt;p&gt;またPython以外の言語にも対応しており、迷ったらこちらを選んでおけば問題ないでしょう。&lt;/p&gt;
&lt;h3&gt;2 : &lt;a href=&quot;https://www.debuggex.com/&quot;&gt;Debuggex&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&amp;lt;figure&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.debuggex.com/&quot;&gt;&lt;img src=&quot;./images/02.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.debuggex.com/&quot;&gt;https://www.debuggex.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;p&gt;機能的には&lt;a href=&quot;#3-1&quot;&gt;regex101&lt;/a&gt;に劣りますが、正規表現の視覚化機能が優れておりわかりやすいです。&lt;/p&gt;
&lt;p&gt;またこちらのツールにもデバッグ機能が搭載されているので正規表現の処理順序を確認したい場合にも便利です。&lt;/p&gt;
&lt;h3&gt;3 : &lt;a href=&quot;https://pythex.org/&quot;&gt;Pythex&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&amp;lt;figure&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://pythex.org/&quot;&gt;&lt;img src=&quot;./images/03.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://pythex.org/&quot;&gt;https://pythex.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;p&gt;こちらがおすすめの理由はそのシンプルさです。&lt;/p&gt;
&lt;p&gt;機能は正規表現マッチ結果の確認のみなので、細かい機能はいらないよ！という方にはこちらをおすすめします。&lt;/p&gt;
&lt;h3&gt;各チェッカーの機能早見表&lt;/h3&gt;
&lt;p&gt;ここまで紹介してきた正規表現チェッカー3つの機能を表にまとめました。&lt;/p&gt;
&lt;p&gt;それぞれの項目の説明は以下の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;マッチ&lt;/strong&gt; ... 正規表現が対象の文字列にマッチするか確認できる機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;置換&lt;/strong&gt; ... マッチした文字列を置換する機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;リスト&lt;/strong&gt; ... マッチした文字列をリストとしてまとめて確認できる機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;視覚化&lt;/strong&gt; ... 正規表現を視覚的に表示する機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;デバッグ&lt;/strong&gt; ... 正規表現がマッチするまでの処理手順や試行回数を確認できる機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;コードジェネレーター&lt;/strong&gt; ... 入力した正規表現と対象文字列を元にコードを生成する機能&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;マッチ&lt;/th&gt;
&lt;th&gt;置換&lt;/th&gt;
&lt;th&gt;リスト&lt;/th&gt;
&lt;th&gt;視覚化&lt;/th&gt;
&lt;th&gt;デバッグ&lt;/th&gt;
&lt;th&gt;コード   ジェネレーター&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;#3-1&quot;&gt;regex101&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;#3-2&quot;&gt;Debuggex&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;#3-3&quot;&gt;Pythex&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;各チェッカーの使い方&lt;/h2&gt;
&lt;h3&gt;1 : &lt;a href=&quot;#3-1&quot;&gt;regex101&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;最もおすすめのregex101から説明していきます。&lt;/p&gt;
&lt;p&gt;ここでは4つの機能の使い方を説明します！&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;基本の使い方（正規表現マッチ）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;置換機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;リスト出力機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;デバッグ機能&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;1 : 基本の使い方（正規表現マッチ）&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./images/04.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;① 『FLAVOR』欄で『Python』を選択&lt;/p&gt;
&lt;p&gt;② 『REGULAR EXPRESSION』欄に正規表現を入力&lt;/p&gt;
&lt;p&gt;③ 『TEST STRING』欄にチェック対象の文字列を入力&lt;/p&gt;
&lt;p&gt;そうすると、『TEST STRING』に入力した文字列のうち、正規表現にマッチしたものだけマーキングされます。&lt;/p&gt;
&lt;p&gt;ちなみに&lt;code&gt;( )&lt;/code&gt;でグループ指定などしているとマーキング色を分けてくれるので視覚的にもどの正規表現がどことマッチしているかがわかりやすいです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/05.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;『REGULAR EXPRESSION』欄に正規表現を入力すると、自動的に『EXPLANATION』欄で正規表現の解説をしてくれます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/06.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;また、『MATCH INFORMATION』欄では正規表現にマッチした文字列（とグループ化していればその文字列）をリスト表示してくれます。&lt;/p&gt;
&lt;h4&gt;2 : 置換機能&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./images/07.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;① 画面左『FUNCTION』で『Substitution』を選択&lt;/p&gt;
&lt;p&gt;② 画面中央の『SUBSTITUTION』欄に置換文字列を入力&lt;/p&gt;
&lt;p&gt;すると下に置換結果を出力してくれます！&lt;/p&gt;
&lt;h4&gt;3 : リスト出力機能&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./images/08.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;① 画面左『FUNCTION』で『List』を選択&lt;/p&gt;
&lt;p&gt;② 画面中央の『List』欄にリスト出力形式を入力&lt;/p&gt;
&lt;p&gt;これでキャプチャした文字列などをリスト化して出力してくれます。&lt;/p&gt;
&lt;p&gt;正規表現では、&lt;code&gt;()&lt;/code&gt; で囲んだ部分にマッチした文字列は別枠で変数などに格納されます。&lt;br /&gt;
この機能をキャプチャと言います。&lt;/p&gt;
&lt;h4&gt;4 : デバッグ機能&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./images/09.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;① 『FLAVOR』で『PCRE2 (PHP &amp;gt;=7.3)』を選択&lt;br /&gt;
&lt;strong&gt;※ 2024年4月現在PCRE以外にはデバッグ機能は対応していません！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;② 『Tool』欄で『Regex Debugger』をクリック&lt;/p&gt;
&lt;p&gt;すると以下のような画面が出てきます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/10.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;① 左側の『MATCH』でチェックしたいマッチを選択&lt;/p&gt;
&lt;p&gt;② 右側の『MATCH STEPS』で合計ステップ数やステップごとの処理内容を確認&lt;/p&gt;
&lt;p&gt;ややわかりづらいですが、上記の例だと**「1つ目のマッチに合計5ステップかかった」**ということがわかります。&lt;br /&gt;
このステップ数が異常に多い場合は正規表現の見直しをした方が良いですね。&lt;/p&gt;
&lt;p&gt;また『MATCH STEPS』の再生ボタンや、矢印ボタンを押すことで各ステップで対象文字列のどこをチェックしているのかが視覚的にわかり便利です。&lt;/p&gt;
&lt;h3&gt;2 : &lt;a href=&quot;#3-2&quot;&gt;Debuggex&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;./images/11.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;① 言語選択で『Python』を選択&lt;/p&gt;
&lt;p&gt;② その下のテキストボックスに正規表現を入力&lt;/p&gt;
&lt;p&gt;そうすると、画面上に入力した正規表現を視覚化して表示してくれます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/12.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;③ 正規表現を入力したボックスの下のテキストボックスに検索対象の文字列を入力&lt;/p&gt;
&lt;p&gt;するとマッチした文字列がマーキングされます。&lt;/p&gt;
&lt;p&gt;さらに、その下にある『POSITION』と書かれているポインタを動かすと正規表現の処理の流れを確認することができます。&lt;/p&gt;
&lt;h3&gt;3 : &lt;a href=&quot;#3-3&quot;&gt;Pythex&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;./images/13.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;① 『Your regular expression』欄にチェックしたい正規表現を入力&lt;/p&gt;
&lt;p&gt;② 『Your test string』欄にチェック対象の文字列を入力&lt;/p&gt;
&lt;p&gt;すると画面下左にマッチした文字列をマーキングして表示し、右にキャプチャした文字列をリスト化して表示してくれます。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ここまでで紹介した正規表現チェッカーからお気に入りを見つければ、今後は正規表現チェックに手間取ることもなくなり、業務効率UP間違いなしです。&lt;/p&gt;
&lt;p&gt;最後にもう一度おすすめの正規表現チェッカーをまとめておきます。&lt;/p&gt;
&lt;p&gt;おすすめのPython用正規表現チェッカー3つ&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#3-1&quot;&gt;&lt;strong&gt;regex101&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
→ 迷ったらこれ！トップレベルで多機能。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#3-2&quot;&gt;&lt;strong&gt;Debuggex&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
→ 優秀な視覚化機能。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#3-3&quot;&gt;&lt;strong&gt;Pythex&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
→ シンプルさを求める方におすすめ。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;正規表現を1から勉強したい！という方はこちらの書籍がおすすめです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/dp/4873113598&quot;&gt;詳説 正規表現 第3版&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;なんとなく初心者にとっつきにくいイメージがあるオライリー本ですが、こちらは正規表現に馴染みのない方でも読みやすく、初心者にもおすすめです！&lt;/p&gt;
</content:encoded></item><item><title>【厳選】PHP用正規表現チェッカーおすすめ3選</title><link>https://rootful.net/posts/regex-checker-php/</link><guid isPermaLink="true">https://rootful.net/posts/regex-checker-php/</guid><pubDate>Tue, 23 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この記事で解決できるお悩み&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#2&quot;&gt;PHP用の正規表現チェッカーを探しているけどどれがいいか分からない...&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#3-5&quot;&gt;それぞれの正規表現チェッカーの特徴を比較したい&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#4&quot;&gt;正規表現チェッカーの具体的な使い方を知りたい&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[st-kaiwa2 html_class=&quot;wp-block-st-blocks-st-kaiwa&quot;]&lt;/p&gt;
&lt;p&gt;こんな悩みを解決できます！&lt;/p&gt;
&lt;p&gt;営業職から会社員WEBエンジニア、&lt;br /&gt;
その後フリーランスWEBエンジニアに転向した自分が解説します。&lt;/p&gt;
&lt;p&gt;[/st-kaiwa2]&lt;/p&gt;
&lt;p&gt;この記事では「これを使っておけばOK！」という正規表現チェッカーの紹介と、その他のおすすめチェッカーとの比較や使い方をご紹介します。&lt;/p&gt;
&lt;p&gt;この記事を読み終えれば、お気に入りの正規表現チェッカーが見つかっているはずですよ！&lt;/p&gt;
&lt;h2&gt;正規表現とは？&lt;/h2&gt;
&lt;p&gt;正規表現とは&lt;code&gt;^&lt;/code&gt;や&lt;code&gt;$&lt;/code&gt;などの特殊な記号を使うことで、複数の文字列をたった一つの文字列で表す方法です。&lt;/p&gt;
&lt;p&gt;例えば以下の文字列が電話番号かどうか判別してくださいと言われたらどうするでしょうか？&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;090-XXXX-XXXX /* X = 数字 */
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;人間からすれば一目見て電話番号だとわかりますが、コンピュータはそうはいきません。&lt;/p&gt;
&lt;p&gt;コンピュータに「&lt;code&gt;090-0000-0000&lt;/code&gt; は電話番号だよ、&lt;code&gt;090-0000-0001&lt;/code&gt; は電話番号だよ、&lt;code&gt;090-0000-0002&lt;/code&gt; は、、」と1つずつ教えれば判別してくれますが、無駄が多すぎです。&lt;/p&gt;
&lt;p&gt;そこで「&lt;strong&gt;先頭に0~9までの数字が3つ、その後にハイフン、その後ろに...&lt;/strong&gt;」のように電話番号とはどんなパターンの文字列なのかを説明してあげればよいではないか。と昔の偉い人は考えました。&lt;/p&gt;
&lt;p&gt;その説明をするために必要なのが正規表現です。&lt;/p&gt;
&lt;p&gt;電話番号を正規表現で書くと以下のようになります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[0-9]{3}-[0-9]{4}-[0-9]{4} 
/* = 左から、0~9の数字が3つ、ハイフン1つ、0~9の数字が4つ、ハイフン1つ、0~9の数字が4つある文字列 */
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現を使えば、コンピュータ側が電話番号というものを理解し、大量の文章の中から電話番号だけを取得するといったことが可能になります。&lt;/p&gt;
&lt;p&gt;このように欲しい文字列のパターンを指定することで1つの文字列で複数の文字列を表すことができるのが正規表現です。&lt;/p&gt;
&lt;h3&gt;正規表現チェッカーはなぜ必要なのか？&lt;/h3&gt;
&lt;p&gt;上の例のように、正規表現は人間からするとややわかりづらいです。&lt;/p&gt;
&lt;p&gt;なのでその正規表現が意図したものになっているかチェックする必要がありますが、PHPコード上のチェックでは手間がかかり、出力結果もわかりづらくなりがちです。&lt;/p&gt;
&lt;p&gt;しかし正規表現チェッカーではお手軽かつ視覚的にもわかりやすくチェック結果を出力してくれます！&lt;/p&gt;
&lt;p&gt;正規表現チェッカーを使えば、チェックしたい正規表現とマッチ対象の文字列を入力するだけでマッチ確認、置換結果確認、マッチした文字列のリスト出力などなど...さまざまな機能を提供してくれます！&lt;/p&gt;
&lt;p&gt;正規表現を扱う上でこんなに便利なものはないので、積極的に活用することをおすすめします！&lt;/p&gt;
&lt;h2&gt;結局どれを使えばいいの？&lt;/h2&gt;
&lt;p&gt;結論から言うと**&lt;a href=&quot;https://regex101.com&quot;&gt;regex101&lt;/a&gt;**が圧倒的におすすめです。&lt;/p&gt;
&lt;p&gt;理由はダントツで高機能だからです。&lt;/p&gt;
&lt;p&gt;正規表現チェックや置換機能はもちろん、正規表現解説やステップ数（≒ 正規表現のパフォーマンス）の確認機能まで搭載されています。&lt;/p&gt;
&lt;p&gt;さらに、PHPだけでなくJavaScriptやPython、Javaなどさまざまな言語に対応しているので、正規表現に関しては**このツールを使っておけば間違いない！**と断言できます。&lt;/p&gt;
&lt;p&gt;ただあまりにも多機能だったり、使い方が一目ではわかりづらかったりと、初心者の方には合わない可能性もあります。&lt;/p&gt;
&lt;p&gt;そういった方はこの後紹介するその他の正規表現チェッカーも検討してみてください。&lt;/p&gt;
&lt;h2&gt;PHP用の正規表現チェッカーおすすめ3選&lt;/h2&gt;
&lt;p&gt;ここからは、regex101も含めたおすすめ正規表現チェッカーを3つ紹介します。&lt;/p&gt;
&lt;h3&gt;1 : &lt;a href=&quot;https://regex101.com&quot;&gt;regex101&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&amp;lt;figure&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://regex101.com&quot;&gt;&lt;img src=&quot;./images/01.jpg&quot; alt=&quot;regex101の画面キャプチャ&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://regex101.com/&quot;&gt;https://regex101.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;p&gt;自分が把握している正規表現チェッカーの中で最も高機能です。&lt;/p&gt;
&lt;p&gt;このツールには正規表現チェッカーに必要なほぼ全ての機能が搭載されています。&lt;/p&gt;
&lt;p&gt;特にデバッグ機能では正規表現がマッチするまでにかかったステップ数、つまり&lt;strong&gt;正規表現のパフォーマンスを計測することができます&lt;/strong&gt;。&lt;br /&gt;
普段あまり気にすることはないかもしれませんが、上級者の方にはこれほど便利な機能はないと思います。&lt;/p&gt;
&lt;p&gt;またPHP以外の言語にも対応しており、迷ったらこちらを選んでおけば問題ないでしょう。&lt;/p&gt;
&lt;h3&gt;2 : &lt;a href=&quot;https://regexr.com/&quot;&gt;RegExr&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&amp;lt;figure&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://regexr.com/&quot;&gt;&lt;img src=&quot;./images/02.jpg&quot; alt=&quot;RegExrの画面キャプチャ&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://regexr.com/&quot;&gt;https://regexr.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;p&gt;機能的には&lt;a href=&quot;#3-1&quot;&gt;regex101&lt;/a&gt;にやや劣りますが、デザインが洗練されており、使用方法も視覚的にわかりやすいです。&lt;/p&gt;
&lt;p&gt;デバッグ機能なんて使わないし、&lt;a href=&quot;#3-1&quot;&gt;regex101&lt;/a&gt;は見た目がちょっと無骨すぎるな...という方にはこちらをおすすめします。&lt;/p&gt;
&lt;h3&gt;3 : &lt;a href=&quot;https://www.phpliveregex.com/&quot;&gt;Live Regex&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&amp;lt;figure&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.phpliveregex.com/&quot;&gt;&lt;img src=&quot;./images/03.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.phpliveregex.com/&quot;&gt;https://www.phpliveregex.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;p&gt;こちらはPHP特化型の正規表現チェッカーです。&lt;/p&gt;
&lt;p&gt;PHPの正規表現処理に使われる&lt;code&gt;preg_match&lt;/code&gt;や&lt;code&gt;preg_replace&lt;/code&gt;などの関数の実行結果を確認することができます。&lt;/p&gt;
&lt;h3&gt;各チェッカーの機能早見表&lt;/h3&gt;
&lt;p&gt;ここまで紹介してきた正規表現チェッカー3つの機能を表にまとめました。&lt;/p&gt;
&lt;p&gt;それぞれの項目の説明は以下の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;マッチ&lt;/strong&gt; ... 正規表現が対象の文字列にマッチするか確認できる機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;置換&lt;/strong&gt; ... マッチした文字列を置換する機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;リスト&lt;/strong&gt; ... マッチした文字列をリストとしてまとめて確認できる機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;デバッグ&lt;/strong&gt; ... 正規表現がマッチするまでの処理手順や試行回数を確認できる機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;視覚化&lt;/strong&gt; ... 正規表現を視覚的に表示する機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;コードジェネレーター&lt;/strong&gt; ... 入力した正規表現と対象文字列を元にコードを生成する機能&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;マッチ&lt;/th&gt;
&lt;th&gt;置換&lt;/th&gt;
&lt;th&gt;リスト&lt;/th&gt;
&lt;th&gt;視覚化&lt;/th&gt;
&lt;th&gt;デバッグ&lt;/th&gt;
&lt;th&gt;コード   ジェネレーター&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;#3-1&quot;&gt;regex101&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;#3-2&quot;&gt;RegExr&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;#3-3&quot;&gt;Live Regex&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;各チェッカーの使い方&lt;/h2&gt;
&lt;h3&gt;1 : &lt;a href=&quot;#3-1&quot;&gt;regex101&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;最もおすすめのregex101から説明していきます。&lt;br /&gt;
ここでは4つの機能の使い方を説明します！&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;基本の使い方（正規表現マッチ）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;置換機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;リスト出力機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;デバッグ機能&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;1 : 基本の使い方（正規表現マッチ）&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./images/04.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;① 『FLAVOR』欄で『PCRE2 (PHP &amp;gt;=7.3)』を選択&lt;/p&gt;
&lt;p&gt;② 『REGULAR EXPRESSION』欄に正規表現を入力&lt;/p&gt;
&lt;p&gt;③ 『TEST STRING』欄にチェック対象の文字列を入力&lt;/p&gt;
&lt;p&gt;そうすると、『TEST STRING』に入力した文字列のうち、正規表現にマッチしたものだけマーキングされます。&lt;br /&gt;
ちなみに &lt;strong&gt;( )&lt;/strong&gt; でグループ指定などしているとマーキング色を分けてくれるので、視覚的にどの正規表現がどことマッチしているかがわかりやすいです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/05.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;『REGULAR EXPRESSION』欄に正規表現を入力すると、自動的に『EXPLANATION』欄で正規表現の解説をしてくれます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/06.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;また、『MATCH INFORMATION』欄では正規表現にマッチした文字列（とグループ化していればその文字列）をリスト表示してくれます。&lt;/p&gt;
&lt;h4&gt;2 : 置換機能&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./images/07.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;① 画面左『FUNCTION』で『Substitution』を選択&lt;/p&gt;
&lt;p&gt;② 画面中央の『SUBSTITUTION』欄に置換文字列を入力&lt;/p&gt;
&lt;p&gt;すると下に置換結果を出力してくれます！&lt;/p&gt;
&lt;h4&gt;3 : リスト出力機能&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./images/08.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;① 画面左『FUNCTION』で『List』を選択&lt;/p&gt;
&lt;p&gt;② 画面中央の『List』欄にリスト出力形式を入力&lt;/p&gt;
&lt;p&gt;これでマッチ結果をリスト化して出力してくれます。&lt;/p&gt;
&lt;p&gt;マッチした文字列を出力してほしい場合は「&lt;strong&gt;$0&lt;/strong&gt;」と入力してください！&lt;/p&gt;
&lt;h4&gt;4 : デバッグ機能&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./images/09.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;画面中央の『Tool』欄で『Regex Debugger』をクリック&lt;/p&gt;
&lt;p&gt;すると以下のような画面が出てきます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/10.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;① 左側の『MATCH』でチェックしたいマッチを選択&lt;/p&gt;
&lt;p&gt;② 右側の『MATCH STEPS』で合計ステップ数やステップごとの処理内容を確認&lt;/p&gt;
&lt;p&gt;ややわかりづらいですが、上記の例だと**「1つ目のマッチに合計5ステップかかった」**ということがわかります。&lt;br /&gt;
このステップ数が異常に多い場合は正規表現の見直しをした方が良いですね。&lt;/p&gt;
&lt;p&gt;また『MATCH STEPS』の再生ボタンや、矢印ボタンを押すことで各ステップで対象文字列のどこをチェックしているのかが視覚的にわかり便利です。&lt;/p&gt;
&lt;p&gt;2024年4月現在デバッグ機能に対応しているのはPCREのみです。&lt;/p&gt;
&lt;h3&gt;2 : &lt;a href=&quot;#3-2&quot;&gt;RegExr&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ここでは3つの機能の使い方を説明します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;正規表現マッチ&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;置換機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;リスト出力機能&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;1 : 正規表現マッチ&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./images/11.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;① 右上の言語選択で『PCRE』を選択&lt;/p&gt;
&lt;p&gt;②『Expression』欄に正規表現を入力&lt;/p&gt;
&lt;p&gt;③ 『Text』欄にチェック対象の文字列を入力&lt;/p&gt;
&lt;p&gt;そうすると、『Text』に入力した文字列のうち、正規表現にマッチしたものだけ青くマーキングされて表示されます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/12.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;また、画面下の『Tool』欄ではいくつかモードが選べるのですが、デフォルトでは『Explain』になっており、入力した正規表現の解説をしてくれます。&lt;/p&gt;
&lt;h4&gt;2 : 置換機能&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./images/13.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;『Tool』のモードを『Replace』にすると置換結果を確認することができます。&lt;br /&gt;
置換文字を赤枠のエリアに入力すると下に置換結果が表示されます。&lt;/p&gt;
&lt;h4&gt;3 : リスト出力機能&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./images/14.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;『Tool』のモードを『List』にするとキャプチャした文字列などの一覧を表示してくれます。&lt;/p&gt;
&lt;p&gt;また、赤枠の部分で出力形式を変更することも可能です。&lt;/p&gt;
&lt;p&gt;マッチした文字列を出力してほしい場合は「&lt;strong&gt;$0&lt;/strong&gt;」と入力してください！&lt;/p&gt;
&lt;h3&gt;3 : &lt;a href=&quot;#3-3&quot;&gt;Live Regex&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;PHPの関数ごとに全部で5つの機能がありますが、割愛して2つのみ紹介します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;正規表現マッチ&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;置換機能&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;1 : 正規表現マッチ&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./images/15.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;① 『Regex』欄にチェックしたい正規表現を入力&lt;/p&gt;
&lt;p&gt;② 『Your search string(s)』欄にチェック対象の文字列を入力&lt;/p&gt;
&lt;p&gt;するとこのように preg_match の実行結果を表示してくれます！&lt;/p&gt;
&lt;h4&gt;2 : 置換機能&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./images/16.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;① 『preg_replace』を選択&lt;/p&gt;
&lt;p&gt;② 『Replacement』欄に置換文字列を入力&lt;/p&gt;
&lt;p&gt;すると下に preg_replace の実行結果を表示してくれます。（折り返してくれないのが残念ですが、、）&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ここまでで紹介した正規表現チェッカーからお気に入りを見つければ、今後は正規表現チェックに手間取ることもなくなり、業務効率UP間違いなしです。&lt;/p&gt;
&lt;p&gt;最後にもう一度おすすめの正規表現チェッカーをまとめておきます。&lt;/p&gt;
&lt;p&gt;おすすめのPHP用正規表現チェッカー3つ&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;#3-1&quot;&gt;regex101&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
→ 迷ったらこれ！トップレベルで多機能。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;#3-2&quot;&gt;RegExr&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
→ 洗練されたデザインかつ多機能を求める方におすすめ。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;#3-3&quot;&gt;Live Regex&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
→ PHPに特化。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;正規表現を1から勉強したい！という方はこちらの書籍がおすすめです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/dp/4873113598&quot;&gt;詳説 正規表現 第3版&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;なんとなく初心者にとっつきにくいイメージがあるオライリー本ですが、こちらは正規表現に馴染みのない方でも読みやすく、初心者にもおすすめです！&lt;/p&gt;
</content:encoded></item><item><title>【厳選】JavaScript用正規表現チェッカーおすすめ4選</title><link>https://rootful.net/posts/regex-checker-javascript/</link><guid isPermaLink="true">https://rootful.net/posts/regex-checker-javascript/</guid><pubDate>Thu, 11 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この記事で解決できるお悩み&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#2&quot;&gt;JavaScript用の正規表現チェッカーを探しているけどどれがいいか分からない...&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#3-5&quot;&gt;それぞれの正規表現チェッカーの特徴を比較したい&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;#4&quot;&gt;正規表現チェッカーの具体的な使い方を知りたい&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[st-kaiwa2 html_class=&quot;wp-block-st-blocks-st-kaiwa&quot;]&lt;/p&gt;
&lt;p&gt;こんな悩みを解決できます！&lt;/p&gt;
&lt;p&gt;営業職から会社員WEBエンジニア、&lt;br /&gt;
その後フリーランスWEBエンジニアに転向した自分が解説します。&lt;/p&gt;
&lt;p&gt;[/st-kaiwa2]&lt;/p&gt;
&lt;p&gt;この記事では「これを使っておけばOK！」という正規表現チェッカーの紹介と、その他のおすすめチェッカーとの比較や使い方をご紹介します。&lt;/p&gt;
&lt;p&gt;この記事を読み終えれば、お気に入りの正規表現チェッカーが見つかっているはずですよ！&lt;/p&gt;
&lt;h2&gt;正規表現とは？&lt;/h2&gt;
&lt;p&gt;正規表現とは&lt;code&gt;^&lt;/code&gt;や&lt;code&gt;$&lt;/code&gt;などの特殊な記号を使うことで、複数の文字列をたった一つの文字列で表す方法です。&lt;/p&gt;
&lt;p&gt;例えば以下の文字列が電話番号かどうか判別してくださいと言われたらどうするでしょうか？&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;090-XXXX-XXXX /* X = 数字 */
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;人間からすれば一目見て電話番号だとわかりますが、コンピュータはそうはいきません。&lt;/p&gt;
&lt;p&gt;コンピュータに「&lt;code&gt;090-0000-0000&lt;/code&gt;は電話番号だよ、&lt;code&gt;090-0000-0001&lt;/code&gt;は電話番号だよ、&lt;code&gt;090-0000-0002&lt;/code&gt;は、、」と1つずつ教えれば判別してくれますが、無駄が多すぎです。&lt;/p&gt;
&lt;p&gt;そこで「&lt;strong&gt;先頭に0~9までの数字が3つ、その後にハイフン、その後ろに...&lt;/strong&gt;」のように電話番号とはどんなパターンの文字列なのかを説明してあげればよいではないか。と昔の偉い人は考えました。&lt;/p&gt;
&lt;p&gt;その説明をするために必要なのが正規表現です。&lt;/p&gt;
&lt;p&gt;電話番号を正規表現で書くと以下のようになります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[0-9]{3}-[0-9]{4}-[0-9]{4} 
/* = 左から、0~9の数字が3つ、ハイフン1つ、0~9の数字が4つ、ハイフン1つ、0~9の数字が4つある文字列 */
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この正規表現を使えば、コンピュータ側が電話番号というものを理解し、大量の文章の中から電話番号だけを取得するといったことが可能になります。&lt;/p&gt;
&lt;p&gt;このように欲しい文字列のパターンを指定することで1つの文字列で複数の文字列を表すことができるのが正規表現です。&lt;/p&gt;
&lt;h3&gt;正規表現チェッカーはなぜ必要なのか？&lt;/h3&gt;
&lt;p&gt;上の例のように、正規表現は人間からするとややわかりづらいです。&lt;/p&gt;
&lt;p&gt;なのでその正規表現が意図したものになっているかチェックする必要がありますが、Pythonコード上のチェックでは手間がかかり、出力結果もわかりづらくなりがちです。&lt;/p&gt;
&lt;p&gt;しかし正規表現チェッカーではお手軽かつ視覚的にもわかりやすくチェック結果を出力してくれます！&lt;/p&gt;
&lt;p&gt;正規表現チェッカーを使えば、チェックしたい正規表現とマッチ対象の文字列を入力するだけでマッチ確認、置換結果確認、マッチした文字列のリスト出力などなど...さまざまな機能を提供してくれます！&lt;/p&gt;
&lt;p&gt;正規表現を扱う上でこんなに便利なものはないので、積極的に活用することをおすすめします！&lt;/p&gt;
&lt;h2&gt;結局どれを使えばいいの？&lt;/h2&gt;
&lt;p&gt;結論から言うと**&lt;a href=&quot;https://regex101.com&quot;&gt;regex101&lt;/a&gt;**が圧倒的におすすめです。&lt;/p&gt;
&lt;p&gt;理由はダントツで高機能だからです。&lt;br /&gt;
正規表現チェックや置換機能はもちろん、正規表現解説やステップ数（≒ 正規表現のパフォーマンス）の確認機能まで搭載されています。&lt;/p&gt;
&lt;p&gt;さらに、JavaScriptだけでなくPHPやPython、Javaなどさまざまな言語に対応しているので、正規表現に関しては**このツールを使っておけば間違いない！**と断言できます。&lt;/p&gt;
&lt;p&gt;ただ、あまりにも多機能だったり、使い方が一目ではわかりづらかったりと、初心者の方には合わない可能性もあります。&lt;/p&gt;
&lt;p&gt;そういった方はこの後紹介するその他の正規表現チェッカーも検討してみてください。&lt;/p&gt;
&lt;h2&gt;JavaScript用の正規表現チェッカーおすすめ4選&lt;/h2&gt;
&lt;p&gt;ここからは、regex101も含めたおすすめ正規表現チェッカーを4つ紹介します。&lt;/p&gt;
&lt;h3&gt;1 : &lt;a href=&quot;https://regex101.com&quot;&gt;regex101&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&amp;lt;figure&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://regex101.com&quot;&gt;&lt;img src=&quot;./images/01.jpg&quot; alt=&quot;regex101の画面キャプチャ&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://regex101.com/&quot;&gt;https://regex101.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;p&gt;自分が把握している正規表現チェッカーの中で最も高機能です。&lt;/p&gt;
&lt;p&gt;今回紹介する中では唯一正規表現のデバッグ機能がついています。&lt;br /&gt;
デバッグ機能では正規表現がマッチするまでにかかったステップ数、つまり&lt;strong&gt;正規表現のパフォーマンスを計測することができます&lt;/strong&gt;。&lt;br /&gt;
普段あまり気にすることはないかもしれませんが、上級者の方にはこれほど便利な機能はないと思います。&lt;/p&gt;
&lt;p&gt;またJavaScript以外の言語にも対応しており、迷ったらこちらを選んでおけば問題ないでしょう。&lt;/p&gt;
&lt;h3&gt;2 : &lt;a href=&quot;https://regexr.com/&quot;&gt;RegExr&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&amp;lt;figure&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://regexr.com/&quot;&gt;&lt;img src=&quot;./images/02.jpg&quot; alt=&quot;RegExrの画面キャプチャ&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://regexr.com/&quot;&gt;https://regexr.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;p&gt;機能的には&lt;a href=&quot;#3-1&quot;&gt;regex101&lt;/a&gt;にやや劣りますが、デザインが洗練されており、使用方法も視覚的にわかりやすいです。&lt;/p&gt;
&lt;p&gt;デバッグ機能なんて使わないし、&lt;a href=&quot;#3-1&quot;&gt;regex101&lt;/a&gt;は見た目がちょっと無骨すぎるな...という方にはこちらをおすすめします。&lt;/p&gt;
&lt;h3&gt;3 : &lt;a href=&quot;https://regexper.com/&quot;&gt;REGEXPER&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&amp;lt;figure&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://regexper.com/&quot;&gt;&lt;img src=&quot;./images/03.jpg&quot; alt=&quot;REGEXPERの画面キャプチャ&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://regexper.com/&quot;&gt;https://regexper.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;p&gt;こちらは上2つとは違い機能は1つだけで、入力した正規表現の視覚化機能のみです。&lt;br /&gt;
しかしその視覚化機能が優秀で、入力した正規表現がどういった値を対象にするのかが大変わかりやすいです。&lt;/p&gt;
&lt;p&gt;そのため「この正規表現どういう意味？」というときや、自分が作成した正規表現が意図したものになっているかの確認にはベストだと思います。&lt;/p&gt;
&lt;h3&gt;4 : &lt;a href=&quot;https://www.softel.co.jp/labs/tools/regex/&quot;&gt;正規表現チェッカー JavaScript版&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&amp;lt;figure&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.softel.co.jp/labs/tools/regex/&quot;&gt;&lt;img src=&quot;./images/04.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.softel.co.jp/labs/tools/regex/&quot;&gt;https://www.softel.co.jp/labs/tools/regex/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;p&gt;こちらがおすすめの理由はなんといってもそのシンプルさです。&lt;br /&gt;
細かい機能はいらないからとにかく置換結果だけ見せて欲しい！という方におすすめです。&lt;/p&gt;
&lt;p&gt;また、今回紹介した正規表現チェッカーの中では唯一日本語に対応しているので馴染みやすさも十分だと思います。&lt;/p&gt;
&lt;h3&gt;各チェッカーの機能早見表&lt;/h3&gt;
&lt;p&gt;ここまで紹介してきた正規表現チェッカー4つの機能を表にまとめました。&lt;/p&gt;
&lt;p&gt;それぞれの項目の説明は以下の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;マッチ&lt;/strong&gt; ... 正規表現が対象の文字列にマッチするか確認できる機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;置換&lt;/strong&gt; ... マッチした文字列を置換する機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;リスト&lt;/strong&gt; ... マッチした文字列をリストとしてまとめて確認できる機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;デバッグ&lt;/strong&gt; ... 正規表現がマッチするまでの処理手順や試行回数を確認できる機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;コードジェネレーター&lt;/strong&gt; ... 入力した正規表現と対象文字列を元にコードを生成する機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;視覚化&lt;/strong&gt; ... 正規表現を視覚的に表示する機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;日本語対応&lt;/strong&gt; ... 日本語に対応しているか&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;マッチ&lt;/th&gt;
&lt;th&gt;置換&lt;/th&gt;
&lt;th&gt;リスト&lt;/th&gt;
&lt;th&gt;デバッグ&lt;/th&gt;
&lt;th&gt;コード   ジェネレーター&lt;/th&gt;
&lt;th&gt;視覚化&lt;/th&gt;
&lt;th&gt;日本語対応&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;#3-1&quot;&gt;regex101&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;#3-2&quot;&gt;RegExr&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;#3-3&quot;&gt;Regexper&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;◎&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;#3-4&quot;&gt;正規表現チェッカー   JavaScript版&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;各チェッカーの使い方&lt;/h2&gt;
&lt;h3&gt;1 : &lt;a href=&quot;#3-1&quot;&gt;regex101&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;最もおすすめのregex101から説明していきます。&lt;br /&gt;
ここでは4つの機能の使い方を説明します！&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;基本の使い方（正規表現マッチ）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;置換機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;リスト出力機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;デバッグ機能&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;1 : 基本の使い方（正規表現マッチ）&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./images/05.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;① 『FLAVOR』欄で『ECMAScript(JavaScript)』を選択&lt;/p&gt;
&lt;p&gt;② 『REGULAR EXPRESSION』欄に正規表現を入力&lt;/p&gt;
&lt;p&gt;③ 『TEST STRING』欄にチェック対象の文字列を入力&lt;/p&gt;
&lt;p&gt;そうすると、『TEST STRING』に入力した文字列のうち、正規表現にマッチしたものだけマーキングされます。&lt;br /&gt;
ちなみに&lt;code&gt;( )&lt;/code&gt;でグループ指定などしているとマーキング色を分けてくれるので視覚的にもどの正規表現がどことマッチしているかがわかりやすいです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/06.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;『REGULAR EXPRESSION』欄に正規表現を入力すると、自動的に『EXPLANATION』欄で正規表現の解説をしてくれます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/07.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;また、『MATCH INFORMATION』欄では正規表現にマッチした文字列（とグループ化していればその文字列）をリスト表示してくれます。&lt;/p&gt;
&lt;h4&gt;2 : 置換機能&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./images/08.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;① 画面左『FUNCTION』で『Substitution』を選択&lt;/p&gt;
&lt;p&gt;② 画面中央の『SUBSTITUTION』欄に置換文字列を入力&lt;/p&gt;
&lt;p&gt;すると下に置換結果を出力してくれます！&lt;/p&gt;
&lt;h4&gt;3 : リスト出力機能&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./images/09.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;① 画面左『FUNCTION』で『List』を選択&lt;/p&gt;
&lt;p&gt;② 画面中央の『List』欄にリスト出力形式を入力&lt;/p&gt;
&lt;p&gt;これでマッチした文字列をリスト化して出力してくれます。&lt;/p&gt;
&lt;p&gt;マッチした文字列を出力してほしい場合は&lt;code&gt;$&amp;amp;&lt;/code&gt;と入力してください！&lt;/p&gt;
&lt;h4&gt;4 : デバッグ機能&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./images/10.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;① 画面左『FLAVOR』で『PCRE2 (PHP &amp;gt;=7.3)』もしくは『PCRE (PHP &amp;lt;7.3)』を選択&lt;br /&gt;
※ 2024年4月現在PCRE以外にはデバッグ機能は対応していません！&lt;/p&gt;
&lt;p&gt;② 画面中央の『Tool』欄で『Regex Debugger』をクリック&lt;/p&gt;
&lt;p&gt;すると以下のような画面が出てきます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/11.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;① 左側の『MATCH』でチェックしたいマッチを選択&lt;/p&gt;
&lt;p&gt;② 右側の『MATCH STEPS』で合計ステップ数やステップごとの処理内容を確認&lt;/p&gt;
&lt;p&gt;ややわかりづらいですが、上記の例だと**「1つ目のマッチに合計5ステップかかった」**ということがわかります。&lt;br /&gt;
このステップ数が異常に多い場合は正規表現の見直しをした方が良いですね。&lt;/p&gt;
&lt;p&gt;また『MATCH STEPS』の再生ボタンや、矢印ボタンを押すことで各ステップで対象文字列のどこをチェックしているのかが視覚的にわかり便利です。&lt;/p&gt;
&lt;h3&gt;2 : &lt;a href=&quot;#3-2&quot;&gt;RegExr&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ここでは3つの機能の使い方を説明します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;正規表現マッチ&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;置換機能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;リスト出力機能&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;1 : 正規表現マッチ&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./images/12.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;① 右上の言語選択で『JavaScript』を選択&lt;/p&gt;
&lt;p&gt;②『Expression』欄に正規表現を入力&lt;/p&gt;
&lt;p&gt;③ 『Text』欄にチェック対象の文字列を入力&lt;/p&gt;
&lt;p&gt;そうすると、『Text』に入力した文字列のうち、正規表現にマッチしたものだけ青くマーキングされて表示されます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/13.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;また、画面下の『Tool』欄ではいくつかモードが選べるのですが、デフォルトでは『Explain』になっており、入力した正規表現の解説をしてくれます。&lt;/p&gt;
&lt;h4&gt;2 : 置換機能&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./images/14.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;『Tool』のモードを『Replace』にすると置換結果を確認することができます。&lt;br /&gt;
置換文字を赤枠のエリアに入力すると下に置換結果が表示されます。&lt;/p&gt;
&lt;h4&gt;3 : リスト出力機能&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./images/15.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;『Tool』のモードを『List』にするとマッチ結果の一覧を表示してくれます。&lt;br /&gt;
また、赤枠の部分で出力形式を変更することも可能です。&lt;/p&gt;
&lt;p&gt;マッチした文字列を出力してほしい場合は&lt;code&gt;$&amp;amp;&lt;/code&gt;と入力してください！&lt;/p&gt;
&lt;h3&gt;3 : &lt;a href=&quot;#3-3&quot;&gt;Regexper&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;./images/16.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;テキストエリアに正規表現を入力して『Display』を押すだけです！&lt;/p&gt;
&lt;p&gt;すると以下のように入力した正規表現を視覚的にわかりやすくくれます！&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/17.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;矢印などが何を意味しているのかわからない場合は&lt;a href=&quot;https://regexper.com/documentation.html&quot;&gt;Documentation&lt;/a&gt;のページを見ると詳しい説明を見ることができます。&lt;/p&gt;
&lt;h3&gt;4 : &lt;a href=&quot;#3-4&quot;&gt;正規表現チェッカー JavaScript版&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;./images/18.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;① チェックしたい正規表現を入力しましょう！&lt;/p&gt;
&lt;p&gt;② 次にチェック対象の文字列を入力します！&lt;/p&gt;
&lt;p&gt;③ 『正規表現をチェックする』をクリック！&lt;/p&gt;
&lt;p&gt;ちなみにそれぞれのオプションの意味は以下のとおりです。&lt;br /&gt;
（『ヘルプ』ボタンを押すことでも確認できます。）&lt;/p&gt;
&lt;p&gt;&lt;code&gt;g&lt;/code&gt; ... 全行チェックするか（チェックなしだと1行目のみチェック対象となります。）&lt;/p&gt;
&lt;p&gt;&lt;code&gt;i&lt;/code&gt; ... 大文字、小文字の区別を無視するか&lt;/p&gt;
&lt;p&gt;&lt;code&gt;m&lt;/code&gt; ... 複数行に渡ってマッチさせるか&lt;/p&gt;
&lt;p&gt;するとこのようにマッチの結果を表示してくれます！&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./images/04.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ここまでで紹介した正規表現チェッカーからお気に入りを見つければ、今後は正規表現チェックに手間取ることもなくなり、業務効率UP間違いなしです。&lt;/p&gt;
&lt;p&gt;最後にもう一度おすすめの正規表現チェッカーをまとめておきます。&lt;/p&gt;
&lt;p&gt;おすすめのJavsScript用正規表現チェッカー4つ&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;regex101&lt;/strong&gt;&lt;br /&gt;
→ 迷ったらこれ！トップレベルで多機能。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;RegExr&lt;/strong&gt;&lt;br /&gt;
→ 洗練されたデザインかつ多機能を求める方におすすめ。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;REGEXPER&lt;/strong&gt;&lt;br /&gt;
→ 正規表現の視覚化に特化。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;正規表現置換チェッカー JavaScript版&lt;/strong&gt;&lt;br /&gt;
→ とにかくシンプルなものを求める方におすすめ。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;正規表現を1から勉強したい！という方はこちらの書籍がおすすめです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/dp/4873113598&quot;&gt;詳説 正規表現 第3版&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;なんとなく初心者にとっつきにくいイメージがあるオライリー本ですが、こちらは正規表現に馴染みのない方でも読みやすく、初心者にもおすすめです！&lt;/p&gt;
</content:encoded></item></channel></rss>