<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>絶対に必要なIT基礎知識 &#8211; エンジニア見習い</title>
	<atom:link href="https://otonan-syusyoku.work/archives/category/learning/basic/feed" rel="self" type="application/rss+xml" />
	<link>https://otonan-syusyoku.work</link>
	<description>三流プログラマー</description>
	<lastBuildDate>Tue, 15 Oct 2024 13:17:25 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://otonan-syusyoku.work/wp-content/uploads/2023/10/cropped-名称未設定のデザイン-16-32x32.png</url>
	<title>絶対に必要なIT基礎知識 &#8211; エンジニア見習い</title>
	<link>https://otonan-syusyoku.work</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>スループットとレイテンシーとIOPS</title>
		<link>https://otonan-syusyoku.work/archives/1949</link>
					<comments>https://otonan-syusyoku.work/archives/1949#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Tue, 15 Oct 2024 13:17:25 +0000</pubDate>
				<category><![CDATA[絶対に必要なIT基礎知識]]></category>
		<category><![CDATA[インフラ]]></category>
		<category><![CDATA[ソフトウェア]]></category>
		<category><![CDATA[ネットワーク]]></category>
		<category><![CDATA[三流プログラマー]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1949</guid>

					<description><![CDATA[部屋とYシャツと私のような記事タイトルですみません。。。 今回は、ネットワークの基礎となる スループット レイテンシー IOPS を紹介したいと思います。 &#160; インフラ構築をしているとよく出てくるキーワードです [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><strong>部屋とYシャツと私</strong>のような記事タイトルですみません。。。</p>
<p>今回は、ネットワークの基礎となる</p>
<ul>
<li>スループット</li>
<li>レイテンシー</li>
<li>IOPS</li>
</ul>
<p>を紹介したいと思います。</p>
<p>&nbsp;</p>
<p>インフラ構築をしているとよく出てくるキーワードですが、度々こんがらがってしまうため改めて学び直します。</p>
<p>&nbsp;</p>
<div id="rtoc-mokuji-wrapper" class="rtoc-mokuji-content frame4 preset3 animation-fade rtoc_open noto-sans" data-id="1949" data-theme="BlogArise">
			<div id="rtoc-mokuji-title" class=" rtoc_center">
			<button class="rtoc_open_close rtoc_open"></button>
			<span>Contents</span>
			</div><ol class="rtoc-mokuji decimal_ol level-1"><li class="rtoc-item"><a href="#rtoc-1">お前ら何やねん</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-2">スループットとは</a></li><li class="rtoc-item"><a href="#rtoc-3">レイテンシーとは</a></li><li class="rtoc-item"><a href="#rtoc-4">IOPSとは</a></li></ul></li><li class="rtoc-item"><a href="#rtoc-5">3つの違いのまとめ</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-6"><strong>レイテンシー</strong></a></li><li class="rtoc-item"><a href="#rtoc-7"><strong>スループット</strong></a></li><li class="rtoc-item"><a href="#rtoc-8"><strong>IOPS </strong></a></li></ul></li></ol></div><h2 id="rtoc-1" >お前ら何やねん</h2>
<h3 id="rtoc-2" >スループットとは</h3>
<p><span class="sc_marker blue"><strong>特定の時間にネットワークを実際に通過できるデータの平均量を指します。</strong></span></p>
<p>つまり通信速度です。</p>
<pre class="line-numbers"><code class="language-other">5Gbps=5×1,000,000,000ビット/秒=5,000,000,000ビット/秒</code></pre>
<p>1秒間に10億ビット通過できるんだ-と思いますが、ネットワーク内には様々なリソースがあるので、提供されるスペック通りの値が通過できるとは限りません。あくまで平均ね。</p>
<h3 id="rtoc-3" >レイテンシーとは</h3>
<p><span class="sc_marker blue"><strong>リクエストを送信してから応答が返ってくるまでの遅延時間</strong></span>を指します。</p>
<p>ちょうわかりやすく言うと、「データの処理や通信がどれだけ迅速に行われるか」の指標のことです。</p>
<h3 id="rtoc-4" >IOPSとは</h3>
<p><span class="sc_marker blue"><strong>ストレージやデータベースが1秒間に処理できる入出力操作の回数</strong></span>を指します。</p>
<p>IOPSはスループットとある程度、比例関係にあります。</p>
<ul>
<li><strong>小さいブロックサイズ</strong>の場合、1回のIO操作で処理されるデータ量が少ないため、<strong>操作回数が多くなり、IOPSが増加する</strong></li>
<li><strong>大きなブロックサイズ</strong>の場合、1回のIO操作で大量のデータを処理するため、<strong>IO操作回数が少なくなり、IOPSは減少</strong>しますが、スループットは向上する</li>
</ul>
<h2 id="rtoc-5" >3つの違いのまとめ</h2>
<h3 id="rtoc-6" ><strong>レイテンシー</strong></h3>
<ul>
<li><strong>嬉しい状態</strong>:<span class="sc_marker blue"><strong>低いほうが嬉しい</strong></span></li>
<li><strong>理由</strong>:<br />
レイテンシーが低い（つまり遅延時間が短い）ほど、システムがより速く応答し、ユーザーが操作を行った際の待ち時間が少なくなります。<br />
たとえば、Webページが速く表示されたり、データベースのクエリが迅速に実行されたりすることで、ユーザー体験が向上します。</li>
<li>例: ネットワークレイテンシーが低いと、Webサイトの応答が速くなります。</li>
</ul>
<h3 id="rtoc-7" ><strong>スループット</strong></h3>
<ul>
<li><strong>嬉しい状態</strong>: <span class="sc_marker blue"><strong>高いほうが嬉しい</strong></span></li>
<li><strong>理由</strong>:<br />
スループットが高いほど、システムが短時間で多くのデータやリクエストを処理できることを意味します。<br />
特に、大量のデータを処理する場合や多くのユーザーが同時にアクセスするシステムにおいて、高いスループットはシステムの効率や全体のパフォーマンスを向上させます。</li>
<li>例: スループットが高いネットワークでは、1秒間に多くのデータを送受信でき、ダウンロードやストリーミングがスムーズに行えます。</li>
</ul>
<h3 id="rtoc-8" ><strong>IOPS </strong></h3>
<ul>
<li><strong>嬉しい状態</strong>: <span class="sc_marker blue"><strong>高いほうが嬉しい</strong></span></li>
<li><strong>理由</strong>:<br />
IOPSが高いほど、ストレージデバイスが1秒間に処理できる入出力操作の回数が多くなります。<br />
これは、特にデータベースやファイルシステムなど、頻繁にデータの読み書きが発生するシステムにとって重要です。<br />
高いIOPSは、より多くの入出力操作を短時間で処理できるため、パフォーマンスが向上します。</li>
<li>例: IOPSが高いSSDは、ディスクアクセスが多いアプリケーション（例えばデータベースクエリやログ書き込み）の性能を大幅に改善します。</li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1949/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【HTTPとHTTPS】Webの基盤となるプロトコルをちゃんと理解しましょう</title>
		<link>https://otonan-syusyoku.work/archives/1670</link>
					<comments>https://otonan-syusyoku.work/archives/1670#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Fri, 12 Apr 2024 15:01:48 +0000</pubDate>
				<category><![CDATA[生涯独学]]></category>
		<category><![CDATA[絶対に必要なIT基礎知識]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[ソフトウェア]]></category>
		<category><![CDATA[ネットワーク]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1670</guid>

					<description><![CDATA[こんにちは。三流プログラマーとして都内で勤務しているやんやんです。 先日インターン生からこんな質問を受けました。 インターン生 HTTPってなんですか？ 私自身、しっかりと理解できていないためか上手な説明ができなかったの [&#8230;]]]></description>
										<content:encoded><![CDATA[<div class="flex flex-grow flex-col max-w-full">
<div data-message-author-role="assistant" data-message-id="b5a51399-596c-435a-b3f3-3096850b8a5b" class="text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&amp;]:mt-5 overflow-x-auto">
<div class="markdown prose w-full break-words dark:prose-invert dark">
<p>こんにちは。三流プログラマーとして都内で勤務しているやんやんです。</p>
<p>先日インターン生からこんな質問を受けました。</p>
<div class="voice left">
<div class="icon">
<p><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2021/04/名称未設定のデザイン-4-1.png" /></p>
<div class="name">インターン生</div>
</div>
<div class="text sc-inner-content sc_balloon left blue">
<p>HTTPってなんですか？</p>
</div>
</div>
</div>
<p>私自身、しっかりと理解できていないためか上手な説明ができなかったので改めて勉強しようと思った今日この頃です。</p>
</div>
<p>&nbsp;</p>
<p>この記事では、これらのプロトコルの基本、特にメソッド、ステータスコード、ヘッダー、クッキーという要素に焦点を当て、それらがどのようにWebの基盤となっているかを掘り下げます。</p>
<p>さらに、HTTPSがHTTPにセキュリティ層を追加する方法と、その重要性についても触れていこうと思いまっす</p>
<div data-message-author-role="assistant" data-message-id="b5a51399-596c-435a-b3f3-3096850b8a5b" class="text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&amp;]:mt-5 overflow-x-auto">
<div class="markdown prose w-full break-words dark:prose-invert dark">
<div id="rtoc-mokuji-wrapper" class="rtoc-mokuji-content frame4 preset3 animation-fade rtoc_open noto-sans" data-id="1670" data-theme="BlogArise">
			<div id="rtoc-mokuji-title" class=" rtoc_center">
			<button class="rtoc_open_close rtoc_open"></button>
			<span>Contents</span>
			</div><ol class="rtoc-mokuji decimal_ol level-1"><li class="rtoc-item"><a href="#rtoc-1">HTTPとは</a></li><li class="rtoc-item"><a href="#rtoc-2">HTTPSとその重要性</a></li><li class="rtoc-item"><a href="#rtoc-3">HTTPメソッド</a></li><li class="rtoc-item"><a href="#rtoc-4">ステータスコード</a></li><li class="rtoc-item"><a href="#rtoc-5">ヘッダーとクッキー</a></li><li class="rtoc-item"><a href="#rtoc-6">まとめ</a></li></ol></div><h2 id="rtoc-1" >HTTPとは</h2>
<p><img fetchpriority="high" decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2024/02/DMARCを設定しなくちゃ-1.png" alt="What&#96;s up" width="1000" height="500" class="aligncenter size-full wp-image-1665" srcset="https://otonan-syusyoku.work/wp-content/uploads/2024/02/DMARCを設定しなくちゃ-1.png 1000w, https://otonan-syusyoku.work/wp-content/uploads/2024/02/DMARCを設定しなくちゃ-1-300x150.png 300w, https://otonan-syusyoku.work/wp-content/uploads/2024/02/DMARCを設定しなくちゃ-1-768x384.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<p>HTTPは、WebブラウザとWebサーバー間の通信を可能にするプロトコルです。</p>
<p>太古の昔(1990年代)にWebの成長とともに進化してきました。</p>
<p>HTTPはステートレスなプロトコルであり、つまり、過去のリクエストやレスポンスの状態を保持しないという特徴があります。これにより、プロトコルのシンプルさと拡張性が保たれています。</p>
<div class="sc_toggle_box">
<div class="sc_toggle_title active">あわせて読みたい関連記事</div>
<div class="sc_toggle_content">
<p>[getpost id=&#8221;1569&#8243; target=&#8221;_blank&#8221; cat_name=&#8221;1&#8243; date=&#8221;0&#8243;]</p>
</div>
</div>
<h2 id="rtoc-2" >HTTPSとその重要性</h2>
<p><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2024/02/Lets-GO.png" alt="Let&#96;s GO" width="1000" height="500" class="aligncenter size-full wp-image-1680" srcset="https://otonan-syusyoku.work/wp-content/uploads/2024/02/Lets-GO.png 1000w, https://otonan-syusyoku.work/wp-content/uploads/2024/02/Lets-GO-300x150.png 300w, https://otonan-syusyoku.work/wp-content/uploads/2024/02/Lets-GO-768x384.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<p>HTTPSは、HTTPにセキュリティ層を加えたものです。</p>
<p>具体的には、SSL（Secure Sockets Layer）またはTLS（Transport Layer Security）を使用して、クライアントとサーバー間の通信を暗号化します。</p>
<p>この暗号化により、データの盗聴や改ざん、なりすましを防ぐことが可能になります。特に、Eコマースやオンラインバンキングなど、機密性が求められる情報を扱うWebサイトではHTTPSが必須となっています。</p>
<p>SSLを知らないとWEB業界では大恥をかくので、皆さんご注意を。</p>
<div class="sc_toggle_box">
<div class="sc_toggle_title active">あわせて読みたい関連記事</div>
<div class="sc_toggle_content">
<p>[getpost id=&#8221;1170&#8243; cat_name=&#8221;1&#8243; date=&#8221;0&#8243;]</p>
<p>&nbsp;</p>
</div>
</div>
<h2 id="rtoc-3" >HTTPメソッド</h2>
<p>HTTPメソッドは、クライアントがサーバーに対して何をしたいのかを指示するための手段です。<br />
最も一般的なメソッドは以下の通りです。</p>
<ul>
<li><strong>GET<br />
</strong>リソースを取得するために使用します。</li>
<li><strong>POST<br />
</strong> リソースを作成するために使用します。</li>
<li><strong>PUT<br />
</strong>リソースを更新するために使用します。</li>
<li><strong>DELETE<br />
</strong>リソースを削除するために使用します。</li>
</ul>
<p>これらのメソッドは、RESTful APIの設計において重要な役割を果たします。</p>
<h2 id="rtoc-4" >ステータスコード</h2>
<p>HTTPステータスコードは、サーバーがクライアントのリクエストをどのように処理したかを示します。以下は、よく使われるステータスコードの例です。</p>
<ul>
<li><strong>200 OK</strong>: リクエストが成功したことを示します。</li>
<li><strong>404 Not Found</strong>: リクエストされたリソースが見つからなかったことを示します。</li>
<li><strong>500 Internal Server Error</strong>: サーバー側で問題が発生したことを示します。</li>
</ul>
<p>これらのコードは、デバッグやエラー処理において極めて有用です。</p>
<h2 id="rtoc-5" >ヘッダーとクッキー</h2>
<p>HTTPヘッダーは、リクエストやレスポンスのメタデータを提供します。例えば、<code>Content-Type</code>ヘッダーはリソースのタイプを示し、<code>Set-Cookie</code>ヘッダーはクライアントにクッキーを設定するよう指示します。</p>
<p>クッキーは、サーバーがクライアントのブラウザにデータを保存するために使用される小さなデータ片です。これにより、セッション管理、パーソナライゼーション、トラッキングなどが可能になります。</p>
<h2 id="rtoc-6" >まとめ</h2>
<p>HTTPとHTTPSは、Web上での情報交換の基盤を成すプロトコルです。HTTPSによる暗号化は、オンラインでの安全性を大幅に向上させています。HTTPメソッド、ステータスコード、ヘッダー、クッキーといった要素の理解は、Web技術において深い知識を持つために不可欠です。これらの基本を押さえることで、よりセキュアで効率的なWebアプリケーションの開発が可能となります。</p>
</div>
</div>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1670/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>RESTful APIとSPAの関係についてReactとPHPで解説します</title>
		<link>https://otonan-syusyoku.work/archives/1674</link>
					<comments>https://otonan-syusyoku.work/archives/1674#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Sun, 25 Feb 2024 12:40:20 +0000</pubDate>
				<category><![CDATA[好きではないJS]]></category>
		<category><![CDATA[絶対に必要なIT基礎知識]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[Laravel]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[React]]></category>
		<category><![CDATA[Vue]]></category>
		<category><![CDATA[セキュリティ]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1674</guid>

					<description><![CDATA[Contents RESTful APIとは？SPA（シングルページアプリケーション）とは？RESTful APIとSPAの関係性PHPとReactを使った例PHPによるRESTful APIReactによるSPAセキュ [&#8230;]]]></description>
										<content:encoded><![CDATA[<div id="rtoc-mokuji-wrapper" class="rtoc-mokuji-content frame4 preset3 animation-fade rtoc_open noto-sans" data-id="1674" data-theme="BlogArise">
			<div id="rtoc-mokuji-title" class=" rtoc_center">
			<button class="rtoc_open_close rtoc_open"></button>
			<span>Contents</span>
			</div><ol class="rtoc-mokuji decimal_ol level-1"><li class="rtoc-item"><a href="#rtoc-1">RESTful APIとは？</a></li><li class="rtoc-item"><a href="#rtoc-2">SPA（シングルページアプリケーション）とは？</a></li><li class="rtoc-item"><a href="#rtoc-3">RESTful APIとSPAの関係性</a></li><li class="rtoc-item"><a href="#rtoc-4">PHPとReactを使った例</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-5">PHPによるRESTful API</a></li><li class="rtoc-item"><a href="#rtoc-6">ReactによるSPA</a></li></ul></li><li class="rtoc-item"><a href="#rtoc-7">セキュリティとパフォーマンスの考慮</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-8">セキュリティ</a></li><li class="rtoc-item"><a href="#rtoc-9">パフォーマンス</a></li></ul></li></ol></div><h2 id="rtoc-1" >RESTful APIとは？</h2>
<p><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2024/02/DMARCを設定しなくちゃ-1.png" alt="What&#96;s up" width="1000" height="500" class="aligncenter size-full wp-image-1665" srcset="https://otonan-syusyoku.work/wp-content/uploads/2024/02/DMARCを設定しなくちゃ-1.png 1000w, https://otonan-syusyoku.work/wp-content/uploads/2024/02/DMARCを設定しなくちゃ-1-300x150.png 300w, https://otonan-syusyoku.work/wp-content/uploads/2024/02/DMARCを設定しなくちゃ-1-768x384.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<p>RESTful APIは、ウェブアプリケーションやウェブサービスで使われるプログラミングインターフェースです。<br />
REST（Representational State Transfer）の原則に基づいて設計されており、ウェブ上のリソースへのアクセスや操作を統一的な方法で提供します。<br />
リソースはURLで識別され、HTTPメソッド（GET、POST、PUT、DELETEなど）を使ってアクセスされます。</p>
<p>[getpost id=&#8221;1672&#8243; cat_name=&#8221;1&#8243; date=&#8221;0&#8243;]</p>
<h2 id="rtoc-2" >SPA（シングルページアプリケーション）とは？</h2>
<p>SPAは、ユーザーがアプリケーションを操作する際にページの再読み込みをせずに、必要なデータのみをサーバーから非同期に取得し、動的にページの内容を更新するウェブアプリケーションの形式です。</p>
<p>これにより、<span class="sc_marker blue"><strong>従来のマルチページアプリケーションに比べてユーザーエクスペリエンスが向上します。</strong></span></p>
<p>僕が所属しているチームでも<strong>ページのリロードが嫌だというユーザーの使用感からSPAへの移行が少しづつ始まってきています</strong>。<br />
世間的にもSPAは流行っていますよね。（流行っているから偉いというわけではない。知ることが大事</p>
<h2 id="rtoc-3" >RESTful APIとSPAの関係性</h2>
<p><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2024/02/Lets-GO.png" alt="Let&#96;s GO" width="1000" height="500" class="aligncenter size-full wp-image-1680" srcset="https://otonan-syusyoku.work/wp-content/uploads/2024/02/Lets-GO.png 1000w, https://otonan-syusyoku.work/wp-content/uploads/2024/02/Lets-GO-300x150.png 300w, https://otonan-syusyoku.work/wp-content/uploads/2024/02/Lets-GO-768x384.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<p>SPAでは、<strong>ページの初回読み込み時にアプリケーションの全てのコード（HTML、CSS、JavaScript）がロード</strong>されます。</p>
<p>その後の<span class="sc_marker blue"><strong>ユーザーの操作によってデータが必要になる場合、SPAはRESTful APIを通じてサーバーからデータを非同期に取得</strong></span>します。<br />
<strong>このデータはJSONやXML形式で返され、JavaScriptを用いてクライアントサイドで処理され、ページの一部分だけが動的に更新</strong>されます。</p>
<p>このアーキテクチャにより、SPAはユーザーにスムーズで反応の良いインターフェイスを提供できます。</p>
<p><span class="sc_marker blue"><strong>RESTful APIはこのプロセスの背後にあるデータ通信の基盤となります。</strong></span></p>
<h2 id="rtoc-4" >PHPとReactを使った例</h2>
<p>ここでは、PHPで書かれた簡単なRESTful APIと、Reactを使ったSPAの例を示します。</p>
<h3 id="rtoc-5" >PHPによるRESTful API</h3>
<p>PHPで簡単なAPIエンドポイントを作成します。この例では、GETリクエストを受け取り、簡単なJSONデータを返します。</p>
<div class="dark bg-gray-950 rounded-md">
<div>
<pre class="line-numbers"><code class="language-php">&lt;?php 
    header('Content-Type: application/json');
    $response = ['message' =&gt; 'Hello, world!'];
    echo json_encode($response); 

<code>    // Response
    //{"message": "Hello, world!"}</code> ?&gt;</code></pre>
</div>
</div>
<p>このPHPスクリプトは、サーバーに配置してのようにアクセスすると<span style="background-color: #ffffff; color: #333333; font-family: 游ゴシック, YuGothic, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Verdana, メイリオ, Meiryo, Osaka, 'ＭＳ Ｐゴシック', 'MS PGothic', sans-serif;">JSONが返されます。</span></p>
<h3 id="rtoc-6" >ReactによるSPA</h3>
<p>Reactで簡単なSPAを作成し、上記のAPIからデータを取得して表示します。</p>
<div class="dark bg-gray-950 rounded-md">
<div class="p-4 overflow-y-auto">
<pre class="line-numbers"><code class="language-js">import React, { useState, useEffect } from 'react';
import axios from 'axios';

function App() {
  const [message, setMessage] = useState('');

  useEffect(() =&gt; {
    axios.get('http://yourserver.com/index.php')
      .then(response =&gt; {
        setMessage(response.data.message);
      })
      .catch(error =&gt; console.error('There was an error!', error));
  }, []);

  return (
    &lt;div&gt;
      &lt;button&gt;{message}&lt;/button&gt;
    &lt;/div&gt;
  );
}

export default App;
</code></pre>
<p>このコードは、コンポーネントがマウントされた後にAPIからデータを取得し、取得したメッセージを表示します。<br />
React（クライアントサイド）とPHP（サーバーサイド）を使った、RESTful APIとSPAの基本的な連携を示しています。</p>
</div>
<p>今回のコードでは、データを取得して表示するだけのコードになっていますが、Event処理などによりリロードされることなく動的にページの内容を変更させることが可能です。</p>
<h2 id="rtoc-7" >セキュリティとパフォーマンスの考慮</h2>
</div>
<p>SPA（シングルページアプリケーション）とRESTful APIを使用する際には、セキュリティとパフォーマンスの両方に配慮することが重要です。<br />
以下では、これらの観点から基本的なガイドラインをいくつか紹介します。</p>
<h3 id="rtoc-8" >セキュリティ</h3>
<ol>
<li><strong>HTTPSを使用する<br />
</strong>データの暗号化を確実に行うため、APIとの通信には常にHTTPSを使用します。（当たり前です）<br />
これにより、中間者攻撃（MITM）のリスクを減らすことができます。</li>
<li><strong>CORSポリシーを適切に設定する<br />
</strong>クロスオリジンリソースシェアリング（CORS）ポリシーを適切に設定し、信頼できるオリジンからのリクエストのみを許可します。<br />
不適切なCORS設定は、セキュリティリスクを招く可能性があります。</li>
<li><strong>認証と認可<br />
</strong>JWT（JSON Web Tokens）やOAuthなどの堅牢な認証メカニズムを使用して、APIへのアクセスをセキュアに管理します。<br />
また、ユーザーの権限に基づいてアクセスを制御する認可も重要です。</li>
<li><strong>入力の検証とサニタイズ<br />
</strong> SQLインジェクションやクロスサイトスクリプティング（XSS）攻撃を防ぐため、サーバー側とクライアント側の両方で入力値の検証とサニタイズを行います。</li>
<li><strong>依存関係のセキュリティ<br />
</strong>使用するライブラリやフレームワークのセキュリティ脆弱性に注意し、定期的に更新を行い脆弱性を修正します。</li>
</ol>
<p>この辺の対策については過去に記事にしていますので時間ある人は読んでみてくださーい</p>
<p>[getpost id=&#8221;1618&#8243; cat_name=&#8221;1&#8243; date=&#8221;0&#8243;][getpost id=&#8221;1256&#8243; cat_name=&#8221;1&#8243; date=&#8221;0&#8243;]</p>
<h3 id="rtoc-9" >パフォーマンス</h3>
<ol>
<li><strong>コードの分割<br />
</strong>ユーザーが必要とするコードのみをダウンロードするように、コード分割（Code Splitting）を実装します。<br />
これにより、初期ロード時間を短縮できます。</li>
<li><strong>キャッシュ戦略の利用<br />
</strong>静的リソースやAPIレスポンスのキャッシュを適切に利用することで、パフォーマンスを向上させることができます。<br />
ブラウザのキャッシュやCDNの利用が有効です。</li>
<li><strong>遅延ローディング（Lazy Loading）<br />
</strong> 画像やコンポーネントなど、必要になるまでロードしないようにします。<br />
これにより、初期ロードのパフォーマンスを向上させることができます。</li>
<li><strong>APIの最適化<br />
</strong>不必要なデータの送受信を避けるため、APIのレスポンスをできるだけ小さく保ちます。<br />
また、必要なデータのみを取得するためのフィルタリングやページネーションをAPI側でサポートします。</li>
<li><strong>フロントエンドのパフォーマンス最適化<br />
</strong>Reactなどのフロントエンドフレームワークを使用する場合は、不要な再レンダリングを避け、メモ化（memoization）や仮想DOMの効率的な利用などのテクニックを活用します。</li>
</ol>
<p>セキュリティとパフォーマンスは、アプリケーションの設計と開発の初期段階から考慮する必要があります。<br />
これらの基本的なガイドラインを実践することで、ユーザーに安全で快適な体験を提供することができます。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1674/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>RESTful APIって名前が理解を難しくしているだけなのでは？</title>
		<link>https://otonan-syusyoku.work/archives/1672</link>
					<comments>https://otonan-syusyoku.work/archives/1672#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Sun, 25 Feb 2024 12:12:23 +0000</pubDate>
				<category><![CDATA[絶対に必要なIT基礎知識]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1672</guid>

					<description><![CDATA[こんちわ！三流プログラマーとして都内で勤務しているやんやんです。 先日、機能開発のMTG中に先輩からこんな一言がでてきました。 偉大なる先輩 れすとえーぴーあいで作れば簡単やね なんじゃそりゃというのがまず最初に思ったこ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>こんちわ！三流プログラマーとして都内で勤務しているやんやんです。</p>
<p>先日、機能開発のMTG中に先輩からこんな一言がでてきました。</p>
<div class="voice left">
<div class="icon">
<p><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2020/10/名称未設定のデザイン-69.png" /></p>
<div class="name">偉大なる先輩</div>
</div>
<div class="text sc-inner-content sc_balloon left blue">
<p>れすとえーぴーあいで作れば簡単やね</p>
</div>
</div>
<p>なんじゃそりゃというのがまず最初に思ったことだったのですが、WEB系で働いている以上知っておかなければいけない技術とのことでしたので、勉強しました。</p>
<p>この記事ではRESTful APIについて解説していきまっす。</p>
<div id="rtoc-mokuji-wrapper" class="rtoc-mokuji-content frame4 preset3 animation-fade rtoc_open noto-sans" data-id="1672" data-theme="BlogArise">
			<div id="rtoc-mokuji-title" class=" rtoc_center">
			<button class="rtoc_open_close rtoc_open"></button>
			<span>Contents</span>
			</div><ol class="rtoc-mokuji decimal_ol level-1"><li class="rtoc-item"><a href="#rtoc-1">RESTful APIの主な特徴</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-2"><strong>ステートレス性</strong></a></li><li class="rtoc-item"><a href="#rtoc-3"><strong>クライアント &#8211; サーバー構造</strong></a></li><li class="rtoc-item"><a href="#rtoc-4"><strong>キャッシュ可能性</strong></a></li><li class="rtoc-item"><a href="#rtoc-6"><strong>レイヤードシステム</strong></a></li></ul></li><li class="rtoc-item"><a href="#rtoc-7">HTTPメソッドの使用</a></li><li class="rtoc-item"><a href="#rtoc-8">リソース指向</a></li><li class="rtoc-item"><a href="#rtoc-9">状態レスな通信</a></li><li class="rtoc-item"><a href="#rtoc-10">RESTful APIの利点</a></li><li class="rtoc-item"><a href="#rtoc-11">結論</a></li></ol></div><h2 id="rtoc-1" >RESTful APIの主な特徴</h2>
<h3 id="rtoc-2" ><strong>ステートレス性</strong></h3>
<p>サーバーはクライアントの状態を保存しません。<br />
各リクエストは、それ自体が完全であり、必要なすべての情報を含んでいる必要があります。</p>
<div class="voice left">
<div class="icon">
<p><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2023/10/名称未設定のデザイン-16.png" /></p>
<div class="name">やんやん</div>
</div>
<div class="text sc-inner-content sc_balloon left blue">
<p>サーバーが「今誰が何をした」っていう状態を覚えていないってこと。毎回、完全な情報を持ってリクエストを送る必要があるんだ。ちょっと面倒くさいけど、これがあるおかげでサーバーがスッキリして、処理が早くなる</p>
</div>
</div>
<h3 id="rtoc-3" ><strong>クライアント &#8211; サーバー構造</strong></h3>
<p>クライアントとサーバーは独立しており、お互いにその実装を知る必要がありません。</p>
<div class="voice left">
<div class="icon">
<p><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2023/10/名称未設定のデザイン-16.png" /></p>
<div class="name">やんやん</div>
</div>
<div class="text sc-inner-content sc_balloon left blue">
<p>「あなたはあなた、私は私」の関係。お互いがお互いのことを深く知る必要はなく、それぞれが独立しているんだ。<br />
これがあるおかげで、色んな種類のデバイスやアプリが、同じサーバーと上手くやりとりできるってわけ。</p>
</div>
</div>
<h3 id="rtoc-4" ><strong>キャッシュ可能性</strong></h3>
<p>レスポンスは、明示的にまたは暗黙的にキャッシュ可能であり、効率的なクライアント-サーバーの相互作用を促進します。</p>
<div class="voice left">
<div class="icon">
<p><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2023/10/名称未設定のデザイン-16.png" /></p>
<div class="name">やんやん</div>
</div>
<div class="text sc-inner-content sc_balloon left blue">
<p>サーバーからのレスポンスを一時的に保存しておくことができるってこと。<br />
何度も同じデータをリクエストしなくても済むから、通信量が減って、速度が上がるんだ。エコで速い、まさに一石二鳥！</p>
</div>
</div>
<h3 id="rtoc-5" ><strong>統一インターフェース<br />
</strong></h3>
<p>システム間の相互作用を簡素化するための一連の原則に従います。</p>
<div class="voice left">
<div class="icon">
<p><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2023/10/名称未設定のデザイン-16.png" /></p>
<div class="name">やんやん</div>
</div>
<div class="text sc-inner-content sc_balloon left blue">
<p>シンプルに言うと「みんな同じルールでやりとりしましょうね」ってこと</p>
</div>
</div>
<h3 id="rtoc-6" ><strong>レイヤードシステム</strong></h3>
<p>クライアントは、エンドポイントに直接接続しているか、中間サーバーを介して接続しているかを知ることなく、サーバーと通信できます。</p>
<div class="voice left">
<div class="icon">
<p><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2023/10/名称未設定のデザイン-16.png" /></p>
<div class="name">やんやん</div>
</div>
<div class="text sc-inner-content sc_balloon left blue">
<p>直接繋がってなくても、間接的にやりとりができるってシステムのこと。<br />
これがあると、セキュリティの強化や、負荷分散がしやすくなるんだ</p>
</div>
</div>
<h2 id="rtoc-7" >HTTPメソッドの使用</h2>
<p>RESTful APIでは、リソースの操作にHTTPメソッドが使用されます。主なメソッドは以下の通りです。</p>
<ul>
<li><strong>GET</strong>: リソースを取得します。</li>
<li><strong>POST</strong>: 新しいリソースを作成します。</li>
<li><strong>PUT</strong>: リソースを更新します。</li>
<li><strong>DELETE</strong>: リソースを削除します。</li>
</ul>
<h2 id="rtoc-8" >リソース指向</h2>
<p>RESTful APIでは、すべてはリソースとして表されます。リソースは一般的にはデータベースのレコードやオブジェクトの一つ一つを指し、URI（Uniform Resource Identifier）によって一意に識別されます。</p>
<p>例えば、<code>https://example.com/users/1</code> は、<span class="sc_marker blue"><strong>IDが1のユーザーを指すリソース</strong></span>です。</p>
<h2 id="rtoc-9" >状態レスな通信</h2>
<p>RESTful APIのステートレスな通信は、サーバーがクライアントの状態を保持しないことを意味します。</p>
<p>これにより、サーバーの設計が単純になり、スケーラビリティが向上します。各リクエストは、それ自体で完全でなければならず、認証情報やリクエストに必要なデータを含む必要があります。</p>
<h2 id="rtoc-10" >RESTful APIの利点</h2>
<ul>
<li><strong>スケーラビリティ<br />
</strong>ステートレスな通信とクライアント-サーバーの分離により、RESTful APIは大規模な分散システムに適しています。</li>
<li><strong>柔軟性<br />
</strong>異なるデータフォーマット（JSON、XMLなど）をサポートすることで、様々なクライアントのニーズに対応できます。</li>
<li><strong>簡易性<br />
</strong>HTTPプロトコルに基づくため、理解しやすく、実装が容易です。</li>
</ul>
<h2 id="rtoc-11" >結論</h2>
<p>RESTful APIは、ウェブ上でのデータ交換とサービスの統合を容易にする強力なツールです。</p>
<p>そのシンプルさ、スケーラビリティ、そして柔軟性により、現代のウェブ開発における標準的なアプローチとなっています</p>
<p>適切に設計されたRESTful APIは、開発者が様々なプラットフォームやデバイス間で効率的に通信できるようにすることで、よりリッチでインタラクティブなウェブアプリケーションの構築を可能にします。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1672/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SPFとDKIMを正しく設定したい</title>
		<link>https://otonan-syusyoku.work/archives/1651</link>
					<comments>https://otonan-syusyoku.work/archives/1651#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Sat, 10 Feb 2024 09:00:07 +0000</pubDate>
				<category><![CDATA[絶対に必要なIT基礎知識]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[インフラ]]></category>
		<category><![CDATA[セキュリティ]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1651</guid>

					<description><![CDATA[Contents SPF（Sender Policy Framework）についてSPFの設定方法DKIM（DomainKeys Identified Mail）についてDKIMの設定方法SPFとDKIMの併用まとめSP [&#8230;]]]></description>
										<content:encoded><![CDATA[<div id="rtoc-mokuji-wrapper" class="rtoc-mokuji-content frame4 preset3 animation-fade rtoc_open noto-sans" data-id="1651" data-theme="BlogArise">
			<div id="rtoc-mokuji-title" class=" rtoc_center">
			<button class="rtoc_open_close rtoc_open"></button>
			<span>Contents</span>
			</div><ol class="rtoc-mokuji decimal_ol level-1"><li class="rtoc-item"><a href="#rtoc-1">SPF（Sender Policy Framework）について</a></li><li class="rtoc-item"><a href="#rtoc-2">SPFの設定方法</a></li><li class="rtoc-item"><a href="#rtoc-3">DKIM（DomainKeys Identified Mail）について</a></li><li class="rtoc-item"><a href="#rtoc-4">DKIMの設定方法</a></li><li class="rtoc-item"><a href="#rtoc-5">SPFとDKIMの併用</a></li><li class="rtoc-item"><a href="#rtoc-6">まとめ</a></li></ol></div><h2 id="rtoc-1" >SPF（Sender Policy Framework）について</h2>
<p>SPFは、<span class="sc_marker blue"><strong>メール送信者が使用しているドメイン名が正規のものであるかを検証するための技術</strong></span>です。つまり、あるドメインから送られてくるメールが、そのドメインの管理者によって認められたサーバーから送信されたものであることを確認する仕組みです。</p>
<p>SPFの設定は、ドメインのDNSレコードにSPFレコードを追加することで行います。<br />
このレコードには、<span class="sc_marker blue"><strong>「このドメインからメールを送ることが許可されているIPアドレスは何か」</strong></span>という情報が含まれています。<br />
メールを受け取ったサーバーは、この情報をもとに、<strong>メールが正規のサーバーから送られてきたものかを検証</strong>します。もし一致しなければ、そのメールはスパムやフィッシングの可能性が高いとみなされ、適切に処理されます。</p>
<h2 id="rtoc-2" >SPFの設定方法</h2>
<p>SPFの設定は、<span class="sc_marker blue"><strong>基本的にはドメインのDNS設定にSPFレコードを追加する</strong></span>ことで行います。以下は、SPFレコードの設定手順の概要です。</p>
<ol>
<li><strong>SPFレコードの作成</strong>：
<ul>
<li>SPFレコードは、<code>v=spf1</code>から始まります。これに続けて、メールを送信することが許可されているIPアドレスやドメイン、ポリシーを指定します。</li>
<li>例えば、<code>v=spf1 ip4:123.456.789.0/24 -all</code>というレコードは、<code>123.456.789.0/24</code>からのメール送信を許可し、それ以外からの送信は拒否することを意味します。</li>
</ul>
</li>
<li><strong>DNSレコードへの追加</strong>：
<ul>
<li>ドメインの管理画面にログインし、DNS設定セクションを探します。</li>
<li>新しいTXTレコードを作成し、先ほど作成したSPFレコードの値を入力します。</li>
<li>設定を保存し、変更が適用されるのを待ちます（数時間かかることがあります）。</li>
</ul>
</li>
</ol>
<h2 id="rtoc-3" >DKIM（DomainKeys Identified Mail）について</h2>
<p>DKIMは、<span class="sc_marker blue"><strong>メールが送信途中で改ざんされていないことを確認するための技術</strong></span>です。<br />
メールの送信者は、メールにデジタル署名を加えます。この署名は、送信者のドメインに関連付けられた公開鍵を使って検証することができます。公開鍵は、同じくドメインのDNSレコードに追加されます。</p>
<p>メールを受信した側は、この公開鍵を用いてデジタル署名を検証します。<br />
もし署名が正しく検証できれば、メールは途中で改ざんされていないとみなされ、信頼性が高いと判断されます。このプロセスにより、メールの送信者が本当に主張しているドメインの管理者であること、そしてメール内容が改ざんされていないことが確認されます。</p>
<h2 id="rtoc-4" >DKIMの設定方法</h2>
<p>DKIMの設定は、少し複雑で、メールサーバーでの設定変更が含まれます。以下は、DKIMを設定する基本的なステップです。</p>
<ol>
<li><strong>DKIM鍵の生成</strong>：
<ul>
<li>DKIM公開鍵と秘密鍵のペアを生成します。この作業は、使用しているメールサーバーのソフトウェアによって異なります。多くの場合、メールサービスプロバイダーがこれをサポートしており、自動的に行われます。</li>
</ul>
</li>
<li><strong>公開鍵をDNSレコードに追加</strong>：
<ul>
<li>公開鍵をドメインのDNSレコードにTXTレコードとして追加します。これにより、メールを受信した側が、送信されたメールのDKIM署名を検証できるようになります。</li>
<li>レコード名は通常、<code>default._domainkey</code>のような形式で、<code>_domainkey</code>はDKIMの標準です。値は公開鍵です。</li>
</ul>
</li>
<li><strong>メールサーバーの設定</strong>：
<ul>
<li>メールを送信する際に、DKIM署名をメールに自動的に追加するよう、メールサーバーを設定します。これは、メールサーバーの設定ファイルで指定するか、メールサービスプロバイダーの指示に従います。</li>
</ul>
</li>
</ol>
<h2 id="rtoc-5" >SPFとDKIMの併用</h2>
<p>SPFとDKIMは、<span class="sc_marker blue"><strong>それぞれ異なるアプローチでメールセキュリティを向上</strong></span>させます。</p>
<p>SPFは送信者のドメインが正しいかを検証し、DKIMはメールの内容が改ざんされていないことを保証します。これら二つの技術を組み合わせることで、より強固なメールセキュリティ体制を築くことができます。</p>
<p>特に、フィッシング詐欺やスパムメールは巧妙化しているため、送信者の正当性を検証し、メールの内容が安全であることを確認することが非常に重要です。SPFとDKIMを適切に設定することで、これらの脅威からユーザーを守る助けとなります。</p>
<h2 id="rtoc-6" >まとめ</h2>
<p>SPFとDKIMは、メールの安全性を確保するための重要な技術です。これらを正しく理解し、適切に設定することで、フィッシングやスパムから自分自身や組織を守ることができます。今回の記事が、SPFとDKIMの基本を理解し、より安全なメール環境を構築するきっかけになれば幸いです。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1651/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Exifデータの不思議：デジタル写真の隠れたストーリー</title>
		<link>https://otonan-syusyoku.work/archives/1608</link>
					<comments>https://otonan-syusyoku.work/archives/1608#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Sun, 21 Jan 2024 07:54:09 +0000</pubDate>
				<category><![CDATA[絶対に必要なIT基礎知識]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1608</guid>

					<description><![CDATA[こんにちは、今日はデジタル写真の裏に隠れた小さな秘密、Exifデータについて話そうと思います。 カメラやスマホでパシャリと一枚撮影するたびに、写真には見えない情報がたくさん詰まっているんですよ。そう、それがExifデータ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>こんにちは、今日はデジタル写真の裏に隠れた小さな秘密、Exifデータについて話そうと思います。</p>
<p>カメラやスマホでパシャリと一枚撮影するたびに、写真には見えない情報がたくさん詰まっているんですよ。そう、それがExifデータ。</p>
<div id="rtoc-mokuji-wrapper" class="rtoc-mokuji-content frame4 preset3 animation-fade rtoc_open noto-sans" data-id="1608" data-theme="BlogArise">
			<div id="rtoc-mokuji-title" class=" rtoc_center">
			<button class="rtoc_open_close rtoc_open"></button>
			<span>Contents</span>
			</div><ol class="rtoc-mokuji decimal_ol level-1"><li class="rtoc-item"><a href="#rtoc-1">Exifデータって何？</a></li><li class="rtoc-item"><a href="#rtoc-2">でも、ちょっと待って！問題もあるんです</a></li><li class="rtoc-item"><a href="#rtoc-3">Exifデータの安全な管理</a></li><li class="rtoc-item"><a href="#rtoc-4">Exifデータの楽しみ方</a></li></ol></div><h2 id="rtoc-1" >Exifデータって何？</h2>
<p>Exifってのは「Exchangeable Image File Format」の略で、デジタル画像ファイルに付加されるメタデータのこと。</p>
<p>カメラの種類、撮影日時、使用したレンズ、露出時間、さらにはGPS情報まで、あらゆる情報が含まれています。</p>
<p>&nbsp;</p>
<p>実はこのExifデータ、写真をもっと深く理解する鍵を握っているんです。</p>
<p>例えば、プロの写真家はExifデータを見て、その写真がどのような条件で撮影されたかを分析することができます。<br />
趣味の写真家にとっても、なぜあの写真が上手く撮れたのか、その理由をExifから読み解くことができるんですね。</p>
<h2 id="rtoc-2" >でも、ちょっと待って！問題もあるんです</h2>
<p>しかし、便利な一方で、Exifデータにはちょっとした問題も。<br />
特にプライバシーに関わる部分ですね。</p>
<p>位置情報が含まれていることが多いので、例えば旅行の写真をそのままSNSにアップすると、いつどこで撮影されたかが丸わかり。<br />
時には自宅の場所がバレてしまうこともあるんです。</p>
<h2 id="rtoc-3" >Exifデータの安全な管理</h2>
<p>では、このExifデータ、どうやって安全に管理するのかというと、いくつか方法があります。</p>
<p>一番手軽なのは、専用のソフトウェアやアプリを使ってExifデータを削除すること。また、多くのソーシャルメディアはアップロード時にExifデータを自動的に削除してくれますが、100%頼るのは危険です。自分で確認する癖をつけましょう。</p>
<h2 id="rtoc-4" >Exifデータの楽しみ方</h2>
<p>最後に、Exifデータを楽しむ方法もお話ししておきましょう。<br />
自分の写真のExifデータを見返してみると、その時の思い出が鮮明によみがえってくることも。<br />
また、写真撮影のスキルアップにも役立ちます。同じ場所で同じ被写体を撮るとき、前回のExifデータを参考にしてみるのもいいですね。</p>
<p>&nbsp;</p>
<p>Exifデータは、デジタル写真の世界における小さな宝物。<br />
上手に扱うことで、写真をもっと楽しむことができるし、安全に保つこともできます。ぜひ、みなさんもExifデータに注目してみてください！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1608/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【Tips】ファイルのinputにはacceptを指定しましょう</title>
		<link>https://otonan-syusyoku.work/archives/1603</link>
					<comments>https://otonan-syusyoku.work/archives/1603#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Sun, 21 Jan 2024 07:22:31 +0000</pubDate>
				<category><![CDATA[絶対に必要なIT基礎知識]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Tips]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1603</guid>

					<description><![CDATA[こんにちは。 都内で自社サービス開発に携わっていますやんやんと申します。 フロントもバックも触る傍ら便利だなぁと気付いたTipsについて紹介しますぅ。 今回は File の input についてですぅ。 Contents [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>こんにちは。</p>
<p>都内で自社サービス開発に携わっていますやんやんと申します。</p>
<p>フロントもバックも触る傍ら便利だなぁと気付いたTipsについて紹介しますぅ。</p>
<p>今回は File の input についてですぅ。</p>
<div id="rtoc-mokuji-wrapper" class="rtoc-mokuji-content frame4 preset3 animation-fade rtoc_open noto-sans" data-id="1603" data-theme="BlogArise">
			<div id="rtoc-mokuji-title" class=" rtoc_center">
			<button class="rtoc_open_close rtoc_open"></button>
			<span>Contents</span>
			</div><ol class="rtoc-mokuji decimal_ol level-1"><li class="rtoc-item"><a href="#rtoc-1">HTMLのaccept属性について</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-2">使用例</a></li><li class="rtoc-item"><a href="#rtoc-3">acceptを指定した場合の挙動</a></li></ul></li><li class="rtoc-item"><a href="#rtoc-4">目的</a></li><li class="rtoc-item"><a href="#rtoc-5">参考</a></li></ol></div><h2 id="rtoc-1" >HTMLのaccept属性について</h2>
<p>HTMLの accept 属性は、フォームの &lt;input&gt; タグにおいて使用され、ユーザーがファイルを選択する際にどの種類のファイルを選択できるかをブラウザに指示するために使われます。</p>
<p>accept 属性は、主に次のような値を受け入れます。</p>
<ul>
<li>ファイルタイプ指定</li>
<li>MIMEタイプ (MIME Types): 特定</li>
</ul>
<p>要件として<span class="sc_marker blue"><strong>「CSVだけ受け付けたい」</strong><strong>「画像はjpeg,pngのみを受け付けたい」</strong></span>といった内容がアガってきた時にフロントでできる施策になるんじゃないでしょうかぁ〜〜</p>
<h3 id="rtoc-2" >使用例</h3>
<h4>ファイルタイプの指定</h4>
<pre class="line-numbers">&lt;!-- すべての画像ファイル形式 --&gt;
&lt;input type="file" accept="image/*"&gt;

&lt;!-- すべての音声ファイル形式 --&gt;
&lt;input type="file" accept="audio/*"&gt;

&lt;!-- すべてのビデオファイル形式 --&gt;
&lt;input type="file" accept="video/*"&gt;</pre>
<p>&nbsp;</p>
<h4>MIMEタイプ (MIME Types)の指定</h4>
<p>&nbsp;</p>
<pre class="line-numbers">&lt;!-- JPEG形式の画像ファイルのみを受け入れ --&gt;
&lt;input type="file" accept="image/jpeg"&gt;

&lt;!-- application/pdf はPDFファイル --&gt;
&lt;input type="file" accept="application/pdf"&gt;</pre>
<h4>複数の指定</h4>
<p>カンマ区切りしてね</p>
<pre class="line-numbers"><code class="language-markup">&lt;input type="file" accept="image/ping, image/jpeg"&gt;</code></pre>
<h3 id="rtoc-3" >acceptを指定した場合の挙動</h3>
<p>ローカルのファイルフォルダーが以下のような形で開かれます。</p>
<p>今回は以下のようなacceptを指定しました。ちゃんと指定のファイルのみが選択できるようになっていますね。ちょっと便利。</p>
<pre class="line-numbers"><code class="language-markup">&lt;input type="file" accept="text/csv"&gt;
</code></pre>
<p>&nbsp;</p>
<p><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2024/01/スクリーンショット-2024-01-21-16.31.55.png" alt="desktop" width="931" height="507" class="aligncenter size-full wp-image-1606" srcset="https://otonan-syusyoku.work/wp-content/uploads/2024/01/スクリーンショット-2024-01-21-16.31.55.png 931w, https://otonan-syusyoku.work/wp-content/uploads/2024/01/スクリーンショット-2024-01-21-16.31.55-300x163.png 300w, https://otonan-syusyoku.work/wp-content/uploads/2024/01/スクリーンショット-2024-01-21-16.31.55-768x418.png 768w" sizes="(max-width: 931px) 100vw, 931px" /></p>
<p>&nbsp;</p>
<h2 id="rtoc-4" >目的</h2>
<p>影響を与えることができなさそうですが、UXの向上を狙えます。笑</p>
<p>ただしフロント側で制限できるとはいえ、サーバーにアップロードする方法はいくらでもあるので、バックエンドでバリデーションはしっかり行ってくださいね</p>
<h2 id="rtoc-5" >参考</h2>
<p><a href="https://developer.mozilla.org/ja/docs/Web/HTML/Attributes/accept">https://developer.mozilla.org/ja/docs/Web/HTML/Attributes/accept</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1603/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ステートフルとステートレスについてざっくり理解しよう！</title>
		<link>https://otonan-syusyoku.work/archives/1569</link>
					<comments>https://otonan-syusyoku.work/archives/1569#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Thu, 04 Jan 2024 07:56:42 +0000</pubDate>
				<category><![CDATA[インフラ]]></category>
		<category><![CDATA[絶対に必要なIT基礎知識]]></category>
		<category><![CDATA[脱3流プログラマー]]></category>
		<category><![CDATA[設計]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1569</guid>

					<description><![CDATA[みなさん、こんにちは！ 今日はちょっとマニアックな話、ステートフルとステートレスについてお話ししたいと思います。 これ、聞いたことあるけどよくわからないって人、多いんじゃないかな？ でも大丈夫、ここでしっかり理解していき [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>みなさん、こんにちは！</p>
<p>今日はちょっとマニアックな話、ステートフルとステートレスについてお話ししたいと思います。<br />
これ、聞いたことあるけどよくわからないって人、多いんじゃないかな？<br />
でも大丈夫、ここでしっかり理解していきましょう！</p>
<div id="rtoc-mokuji-wrapper" class="rtoc-mokuji-content frame4 preset3 animation-fade rtoc_open noto-sans" data-id="1569" data-theme="BlogArise">
			<div id="rtoc-mokuji-title" class=" rtoc_center">
			<button class="rtoc_open_close rtoc_open"></button>
			<span>Contents</span>
			</div><ol class="rtoc-mokuji decimal_ol level-1"><li class="rtoc-item"><a href="#rtoc-1">ステートフルって何？</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-2">具体例</a></li></ul></li><li class="rtoc-item"><a href="#rtoc-3">じゃあステートレスって？</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-4">具体例</a></li></ul></li><li class="rtoc-item"><a href="#rtoc-5">ステートフルとステートレス、使い分けは？</a></li><li class="rtoc-item"><a href="#rtoc-6">まとめ</a></li></ol></div><h2 id="rtoc-1" >ステートフルって何？</h2>
<p>まずはステートフルについて。</p>
<p>ステートフルっていうのは、端的に言うと<strong>「過去の情報を覚えている状態」</strong>のこと。<br />
システムが過去にどんな処理をしたかを記憶していて、それをもとに次の動作を決めるんです。</p>
<p>例えば、Webサイトにログインする時を考えてみてください。<br />
<strong>一度ログインすると、そのサイトは「あ、この人はもう認証済みだな」と覚えてくれてますよね。</strong><br />
これがステートフルな動作。ユーザーの状態を保持して、その情報に基づいて何らかの処理をするわけです。</p>
<h3 id="rtoc-2" >具体例</h3>
<ol>
<li><strong>Webセッション管理</strong>：<br />
ユーザーがWebサイトにログインしたとき、サーバーはそのユーザーのセッション情報（例えば、認証情報、プロファイル設定など）を保持します。この情報は、ユーザーがサイトをナビゲートする間、持続し、適切なコンテンツやオプションを提供するために使用されます。</li>
<li><strong>データベーストランザクション</strong>：<br />
データベースは、過去のクエリやトランザクションの履歴を追跡し、それに基づいてデータの整合性を保持します。たとえば、銀行の取引記録は、口座の残高を正確に保つために重要です。</li>
</ol>
<h2 id="rtoc-3" >じゃあステートレスって？</h2>
<p>一方で、ステートレスはその逆。</p>
<p>つまり、<strong>「過去の情報を覚えていない状態」</strong>を指します。<br />
こっちは、過去の情報に左右されずに、その都度独立して処理を行います。</p>
<p>たとえば、HTTPプロトコル。<br />
これ、実はステートレスなんですよ。<br />
ウェブサーバーは、同じユーザーからのリクエストでも、それぞれを完全に別々のものとして扱うんですね。<strong>だから毎回、ページをリロードするたびに「誰この人？」ってなるわけです。</strong></p>
<h3 id="rtoc-4" >具体例</h3>
<ol>
<li><strong>HTTPプロトコル</strong>：<br />
HTTPはステートレスプロトコルです。ウェブサーバーは、同一のクライアントからの複数のリクエストを関連づけません。各リクエストは独立しており、サーバーはそれぞれのリクエストを新規のものとして処理します。</li>
<li><strong>RESTful API</strong>：<br />
RESTアーキテクチャはステートレスであり、各APIリクエストは他のリクエストから独立しています。例えば、REST APIを通じてリソースを取得するリクエストは、以前のリクエストやその結果とは無関係に処理されます。</li>
</ol>
<h2 id="rtoc-5" >ステートフルとステートレス、使い分けは？</h2>
<p>これら二つ、どちらが良いとか悪いとかではなくて、用途によって使い分けるのが大事。</p>
<p>ステートフルは、ユーザーに合わせたカスタマイズや複雑な処理が必要な場合に向いています。<br />
一方、ステートレスはシンプルさとスケーラビリティが求められる場合、例えば大規模なWebサービスとかにぴったり。</p>
<p>要は、状況に応じて臨機応変に使い分けることが大切。<br />
システム設計する時は、この二つの特性をよく理解して、最適なアーキテクチャを選んでいきましょう！</p>
<h2 id="rtoc-6" >まとめ</h2>
<p>いかがでしたか？<br />
ステートフルとステートレス、ちょっと難しいけど、この話を押さえておけば、システムの動きを理解するのに役立つはず。</p>
<p>ぜひこの知識を活用して、もっとITの世界を楽しんでいってくださいね！それでは、また次回！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1569/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>macbookのDesktopでGit管理していたらコードが死んだ話</title>
		<link>https://otonan-syusyoku.work/archives/1530</link>
					<comments>https://otonan-syusyoku.work/archives/1530#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Thu, 07 Dec 2023 14:28:58 +0000</pubDate>
				<category><![CDATA[絶対に必要なIT基礎知識]]></category>
		<category><![CDATA[実務]]></category>
		<category><![CDATA[本当にあった話]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1530</guid>

					<description><![CDATA[Contents ある日の出来事原因はiCloudある日の出来事 チームに所属するインターン生から1つの相談がありました。 「やんやんさん、プログラムが動きません。。。」 &#160; 最初は「実行エラーだろう、エラー文 [&#8230;]]]></description>
										<content:encoded><![CDATA[<div id="rtoc-mokuji-wrapper" class="rtoc-mokuji-content frame4 preset3 animation-fade rtoc_open noto-sans" data-id="1530" data-theme="BlogArise">
			<div id="rtoc-mokuji-title" class=" rtoc_center">
			<button class="rtoc_open_close rtoc_open"></button>
			<span>Contents</span>
			</div><ol class="rtoc-mokuji decimal_ol level-1"><li class="rtoc-item"><a href="#rtoc-1">ある日の出来事</a></li><li class="rtoc-item"><a href="#rtoc-2">原因はiCloud</a></li></ol></div><h2 id="rtoc-1" >ある日の出来事</h2>
<p>チームに所属するインターン生から1つの相談がありました。</p>
<p>「やんやんさん、プログラムが動きません。。。」</p>
<p>&nbsp;</p>
<p>最初は<strong>「実行エラーだろう、エラー文言に何が書いてあるのか読めよ」</strong>と思っていたのですが、エラーの内容を読むと事態は思ったよりも深刻であることに気づきます。</p>
<table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr>
<td style="width: 50%; background-color: #90d6fc; border-color: #ffffff;" rowspan="2">実際に起きた問題</td>
<td style="width: 50%;">よくわからないファイルの増殖<br />
ex) index.php, index 2.php</td>
</tr>
<tr>
<td style="width: 50%;">git コマンドが実行できない<br />
ex) git fetch, git pull</td>
</tr>
</tbody>
</table>
<h2 id="rtoc-2" >原因はiCloud</h2>
<p>原因はプログラムの配置場所がiCloudで管理しているDesktopに置いていることでした。</p>
<p>Gitで管理しているソースコードがiCloudとの同期が取れておらず、ファイルの増減がありプログラムが正常に動作しないという問題です。</p>
<p>Git（リモートリポジトリからのpull, ブランチの切り替え等）で管理しているはずのソースコードが裏ではiCloudでも管理されていたという間抜けな話でした。</p>
<p>みなさんもご注意を。。。。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1530/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>「このメールアドレスは使用されています」が危険な理由【セキュリティ】</title>
		<link>https://otonan-syusyoku.work/archives/1386</link>
					<comments>https://otonan-syusyoku.work/archives/1386#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Wed, 23 Aug 2023 15:36:02 +0000</pubDate>
				<category><![CDATA[絶対に必要なIT基礎知識]]></category>
		<category><![CDATA[セキュリティ]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1386</guid>

					<description><![CDATA[Contents セキュリティを担保したつもりが何が良くないのか？対策預かったデータは大切にセキュリティを担保したつもりが 有効なメールアドレスかどうかを検証するために以下のような流れで処理を組むことはよくあると思います [&#8230;]]]></description>
										<content:encoded><![CDATA[<div id="rtoc-mokuji-wrapper" class="rtoc-mokuji-content frame4 preset3 animation-fade rtoc_open noto-sans" data-id="1386" data-theme="BlogArise">
			<div id="rtoc-mokuji-title" class=" rtoc_center">
			<button class="rtoc_open_close rtoc_open"></button>
			<span>Contents</span>
			</div><ol class="rtoc-mokuji decimal_ol level-1"><li class="rtoc-item"><a href="#rtoc-1">セキュリティを担保したつもりが</a></li><li class="rtoc-item"><a href="#rtoc-2">何が良くないのか？</a></li><li class="rtoc-item"><a href="#rtoc-3">対策</a></li><li class="rtoc-item"><a href="#rtoc-4">預かったデータは大切に</a></li></ol></div><h2 id="rtoc-1" >セキュリティを担保したつもりが</h2>
<p>有効なメールアドレスかどうかを検証するために以下のような流れで処理を組むことはよくあると思います。</p>
<ol>
<li>メールアドレス入力（ユーザー）</li>
<li>ランダムな文字列を入力されたメールアドレスに送信（システム）</li>
<li>受け取ったランダムな文字列を入力（ユーザー）</li>
<li>ユーザーが入力した文字列を送信した文字列と一致するか判定（システム）</li>
<li>4の検証が正常に通過したら1で入力されたメールアドレスを有効なアドレスとして登録</li>
</ol>
<p>そうですよね。メールアドレスの検証は絶対必要ですよね。<br />
上記の流れに間違いはないはずです。</p>
<p>レビューを貰うまで完璧な実装をしたと思い込んでいました。</p>
<h2 id="rtoc-2" >何が良くないのか？</h2>
<p>問題になったのは、1で実施する<span class="sc_marker blue"><strong>ユーザーが入力したメールアドレスの検証</strong></span>です。</p>
<p>ユーザーが入力したメールアドレスの検証では、以下の検証を実施しなければいけません。</p>
<ol>
<li>メールアドレス形式か</li>
<li>DBに登録されていないメールアドレスか</li>
<li>必要であればその他バリデーション</li>
</ol>
<p>&nbsp;</p>
<p>僕が実装した内容で問題となったのは、2の<span class="sc_marker blue"><strong>DBに登録されていないメールアドレス</strong></span>です。</p>
<p>僕の実装内容では、<span class="sc_marker blue"><strong>DBに登録されているメールアドレスが入力されたら「既に登録済みのメールアドレスです」とバリデーションエラーを出力</strong></span>していました。</p>
<p>それって、<span class="sc_marker blue"><strong>バリデーションに引っかかったメールアドレスが既に使用されている誰かのメールアドレスだと世に発表してしまっている状況</strong></span>でした。</p>
<p>具体的に以下の事象を引き起こしてしまう問題です。</p>
<ol>
<li>バリデーションに引っかかったメールアドレスを用いて総当たり攻撃に使用される（ログインなど）</li>
<li>バリデーションに引っかかったメールアドレスを自分が管理しているシステム以外で使用される</li>
</ol>
<p>&nbsp;</p>
<p>1に関しては試行回数に制限をかければ問題ないのですが、2に関しては僕らが出来ることは何一つ有りません。<br />
だって、自分らが管理しいない場所で悪用されるからです。</p>
<p>&nbsp;</p>
<p>ここで取得されたメールアドレスを悪意のある業者に売ったり、取得した悪意のある人がよからぬメールを送信することが出来ちゃいます。</p>
<p>なんて恐ろしい事態に陥ってしまうのでしょう。。</p>
<h2 id="rtoc-3" >対策</h2>
<p>対策は色々あると思いますが、僕が思いつくやつ挙げていきます。</p>
<ul>
<li>「無効な値です。」というバリデーションエラーを出力
<ul style="list-style-type: circle;">
<li>既に使われている事を明記しない</li>
<li>正確な対策ではない</li>
</ul>
</li>
<li>認証メールに添付するエンドポイントを絶対に検証が通らないエンドポイントにする
<ul style="list-style-type: circle;">
<li>ランダム文字列を入力するフォームに特定の条件のみアクセス可能とするなどが必要（ちょっと面倒）</li>
</ul>
</li>
</ul>
<p>他にもあるはずなので、各自のシステムに合わせて実装してください。</p>
<h2 id="rtoc-4" >預かったデータは大切に</h2>
<p>良かれと思って実装した内容がユーザーの個人情報を危険に晒してしまうことがあることを学べた貴重な経験でした。</p>
<p>やりがちなミスだと思うので、皆様もお気をつけください。</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1386/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
