<?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/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>技術本 | みんたく</title>
	<atom:link href="https://mintaku-blog.net/category/develop/books/feed/" rel="self" type="application/rss+xml" />
	<link>https://mintaku-blog.net</link>
	<description>みんたくの技術ブログ</description>
	<lastBuildDate>Tue, 14 Sep 2021 13:55:50 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.11</generator>

<image>
	<url>https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/06/cropped-ipad-820272_640.jpg?fit=32%2C32&#038;ssl=1</url>
	<title>技術本 | みんたく</title>
	<link>https://mintaku-blog.net</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">144480658</site>	<item>
		<title>達人プログラマーを読んで気づいたことなどメモ</title>
		<link>https://mintaku-blog.net/the-pragmatic-programmer/</link>
					<comments>https://mintaku-blog.net/the-pragmatic-programmer/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Tue, 14 Sep 2021 13:55:28 +0000</pubDate>
				<category><![CDATA[技術本]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=2044</guid>

					<description><![CDATA[<p>達人プログラマーを読んで気づいたことや学んだことなどをメモしておきます。 割れ窓理論 割れ窓理論について、「1枚の割れた窓が長期間修理されずに放置されている …</p>
The post <a href="https://mintaku-blog.net/the-pragmatic-programmer/">達人プログラマーを読んで気づいたことなどメモ</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p><span>達人プログラマーを読んで気づいたことや学んだことなどをメモしておきます。</span></p>
<h2>割れ窓理論</h2>
<p>割れ窓理論について、「1枚の割れた窓が長期間修理されずに放置されていると、ビルの住人に投げやりな感覚が植え付けられ、2枚目の窓が破られたりゴミが撒き散らされたりと建物に対する深刻な破壊が起こり始まる」と本書で説明していました。</p>
<p>これはネガティブな考えには伝染性があるからだとされており、明らかに問題があるにもかかわらずその状況を無視することで、破滅に向かっていきます。</p>
<h3>割れた窓は放置しない</h3>
<p>割れた窓は、悪い設計や誤った意思決定、質の低いコードにも当てはまり、そのままにしておくことで深刻な問題を引き起こすことになります。</p>
<p>そのため割れた窓は発見と同時に修復する必要があります。もし正しく修復する時間がないのであれば、割りやすいところにその旨を明示するなど、何らかのアクションが必要です。</p>
<h3>実体験としても割れ窓理論</h3>
<p>たしかに実体験として振り返ってみても、この割れ窓理論は開発においても当てはまると思います。</p>
<p>最初は頑張ってテストを書いていたのに、ある時にテストがやりにくいコードを実装してからテストをしなくなったことで、バグが頻発しプログラムの依存関係が煩雑化するなど、みるみるうちにシステムが破壊に向かったことがあります。</p>
<p>後でやればいいやはたいてい後からやらないため、いっときの楽しようという考えが後々の自分の首を絞めることが多々ありました。</p>
<p>どんなにしんどくても割れた窓を見つけたら見て見ぬふりをせずにその場でしっかりと対応することが大切だと改めて実感させられました。</p>
<p>&nbsp;</p>
<h2>契約による設計(DbC)</h2>
<p>DbC(Design by Contract)とは、ソフトウェアモジュールの権利と責務を文書化し、プログラムの正しさを保証するための簡潔かつパワフルな技法のことです。</p>
<p>ここでいうプログラムの正しさとは、要求された以上のことも、以下のことも行わないというものです。DbCを提唱したMeyerはDbCを実行する上で、以下の想定と確約を解説しました。</p>
<h3>事前条件</h3>
<p>この機能を呼び出す前に必要な要求のことを指します。事前条件に違反している場合には、この機能を呼び出してはいけません。そして、適切なデータを引き渡すのは呼び出し側の責任になります。</p>
<h3>事後条件</h3>
<p>この機能が終了した後にその機能を保証する内容のことです。事後条件があるということは、この機能が正常に終了することを意味しています。</p>
<h3>クラス不変表明</h3>
<p>クラスが呼び出し側に対して、常に真になることを保証する条件です。</p>
<p>&nbsp;</p>
<h2>コードのためのテスト</h2>
<h3>テストしやすいコード</h3>
<p>ソフトウェア開発におけるコンポーネントベース開発によって、テストのしやすいコードを書くことができます。</p>
<p>初期の段階からソフトウェアの中にテスト機構を組み込んでおき、ソフトウェアを接続する前にテストができるようにしておくことが大切です。</p>
<h3>契約に対するテスト</h3>
<p>先程のDbCにあった契約が遵守されていることを確認するテストを用意しなければなりません。</p>
<p>これはコードが契約に合致しているのか、そして契約の意味が我々の考えている通りのものなのかをいう2つの意味を含んでいます。</p>
<h3>DbCについて</h3>
<p>DbCは最近になるまで知らなかったが、TDDを実践していく中でDbCという手法を学びました。本書を通してDbCについて理解を深めるきっかけになりました。</p>The post <a href="https://mintaku-blog.net/the-pragmatic-programmer/">達人プログラマーを読んで気づいたことなどメモ</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/the-pragmatic-programmer/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2044</post-id>	</item>
		<item>
		<title>アジャイルサムライを読んでアジャイルな計画作りについて整理する</title>
		<link>https://mintaku-blog.net/agile-plan/</link>
					<comments>https://mintaku-blog.net/agile-plan/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Wed, 09 Jun 2021 00:00:23 +0000</pubDate>
				<category><![CDATA[まとめ系]]></category>
		<category><![CDATA[技術本]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=2006</guid>

					<description><![CDATA[<p>アジャイルサムライを読んでアジャイルな計画作りについて整理してみました。 アジャイル開発用語 マスターストーリーリスト プロジェクトでこなすToDoリストの …</p>
The post <a href="https://mintaku-blog.net/agile-plan/">アジャイルサムライを読んでアジャイルな計画作りについて整理する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>アジャイルサムライを読んでアジャイルな計画作りについて整理してみました。</p>
<h2>アジャイル開発用語</h2>
<h3>マスターストーリーリスト</h3>
<p>プロジェクトでこなすToDoリストのことです。</p>
<h3>ベロシティ</h3>
<p>チームがユーザーストーリーを動くソフトウェアに変換する速度のことです。</p>
<h3>イテレーション</h3>
<p>一週間か二週間を全力疾走する短距離走みたいなもので開発期間を指します。</p>
<p>イテレーション数＝作業量の合計 / チームの予想ベロシティ</p>
<p>&nbsp;</p>
<h2>スコープを柔軟にする</h2>
<p>スコープを柔軟にしておくことがアジャイルプロジェクトで計画を誠実なものに保ち続けるための秘訣です。</p>
<p>新しいストーリーを追加するときは、必ずどれかひとつ既存のストーリーをマスターストーリーリストから削ってもらう必要があります。これにより開発チームは顧客に要求変更の機会を提供しつつ、スコープをプロジェクトで作業できる範囲内に留めておくことができます。</p>
<p>&nbsp;</p>
<h2>マスターストーリーの長さを一定に保つ</h2>
<p>アジャイル開発の原則として、要求の変更はたとえ開発の後期であっても歓迎します。変化を味方につけることによって、顧客の競争力を引き上げます。</p>
<p>この原則により、最初に要求を集めておかなきゃとは思わなくなり、ストーリーの無駄を減らすことができます。</p>
<p>さらに、マスターストーリーの長さを一定に保ち続けていくほうが望ましいとうことを、顧客と開発チームの両者が学んでいきます。</p>
<p>&nbsp;</p>
<h2>初回の計画作り</h2>
<h3>1. マスターストーリーリストを作る</h3>
<p>マスターストーリーリストには顧客がソフトウェアで実現したものを載せていきます。</p>
<p>載せた項目は、顧客が優先順位をつけて、開発チームが見積もります。その結果が計画の土台になります。</p>
<p>良いマスターストーリーリストの長さは1ヶ月から6ヶ月程度の期間でこなせる仕事の範囲に収まります。</p>
<h3>2. プロジェクト規模を見極める</h3>
<p>プロジェクトの規模とこれから始めるプロジェクトの長さを見通します。プロジェクトはどのくらいの期間で終わるかを把握します。</p>
<h3>3. 優先順位をつける</h3>
<p>マスターストーリーリストにあるストーリーに優先順位をつけるのは顧客の仕事で、ビジネスの観点から優先順位をつけてもらいます。</p>
<p>そうすることで、投資に対して最も価値の高い成果を手に入れることができます。</p>
<p>しかし、開発チームにも果たすべき義務があります。具体的には、アーキテクチャ上のリスクを低減できるストーリーや顧客にとって価値があり、しかもアーキテクチャを検証できるストーリーなどです。</p>
<h3>4. チームのベロシティを見積もる</h3>
<p>プロジェクト開始時点でのチーム速度はどれくらいかなのかわからないため、最初はある程度推測する必要があります。</p>
<p>その後、チームベロシティはイテレーションを3、4回こなせばだんだん落ちついていき、チームの開発速度も検討がつくようになります。</p>
<p>チームベロシティは以下のように求めます。</p>
<p>チームベロシティ＝完了させたストーリーポイントの合計 / イテレーション数</p>
<h3>5. 期日を仮決めする</h3>
<p>プロジェクトの完了期日に対する作戦として、「期日固定」と「フィーチャセット固定」があります。</p>
<p>「期日固定」は、日付を特定して「プロダクトはこの日が来たら何がなんでもリリースします」と宣言する感じです。この作戦の場合、重要なストーリーが新たに見つかった場合、想定的に優先順位が劣るストーリーをスコープから外します。</p>
<p>「フィーチャセット固定」は、中核をなすフィーチャのまとまりに含まれるフィーチャを全て完成させるまでは作業を続け、日程を調整する作戦です。中核をなすフィーチャーセットを確実に揃えるためなら、スコープではなく期日が調整対象になります。</p>
<h3>6. バーンダウンチャート</h3>
<p><img data-attachment-id="2007" data-permalink="https://mintaku-blog.net/agile-plan/img_5751/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5751-scaled.jpg?fit=2560%2C1920&amp;ssl=1" data-orig-size="2560,1920" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;1.8&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;iPhone 7&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1621682608&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;3.99&quot;,&quot;iso&quot;:&quot;25&quot;,&quot;shutter_speed&quot;:&quot;0.0083333333333333&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="IMG_5751" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5751-scaled.jpg?fit=300%2C225&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5751-scaled.jpg?fit=800%2C600&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5751.jpg?resize=800%2C600&#038;ssl=1" alt="" width="800" height="600" class="aligncenter size-large wp-image-2007" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5751-scaled.jpg?resize=1024%2C768&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5751-scaled.jpg?resize=300%2C225&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5751-scaled.jpg?resize=768%2C576&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5751-scaled.jpg?resize=1536%2C1152&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5751-scaled.jpg?resize=2048%2C1536&amp;ssl=1 2048w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5751-scaled.jpg?w=1600&amp;ssl=1 1600w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5751-scaled.jpg?w=2400&amp;ssl=1 2400w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>バーンダウンチャートはチームがどれぐらいの速度でストーリーを実装しているかをひと目でわかるようにした図のことです。チームの速度に加えて、この先いつ頃プロジェクトを完了させられそうかの見通しも立てられるようになっています。</p>
<p>バーンダウンチャートの縦軸は残っている作業の総量で、横軸は時間、具体的にはイテレーションを表します。あとはイテレーションごとの残作業量を記録して、図にプロットしていきます。</p>
<p>&nbsp;</p>
<h2>アジャイル計画をやってみて思ったこと</h2>
<p>ここからは本書と関係ないが、自分自身アジャイル計画を始めてみて思ったことは、日々計画とやるべきタスクが明確で常にプロジェクトの進行を見通せることとてもスッキリした気分になります。</p>
<p>今までウォーターフォール開発やアジャイルもどきであったプロジェクトがどう転ぶのかわからないモヤモヤ感が全然ないです。その分、逐一ストーリーの見積もりやメンバー共有、緊急タスクがあった際のストーリーの見直しなど、アジャイル計画を実行するために必要な時間と労力は大きいと感じています。</p>
<p>もちろんその時間と労力をかけるほどの価値を感じており、アジャイル開発を実践できる環境にありがたみを感じています。</p>
<p>アジャイル計画は、ビジネス側と開発チームの両方がプロジェクトを円滑かつ適切に進めていくためにアジャイル開発の中でも特に重要な役割を担っていると思うようになりました。</p>
<p>&nbsp;</p>
<p><a href="https://amzn.to/3hI4gUt" target="_blank" rel="noopener">アジャイルサムライ−達人開発者への道</a></p>
<p>&nbsp;</p>The post <a href="https://mintaku-blog.net/agile-plan/">アジャイルサムライを読んでアジャイルな計画作りについて整理する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/agile-plan/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2006</post-id>	</item>
		<item>
		<title>Clean Agileを読んでアジャイル開発について整理する</title>
		<link>https://mintaku-blog.net/clean-agile/</link>
					<comments>https://mintaku-blog.net/clean-agile/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Thu, 27 May 2021 11:39:03 +0000</pubDate>
				<category><![CDATA[まとめ系]]></category>
		<category><![CDATA[技術本]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=1998</guid>

					<description><![CDATA[<p>Clean Agileを読んで押さえておきたいと思ったポイントを軸にアジャイル開発について自分なりに整理してみました。 サークルオブライフ 上の図はXPのプ …</p>
The post <a href="https://mintaku-blog.net/clean-agile/">Clean Agileを読んでアジャイル開発について整理する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>Clean Agileを読んで押さえておきたいと思ったポイントを軸にアジャイル開発について自分なりに整理してみました。</p>
<h2>サークルオブライフ</h2>
<p><img data-attachment-id="1999" data-permalink="https://mintaku-blog.net/clean-agile/img_5734/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5734-scaled.jpg?fit=2560%2C1920&amp;ssl=1" data-orig-size="2560,1920" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;1.8&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;iPhone 7&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1621157486&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;3.99&quot;,&quot;iso&quot;:&quot;20&quot;,&quot;shutter_speed&quot;:&quot;0.0023696682464455&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="IMG_5734" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5734-scaled.jpg?fit=300%2C225&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5734-scaled.jpg?fit=800%2C600&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5734.jpg?resize=800%2C600&#038;ssl=1" alt="" width="800" height="600" class="aligncenter size-large wp-image-1999" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5734-scaled.jpg?resize=1024%2C768&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5734-scaled.jpg?resize=300%2C225&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5734-scaled.jpg?resize=768%2C576&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5734-scaled.jpg?resize=1536%2C1152&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5734-scaled.jpg?resize=2048%2C1536&amp;ssl=1 2048w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5734-scaled.jpg?w=1600&amp;ssl=1 1600w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/IMG_5734-scaled.jpg?w=2400&amp;ssl=1 2400w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>上の図はXPのプラクティスを描いた図で、アジャイルの本質を示した原型であり、最も典型的なものとなっています。</p>
<p>&nbsp;</p>
<h2>ビジネスプラクティス</h2>
<p>最も外側にあるのが、ビジネス向けのXPプラクティスです。ビジネス側と開発チームの両方がプロジェクトをマネジメントするための原則を提供しています。</p>
<h3>計画ゲーム</h3>
<p>計画ゲームは、このリングの中心的な役割を果たします。これはプロジェクトを機能、ストーリー、タスクに分割する方法を示している。またこれらの機能、ストーリー、タスク見積り、優先順位付け、スケジューリングのガイダンスを提供しています。</p>
<h4>ストーリーの作成</h4>
<p>システムの機能をユーザーの視点から簡潔に記述したユーザーストーリーを考えます。</p>
<p>例)</p>
<blockquote><p>車の運転手として、<br />
アクセルペダルを強く踏みたい。<br />
それは車の速度を上げるためだ。</p></blockquote>
<p>この時、ストーリーの詳細化は避けます。ストーリを話し合うときに詳細を全て書き留めるべきと思いがちだが、そのような衝動を抑える必要があります。</p>
<h4>ストーリーの見積もり</h4>
<p>ストーリーの見積もりは見積もり時間ではなく、見積もり労力を単位とします。ログアウト機能は1ポイント、ログイン機能は3ポイントのようにポイント数を選択します。</p>
<h4>イテレーション</h4>
<p>イテレーションは一連の工程を短期間で繰り返す開発サイクルのことで、イテレーションプランニングミーティング(IPM)から始まり、期間の1/20の時間になるようにします。</p>
<p>各イテレーションの目標は、ストーリーを完成させてデータを生成することです。</p>
<h4>ベロシティ</h4>
<p>イテレーションの最後の作業は、ベロシティ(開発速度)とバーンダウンチャート(プロジェクトの進捗)の更新です。受け入れテストをパスしたストーリーのポイントだけをチャートに記録します。</p>
<p>&nbsp;</p>
<h3>小さなリリース</h3>
<p>小さなリリースは、小さな単位で作業するようにチームをガイドします。</p>
<h4>プラクティス</h4>
<p>小さなリリースのプラクティスは、開発チームはできるだけ頻繁にソフトウェアをリリースすべきというものです。</p>
<p>&nbsp;</p>
<h3>受け入れテスト</h3>
<p>受け入れテストは、機能、ストーリー、タスクの「DONE」の定義を提供します。明確な完成基準の設定方法をチームに示します。</p>
<h4>プラクティス</h4>
<p>受け入れテストのプラクティスは、ビジネス側がユーザーストーリーの振る舞いを形式的なテストで記述し、開発者がそれらのテストを自動化することです。</p>
<p>テストはイテレーションにおけるストーリーの完成の定義であり、ストーリーは受け入れテストをパスするまでは完成ではありません。</p>
<p>&nbsp;</p>
<h3>チーム全体</h3>
<p>チーム全体は、ソフトウェア開発チームはプログラマー、テスター、マネージャーなどの様々な職種で構成されており、共通のゴールを目指してみんなで協力するものだという考えを示しています。</p>
<h4>同じ場所</h4>
<p>同じ場所にいるだけなのにチームの効率が劇的に向上するとされています。</p>
<p>家からのリモートも増えてきたが、同じスペースにいることによる雑談や即席のMTGなどが失われるため、偶発的な会話がなくなりがちです。</p>
<p>&nbsp;</p>
<h2>チームプラクティス</h2>
<p>「サークルオブライフ」の中間のリングは、チームのプラクティスを示しています。これらのプラクティスは、開発チームがチーム内やマネージャーとコミュニケーションするためのフレームワークと原則を提供します。</p>
<h3>持続可能なペース</h3>
<p>持続可能なペースは、開発チームがリソースをすぐに消費してしまい、ゴールの手前で力尽きないようにするためのプラクティスです。</p>
<h4>献身</h4>
<p>残業したからといって、雇用主に献身的であることを示したことにはなりません。</p>
<p>すべての残業が悪というわけではないが、残業によってスケジュールが短縮されるよりも、残業にかかるコストの方が大きくなりやすいことを意識する必要があります。</p>
<p>&nbsp;</p>
<h3>共同所有</h3>
<p>共同所有は、プロジェクトにおいてチームに「知識の断絶」が起きないようにするためのプラクティスです。</p>
<p>アジャイルプロジェクトでは、コードはチーム全体で所有しており、チームの誰もが全てのモジュールにいつでもチェックアウトして改善できます。</p>
<p>&nbsp;</p>
<h3>継続的インテグレーション</h3>
<p>継続的インテグレーションは、チームが現在地を常に把握できるように、フィードバックループを何度も閉じることにフォーカスするプラクティスです。</p>
<h4>継続的ビルドの規律</h4>
<p>継続的ビルドは絶対に壊してはいけません。ビルドが壊れた時は緊急事態であり、全てのプログラマーは作業を中断し、すぐにビルドの復旧に取り掛かる必要があります。</p>
<p>&nbsp;</p>
<h3>メタファー</h3>
<p>メタファーは、チームとビジネス側がシステムについてコミュニケーションするための語覚や言語を作成し、広めるためのプラクティスです。</p>
<p>チームが効果的にコミュニケーションするためには、製薬と規律を持つ用語や概念が必要になります。</p>
<h4>ドメイン駆動設計</h4>
<p>ドメイン駆動設計のなかにユビキタス言語という用語があり、これはメタファーのプラクティスに採用されるべき概念です。<br />
チームに必要なのは問題領域のモデルであり、それを全員が合意した語彙(ユビキタス言語)で記述します。ここでいう全員とはプログラマー、QA、マネージャー、顧客、ユーザーを含めた全員です。</p>
<p>&nbsp;</p>
<h2>テクニカルプラクティス</h2>
<p>「サークルオブライフ」の最も内側のリングは、最高の技術品質を保証するために、プログラマーをガイドおよび強制するための技術プラクティスを示しています。</p>
<p>&nbsp;</p>
<h3>テスト駆動開発(TDD)</h3>
<p>テスト駆動開発は、技術チームが高品質を維持しながらすばやく進むための命綱です。</p>
<h4>TDDの3つのルール</h4>
<ol>
<li>失敗するテストを書くまではプロダクションコードを書いてはいけない</li>
<li>失敗するテストを必要以上に書いていけない</li>
<li>プロダクションコードを必要以上に書いてはいけない</li>
</ol>
<p>この3つのルールに従うことでデバッグの軽減、優れた低レベルのドキュメンテーション、楽しさ、完全性、分離といった様々なメリットがあります。</p>
<p>&nbsp;</p>
<h4>勇気</h4>
<p>完全なテストスイート(ソフトウェアテストの目的や対象ごとに複数のテストケースをまとめたもの)があると、コードを変更する恐怖がなくなります。</p>
<p>コードをクリーンにする恐怖がなくなるため、コードをクリーンにするようになります。</p>
<p>システムを整理して秩序を維持できるようになり、システムの設計を損なうことがなくなります。</p>
<p>&nbsp;</p>
<h3>リファクタリング</h3>
<p>リファクタリングは、すべての作成物の継続的な改善と改良を促進します。</p>
<p>リファクタリングによって振る舞いを変更することなく、システムの構造を改善します。</p>
<p>&nbsp;</p>
<h3>シンプルな設計</h3>
<p>シンプルな設計、チームがムダなことをしないようにガイドするためのプラクティスです。</p>
<p>必要とされるコードだけを書いて、最もシンプルで、最も小さく、最も表現力のある構造を維持します。</p>
<h4>設計のウェイト</h4>
<p>設計が複雑になれば、プログラマーにかかる認知的負荷は大きくなります。この認知的負荷が設計のウェイトで、設計のウェイトが増えるほどシステムを理解したり操作するために必要な時間や労力が増えます。</p>
<p>シンプルな設計のゴールは、設計と機能の複雑さのバランスをとることであり、要求とのバランスを保ちながら、継続的にシステムの設計をリファクタリングしていきます。</p>
<p>&nbsp;</p>
<h3>ペアリング</h3>
<p>ペアリングは、革新性と正確性を促進するレベルで、技術チームが知識の共有、レビュー、協力ができるようになるためのプラクティスです。</p>
<p>ペアになるプログラマーは異なる役割を担当します。ひとりがドライバーで、もうひとりがナビゲーターです。</p>
<p>ドライバーはキーボードとマウスを持ち、ナビゲーターは俯瞰的な視点でドライバーにアドバイスします。</p>
<p>ペアになるのは一般的に短時間で、多くの場合は1〜2時間以上は続かないです。</p>
<p>&nbsp;</p>
<p><a href="https://amzn.to/3fhrf5S" target="_blank" rel="noopener">Clean Agile 基本に立ち戻れ</a></p>
<p>&nbsp;</p>The post <a href="https://mintaku-blog.net/clean-agile/">Clean Agileを読んでアジャイル開発について整理する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/clean-agile/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1998</post-id>	</item>
		<item>
		<title>テスト駆動開発入門を読んでTDDサイクルを試してみる</title>
		<link>https://mintaku-blog.net/introduction-tdd/</link>
					<comments>https://mintaku-blog.net/introduction-tdd/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Sat, 22 May 2021 01:00:56 +0000</pubDate>
				<category><![CDATA[TDD]]></category>
		<category><![CDATA[技術本]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=1983</guid>

					<description><![CDATA[<p>テスト駆動開発入門を読み写経しながらTDDのサイクルを学んだことをメモしておきます。一部アジャイルサムライを読んでメモした箇所もあります。 TDDのサイクル …</p>
The post <a href="https://mintaku-blog.net/introduction-tdd/">テスト駆動開発入門を読んでTDDサイクルを試してみる</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>テスト駆動開発入門を読み写経しながらTDDのサイクルを学んだことをメモしておきます。一部アジャイルサムライを読んでメモした箇所もあります。</p>
<h2>TDDのサイクル</h2>
<p>テスト駆動開発は「レッド」「グリーン」「リファクタリング」のサイクルで回していきます。これは全てのストーリーの受け入れ条件を満たすまで繰り返します。</p>
<p>TDDにおいてまだ存在していなコードのテストを書くのに戸惑いますが、必要なコードがすでにそこにあるかのごとく書くことを意識すると良いみたいです。</p>
<h3>レッド</h3>
<p>新しいコードを書く前に、まずは失敗するテストコードを書きます。</p>
<p>新しいコードの意図をテストで示します。</p>
<h3>グリーン</h3>
<p>どんな方法でも良いのでテストが成功するコードを書きます。</p>
<p>素早くバーをグリーンに変えることが最優先になります。</p>
<h3>リファクタリング</h3>
<p>テストが成功する状態を維持しつつ簡潔・明快なコードにします。</p>
<p>持ち込んだ重複を取り除き、素早くグリーンになるようにします。</p>
<p>&nbsp;</p>
<h2>TDDのルール</h2>
<h3>失敗するテストを一つ書くまでは、新しいコードを一切書かない</h3>
<p>テストを書くということは、追加しようとしているコードの価値について真剣に考えることになり、そうすることで凝りすぎた解決策に走ることを避けることができます。</p>
<p>ここで大事なのは、本当に必要なコード以外書いてはいけないということです。</p>
<h3>危なっかしいところを全てテストする</h3>
<p>TDDでは文字通り全てをテストするわけはなく、危なっかしいところを全てテストします。</p>
<p>いかにも壊れてしまいそうな箇所や特定の条件下で特殊な挙動をする箇所がある場合、そうした意図を伝えるためにテストを書きます。</p>
<p>&nbsp;</p>
<h2>テストを作成する</h2>
<p>実際にテスト駆動開発入門を読みながらTDDを学びます。VSCodeにJavaの実行環境を構築し、実際にコードを書いてテストを実行していきます。</p>
<p>まずはテストを作成します。テスト駆動開発入門に則って5ドルを2回回すと10ドルと等しくなることをテストします。</p>
<p>・DollarTest.java</p><pre class="crayon-plain-tag">public class DollarTest {
  @Test

  public void testMultiplication() {
    Dollar five = new Dollar(5);
    five.times(2);
    assertEquals(10, five.amount);
  }
}</pre><p>&nbsp;</p>
<h2>失敗することを確認する</h2>
<p><img data-attachment-id="1988" data-permalink="https://mintaku-blog.net/introduction-tdd/image1-10/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image1-e1620484458615.jpg?fit=984%2C939&amp;ssl=1" data-orig-size="984,939" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image1" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image1-e1620484458615.jpg?fit=300%2C286&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image1-e1620484458615.jpg?fit=800%2C377&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image1-e1620484458615.jpg?resize=800%2C763&#038;ssl=1" alt="" width="800" height="763" class="aligncenter wp-image-1988" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image1-e1620484458615.jpg?w=984&amp;ssl=1 984w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image1-e1620484458615.jpg?resize=300%2C286&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image1-e1620484458615.jpg?resize=768%2C733&amp;ssl=1 768w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>テストを作成したら、まだ実装していないので当たり前ですがテストが失敗することを確認します。ここまでがTDDサイクルで言う「レッド」であるという認識です。</p>
<p>&nbsp;</p>
<h2>テストが通るように実装する</h2>
<p>テストを作成し、失敗することを確認したら実際に処理を実装をしていきます。</p>
<p>・Dollar.java</p><pre class="crayon-plain-tag">public class Dollar {
  int amount;

  Dollar(int amount) {
  }

  void times(int multiplier) {
  }
}</pre><p>&nbsp;</p>
<p><img data-attachment-id="1985" data-permalink="https://mintaku-blog.net/introduction-tdd/image4-5/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image4-e1620548965855.png?fit=999%2C919&amp;ssl=1" data-orig-size="999,919" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image4" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image4-e1620548965855.png?fit=300%2C276&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image4-e1620548965855.png?fit=800%2C369&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image4-e1620548965855.png?resize=800%2C736&#038;ssl=1" alt="" width="800" height="736" class="aligncenter wp-image-1985 size-full" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image4-e1620548965855.png?w=999&amp;ssl=1 999w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image4-e1620548965855.png?resize=300%2C276&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image4-e1620548965855.png?resize=768%2C706&amp;ssl=1 768w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>シンタックス系のエラーはなくなりましたが、テスト結果が正しくありません。期待されている値は10ですが、0となっています。</p>
<p>&nbsp;</p>
<p>期待されている値が10になるように実装していきます。</p><pre class="crayon-plain-tag">public class Dollar {
  int amount = 5 * 2;

  Dollar(int amount) {
  }

  void times(int multiplier) {
  }
}</pre><p>&nbsp;</p>
<p><img data-attachment-id="1987" data-permalink="https://mintaku-blog.net/introduction-tdd/image2-8/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image2.png?fit=1114%2C548&amp;ssl=1" data-orig-size="1114,548" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image2" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image2.png?fit=300%2C148&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image2.png?fit=800%2C394&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image2.png?resize=800%2C394&#038;ssl=1" alt="" width="800" height="394" class="aligncenter size-large wp-image-1987" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image2.png?resize=1024%2C504&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image2.png?resize=300%2C148&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image2.png?resize=768%2C378&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image2.png?w=1114&amp;ssl=1 1114w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>テストが通りました。ここまでがTDDサイクルで言う「グリーン」であるという認識です。</p>
<p>&nbsp;</p>
<h2>リファクタリングする</h2>
<p>テストが成功したといえど、amountの初期値を10にしているため引数の値が変わればテストが失敗します。そのため、どんな値でも対応できるようにリファクタリングをしていきます。</p><pre class="crayon-plain-tag">public class Dollar {
  int amount;

  Dollar(int amount) {
    this.amount = amount;
  }

  void times(int multiplier) {
    amount *= multiplier;
  }
}</pre><p>&nbsp;</p>
<p><img data-attachment-id="1986" data-permalink="https://mintaku-blog.net/introduction-tdd/image3-6/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image3.png?fit=1104%2C512&amp;ssl=1" data-orig-size="1104,512" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image3" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image3.png?fit=300%2C139&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image3.png?fit=800%2C371&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image3.png?resize=800%2C371&#038;ssl=1" alt="" width="800" height="371" class="aligncenter size-large wp-image-1986" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image3.png?resize=1024%2C475&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image3.png?resize=300%2C139&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image3.png?resize=768%2C356&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/05/image3.png?w=1104&amp;ssl=1 1104w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>リファクタリングをしたら再度テストを実行し、テストが成功することを確認します。</p>The post <a href="https://mintaku-blog.net/introduction-tdd/">テスト駆動開発入門を読んでTDDサイクルを試してみる</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/introduction-tdd/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1983</post-id>	</item>
		<item>
		<title>コンピューターウイルスの感染場所や経路。WannaCryとは何だったのか</title>
		<link>https://mintaku-blog.net/computer-virus/</link>
					<comments>https://mintaku-blog.net/computer-virus/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Sat, 08 May 2021 06:12:43 +0000</pubDate>
				<category><![CDATA[まとめ系]]></category>
		<category><![CDATA[技術本]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=1972</guid>

					<description><![CDATA[<p>「これ1冊で丸わかり 完全図解 セキュリティー入門」を読んで学んだコンピューターウイルスについてまとめておきます。 コンピューターウイルスとは 一口にコンピ …</p>
The post <a href="https://mintaku-blog.net/computer-virus/">コンピューターウイルスの感染場所や経路。WannaCryとは何だったのか</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>「これ1冊で丸わかり 完全図解 セキュリティー入門」を読んで学んだコンピューターウイルスについてまとめておきます。</p>
<h2>コンピューターウイルスとは</h2>
<p>一口にコンピューターウイルス(以下ウイルス)と言っても定義は曖昧だが、一般には悪質なソフトウェア全般を指すことが多いです。情報を盗み出したり、外部から遠隔操作できるようにしたり、金銭を奪うするソフトウェアは全てウイルスと言えます。</p>
<p>ウイルスはその仕組みや働き、プログラムの構造などから、様々な名前がつけられています。</p>
<p>・情報を盗む</p>
<p>スパイウェア：個人情報などを外部に送信する</p>
<p>キーロガー：キーボードの入力情報を外部に送信する</p>
<p>・遠隔操作できるようにする</p>
<p>ダウンローダー：攻撃者が用意した別のウイルスに感染させる</p>
<p>ボット：攻撃者の指示を受けて情報を盗み出したり、第三者を攻撃したりする</p>
<p>・金銭を奪う</p>
<p>ランサムウェア：ユーザのデータを暗号化し、元に戻すために金銭を要求する</p>
<p>マイニングウイルス：パソコンのリソースを使って仮想通貨を得るための計算を実行する</p>
<p>&nbsp;</p>
<h2>ウイルスの感染場所</h2>
<p>ウイルスの感染場所は大きく3つに分類できます。</p>
<ol>
<li>既存のファイルへの埋め込み</li>
<li>新しいファイルとしての追加</li>
<li>メモリ空間への追加</li>
</ol>
<h3>既存のファイルへの埋め込み</h3>
<p>このタイプは、既存のファイルを上書きしたり、一部を書き換えたりすることで感染します。既存のファイルは、ユーザが普段利用するプログラムファイルだったり、Officeの文書ファイルだったりします。</p>
<p>プログラムファイルに感染した場合は、ユーザが起動したり、OSの起動シーケンス中に実行されることで、ウイルスが活動開始します。</p>
<p>一方、オフィススイートの文書ファイルの場合は、マクロと呼ばれる機能によって、文書ファイルが開いたときにウイルスが活動開始します。</p>
<p>&nbsp;</p>
<h3>新しいファイルとしての追加</h3>
<p>このタイプは、パソコンに全く新しいファイルとして入り込むウイルスです。</p>
<p>有益なソフトウェアに見せかけて、ユーザ自身にインストールさせることが多いです。</p>
<p>&nbsp;</p>
<h3>メモリ空間への追加</h3>
<p>このタイプは、メモリ空間に存在し、コンピューターを再起動すれば消えてしまいます。だが、シャットダウン時にレジストリなどOSのシステムファイルに書き込まれて、再起動時に再びメモリ空間に置かれるタイプもあります。</p>
<p>ディスクにファイルを保存しないため、どのタイプよりもウイルス対策ソフトで検知されにくくなります。</p>
<p>&nbsp;</p>
<h2>ウイルスに感染する経路</h2>
<p><img data-attachment-id="1976" data-permalink="https://mintaku-blog.net/computer-virus/image1-9/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image1.png?fit=644%2C362&amp;ssl=1" data-orig-size="644,362" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image1" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image1.png?fit=300%2C169&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image1.png?fit=644%2C362&amp;ssl=1" loading="lazy" class="aligncenter size-full wp-image-1976" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image1.png?resize=644%2C362&#038;ssl=1" alt="" width="644" height="362" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image1.png?w=644&amp;ssl=1 644w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image1.png?resize=300%2C169&amp;ssl=1 300w" sizes="(max-width: 644px) 100vw, 644px" data-recalc-dims="1" /></p>
<p><span style="font-size: 8px;">引用：これ1冊で丸わかり 完全図解 セキュリティー入門</span></p>
<p>ウイルスに感染する経路は主に「メール(添付ファイル)」、「Webアクセス」、「ファイルのダウンロード」、「LAN」、「USBメモリ」の5種類に分けられます。</p>
<p>基本的に感染経路として最も多いのはメールでからだが、2017年4月に発生したWannaCryが大流行した際はネットワーク経由が最も多くなっています。ここでのネットワークはWebアクセスとLANによる感染経路がまとめられています。</p>
<p>&nbsp;</p>
<h2>WannaCryとはなんだったのか</h2>
<p>2017年5月に世界的に大発生したワーム型ランサムウェアであるWannaCryが話題になりましたが、これは一体どんな仕組みで何が起こっていたのか本書で語られていました。</p>
<p>&nbsp;</p>
<h2>ランサムウェアでありワームであるWannaCry</h2>
<p>WannaCryは感染したパソコンのファイルを暗号化し、複合のための身代金を要求するランサムウェアであると同時に感染拡大機能を備えるワーム面も持ちます。</p>
<p>感染拡大の際にWannaCryが悪用したのが、Windowsでファイル共有などに利用されるSMBという機能が抱えていた脆弱性です。</p>
<p>マイクロソフトは2017年3月にこの脆弱性を対処するための更新プログラムを公開しましたが、WannaCryに感染したのは、この更新プログラムを適用していないWindowsパソコンでした。</p>
<p>&nbsp;</p>
<h2>WannaCryが感染を広げる仕組み</h2>
<p><img data-attachment-id="1973" data-permalink="https://mintaku-blog.net/computer-virus/image4-4/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image4.jpg?fit=620%2C600&amp;ssl=1" data-orig-size="620,600" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image4" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image4.jpg?fit=300%2C290&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image4.jpg?fit=620%2C600&amp;ssl=1" loading="lazy" class="aligncenter size-full wp-image-1973" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image4.jpg?resize=620%2C600&#038;ssl=1" alt="" width="620" height="600" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image4.jpg?w=620&amp;ssl=1 620w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image4.jpg?resize=300%2C290&amp;ssl=1 300w" sizes="(max-width: 620px) 100vw, 620px" data-recalc-dims="1" /></p>
<p><span style="font-size: 8px;">引用：これ1冊で丸わかり 完全図解 セキュリティー入門</span></p>
<p>WannaCryは攻撃対象のパソコンにまずポート445で接続します。ポートが開いていなければWannaCryには感染しません。</p>
<p>WannaCryが攻撃対象に接続すると、まずSMBの脆弱性があるかどうかをチェックします。脆弱性がある場合は、侵入口を作るためのプログラムであるバックドアを送り込み、WannaCry本体を送り込んで感染させます。</p>
<p>&nbsp;</p>
<h2>感染拡大能力を得た「EternalBlue」と「DoublePulsar」</h2>
<p><img data-attachment-id="1975" data-permalink="https://mintaku-blog.net/computer-virus/image2-7/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image2.png?fit=606%2C274&amp;ssl=1" data-orig-size="606,274" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image2" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image2.png?fit=300%2C136&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image2.png?fit=606%2C274&amp;ssl=1" loading="lazy" class="aligncenter size-full wp-image-1975" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image2.png?resize=606%2C274&#038;ssl=1" alt="" width="606" height="274" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image2.png?w=606&amp;ssl=1 606w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image2.png?resize=300%2C136&amp;ssl=1 300w" sizes="(max-width: 606px) 100vw, 606px" data-recalc-dims="1" /></p>
<p><span style="font-size: 8px;">引用：これ1冊で丸わかり 完全図解 セキュリティー入門</span></p>
<p>元々感染拡大能力が低かったWannaCryは「EternalBlue」と「DoublePulsar」の2つのツールを取り込むことで、ネットワークを介して急速に被害が拡大しました。</p>
<p>DoublePulsarはWannaCryが悪用するバックドアで、EternalBlueはSMBの脆弱性を悪用することで、DoublePulsarを設置するプログラムです。</p>
<p>これらのツールはハッカー集団「Shadow Brokers」がアメリカのNSAから盗み出したツールを悪用して凶悪化したものでした。</p>
<p>&nbsp;</p>
<h2>WannaCryの仕組み</h2>
<p><img data-attachment-id="1974" data-permalink="https://mintaku-blog.net/computer-virus/image3-5/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image3-e1619666172247.png?fit=614%2C288&amp;ssl=1" data-orig-size="614,288" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image3" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image3-e1619666172247.png?fit=300%2C141&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image3-e1619666172247.png?fit=614%2C288&amp;ssl=1" loading="lazy" class="aligncenter wp-image-1974 size-full" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image3-e1619666172247.png?resize=614%2C288&#038;ssl=1" alt="" width="614" height="288" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image3-e1619666172247.png?w=614&amp;ssl=1 614w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/04/image3-e1619666172247.png?resize=300%2C141&amp;ssl=1 300w" sizes="(max-width: 614px) 100vw, 614px" data-recalc-dims="1" /></p>
<p><span style="font-size: 8px;">引用：これ1冊で丸わかり 完全図解 セキュリティー入門</span></p>
<p>まずEternalBlueを使って、攻撃対象のパソコンのメモリにあるSMBドライバにバックドアのDoublePulsarを送り込みます。</p>
<p>DoublePulsarを仕込まれたメモリ上のSMBドライバは、Isass.exeというシステムファイルのプロセスに対し、WannaCryを含むDLLをインジェクションします。</p>
<p>DLLはプログラムに実行時に動的にリンクさせるライブラリのことで、DLLインジェクションすることで、プロセスに強制的に指定したDLLファイルを注入し、プロセスを本来とは違う動作をさせます。</p>
<p>今回の場合、Isass.exeのプロセスにDLLインジェクションされることで、WannaCryが起動し、暗号化・身代金要求と他のパソコンへの感染拡大を開始します。</p>
<p>&nbsp;</p>
<p><a class="external external_icon" href="https://amzn.to/2QxEeYY" rel="noopener noreferrer nofollow">これ1冊で丸わかり 完全図解 セキュリティー入門</a></p>
<p>&nbsp;</p>The post <a href="https://mintaku-blog.net/computer-virus/">コンピューターウイルスの感染場所や経路。WannaCryとは何だったのか</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/computer-virus/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1972</post-id>	</item>
		<item>
		<title>排他制御(楽観ロック・悲観ロック)について整理する</title>
		<link>https://mintaku-blog.net/exclusion-control/</link>
					<comments>https://mintaku-blog.net/exclusion-control/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Thu, 22 Apr 2021 02:13:50 +0000</pubDate>
				<category><![CDATA[まとめ系]]></category>
		<category><![CDATA[技術本]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=1929</guid>

					<description><![CDATA[<p>トラブル知らずのシステム設計 エラー制御・排他制御編を読み、排他制御について理解しイメージできる形でまとめました。 排他制御 共有資源に対して複数トランザク …</p>
The post <a href="https://mintaku-blog.net/exclusion-control/">排他制御(楽観ロック・悲観ロック)について整理する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>トラブル知らずのシステム設計 エラー制御・排他制御編を読み、排他制御について理解しイメージできる形でまとめました。</p>
<h2>排他制御</h2>
<blockquote><p>共有資源に対して複数トランザクションからの操作が見込まれる場合に、同時アクセスにより不整合が発生することを防ぐため、あるトランザクションから共有資源にアクセスしている時は他のトランザクションからはアクセスできないように直列に処理されるようにする制御のこと</p></blockquote>
<p>つまり、システムを複数の利用者が同時に操作するような場合に、一貫して処理するために必要な制御機構が排他制御です。データの一貫性を保証する必要のある範囲(業務トランザクション)を検討し、その範囲で排他制御します。</p>
<p>例えばチームで共有して編集しているファイルがあったとして、メンバー同士で同時に編集してしまった場合データ不整合が起きてしまいます。そのような事態を防ぐために、あるメンバーがファイルを編集している時は、他のメンバーはそのファイルを編集できないようにする仕組みが必要です。Excelファイルの共有ではファイルごとやセルごとで排他制御を行、データ不整合を防いでいます。</p>
<p>&nbsp;</p>
<h2>楽観ロックと悲観ロック</h2>
<p>楽観ロックは処理の終了時、悲観ロックは開始時に競合を検知するイメージです。実際は以下のようなタイミングでロックをしています。</p>
<ul>
<li>楽観ロックは、ロックキー比較時</li>
<li>悲観ロックは、ロック状態確認時</li>
<li>行ロックは、ロックSQL発行時</li>
</ul>
<p>&nbsp;</p>
<h2>楽観ロック</h2>
<p>楽観ロックとは、他の操作による同時更新はよほどの限り起きないであろうという楽観的な前提の排他制御のことです。</p>
<p>楽観ロックでは「ロックキー」を使います。楽観ロック対象のデータにロックキーという属性を設け、データを更新するたびにロックキーを変更します。業務トランザクション開始時点と終了時点でロックキーの内容が変わっていなければ、他の操作でデータが更新されていないと判断できます。</p>
<h3>楽観ロック対象データの何をロックキーとするか</h3>
<p>ロックキーとしてよく候補になるのは「バージョン」と「タイムスタンプ」です。</p>
<ul>
<li>「バージョン」の場合は、データを更新するたびに数値を加算し、その数値を比較します。<br />
→ 更新したら1→2のようにインクリメントするイメージ</li>
<li>「タイムスタンプ」の場合は、データを更新するたびに更新時刻を上書きし、その時刻を比較します。<br />
→ updated_atのようなカラムを用意し、更新時刻を上書きするイメージ</li>
</ul>
<p>タイムスタンプはデフォルトのテーブルで持っていたりするので、新たにカラムを追加せず採用しがちですが、ロックキーとして「バージョン」を推奨します。なぜなら「タイムスタンプ」は秒単位までしから保有していない場合、同一秒に複数の操作でデータを更新されると楽観ロックの判断ができなくなり、データ不整合が発生します。</p>
<p>それに対して「バージョン」は、更新時に単純に加算される数値であるため、十分な桁数を持っておけば、複数の操作で同一値になることはないからです。</p>
<h3>楽観ロックは同一データの更新頻度が高い時は適さない</h3>
<p>楽観ロックは業務トランザクションの終了のタイミングで排他制御を実現する方法であり、操作が終わるタイミングではじめて他の操作による更新があったことがわかります。楽観ロックは実際のシステムによく採用されますが、同一データの更新頻度が高いケースには適さず、代わりに悲観ロックが採用されます。</p>
<p>&nbsp;</p>
<h2>悲観ロック</h2>
<p>他の操作による同じデータの変更が頻繁に起こるであろうという悲観的な前提の排他制御のことです。業務トランザクションの開始のタイミングで排他制御を実現します。</p>
<p>悲観ロックは、ロック対象のデータにロックしているユーザとロック状態を表す属性を設けます。同一ユーザによる複数端末からの同時ログインを許容しているようなシステムでは、セッションIDのようにどの端末からのアクセスかを識別できる情報も必要です。</p>
<h3>悲観ロックの仕組み</h3>
<p>業務トランザクションが始まると、データのロック状態を参照し、他のユーザによってデータがロックされていないことを確認します。他のユーザによってデータがロックされていた場合、悲観ロックによるエラーが発生し、業務トランザクションを終了させます。誰もデータをロックしていないことを確認できたら、データのロック状態を更新し、ロック中にします。</p>
<p>このように悲観ロックはデータのロック状態を参照してからロック状態を更新するまでの間、他の操作によるデータ更新が行われないようにします。</p>
<h3>ロックを開放するタイミングが難しい</h3>
<p>悲観ロックは業務トランザクションの開始時点でデータをロックして排他制御を実現する方式であるため、終了したタイミングで確実にロックを開放しなければ、誰もそのデータを更新できなくなります。業務トランザクションが終了するタイミングは一つではなく、システムからのログアウト、異なる画面への遷移、ブラウザを閉じるなど様々な事態を想定してロックを開放することが必要になります。さらにシャットダウン、セッションタイムアウトなどの操作はアプリケーション設計で完全防ぐことはできません。</p>
<p>そのため不測の事態に備え、管理者の場合ロック開放できるような機能や長時間ロックされているデータをロック開放する機能を設けるなど、ロック済みのデータを開放する仕組みが必要となります。</p>
<p>&nbsp;</p>
<h2>バッチ処理とオンライン処理を共存させる排他制御の考え方</h2>
<h3>鳴くまで待とうホトトギス方式</h3>
<p>バッチ処理の対象となる全データをDBのロックメカニズムでロック(ここでいう行ロック)できるまで実行するという考え方です。行ロックを取得してしまえば、行ロックを解放するまで他のトランザクションでそのデータを更新することはできません。そのため、オンライン処理がロック開放されるまで待つしかありません。</p>
<h3>殺してしまえホトトギス方式</h3>
<p>バッチ処理を優先し、オンライン処理のロックを奪い取るという考え方です。バッチ処理対象のデータに対して、ロック状態にかかわらずバッチ処理でロック状態を上書きしてしまえば、オンライン処理のロックを奪い取ることができます。ただし、バッチ処理中のデータロックが奪われるとバッチ処理を正しく処理できないため、バッチ処理中のデータは管理者の操作による強制的なロック開放ができないようにするなどの考慮が必要です。</p>
<h3>鳴かせてみせようホトトギス方式</h3>
<p>オンライン処理を優先し、バッチ処理側はロックできたデータのみを処理対象とするという考え方です。オンライン処理で行ロックされているデータは処理対象としないため、データごとに「FOR UPDATE句」で行ロックを取得する必要があります。タイミング悪くバッチ処理中にオンライン処理データをロックしていると、次回のバッチ処理のタイミングまでそのデータを処理できないことになるため注意が必要です。</p>
<p>&nbsp;</p>
<p>参考：<a href="https://amzn.to/3tHNNCz" target="_blank" rel="noopener noreferrer">トラブル知らずのシステム設計 エラー制御・排他制御編</a></p>
<p>&nbsp;</p>The post <a href="https://mintaku-blog.net/exclusion-control/">排他制御(楽観ロック・悲観ロック)について整理する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/exclusion-control/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1929</post-id>	</item>
		<item>
		<title>エンジニアの知的生産術を読んで気づいたことなどメモ</title>
		<link>https://mintaku-blog.net/engineer-intellectual-production/</link>
					<comments>https://mintaku-blog.net/engineer-intellectual-production/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Sat, 10 Apr 2021 02:02:33 +0000</pubDate>
				<category><![CDATA[技術本]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=1944</guid>

					<description><![CDATA[<p>エンジニアの知的生産術を読んで気づいたことや学んだことなどをメモしておきます。 学びのサイクル 学びのサイクルは「情報収集・モデル化・検証」の3要素の繰り返 …</p>
The post <a href="https://mintaku-blog.net/engineer-intellectual-production/">エンジニアの知的生産術を読んで気づいたことなどメモ</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>エンジニアの知的生産術を読んで気づいたことや学んだことなどをメモしておきます。</p>
<h2>学びのサイクル</h2>
<p>学びのサイクルは「情報収集・モデル化・検証」の3要素の繰り返しです。</p>
<h2>学びのサイクル① 情報収集</h2>
<p>情報収集は箱を集めるイメージです。たくさんの箱(情報)を集めて並べていく作業で、この段階では積み上がりません。</p>
<h3>知りたいところから学ぶ</h3>
<h4>前提条件</h4>
<ul>
<li>目標が明確化されている<br />
→ 〇〇を勉強する・マスターするでは不明確。〇〇の血画について検索して読むのように明確化する</li>
<li>目標が達成可能である<br />
→ 達成方法がわからない目標はたどり着けない。達成可能な適切な目標を決める</li>
<li>大まかに全体像を把握している<br />
→ 必要な情報を見つけるためにどこを探せば良いのかがわかる必要がある</li>
</ul>
<h4>大雑把に</h4>
<p>狭い一部分だけを詳細に見るのではなく大雑把に全体を見ると、何か必要なものを探そうとしたときに絞り込むことができるようになります。具体的に以下のような方法があります。</p>
<ul>
<li>目次や見出しをチェックする</li>
<li>ディレクトリ構成を読んだりデータ構造を知る</li>
<li>ドキュメントや論文の大まかな構造</li>
</ul>
<p>&nbsp;</p>
<h2>学びのサイクル② モデル化・抽象化</h2>
<p>モデル化・抽象化は箱を積み上げていくイメージです。情報収集によって集めた箱を土台とし、その上に一つずつ積み上げてることで、高みを目指します。抽象的とは高い位置にあること、具体的とは低い位置にあることを指します。</p>
<p>上に積む箱は、収集したものに限らず、考えることによって自分で作り出すこともあります。この新しい箱を自分で作り出すこと、つまり抽象的な知識を作り出すことがモデル化です。</p>
<h3>比較して学ぶ</h3>
<h4>同じと違うの間に注目</h4>
<p>新しい気づきのためには、同じでも違うでもない、一部同じで一部違うもの同士を比較する必要があります。</p>
<p><img data-attachment-id="1951" data-permalink="https://mintaku-blog.net/engineer-intellectual-production/img_4816/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/03/IMG_4816-scaled-e1616474627653.jpg?fit=2560%2C1689&amp;ssl=1" data-orig-size="2560,1689" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="IMG_4816" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/03/IMG_4816-scaled-e1616474627653.jpg?fit=300%2C198&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/03/IMG_4816-scaled-e1616474627653.jpg?fit=800%2C528&amp;ssl=1" loading="lazy" class="aligncenter wp-image-1951 size-large" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/03/IMG_4816-scaled-e1616474627653-1024x676.jpg?resize=800%2C528&#038;ssl=1" alt="" width="800" height="528" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/03/IMG_4816-scaled-e1616474627653.jpg?resize=1024%2C676&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/03/IMG_4816-scaled-e1616474627653.jpg?resize=300%2C198&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/03/IMG_4816-scaled-e1616474627653.jpg?resize=768%2C507&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/03/IMG_4816-scaled-e1616474627653.jpg?resize=1536%2C1013&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/03/IMG_4816-scaled-e1616474627653.jpg?resize=2048%2C1351&amp;ssl=1 2048w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/03/IMG_4816-scaled-e1616474627653.jpg?w=1600&amp;ssl=1 1600w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/03/IMG_4816-scaled-e1616474627653.jpg?w=2400&amp;ssl=1 2400w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>上図のように「違っている」、「なぜ違っているのか？」、「〇〇の視点で考えると違っていない」などのサイクルを回すことで、一歩一歩階段を上がるように考えを進めていくことができます。</p>
<h4>歴史から学ぶ</h4>
<p>歴史から学ぶことは今と昔の比較で、共通のパターンを見つけることで次に何が起こりそうかを予想できます。またどう変わったのか、なぜ変わったのかを考えることで理解が深まります。</p>
<p>&nbsp;</p>
<h2>学びのサイクル③ 実践・検証</h2>
<p>箱で例えると実践・検証は奥行き方向に並んでいます。正面からは最終的な成功したやり方の箱だけ見えるますが、実はたくさんの試行錯誤の末にできています。</p>
<h3>作って検証</h3>
<p>正しく理解できているどうかは、理解をもとに何かを作ってみて、それが期待通りに動くかどうかで検証できます。プログラミングなら自分で書いて実行し、正しく理解できていない場合はエラーになります。そしてエラーになったプログラムを修正して実行するなど検証できます。</p>
<p>解説ブログ記事を書くのも作ることの一種です。新しいことを学んだら「1日前の自分にどう説明するか？」を考えて解説すると理解が曖昧なところがわかります。</p>
<p>&nbsp;</p>
<h2>タスク処理</h2>
<h3>全部集めてそのあとで処理する</h3>
<p>Getting Things Done(GTD)の手法を使います。GTDでは気になることを全部一か所に集め、やるべき子を覚えておかないといけないというストレスから開放します。その後書き出したタスクを実行します。このように収集フェーズと処理フェーズにわけることが大事です。</p>
<h3>重要事項を優先する</h3>
<p><img data-attachment-id="1952" data-permalink="https://mintaku-blog.net/engineer-intellectual-production/img_4817/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/03/IMG_4817-scaled-e1616474658729.jpg?fit=1497%2C1113&amp;ssl=1" data-orig-size="1497,1113" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="IMG_4817" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/03/IMG_4817-scaled-e1616474658729.jpg?fit=300%2C223&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/03/IMG_4817-scaled-e1616474658729.jpg?fit=800%2C595&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-1952" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/03/IMG_4817-scaled-e1616474658729-1024x761.jpg?resize=800%2C595&#038;ssl=1" alt="" width="800" height="595" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/03/IMG_4817-scaled-e1616474658729.jpg?resize=1024%2C761&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/03/IMG_4817-scaled-e1616474658729.jpg?resize=300%2C223&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/03/IMG_4817-scaled-e1616474658729.jpg?resize=768%2C571&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/03/IMG_4817-scaled-e1616474658729.jpg?w=1497&amp;ssl=1 1497w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>緊急、重要の4つの領域に切り分けてタスクの優先順位を決めていきます。</p>
<p>実際にタスク管理ツールとしてTrelloを使っていますが、上の2つのポイントを押さえているため有効なツールだと再認識しました。</p>
<h3>タイムボックス</h3>
<p>大きすぎるタスクを小さく刻む手軽な方法が時間を切ります。タスクに合わせて時間を決めるのではなく、時間を固定する手法を「決まったサイズ(時間)の箱にタスクを入れる」というイメージでタイムボックス化と言います。</p>
<p>このタイムボックスの考え方を個人のタスク管理に応用したのがポモドーロテクニックです。25分を1ポモドーロとし、25分集中したら5分休みます。これを続けることで、あるタスクが1ポモドーロ(25分)で終わるのか、4ポモドーロかかるのかなどの見積もり力も鍛えることができます。</p>
<p>&nbsp;</p>
<h2>自分経営戦略</h2>
<p>何を学ぶかを決めることは、時間やお金、やる気などの限られた資源を何に投資するか意思決定することです。</p>
<h3>拡大再生産戦略</h3>
<p>拡大再生産戦略とは仕事を効率化することで時間の余裕を作り、その余裕を新たな学びに投資することです。以下の3つの要素から成り立ちます。</p>
<ul>
<li>知識を使って時間を得て、その時間を知識獲得に投資する</li>
<li>知識を使ってお金を得て、そのお金を知識獲得に投資する</li>
<li>知識を使って立場を得て、その立場を知識獲得に投資する</li>
</ul>
<h3>差別化戦略</h3>
<p>T型やπ型と呼ばれる専門性の深さと幅広い専門性を兼ね備えた人材は今後価値が高まります。効果的な戦略として、連続スペシャリスト戦略と呼ばれるある分野の専門性を獲得し、その専門性を活かして異なる分野へ参入し、そこで新しく専門性を獲得します。</p>
<p>前に読んだエンジニア成長戦略でもπ型人材の話は出ていました。個人的にこの自分経営戦略は納得がいくし特にエンジニアではある程度先を見据えて戦略的にキャリアを積むことがとても大切だと感じます。</p>
<p>&nbsp;</p>
<p><a href="https://amzn.to/310hFgP" target="_blank" rel="noopener noreferrer">エンジニアの知的生産術 ──効率的に学び、整理し、アウトプットする</a></p>
<p>&nbsp;</p>The post <a href="https://mintaku-blog.net/engineer-intellectual-production/">エンジニアの知的生産術を読んで気づいたことなどメモ</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/engineer-intellectual-production/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1944</post-id>	</item>
		<item>
		<title>仮想化とコンテナについて整理する</title>
		<link>https://mintaku-blog.net/virtualization-container/</link>
					<comments>https://mintaku-blog.net/virtualization-container/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Fri, 26 Mar 2021 15:04:31 +0000</pubDate>
				<category><![CDATA[まとめ系]]></category>
		<category><![CDATA[技術本]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=1938</guid>

					<description><![CDATA[<p>仮想化&#38;amp;コンテナがしっかりわかる教科書を読んで、仮想化とコンテナについて自分なりに整理してまとめました。 仮想化とは 仮想化とは、実体のない …</p>
The post <a href="https://mintaku-blog.net/virtualization-container/">仮想化とコンテナについて整理する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>仮想化&amp;コンテナがしっかりわかる教科書を読んで、仮想化とコンテナについて自分なりに整理してまとめました。</p>
<h2>仮想化とは</h2>
<p>仮想化とは、実体のないものをあたかも実現しているかのごとく表現する技術のことです。例えばある一台の物理的なサーバ上に、複数の仮想的なサーバを構築することができます。このように仮想化によって、物理的なサーバを増やすことなくサーバを増減できます。</p>
<p>逆に、仮想化によって実際は複数の物理的なサーバで構成されているのに、ユーザには1つのサーバに見せかけることも可能です。</p>
<p>仮想化にはサーバ仮想化、ネットワーク仮想化、ストレージ仮想化など様々な種類があります。</p>
<p>&nbsp;</p>
<h2>サーバ仮想化とは</h2>
<p>サーバ仮想化とは、物理サーバ上に仮想的なサーバを構築する技術のことです。サーバ仮想化には「ホストOS型仮想化」、「ハイパーバイザ型仮想化」、「コンテナ型仮想化」があります。</p>
<ul>
<li>ホストOS型：物理サーバいインストールされたホストOS情で仮想サーバを動作させる</li>
<li>ハイパーバイザ型：ホストOSなしで動作するハイパーバイザと呼ばれる仮想化ソフトウェアを利用する</li>
<li>コンテナ型：コンテナというアプリケーションと実行環境をまとめて隔離する仕組みを利用し、OS単位ではなくアプリケーション単位で仮想化する</li>
</ul>
<p>&nbsp;</p>
<h2>サーバ仮想化メリット・デメリット</h2>
<p>仮想化として最もイメージしやすいホストOS型仮想化におけるメリット・デメリットは以下のことが挙げられます。</p>
<h3>サーバ仮想化メリット</h3>
<h4>基本的に障害に強い</h4>
<p>仮想サーバごとバックアップすることが可能なため、仮想サーバに障害が発生した場合でも、以前のバックアップから簡単に復元することが可能です。</p>
<h4>コピーや削除、スペックの変更が容易</h4>
<p>仮想サーバはデータなため、CPUやメモリなどを必要に応じて増減させて、スペックを変更することができます。またコピーや削除も容易です。サーバの性能を上げるためにサーバそのもののスペックを増強することを「スケールアップ」、サーバの台数を増やすことを「スケールアウト」、減らすことを「スケールイン」といいます。</p>
<h3>サーバ仮想化のデメリット</h3>
<h4>物理サーバに障害時に仮想サーバに影響が出る</h4>
<p>物理サーバに障害が発生すると、そのサーバ上で稼働している全ての仮想サーバに影響が出る場合があります。</p>
<h4>コストが高くつく場合がある</h4>
<p>小規模サービスや障害発生時の業務インパクトが小さいシステムでは、仮想化にかかるコストが高くつく場合があります。提供するサービスとの費用対効果を仮想化の導入前に検討することが必要です。</p>
<p>&nbsp;</p>
<h2>Dockerとは</h2>
<p>Dockerとは、コンテナの実行やコンテナイメージの作成・配布を行うためのプラットフォームです。Dockerはアプリケーションを実行環境ごとパッケージ化するため、開発環境でも運用環境でも同じようにアプリケーションを動させることができます。</p>
<p>DockerはホストOSがLinuxであることを前提につくられており、ホストOSがWindowsやMacOSの場合はDockerのソフトウェアをインストールすることで、コンテナ型仮想化ソフトウェア上にLinuxの仮想マシンが構築されます。コンテナはその仮想マシン上で動作するという構成になっています。</p>
<h3>Dockerのコンセプト</h3>
<ul>
<li>柔軟性：プログラミング言語などが制約されない</li>
<li>疎結合：システムを独立したコンポーネントへ分解できる</li>
<li>軽量：効率的にリソースを活用する</li>
<li>スケーラブル：必要に応じてリソースを増減できる</li>
<li>ポータブル：異なる実行環境への移行が容易</li>
<li>セキュア：コンテナ同士分離できる</li>
</ul>
<p>&nbsp;</p>
<h2>コンテナとは</h2>
<p>コンテナはOS上で実行されているプロセスです。プロセスは実行中のプログラムのことで、コンテナが通常のプロセスと異なる点は、名前空間などの仕組みによって他のプロセスから隔離されるように設定されていることです。そのため、コンテナを使うことで外部から影響を受けない独立した環境でプロセスを実行できます。</p>
<h3>コンテナイメージとは</h3>
<p>コンテナイメージとは、コンテナを実行するためのテンプレートです。コンテナは、コンテナイメージから生成されます。コンテナイメージとコンテナの関係はオブジェクト指向的にいうと、クラスとオブジェクトの関係に似ています。コンテナないのプロセスの実行環境はコンテナイメージによって決まりますが、コンテナイメージ内でプロセスを事項されることはありません。</p>
<p>コンテナイメージの作成は多くの場合、コンテナの作成手順を記述したファイルであるDockerfileを使用して自動で作成します。</p>
<h3>コンテナのライフサイクル</h3>
<p>コンテナには作成や削除といったいくつかの状態があり、作成から削除までの状態の流れをコンテナのライフサイクルといいます。Dockerでは、コンテナの状態として主に「作成」、「実行」、「停止」、「ポーズ」、「削除」の5つがあります。</p>
<ol>
<li>作成：コンテナレイヤーが作成された状態</li>
<li>実行：コンテナ内でプロセスが実行している状態</li>
<li>停止：コンテナ内でプロセスが終了している状態</li>
<li>ポーズ：コンテナ内でプロセスが一時停止している状態</li>
<li>削除：コンテナレイヤーが削除された状態</li>
</ol>
<h3>基本は1コンテナに1プロセス</h3>
<p>コンテナは本質手にはプロセスと同じであるため、同じプロセスに含んだ場合に自然かどうかを基準に判断することができます。例えば、WebシステムにおいてWebサーバ、APサーバ、DBサーバの三層でシステムを構成するとき、1つのコンテナ内で3つのプロセスを実行するとも可能だが、通常別々のプロセスとして実行されるため、3つのコンテナに分けた方良いということになります。</p>
<p>&nbsp;</p>
<p>参考：<a href="https://amzn.to/3cEKtRA" target="_blank" rel="noopener noreferrer">図解即戦力 仮想化&amp;コンテナがこれ1冊でしっかりわかる教科書</a></p>
<p>&nbsp;</p>The post <a href="https://mintaku-blog.net/virtualization-container/">仮想化とコンテナについて整理する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/virtualization-container/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1938</post-id>	</item>
		<item>
		<title>Googleを支える技術を読んで学んだことメモ</title>
		<link>https://mintaku-blog.net/google-tech/</link>
					<comments>https://mintaku-blog.net/google-tech/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Sat, 20 Mar 2021 15:30:38 +0000</pubDate>
				<category><![CDATA[技術本]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=1907</guid>

					<description><![CDATA[<p>2008年に書かれた本であるため、当時におけるGoogleの技術解説となっています。 スケールアップとスケールアウト コンピューターシステムの性能を向上させ …</p>
The post <a href="https://mintaku-blog.net/google-tech/">Googleを支える技術を読んで学んだことメモ</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>2008年に書かれた本であるため、当時におけるGoogleの技術解説となっています。</p>
<h2>スケールアップとスケールアウト</h2>
<p>コンピューターシステムの性能を向上させるには2つの方法があります。1つ目はより優れたハードウェアを導入するスケールアップ、2つ目はハードウェアの数を増やすスケールアウトという方法です。どちらの方法を選択するかは時と場合によります。</p>
<h3>スケールアップのメリット</h3>
<ul>
<li>システムを単純にできる</li>
<li>ソフトウェアの変更が必要ない</li>
</ul>
<h3>スケールアップのデメリット</h3>
<ul>
<li>高性能のハードウェアを導入するため高価である</li>
</ul>
<h3>スケールアウトのメリット</h3>
<ul>
<li>必要に応じて数を増やせる</li>
<li>スケールアップと比べてコストを抑えられる</li>
</ul>
<h3>スケールアップのデメリット</h3>
<ul>
<li>複数のソフトウェアを想定した設計が必要</li>
</ul>
<p>→ 正しく設計しないと数だけ増やしても性能が上がらない</p>
<h3>Googleが選択した方法</h3>
<p>検索エンジンの性質上、いくらでもコピーすることが可能なシステムであり、複数のハードウェアを用いることが可能でした。そのため、Googleではハードウェアはなるべく安価で普及しているものを使いつつ、その性能を十分に引き出すソフトウェアを自分たちで作る方法を選びました。</p>
<p>つまり普段我々が使ってるようなPCを大量に使い、世界規模の分散コンピュータシステムを作り上げていきました。</p>
<p>&nbsp;</p>
<h2>分散システムの構成</h2>
<p>先ほど書いたようにGoogleでは世界規模の分散コンピュータシステムを作り上げており、ラックを1つの単位としたクラスタが複数あるデータセンターを各地に配置しています。</p>
<h3>ラック</h3>
<p>システムの基本となるのがラックです。1つのラックに40〜80台相当の部品が組み込まれています。ラックないのマシンはLANで結ばれ、ネットワークを通して互いに通信できます。</p>
<h3>クラスタ</h3>
<p>ラックを1つの単位として、それが多数結びつくことでクラスタが作られます。クラスタとは互いに協調して動作することで1つの機能を提供するコンピュータの集まりです。</p>
<h3>データセンター</h3>
<p>データセンターには1つまたは複数のクラスタがあるものとされています。Googleはこのようなデータんセンターを世界各地に分散配置しています。</p>
<p>&nbsp;</p>
<h2>Googleのソフトウェア開発</h2>
<p>Googleの開発文化の中で気になったものをまとめました。</p>
<h3>選ばれたプロジェクトだけが残る</h3>
<p>Googleでは仕事は与えられるものではなく、自分で見つけるものであるようです。開発者は数あるプロジェクトから選ぶか、自分で新しいプロジェクトを提案することになります。魅力のないプロジェクトは開発者に選ばれることなく自然淘汰されるような仕組みになっています。</p>
<h3>少人数のプロジェクトチーム</h3>
<p>1つのプロジェクトは2〜6人程度の少人数チームで構成されています。大きなプロジェクトでも小さなプロジェクトに分割されます。チーム内で密にコミュニケーションをとりながらプロジェクト進めるようです。</p>
<h3>20%ルール</h3>
<p>全ての開発者は担当プロジェクトとは別に、就業時間の20%を普段とは違う新しいことに取り組むことが求められます。新しいことにも手を出すことで視野を広げようというのがその目的であるようです。</p>The post <a href="https://mintaku-blog.net/google-tech/">Googleを支える技術を読んで学んだことメモ</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/google-tech/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1907</post-id>	</item>
		<item>
		<title>トラブル知らずのシステム設計を読んで学んだことなどメモ</title>
		<link>https://mintaku-blog.net/trouble-free-system-design/</link>
					<comments>https://mintaku-blog.net/trouble-free-system-design/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Thu, 18 Mar 2021 04:59:58 +0000</pubDate>
				<category><![CDATA[技術本]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=1921</guid>

					<description><![CDATA[<p>トラブル知らずのシステム設計を読んで学んだことなどメモしておきます。 PRG(POST/Redirect/GET)パターン Webブラウザの戻る対策の1つと …</p>
The post <a href="https://mintaku-blog.net/trouble-free-system-design/">トラブル知らずのシステム設計を読んで学んだことなどメモ</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>トラブル知らずのシステム設計を読んで学んだことなどメモしておきます。</p>
<h2>PRG(POST/Redirect/GET)パターン</h2>
<p>Webブラウザの戻る対策の1つとしてPRGパターンがあります。これは登録処理(POST)と画面遷移(Redirect/GET)に分ける方法です。</p>
<p>登録処理(POST)を行った後、登録完了画面へのリダイレクトのレスポンスを返すことで、登録完了画面にGETリクエストを発行します。</p>
<h3>セキュリティ対策として</h3>
<p>POSTリクエストの内容がブラウザの履歴として記録されないため、送信した内容をブラウザの履歴がたどることを防止しています。そのため実装コストはかかりますが、PRGパターンは二重送信抑止、セキュリティ対策の点で効果的な手法です。</p>
<p>ただ、二重送信抑止として完璧ではなく、Webブラウザの戻る対策としては効果的であって、例えばヒストリバックから登録画面まで遡って表示した場合、登録ボタンをクリックすることで登録処理(POST)が行われてしまいます。つまり、二重送信を完全に防いでいるわけではありません。</p>
<p>&nbsp;</p>
<h2>モーダルとモードレス</h2>
<p>別ウィンドウを使用して異なる画面を表示する「子画面遷移」という方式があります。</p>
<p>この子画面には親画面を見たり操作したりできない「モーダル」と子画面を表示している時でも親画面を見たりそうしたりできる「モードレス」の2種類があります。</p>
<p>&nbsp;</p>
<h2>セッション方式とHidden方式</h2>
<p>モーダルやモードレスのように複数画面に分ける場合、前の画面で入力したデータの内容を後続画面に引き継ぐことが必要です。一時的なデータ保持方式として「セッション方式」と「Hidden方式」があります。</p>
<h3>セッション方式</h3>
<p>セッション方式は、Web・APIサーバでユーザセッションごとに管理しているメモリ領域を使用してデータを格納する方法です。注意点は、Web・APIサーバのメモリを消費するので、同時接続のユーザ数や同時画面起動数が増えるとメモリ使用量が大きく変動し、アウトオブメモリ(OOM)のリスクが高まります。</p>
<p>また、モードレスの場合はセッション管理をしっかり行わないと、複数の画面から同一のメモリ領域を更新してしまい、セッションの上書き問題が起きてしまうため注意が必要です。</p>
<h3>Hidden方式</h3>
<p>Hidden方式は、HTMLのinputタグのType属性をhiddenに指定し、画面に入力したデータをHTML文に含める方法です。注意点は、データ量が多いとブラウザとサーバ間の通信量が増大し、遅延の原因になることです。</p>
<p>また、ブラウザの開発者ツールなどを使用してhiddenの内容を編集できてしまいます。そのため、暗号化するなどの不正改ざんを防ぐ対策が必要です。</p>
<p>&nbsp;</p>
<h2>インデックスが性能を大きく左右</h2>
<h3>DBの実行計画</h3>
<p>DBの実行計画とは、発行されたクエリを実行するための手順書のことです。対象のテーブルからのデータ取得方法や結合方法などが書かれています。</p>
<p>そのためSQLのパフォーマンスは実行計画によって大きく左右されます。実行計画を確認しインデックスを貼ることでパフォーマンスを向上することができます。</p>
<h3>MySQLで実行計画を確認するには</h3>
<p>ちなみにMySQLで実行計画を確認するにはEXPLAINステートメントを使います。クエリの先頭にEXPLAINをつけることで実行計画を確認することができます。実行結果のそれぞれの項目がどのような意味なのかは以下の記事が参考になります。</p>
<div class="ys-blog-card__text-link"><a href="https://qiita.com/kzbandai/items/ea02727f4bb539fcedb5" >https://qiita.com/kzbandai/items/ea02727f4bb539fcedb5</a></div>
<h3>テーブルフルスキャンとインデックススキャン</h3>
<p>大量のデータが格納されているテーブルをフルスキャンすると多大なコストがかかります。フルスキャンを避ける手法がインデックススキャンです。インデックスとは索引のことで、書籍などの索引と同じ考え方です。</p>
<p>DBは一定サイズのデータブロックにデータが格納されており、テーブルフルスキャンでは全てのデータブロックを読み取ります。インデックスを使うとダイレクトにデータブロックを特定できます。</p>
<p>&nbsp;</p>
<p><a href="https://amzn.to/2Oqtj2d" target="_blank" rel="noopener noreferrer">トラブル知らずのシステム設計</a></p>
<p>&nbsp;</p>The post <a href="https://mintaku-blog.net/trouble-free-system-design/">トラブル知らずのシステム設計を読んで学んだことなどメモ</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/trouble-free-system-design/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1921</post-id>	</item>
	</channel>
</rss>
