<?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>Kemmy | Kemmy&#039;s Blog</title>
	<atom:link href="https://www.kemmy-it.com/author/yuyulife/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.kemmy-it.com</link>
	<description>データベースやプログラミング言語等の基本的事項を、図や表を使ってアウトプットしています。</description>
	<lastBuildDate>Sat, 13 Dec 2025 01:07:20 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.kemmy-it.com/wp-content/uploads/2024/09/Kemmy_vga-150x150.png</url>
	<title>Kemmy | Kemmy&#039;s Blog</title>
	<link>https://www.kemmy-it.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【PostgreSQL】 「pgAdmin 4」が起動しない？　現象・原因・対策 トップ５！</title>
		<link>https://www.kemmy-it.com/2025/11/09/pgadmin_not_start/</link>
		
		<dc:creator><![CDATA[Kemmy]]></dc:creator>
		<pubDate>Sun, 09 Nov 2025 06:56:49 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<guid isPermaLink="false">https://www.kemmy-it.com/?p=6849</guid>

					<description><![CDATA[はじめに Windows 11環境で「pgAdmin 4が起動しない」不具合について、その現象の具体例と、原因・対策を紹介します。 動作環境 第1位　「The pgAdmin 4 server could not be  [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">はじめに</h2>



<p>Windows 11環境で「pgAdmin 4が起動しない」不具合について、その現象の具体例と、原因・対策を紹介します。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">動作環境</h3>



<ul class="wp-block-list">
<li>Windows 11 Pro 24H2</li>



<li>PostgreSQL 17.6</li>



<li>pgAdmin 4 ：Ver. 9.6　Python Ver. 3.13.6</li>
</ul>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">第1位　「The pgAdmin 4 server could not be contacted」エラー</h2>



<h3 class="wp-block-heading">pgAdmin 4 起動時の現象</h3>



<p>起動時にブラウザが開くが、上記エラー「The pgAdmin 4 server could not be contacted」が表示されて操作不能となる</p>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">原因</h3>



<p>セッションファイルの破損、または前回の異常終了</p>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">対策</h3>



<p>以下のようにRoamingフォルダ内の「pgAdmin」フォルダを削除する</p>



<pre class="wp-block-code bash"><code>Remove-Item "$env:APPDATA\pgAdmin" -Recurse -Force</code></pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>又は、手動で削除</p>



<pre class="wp-block-code bash"><code>C:\Users\ユーザー名\AppData\Roaming\pgAdmin</code></pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>再起動後、正常に起動するかどうかを確認する。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="linkcard"><div class="lkc-external-wrap"><a rel="noopener" class="lkc-link no_icon" href="https://amzn.to/4hQ2L3v" data-lkc-id="102" target="_blank"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=amzn.to" alt="" width="16" height="16" /></div><div class="lkc-domain">amzn.to</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Famzn.to%2F4hQ2L3v?w=200" width="170px" height="200px" alt="" /></figure><div class="lkc-title">Bigme B6、カラー電子書籍リーダー、4GB+64GB 6インチ電子ペーパータ 、Android 14...</div><div class="lkc-excerpt">レビュー：ストレージ容量が増やせないKindleが不便で購入しました。SDも使えて、持っている本を全部ダウンロードしてオフラインでもいつでも読めるのは便利ですね。PlayBooksでも何冊か買っているので1つの端末で完結するのも便利です。</div></div><div class="clear"></div></div></a></div></div>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">第2位　PostgreSQLサービスが停止している</h2>



<h3 class="wp-block-heading">pgAdmin 4 起動時の現象</h3>



<p>pgAdminは起動するが、データベースに接続できない</p>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">原因</h3>



<p>PostgreSQLサービスに異常があるため、pgAdminがサービスに接続できない。</p>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">対策</h3>



<p>PostgreSQLサービスの存在とその状態（起動中か停止中）を確認する</p>



<p>確認方法（例）</p>



<pre class="wp-block-code bash"><code># PostgreSQLサービスの存在と状態を確認
Get-Service | Where-Object { $_.Name -like "postgresql*" }</code></pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p><strong>出力例</strong></p>



<ul class="wp-block-list">
<li>サービスは存在しているが、起動していない場合</li>
</ul>



<pre class="wp-block-code bash"><code>Status   Name               DisplayName
------   ----               -----------
Stopped  postgresql-x64-17  PostgreSQL 17</code></pre>



<p>サービスが存在しない場合は、何も表示されません。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">サービスが起動していない場合</h4>



<p>サービスを起動する。<br>起動例：サービス名はPostgreSQLのバージョンによって異なるので注意</p>



<pre class="wp-block-code bash"><code>Start-Service -Name "postgresql-x64-17"</code></pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">PostgreSQLが未インストールの場合</h4>



<p>下記のコマンドでインストールするか、公式ダウンロードサイトからインストーラーをダウンロードしてインストールする。</p>



<pre class="wp-block-code bash"><code>New-Service -Name "postgresql-x64-17" -BinaryPathName "C:\Program Files\PostgreSQL\17\bin\pg_ctl.exe runservice" -DisplayName "PostgreSQL 17" -StartupType Automatic</code></pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">サービス登録が失敗している場合</h4>



<p>以下のようにサービスを登録する（パスは環境に応じて調整）</p>



<pre class="wp-block-code bash"><code>New-Service -Name "postgresql-x64-17" -BinaryPathName "C:\Program Files\PostgreSQL\17\bin\pg_ctl.exe runservice" -DisplayName "PostgreSQL 17" -StartupType Automatic</code></pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="linkcard"><div class="lkc-external-wrap"><a rel="noopener" class="lkc-link no_icon" href="https://amzn.to/4ot6UwB" data-lkc-id="103" target="_blank"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=amzn.to" alt="" width="16" height="16" /></div><div class="lkc-domain">amzn.to</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Famzn.to%2F4ot6UwB?w=200" width="170px" height="200px" alt="" /></figure><div class="lkc-title">Amazon Kindle - 目に優しい、かさばらない、大きな画面で読みやすい</div><div class="lkc-excerpt">レビュー：初めてのKindleタブレット。サイズ選びに迷いましたが、軽くて持ち運びやすく、寝転んで読むのにも快適です。読書がますます楽しくなりこちらを選んで正解でした。</div></div><div class="clear"></div></div></a></div></div>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">第3位　プロキシ設定がlocalost通信を妨害している</h2>



<h3 class="wp-block-heading">pgAdmin 4 起動時の現象</h3>



<ul class="wp-block-list">
<li>ブラウザは開くが「The pgAdmin 4 server could not be contacted」と表示される</li>



<li>真っ白な画面のまま何も表示されない</li>
</ul>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">原因</h3>



<p>Windowsのプロキシ設定がlocalhost通信を外部に転送しようとして失敗する。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>pgAdmin 4は、起動時にローカルHTTPサーバー（通常 http://127.0.0.1:5050）を立ち上げてUIを表示します。<br>しかし、Windowsのプロキシ設定が有効になっていると、<strong>localhostへの通信がプロキシ経由になり、pgAdminのローカルサーバーに接続できなくなる</strong>ことがあります。</p>



<ul class="wp-block-list">
<li>この問題が起こり易い環境
<ul class="wp-block-list">
<li>VPN接続中</li>



<li>企業ネットワークでグローバルプロキシが強制されている</li>



<li>Windowsの「自動プロキシ検出」が有効になっている</li>
</ul>
</li>
</ul>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">対策</h3>



<h4 class="wp-block-heading">localhost通信をプロキシから除外する</h4>



<ul class="wp-block-list">
<li><strong>環境変数 <code>NO_PROXY</code> を設定する（推奨）</strong><br>pgAdminの起動時にこの環境変数が設定されていれば、<strong>localhost通信がプロキシを経由せず直接処理されます</strong>。</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>PowerShellで設定（ユーザー環境変数：pgAdmin 4 再起動必要）</p>



<pre class="wp-block-code bash"><code>&#091;System.Environment]::SetEnvironmentVariable("NO_PROXY", "127.0.0.1,localhost", "User")</code></pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>コマンドプロンプトで設定（永続化：：pgAdmin 4 再起動必要）</p>



<pre class="wp-block-code bash"><code>setx NO_PROXY "127.0.0.1,localhost"</code></pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="linkcard"><div class="lkc-external-wrap"><a rel="noopener" class="lkc-link no_icon" href="https://amzn.to/3LvPVv8" data-lkc-id="104" target="_blank"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=amzn.to" alt="" width="16" height="16" /></div><div class="lkc-domain">amzn.to</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Famzn.to%2F3LvPVv8?w=200" width="170px" height="200px" alt="" /></figure><div class="lkc-title">【Kindle (2024年発売・2022年発売) 用】Amazon純正 ファブリックカバー (マッチャ)</div><div class="lkc-excerpt">レビュー：純正の製品かそうでないものを購入するか迷いましたが、結論これで大満足でした。触り心地が良く、ピンクの発色もとても良いです。カバーの開閉で画面がオンオフされるなど機能性も全く問題ありません。女性にプレゼントしましたが、ケースに起因する重量感は特段感じなかったとのこと。ケースに迷っている方はマストバイの商品かと思います。</div></div><div class="clear"></div></div></a></div></div>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">第4位　管理者権限で起動していない</h2>



<h3 class="wp-block-heading">pgAdmin 4 起動時の現象</h3>



<p>起動はするが、設定変更や接続が反映されない。</p>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">原因</h3>



<p>pgAdminは一部の操作に管理者権限が必要。</p>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">対策</h3>



<p>ショートカットを右クリック → 「管理者として実行」。</p>



<ul class="wp-block-list">
<li>常に管理者として実行する方法
<ul class="wp-block-list">
<li>ショートカットの「プロパティ」</li>



<li>「互換性」タブ</li>



<li>「管理者としてこのプログラムを実行」にチェック</li>
</ul>
</li>
</ul>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="469" height="579" src="https://www.kemmy-it.com/wp-content/uploads/2025/11/01_pgadmin_notStrt_01.png" alt="pgAdmin 4 プロパティ、「管理者としてこのプログラムを実行する」設定画面" class="wp-image-6867" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/11/01_pgadmin_notStrt_01.png 469w, https://www.kemmy-it.com/wp-content/uploads/2025/11/01_pgadmin_notStrt_01-243x300.png 243w" sizes="(max-width: 469px) 100vw, 469px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="linkcard"><div class="lkc-external-wrap"><a rel="noopener" class="lkc-link no_icon" href="https://amzn.to/49sIgIb" data-lkc-id="137" target="_blank"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=amzn.to" alt="" width="16" height="16" /></div><div class="lkc-domain">amzn.to</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Famzn.to%2F49sIgIb?w=200" width="170px" height="200px" alt="" /></figure><div class="lkc-title">【Android16 タブレット 11インチ 世界初登場】</div><div class="lkc-excerpt">価格が安いのでさほど期待はしていませんでしたが、画質は悪くないYouTube動画も問題なくみれます。ゲームはやらないので、普段使いなら十分な性能だと思います。また付属品が充実している点も購入ポイントでした。</div></div><div class="clear"></div></div></a></div></div>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">第5位　pgAdminのバージョンが古い</h2>



<h3 class="wp-block-heading">pgAdmin 4 起動時の現象</h3>



<p>Windows 11で起動しない、またはUIが崩れる。</p>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">原因</h3>



<p>古いバージョンでは互換性に問題がある。</p>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">対策</h3>



<p>最新版のpgAdmin 4をインストールする。</p>



<pre class="wp-block-code bash"><code>winget install --id=pgAdmin.pgAdmin4</code></pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">コマンドの実行で<br>「入力条件に一致するパッケージが見つかりませんでした」が表示される場合</h4>



<ul class="wp-block-list">
<li><strong>原因１</strong><br><strong>リポジトリが不足している</strong></li>
</ul>



<p>リポジトリの確認とリセット。Powershellで以下のコマンドを実行</p>



<pre class="wp-block-code bash"><code>winget source list</code></pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>winget と msstore の両方が表示されない場合は、以下のコマンドでリセットし、再度「winget source list」コマンドで確認。</p>



<pre class="wp-block-code bash"><code>winget source reset --force</code></pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>筆者の場合は、「winget と msstore 」の両方が入ってました。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="724" height="160" src="https://www.kemmy-it.com/wp-content/uploads/2025/11/01_pgadmin_notStrt_02.png" alt="winget source list　コマンドの実行結果　画像" class="wp-image-6869" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/11/01_pgadmin_notStrt_02.png 724w, https://www.kemmy-it.com/wp-content/uploads/2025/11/01_pgadmin_notStrt_02-300x66.png 300w" sizes="(max-width: 724px) 100vw, 724px" /></figure>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>原因２</strong><br>IDが誤っているか登録されていない。pgAdmin.pgAdmin4というIDが現在のwingetリポジトリに存在しない可能性があるので、正しいIDを以下のコマンドで検索します。</li>
</ul>



<pre class="wp-block-code bash"><code>winget search pgAdmin</code></pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>筆者の環境では、正しいIDは「PostgreSQL.pgAdmin」でした。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="866" height="213" src="https://www.kemmy-it.com/wp-content/uploads/2025/11/01_pgadmin_notStrt_03.png" alt="winget search pgAdmin　コマンドの実行結果　画像" class="wp-image-6871" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/11/01_pgadmin_notStrt_03.png 866w, https://www.kemmy-it.com/wp-content/uploads/2025/11/01_pgadmin_notStrt_03-300x74.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/11/01_pgadmin_notStrt_03-768x189.png 768w" sizes="(max-width: 866px) 100vw, 866px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>正しいIDが分かったので、以下のコマンドでインストールします。</p>



<pre class="wp-block-code"><code>winget install --id=PostgreSQL.pgAdmin</code></pre>



<figure class="wp-block-image size-full"><img decoding="async" width="874" height="201" src="https://www.kemmy-it.com/wp-content/uploads/2025/11/01_pgadmin_notStrt_05.png" alt="winget install --id=PostgreSQL.pgAdmin　コマンドの実行結果　画像" class="wp-image-6872" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/11/01_pgadmin_notStrt_05.png 874w, https://www.kemmy-it.com/wp-content/uploads/2025/11/01_pgadmin_notStrt_05-300x69.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/11/01_pgadmin_notStrt_05-768x177.png 768w" sizes="(max-width: 874px) 100vw, 874px" /></figure>



<p>インストール中は、下記のプログレスバーが表示されます。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="499" height="392" src="https://www.kemmy-it.com/wp-content/uploads/2025/11/01_pgadmin_notStrt_04.png" alt="インストール中のプログレスバー　画像" class="wp-image-6873" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/11/01_pgadmin_notStrt_04.png 499w, https://www.kemmy-it.com/wp-content/uploads/2025/11/01_pgadmin_notStrt_04-300x236.png 300w" sizes="(max-width: 499px) 100vw, 499px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">まとめ</h2>



<p>pgAdmin 4の起動トラブルは「環境ファイル」「サービス」「権限」「プロキシ設定」等、多岐にわたります。特にプロキシがlocalhost通信を妨害するケースでは、環境変数 <code>NO_PROXY</code> の設定やWindowsのプロキシ除外設定が有効です。ログファイルやポート状態を確認しながら、再現性のある手順で対処することで、初心者でも安定した起動環境を構築できます。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Visual Studio 2022】が起動しない！　原因と対処法を徹底解説【初心者向け】</title>
		<link>https://www.kemmy-it.com/2025/11/01/visual_studio_fail_boot/</link>
		
		<dc:creator><![CDATA[Kemmy]]></dc:creator>
		<pubDate>Sat, 01 Nov 2025 12:02:06 +0000</pubDate>
				<category><![CDATA[Visual Studio]]></category>
		<guid isPermaLink="false">https://www.kemmy-it.com/?p=6538</guid>

					<description><![CDATA[はじめに Visual Studio 2022を使っていると、ある日突然「起動しない」「スタート画面が表示されない」といったトラブルに遭遇することがあります。 本ブログでは、Visual Studio 2022が起動しな [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">はじめに</h2>



<p>Visual Studio 2022を使っていると、ある日突然「起動しない」「スタート画面が表示されない」といったトラブルに遭遇することがあります。</p>



<p>本ブログでは、Visual Studio 2022が起動しなくなった場合の対処法を、分かり易く紹介します。</p>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Visual Studio 2022が起動する仕組み</h2>



<p>まずトラブルの原因を特定するため、Visual Studio 2022 の起動プロセスを説明します。</p>



<ol class="wp-block-list">
<li><strong>devenv.exe の起動</strong><br>Visual Studio の実行ファイル（devenv.exe ）が起動され、Visual Studio 2022の初期化が始まる。<br><br></li>



<li><strong>ライセンスの検証</strong><br>「%LOCALAPPDATA%\Microsoft\VSCommon\OnlineLicensing」 にあるキャッシュを参照し、ライセンスの有効性を確認する。
<ul class="wp-block-list">
<li><strong>%LOCALAPPDATA%</strong><br>C:\Users\ユーザ名\AppData\Local　を示す。<br><br></li>
</ul>
</li>



<li><strong>拡張機能の読み込み</strong><br>ReSharperなどの拡張機能が順次読み込まれる。SafeModeでは読み込みをスキップ可能。<br><br></li>



<li><strong>ユーザー設定の復元<br></strong>%APPDATA%\Microsoft\VisualStudio に保存された設定ファイルを読み込み、前回の状態を復元する。
<ul class="wp-block-list">
<li>C:\Users\ユーザ名\AppData\Roaming　を示す。<br><br></li>
</ul>
</li>



<li><strong>ワークロードの初期化</strong><br>C#や.NETなど、インストール済みのワークロードに応じて必要なコンポーネントを初期化する。<br><br></li>



<li><strong>スタートウィンドウの表示</strong><br>最近開いたプロジェクトやテンプレートが表示され、ユーザー操作が可能になる。</li>
</ol>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="linkcard"><div class="lkc-external-wrap"><a rel="noopener" class="lkc-link no_icon" href="https://amzn.to/4nBFQdj" data-lkc-id="95" target="_blank"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=amzn.to" alt="" width="16" height="16" /></div><div class="lkc-domain">amzn.to</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Famzn.to%2F4nBFQdj?w=200" width="170px" height="200px" alt="" /></figure><div class="lkc-title">改訂新版　Visual Studio パーフェクトガイド</div><div class="lkc-excerpt">本書は、初めて開発を行う人に向けに最新の「Visual Studio 2022」の活用方法を解説した入門書です。本書を読めば、.NET MAUI／Blazorによるマルチプラットフォーム開発、単体テストフレームワークを用いたソフトウェアテスト、Run To Clickによるデバッグ技法、行ステージングによるソースコード管理など開発に必要なVisual Studioの活用法がわかります。</div></div><div class="clear"></div></div></a></div></div>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Visual Studio 2022 が起動しないときにまず行うべき診断</h2>



<h3 class="wp-block-heading">ライセンスキャッシュの確認</h3>



<p>%LOCALAPPDATA%\Microsoft\VSCommon\OnlineLicensing　フォルダ内の「<code>default.metadata</code>」 が NULL 埋めされていたら破損。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">SafeMode で起動できるか確認する</h3>



<p>ファイ名を指定して実行（「ウィンドウズキー＋W」）で、「devenv.exe /SafeMode」コマンドが実行できるか確認する。</p>



<p>拡張機能を読み込まないで起動するので、起動できた場合は拡張機能が原因の可能性が大きい。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="384" src="https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-003-1024x384.png" alt="" class="wp-image-4115" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-003-1024x384.png 1024w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-003-300x113.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-003-768x288.png 768w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-003-1536x576.png 1536w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-003.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">起動ログを確認する</h3>



<p>「devenv.exe /log」で起動後、ログファイル「%APPDATA%\Microsoft\VisualStudio\Version\ActivityLog.xml」内のエラー内容（例：ライセンス検証失敗、拡張機能クラッシュ）を確認する。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">TEMP環境変数の確認</h3>



<p>セミコロン付きや無効なパスがあると起動に失敗します。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="linkcard"><div class="lkc-external-wrap"><a rel="noopener" class="lkc-link no_icon" href="https://amzn.to/43DRIo6" data-lkc-id="96" target="_blank"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=amzn.to" alt="" width="16" height="16" /></div><div class="lkc-domain">amzn.to</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Famzn.to%2F43DRIo6?w=200" width="170px" height="200px" alt="" /></figure><div class="lkc-title">Visual Studioパーフェクトガイド 単行本</div><div class="lkc-excerpt">本書はIDEに焦点を当てた書籍です。IDEは豊富な機能が揃っているため、C#を用いてUnityでゲーム開発を行う場合やクロスプラットフォーム開発を行う際,IDE(Visual Studio)を使うのはデファクトスタンダードになっています。本書は新人エンジニアに向けて,豊富な機能が揃ったIDEが裏で何をやっているかをわかりやすく解説した書籍を目指します。</div></div><div class="clear"></div></div></a></div></div>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Visual Studio 2022 が起動しない原因と対処方法</h2>



<h3 class="wp-block-heading"><strong>ライセンスキャッシュ破損</strong></h3>



<p>Visual Studio は、起動時のライセンスを、毎回オンラインで確認するのではなく、以下のフォルダにあるキャッシュファイル default.metadata 等を参照します。</p>



<pre class="wp-block-code bash"><code>%LOCALAPPDATA%\Microsoft\VSCommon\OnlineLicensing</code></pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading"><strong>ライセンスキャッシュが破損した場合</strong>の症状</h4>



<ul class="wp-block-list">
<li>Visual Studio が起動直後にクラッシュ</li>



<li>スタート画面が表示されず、プロセスが即終了</li>



<li>ログに「License validation task failed unexpectedly」などのエラーが記録される</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">対処方法</h4>



<p>以下のようにして、キャッシュのリセットを実行します。</p>



<p><strong>「%LOCALAPPDATA%\Microsoft\VSCommon\OnlineLicensing」のフォルダ名称を　「OnlineLicensing_bkup」等の名称に変更し、Visual Studio を再起動。</strong>こうする事で、新しいキャッシュが自動生成される。<br>※この操作はライセンス情報の再取得を促すもので、ライセンス自体が無効になるわけではありません。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="384" src="https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-001-1024x384.png" alt="" class="wp-image-4112" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-001-1024x384.png 1024w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-001-300x113.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-001-768x288.png 768w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-001-1536x576.png 1536w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-001.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">拡張機能の不具合</h3>



<h4 class="wp-block-heading">拡張機能が不具合時の症状</h4>



<ul class="wp-block-list">
<li>スプラッシュ画面が表示された直後に強制終了</li>



<li>スタートウィンドウが表示されず、プロセスが消える</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">拡張機能の不具合かどうかの確認方法</h4>



<ul class="wp-block-list">
<li><strong>SafeModeで起動してみる</strong></li>
</ul>



<pre class="wp-block-code"><code>devenv.exe /SafeMode</code></pre>



<p>SafeModeでは拡張機能が読み込まれない為、このモードで起動できる場合は拡張機能が原因の可能性が高いと言えます。<br></p>



<ul class="wp-block-list">
<li><strong>起動ログを確認する</strong><br>「%APPDATA%\Microsoft\VisualStudio\17.0\ActivityLog.xml」に以下のような記述がある場合、拡張機能がクラッシュの原因です</li>
</ul>



<pre class="wp-block-code plaintext"><code>Extension 'ReSharper' failed to load.
Exception: System.NullReferenceException...</code></pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">対処方法</h4>



<ul class="wp-block-list">
<li>SafeModeで起動して、拡張機能を無効化 又は、削除
<ul class="wp-block-list">
<li>SafeModeで起動（「ファイル名を指定して実行」で、<code>devenv.exe /SafeMode</code>）</li>



<li>メニュー → [拡張機能] → [拡張機能の管理]</li>



<li>問題のある拡張機能（例：ReSharper）を「無効化」または「アンインストール」<br><br></li>
</ul>
</li>



<li>Visual Studio Installer で修復（拡張機能の不整合も含めて再構成される）
<ul class="wp-block-list">
<li>スタートメニュー → Visual Studio Installer → 対象バージョン → 修復</li>
</ul>
</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="linkcard"><div class="lkc-external-wrap"><a rel="noopener" class="lkc-link no_icon" href="https://amzn.to/47BtsUT" data-lkc-id="97" target="_blank"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=amzn.to" alt="" width="16" height="16" /></div><div class="lkc-domain">amzn.to</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Famzn.to%2F47BtsUT?w=200" width="170px" height="200px" alt="" /></figure><div class="lkc-title">Kindle Paperwhite (16GB) 7インチディスプレイ</div><div class="lkc-excerpt">レビュー：読書が楽しくなるガジェット。スマホで読むのとは違います。カラー版もありますが、カラーの書籍って雑誌を除くとそんなにないのでPaperwhiteで十分だと個人的には思います。</div></div><div class="clear"></div></div></a></div></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">アップデート失敗</h3>



<p>アップデート失敗は、構成ファイルの破損やネットワーク不具合、インストーラーの不整合などが原因で発生します。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">アップデート失敗時の症状</h4>



<p>以下の様に、症状は多岐に渡る。</p>



<ul class="wp-block-list">
<li><strong>Visual Studioが起動しない</strong>
<ul class="wp-block-list">
<li>スプラッシュ画面が表示された直後にクラッシュ</li>



<li>プロセス（<code>devenv.exe</code>）が一瞬で終了する<br><br></li>
</ul>
</li>



<li><strong>Visual Studio Installer自体が起動しない</strong><br><br></li>



<li><strong>SafeModeでも起動しない</strong><br><br></li>



<li><strong>特定のワークロードが消えている</strong><br><br></li>



<li><strong>IntelliSenseが動作しない</strong><br><br></li>



<li><strong>ツールウィンドウが表示されない</strong><br><br></li>



<li><strong>起動ログ（ActivityLog.xml）に下記のような構成エラーが記録される</strong></li>
</ul>



<pre class="wp-block-code plaintext"><code>Package 'Microsoft.VisualStudio.Shell.Connected' failed to load</code></pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>Visual Studio Installerでの症状</strong>
<ul class="wp-block-list">
<li>「修復」ボタンがグレーアウトしている</li>



<li>インストール済みの構成が表示されない</li>



<li>「アップデートに失敗しました」などのポップアップが出る</li>
</ul>
</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">対処方法</h4>



<ul class="wp-block-list">
<li><strong>Visual Studio Installer で修復を試す</strong>
<ul class="wp-block-list">
<li>スタートメニューから「Visual Studio Installer」を起動</li>



<li>対象のバージョン（例：Visual Studio 2022）を選択</li>



<li>「修復」ボタンをクリック</li>



<li>修復完了後、再起動して確認<br><br></li>
</ul>
</li>



<li><strong>Installer自体が起動しない、修復できない場合は、Microsoft公式の「InstallCleanup.exe」ツールを使ってインストール情報を完全に削除します。</strong>
<ul class="wp-block-list">
<li>管理者権限でコマンドプロンプトを起動</li>



<li>以下のコマンドを実行</li>
</ul>
</li>
</ul>



<pre class="wp-block-code bash"><code>"C:\Program Files (x86)\Microsoft Visual Studio\Installer\InstallCleanup.exe" -i 17</code></pre>



<p>※ <code>-i 17</code> は Visual Studio 2022 のバージョン指定<br>　クリーンアップ完了後、Visual Studio 2022 を再インストール<br></p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>アップデートが「ダウンロードできない」「接続できない」といったネットワーク系のエラーで失敗する場合</strong>
<ul class="wp-block-list">
<li><code>C:\Windows\System32\drivers\etc\hosts</code> を管理者権限で開く</li>



<li>「93.184.215.201 download.visualstudio.microsoft.com」　を追記
<ul class="wp-block-list">
<li><code>93.184.215.201</code> は、米国の CDN（コンテンツ配信ネットワーク）やホスティングサービスが使用する IP アドレスのひとつで、特に <a href="https://example.com/">example.com</a> というテスト用ドメインのホスト先。本来の Microsoft の更新サーバーではなく、接続テストや一時的な回避策として使われることがあるだけで、恒久的な解決策ではありません。</li>
</ul>
</li>



<li>コマンドプロンプトで、「ipconfig /flushdns」を実行</li>
</ul>
</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="384" src="https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-005-1024x384.png" alt="" class="wp-image-4117" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-005-1024x384.png 1024w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-005-300x113.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-005-768x288.png 768w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-005-1536x576.png 1536w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-005.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">TEMP環境変数の誤設定</h3>



<h4 class="wp-block-heading">よくある誤設定</h4>



<ul class="wp-block-list">
<li><strong><code>TEMP=C:\Temp;</code>（末尾にセミコロン）</strong>
<ul class="wp-block-list">
<li>パスが無効と認識され、起動失敗<br><br></li>
</ul>
</li>



<li><strong><code>TEMP=</code>（空欄）</strong>
<ul class="wp-block-list">
<li>一時ファイルが保存できず、クラッシュ<br><br></li>
</ul>
</li>



<li><strong><code>TEMP=D:\フォルダ名</code>（存在しないパス）</strong>
<ul class="wp-block-list">
<li>ファイル書き込みエラーで起動不能<br><br></li>
</ul>
</li>



<li><strong><code>TEMP</code> がネットワークドライブ</strong>
<ul class="wp-block-list">
<li>アクセス遅延や失敗で起動不能になることも<br></li>
</ul>
</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="linkcard"><div class="lkc-external-wrap"><a rel="noopener" class="lkc-link no_icon" href="https://amzn.to/3WzBCIf" data-lkc-id="99" target="_blank"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=amzn.to" alt="" width="16" height="16" /></div><div class="lkc-domain">amzn.to</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Famzn.to%2F3WzBCIf?w=200" width="170px" height="200px" alt="" /></figure><div class="lkc-title">New Amazon Kindle Colorsoft | 16GBストレージ、防水、7インチカラーディスプレイ</div><div class="lkc-excerpt">booxなどのandroid搭載の電子ペーパー端末と迷いましたが、お風呂で使いたかったので結局はこの商品にしました。電子ペーパーはページ送り時の読み込みが遅いと言う印象がありましたが個人的には全然問題ありませんでした。カラーの発色は淡いですが、こんなもので良いだろうと言う感想です。</div></div><div class="clear"></div></div></a></div></div>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">まとめ</h2>



<p>Visual Studio が突然起動しなくても慌てる必要はありません。C#等のソースはIDEとは別フォルダとして保存されているので、最悪 他のIDE（VSCode）でも使用が可能です。</p>



<p>先ずは起動のプロセスを理解し、起動しなくなった原因を突きとめるために診断を行う事です。そして、その診断に基づいた適切な処置を実行する事で再起動する事が可能となります。</p>



<p></p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【PostgreSQL】非同期レプリケーション WAL遅延・肥大化の対処法（Windows）</title>
		<link>https://www.kemmy-it.com/2025/10/24/postgesql_wal_taisaku_1-2/</link>
		
		<dc:creator><![CDATA[Kemmy]]></dc:creator>
		<pubDate>Fri, 24 Oct 2025 11:45:06 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<guid isPermaLink="false">https://www.kemmy-it.com/?p=6346</guid>

					<description><![CDATA[WALの遅延と肥大化とは？ PostgreSQLの非同期レプリケーションで最も多く発生するトラブルが、WALの遅延と肥大化です。 WALの遅延と肥大化とは、プライマリの変更情報がスタンバイ側に反映されるのが遅れ、その結果 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">WALの遅延と肥大化とは？</h2>



<p>PostgreSQLの非同期レプリケーションで最も多く発生するトラブルが、WALの遅延と肥大化です。</p>



<p>WALの遅延と肥大化とは、プライマリの変更情報がスタンバイ側に反映されるのが遅れ、その結果、反映されないWALが溜まってディスク容量を圧迫する事をいいます。</p>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">WALが遅延・肥大化するとどうなる？</h2>



<h3 class="wp-block-heading">スタンバイの同期不能</h3>



<p>未だスタンバイに反映されていないWALが削除され、スタンバイの再構築が必要になります。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">フェルオーバーが不可能になる</h3>



<p>スタンバイが遅延してもプライマリは動作を続ける為、プライマリの状態に追いつけなくなります。よって、プライマリが故障した場合、スタンバイがプライマリとして動作できなくなります。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">ディスク容量不足によるPostgreSQLの停止</h3>



<p>WALファイルは プライマリ側の<code>pg_wal</code> ディレクトリに蓄積されますが、最終的に書き込み不能となり、PostgeSQLが停止します。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">バックアップが失敗する</h3>



<p>WALアーカイブが遅延すると、PITR（ポイントインリカバリ）が不可能になります。</p>



<ul class="wp-block-list">
<li><strong>PITR（ポイントインリカバリ）</strong><br>ベースバックアップ（物理バックアップ）とWALアーカイブを使用してバックアップ取得時点から任意の時刻までWALを「再生」する機能。障害直前や指定時刻の状態に復元できる。</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="384" src="https://www.kemmy-it.com/wp-content/uploads/2025/05/01_blg-001-1024x384.png" alt="" class="wp-image-4877" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/05/01_blg-001-1024x384.png 1024w, https://www.kemmy-it.com/wp-content/uploads/2025/05/01_blg-001-300x113.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/05/01_blg-001-768x288.png 768w, https://www.kemmy-it.com/wp-content/uploads/2025/05/01_blg-001-1536x576.png 1536w, https://www.kemmy-it.com/wp-content/uploads/2025/05/01_blg-001.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>




<a rel="noopener" href="https://amzn.to/48HBRs4" title="PostgreSQL&#24505;&#24213;&#20837;&#38272; &#31532;4&#29256; &#12452;&#12531;&#12473;&#12488;&#12540;&#12523;&#12363;&#12425;&#27231;&#33021;&#12539;&#20181;&#32068;&#12415;&#12289;&#12450;&#12503;&#12522;&#20316;&#12426;&#12289;&#31649;&#29702;&#12539;&#36939;&#29992;&#12414;&#12391; | &#36817;&#34276; &#38596;&#22826;, &#27491;&#37326; &#35029;&#22823;, &#22338;&#20117; &#28500;, &#40165;&#36234; &#28147;, &#31520;&#21407; &#36784;&#20161;, &#30707;&#20117; &#36948;&#22827; |&#26412; | &#36890;&#36009; | Amazon" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Famzn.to%2F48HBRs4?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">PostgreSQL&#24505;&#24213;&#20837;&#38272; &#31532;4&#29256; &#12452;&#12531;&#12473;&#12488;&#12540;&#12523;&#12363;&#12425;&#27231;&#33021;&#12539;&#20181;&#32068;&#12415;&#12289;&#12450;&#12503;&#12522;&#20316;&#12426;&#12289;&#31649;&#29702;&#12539;&#36939;&#29992;&#12414;&#12391; | &#36817;&#34276; &#38596;&#22826;, &#27491;&#37326; &#35029;&#22823;, &#22338;&#20117; &#28500;, &#40165;&#36234; &#28147;, &#31520;&#21407; &#36784;&#20161;, &#30707;&#20117; &#36948;&#22827; |&#26412; | &#36890;&#36009; | Amazon</div><div class="blogcard-snippet external-blogcard-snippet">Amazonで近藤 雄太, 正野 裕大, 坂井 潔, 鳥越 淳, 笠原 辰仁, 石井 達夫のPostgreSQL徹底入門 第4版 インストールから機能・仕組み、アプリ作り、管理・運用まで。アマゾンならポイント還元本が多数。近藤 雄太, 正野...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://amzn.to/48HBRs4" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">amzn.to</div></div></div></div></a>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">WAL遅延の原因</h2>



<h3 class="wp-block-heading">スタンバイ側のI/O性能不足</h3>



<p>HDDや低IOPSのクラウドストレージでは、WALの書き込み・適用が追いつかず <code>replay_lag</code> が発生しやすくなります。特に読み取りクエリと競合する場合、顕著になります。</p>



<ul class="wp-block-list">
<li><strong>IOPS（アイオプス）</strong><br>1秒間に何回の「読み込み（Read）」や「書き込み（Write）」操作ができるかの指標</li>



<li><code><strong>replay_lag</strong></code><br>スタンバイサーバがプライマリサーバにどれだけ遅れているかを示す指標<br>例）<code>00:00:03.456</code> → 約3.4秒の遅延</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">ネットワーク帯域の不足・不安定な接続</h3>



<p>プライマリ→スタンバイ間のWAL転送が詰まり、<code>write_lag</code> や <code>flush_lag</code> が発生します。VPNやクラウド間通信で多発し易い遅延です。</p>



<ul class="wp-block-list">
<li><code><strong>write_lag</strong></code><br>プライマリがWALを送信してから、スタンバイがそれを受信してメモリに書き込むまでにかかった時間</li>



<li><code><strong>flush_lag</strong></code><br>スタンバイがWALをディスクに書き込むまでにかかった時間</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">スタンバイのWAL適用処理の遅延</h3>



<p>スタンバイでのクエリ実行やバックグラウンドプロセスがWALの適用を妨げたり、CPU競合やメモリ不足により発生する遅延です。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><strong>プライマリ側の送信プロセス</strong>不足（<code>max_wal_senders</code>）</h3>



<p>複数のスタンバイがある場合、送信プロセスが足りずにWAL送信が滞り発生します。</p>



<ul class="wp-block-list">
<li><code>max_wal_senders</code><br>PostgreSQL の設定パラメータ。WALをスタンバイやバックアップツールに送信するプロセスの最大数を指定する。</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><strong><code>wal_keep_size</code> の不足によるWAL早期削除</strong></h3>



<p>スタンバイが遅延しているのに、プライマリが未反映のWALを削除してしまいます。</p>



<ul class="wp-block-list">
<li><code>wal_keep_siz</code>e<br>PostgreSQL の設定パラメータ。プライマリサーバが保持しておくWALファイルのサイズを指定する。</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">アーカイブ処理の詰まり（<code>archive_command</code>）</h3>



<p>アーカイブ先の容量不足やスクリプトエラーによってWALが溜まり、遅延や肥大化が発生します。</p>



<ul class="wp-block-list">
<li><code><strong>archive_command</strong></code><br>WALを外部に保存（アーカイブ）するためのコマンド。特に PITR（Point-In-Time Recovery）や長期バックアップ、スタンバイ再同期において重要な役割を果たします。</li>
</ul>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="384" src="https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-004-1024x384.png" alt="レプリケーション　WALの遅延イメージ画像" class="wp-image-4116" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-004-1024x384.png 1024w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-004-300x113.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-004-768x288.png 768w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-004-1536x576.png 1536w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-004.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">遅延状況の確認方法 と LSN（Log Sequence Number）</h2>



<ul class="wp-block-list">
<li><strong>LSN（Log Sequence Number）</strong><br>WALファイルの中で「どの位置までWALが処理されたか」を示す表記方法。WALの位置を上下32ビットで、X/Y の様に表記します。
<ul class="wp-block-list">
<li>X：0 ⇀ WALセグメントの先頭（最初のファイル）</li>



<li>Y：16B6C60 ⇀ そのセグメント内のオフセット位置（バイト単位）<br></li>
</ul>
</li>
</ul>



<p>LSNの進み方（イメージ）</p>



<pre class="wp-block-code plaintext"><code>0/00000000 → 0/00001000 → 0/00002000 → ... → 0/16B6C60 → ...</code></pre>



<p>WALが書き込まれるたびに、LSNは進みます。<span class="marker-under"><strong>スタンバイが <code>replay_lsn</code> を報告することで、プライマリは「どこまで追いついているか」を把握できます。</strong></span></p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>遅延状況の確認</strong></li>
</ul>



<pre class="wp-block-code sql"><code>SELECT
  application_name,
  write_lag,
  flush_lag,
  replay_lag,
  write_lsn,
  flush_lsn,
  replay_lsn
FROM pg_stat_replication;</code></pre>



<ul class="wp-block-list">
<li><strong>write_lag</strong><br>プライマリがWALを送信してからスタンバイが受信してメモリに書き込むまでにかかった時間</li>



<li><strong>flush_lag</strong><br>スタンバイがWALをディスクに書き込むまでにかかった時間</li>



<li><strong>replay_lag</strong><br>スタンバイサーバがプライマリサーバにどれだけ遅れているかの時間</li>



<li><strong>write_lsn</strong><br>スタンバイが WALをメモリ上に書き込んだLSN</li>



<li><strong> flush_lsn</strong><br>スタンバイがWALをディスクにフラッシュ（書き込み）LSN</li>



<li><strong>replay_lsn</strong><br>スタンバイがWALを適用し、データベース状態に反映したLSN</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>




<a rel="noopener" href="https://amzn.to/4hnA8KB" title="&#65339;&#25913;&#35330;3&#29256;&#65341;&#20869;&#37096;&#27083;&#36896;&#12363;&#12425;&#23398;&#12406;PostgreSQL&#8213;&#35373;&#35336;&#12539;&#36939;&#29992;&#35336;&#30011;&#12398;&#37444;&#21063; (Software Design plus) | &#19978;&#21407; &#19968;&#27193;, &#21213;&#20451; &#26234;&#25104;, &#20304;&#20271; &#26124;&#27193;, &#21407;&#30000; &#30331;&#24535; |&#26412; | &#36890;&#36009; | Amazon" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Famzn.to%2F4hnA8KB?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#65339;&#25913;&#35330;3&#29256;&#65341;&#20869;&#37096;&#27083;&#36896;&#12363;&#12425;&#23398;&#12406;PostgreSQL&#8213;&#35373;&#35336;&#12539;&#36939;&#29992;&#35336;&#30011;&#12398;&#37444;&#21063; (Software Design plus) | &#19978;&#21407; &#19968;&#27193;, &#21213;&#20451; &#26234;&#25104;, &#20304;&#20271; &#26124;&#27193;, &#21407;&#30000; &#30331;&#24535; |&#26412; | &#36890;&#36009; | Amazon</div><div class="blogcard-snippet external-blogcard-snippet">Amazonで上原 一樹, 勝俣 智成, 佐伯 昌樹, 原田 登志の［改訂3版］内部構造から学ぶPostgreSQL―設計・運用計画の鉄則 (Software Design plus)。アマゾンならポイント還元本が多数。上原 一樹, 勝俣 ...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://amzn.to/4hnA8KB" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">amzn.to</div></div></div></div></a>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">WAL遅延と肥大化を防ぐ対処法</h2>



<h3 class="wp-block-heading">スタンバイ側 I/O性能の向上</h3>



<ul class="wp-block-list">
<li><strong>スタンバイ側のSSDへの移行</strong><br>HDDでは <code>flush_lag</code> や <code>replay_lag</code> が顕著に出るため、SSD化は最優先の対処法となります。</li>



<li><strong>IOPS保証付きインスタンス選定</strong><br>クラウド環境では IOPS制限が遅延要因になります。</li>



<li><strong>スタンバイでのクエリ制限</strong><br>読み取り専用用途に限定し、WAL適用を妨げないようにします。<br></li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">ネットワーク帯域の不足・不安定な接続の解消</h3>



<ul class="wp-block-list">
<li><strong>同一AZ配置</strong><br>クラウドではプライマリ・スタンバイを同一地域の独立したセンター郡に配置します。</li>



<li><strong>VPNやファイアウォールの最適化</strong><br>パケットロスや遅延の原因を排除します。</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">スタンバイ WAL適用処理の遅延対策</h3>



<ul class="wp-block-list">
<li><strong>スタンバイのhot_standby_feedbackの設定<br></strong>設定を on にし、VACUUMとの衝突を防いでWAL適用をスムーズに実行できるようにします。
<ul class="wp-block-list">
<li><strong>VACUUM</strong><br>不要になったデータ（デッドタプル）を物理的に除去し、テーブルのサイズやパフォーマンスを最適化するメンテナンス処理</li>
</ul>
</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">プライマリ側の送信プロセス不足対策</h3>



<ul class="wp-block-list">
<li><strong>プライマリ側の送信プロセス数を増やす</strong><br>例）max_wal_senders = 10</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><strong><code>wal_keep_size</code> の不足によるWAL早期削除</strong> 対策</h3>



<ul class="wp-block-list">
<li><strong>プライマリ側でWALを保持できるファイルサイズを増やす</strong><br>例）wal_keep_size = &#8216;512MB&#8217; 　# スタンバイの遅延に応じて調整</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">アーカイブ処理の詰まり 対策</h3>



<ul class="wp-block-list">
<li><strong>アーカイブ先の容量を十分に確保すると共に、容量を監視する</strong></li>



<li><strong>強制アーカイブの実施</strong><br>WALセグメントが満たされていなくても、定期的にWALファイルをアーカイブ先へ排出します。その結果、pg_wal内のWALを早めに削除でき、肥大化やスタンバイの遅延を抑制できます。</li>
</ul>



<pre class="wp-block-code plaintext"><code>archive_timeout = 60  # 60秒ごとにWALを強制アーカイブ</code></pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">まとめ</h2>



<p>WAL遅延と肥大化は上述したように、適切な監視と対応を実施すれば防ぐ事が可能です。使用していて異常が感じられないからといって、そのままにしておくと、ある日 突然 異常が発生し、業務が停止するばかりでなく、原因の究明と復旧に時間と労力を費やす事となります。又、場合によっては大きな損失を被る事になりまねません。</p>



<p>そうならないためにも、適切な監視を実施して異常を早めに発見し、対策する事が重要です。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【PostgreSQL】ストリーミングレプリケーション運用ガイド：動作状況の確認（Windows）</title>
		<link>https://www.kemmy-it.com/2025/10/09/postgesql_s_rep_unyo1/</link>
		
		<dc:creator><![CDATA[Kemmy]]></dc:creator>
		<pubDate>Wed, 08 Oct 2025 21:45:22 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<guid isPermaLink="false">https://www.kemmy-it.com/?p=6329</guid>

					<description><![CDATA[はじめに PostgreSQLのストリーミングレプリケーションは、データの可用性と冗長性を高める強力な仕組みです。しかし、構築しただけでは安心できません。運用フェーズでは、レプリケーションの状態監視、障害対応、遅延対策な [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">はじめに</h2>



<p>PostgreSQLのストリーミングレプリケーションは、データの可用性と冗長性を高める強力な仕組みです。しかし、構築しただけでは安心できません。運用フェーズでは、レプリケーションの状態監視、障害対応、遅延対策など、複数の観点から注意を払う必要があります。</p>



<p>本ブログでは、Windows環境でPostgreSQLのストリーミングレプリケーションを構築済みの方を対象に、運用時の状態監視方法を紹介します。</p>



<p>ストリーミングレプリケーションの構築方法は下記ブログを参照ください。</p>



<p><a href="https://www.kemmy-it.com/2025/10/05/postgesql_s_replication/" data-type="link" data-id="https://www.kemmy-it.com/2025/10/05/postgesql_s_replication/">ストリーミングレプリケーション構築方法</a></p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="384" src="https://www.kemmy-it.com/wp-content/uploads/2025/05/01_blg-001-1024x384.png" alt="状態監視方法のイメージ画像" class="wp-image-4877" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/05/01_blg-001-1024x384.png 1024w, https://www.kemmy-it.com/wp-content/uploads/2025/05/01_blg-001-300x113.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/05/01_blg-001-768x288.png 768w, https://www.kemmy-it.com/wp-content/uploads/2025/05/01_blg-001-1536x576.png 1536w, https://www.kemmy-it.com/wp-content/uploads/2025/05/01_blg-001.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">レプリケーションの動作状況の確認</h2>



<p>まずは、レプリケーションが正常に動作しているかを定期的に確認することが重要です。</p>



<h3 class="wp-block-heading">プライマリ動作の確認</h3>



<p>以下のSQLで、スタンバイとの接続状況や遅延を確認します。</p>



<pre class="wp-block-code"><code>SELECT pid, client_addr, state, sync_state, write_lag, flush_lag, replay_lag
FROM pg_stat_replication;</code></pre>



<ul class="wp-block-list">
<li><code><strong>state</strong></code><br>ストリーミングレプリケーションなので、streaming なら正常</li>
</ul>



<p></p>



<ul class="wp-block-list">
<li><code><strong>sync_state</strong></code><br>同期レプリケーションなので、sync  なら正常</li>
</ul>



<p></p>



<ul class="wp-block-list">
<li><strong>write_lag</strong><br>WALをスタンバイに送信した後、スタンバイがそのWALを書き込むまでにかかった時間。<br>正常値は、0～数百ミリ秒。５秒以上ならば、スタンバイのI/O性能低下、ネットワーク障害、WAL送信設定不備などが疑われる。</li>
</ul>



<p></p>



<ul class="wp-block-list">
<li><strong>flush_lag</strong><br>プライマリサーバがWALを送信してから、スタンバイサーバがそのWALを「ディスクにフラッシュ（書き込み確定）」するまでにかかった時間を示す指標。<br>正常値は、0～数百ミリ秒。５秒以上は異常と考えられる。</li>
</ul>



<p></p>



<ul class="wp-block-list">
<li><strong>replay_lag</strong><br>スタンバイサーバがプライマリから受信したWALを「実際に適用（replay）」するまでにかかった時間を示す指標。<br>正常値は、0～数百ミリ秒。５秒以上は異常と考えられる。</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li>コマンドの実行例</li>
</ul>



<div style="height:0px" aria-hidden="true" class="wp-block-spacer"></div>



<div style="height:0px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="163" src="https://www.kemmy-it.com/wp-content/uploads/2025/10/01_Postgres_Unyou-1024x163.png" alt="プライマリ動作の確認画面" class="wp-image-6338" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/10/01_Postgres_Unyou-1024x163.png 1024w, https://www.kemmy-it.com/wp-content/uploads/2025/10/01_Postgres_Unyou-300x48.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/10/01_Postgres_Unyou-768x122.png 768w, https://www.kemmy-it.com/wp-content/uploads/2025/10/01_Postgres_Unyou.png 1054w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>※write_lag、flush_log、replay_log がNULLなのは、現在新しいWALが生成されていない為。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="684" src="https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-006-1024x684.jpg" alt="プライマリ動作確認イメージ画像＿１" class="wp-image-4119" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-006-1024x684.jpg 1024w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-006-300x200.jpg 300w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-006-768x513.jpg 768w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-006-1536x1025.jpg 1536w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-006.jpg 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">スタンバイ側動作の確認</h3>



<p>スタンバイ側では、WAL受信状況を以下で確認できます。</p>



<pre class="wp-block-code"><code>SELECT status, receive_start_lsn, receive_start_tli, written_lsn, flushed_lsn, latest_end_lsn, latest_end_time FROM pg_stat_wal_receiver;</code></pre>



<ul class="wp-block-list">
<li><strong>status</strong><br>ストリーミングレプリケーションなので、streaming なら正常</li>
</ul>



<p></p>



<ul class="wp-block-list">
<li><strong>receive_start_lsn</strong><br>WAL受信開始位置。<br>通常運用では頻繁に変化しないため、急な変更があれば再構築や障害の兆候有り。</li>
</ul>



<p></p>



<ul class="wp-block-list">
<li><strong>receive_start_tli</strong><br>受信開始時のタイムラインID。<br>フェイルオーバー後にタイムラインが変わるため、プライマリとの整合性確認に使用する。タイムラインが一致していない場合、スタンバイが古い状態である可能性がある。</li>
</ul>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="384" src="https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-004-1024x384.png" alt="スタンバイ動作確認イメージ画像＿２" class="wp-image-4116" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-004-1024x384.png 1024w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-004-300x113.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-004-768x288.png 768w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-004-1536x576.png 1536w, https://www.kemmy-it.com/wp-content/uploads/2025/02/01_blg-004.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li><strong>written_lsn</strong><br>スタンバイがWALを書き込んだ最新位置。<br><code>latest_end_lsn</code> との差が大きいと、WAL受信はしているが書き込みが遅れている可能性あり。</li>
</ul>



<p></p>



<ul class="wp-block-list">
<li><strong>flushed_lsn</strong><br>スタンバイがWALをフラッシュ（ディスクに確定書き込み）した最新位置。<br><code>written_lsn</code> より遅れている場合、フラッシュ処理が滞っている。</li>
</ul>



<p></p>



<ul class="wp-block-list">
<li><strong>latest_end_lsn</strong><br>プライマリが送信した最新のWALの位置。<br><code>written_lsn</code> や <code>flushed_lsn</code> と比較して遅延を把握する。位置。</li>
</ul>



<p></p>



<ul class="wp-block-list">
<li><strong>latest_end_time</strong><br><code>latest_end_lsn</code> に対応するWALのタイムスタンプ。<br>スタンバイが最新WALをどれだけ遅れて受信しているかの目安になる。<br></li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>コマンドの実行例</strong></li>
</ul>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="202" src="https://www.kemmy-it.com/wp-content/uploads/2025/10/02_Postgres_Unyou-1024x202.png" alt="スタンバイ動作の確認画面" class="wp-image-6339" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/10/02_Postgres_Unyou-1024x202.png 1024w, https://www.kemmy-it.com/wp-content/uploads/2025/10/02_Postgres_Unyou-300x59.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/10/02_Postgres_Unyou-768x151.png 768w, https://www.kemmy-it.com/wp-content/uploads/2025/10/02_Postgres_Unyou-1536x302.png 1536w, https://www.kemmy-it.com/wp-content/uploads/2025/10/02_Postgres_Unyou.png 1829w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>また、現在のWAL適用位置は以下で確認できます。</p>



<pre class="wp-block-code"><code>SELECT pg_last_wal_replay_lsn();</code></pre>



<figure class="wp-block-image size-full"><img decoding="async" width="852" height="160" src="https://www.kemmy-it.com/wp-content/uploads/2025/10/03_Postgres_Unyou.png" alt="現在のWAL適用位置の確認画面" class="wp-image-6340" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/10/03_Postgres_Unyou.png 852w, https://www.kemmy-it.com/wp-content/uploads/2025/10/03_Postgres_Unyou-300x56.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/10/03_Postgres_Unyou-768x144.png 768w" sizes="(max-width: 852px) 100vw, 852px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="384" src="https://www.kemmy-it.com/wp-content/uploads/2025/05/01_blg-003-1024x384.png" alt="現在のWAL適用位置確認画面" class="wp-image-4878" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/05/01_blg-003-1024x384.png 1024w, https://www.kemmy-it.com/wp-content/uploads/2025/05/01_blg-003-300x113.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/05/01_blg-003-768x288.png 768w, https://www.kemmy-it.com/wp-content/uploads/2025/05/01_blg-003-1536x576.png 1536w, https://www.kemmy-it.com/wp-content/uploads/2025/05/01_blg-003.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">PowerShellでの監視例</h3>



<p>Windows環境では、PowerShellを使って定期監視スクリプトを作成できます。タスクスケジューラで定期実行すれば、ログ監視や通知にも応用可能です。</p>



<ul class="wp-block-list">
<li><strong>スクリプト例</strong>（replication_monitor.ps1）</li>
</ul>



<pre class="wp-block-code"><code>#スクリプトの実行制限（ポリシー）の確認と変更
Get-ExecutionPolicy
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

# PostgreSQL接続情報
$PGUSER = "postgres"
$PGDATABASE = "postgres"
$PGHOST = "localhost"
$PGPORT = "5432"

# psqlコマンドのパス（環境に応じて変更）
$PSQL = "C:\Program Files\PostgreSQL\17\bin\psql.exe"

# ログファイル出力先
$LOGFILE = "C:\pg_backup\pg_shell_log\replication_monitor.log"

# 日時取得
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"

# pg_stat_replicationの取得（プライマリ側のレプリケーション状態の取得）
$replication = &amp; $PSQL -U $PGUSER -d $PGDATABASE -h $PGHOST -p $PGPORT -c "SELECT state, sync_state, write_lag, flush_lag, replay_lag FROM pg_stat_replication;" 2&gt;&amp;1

# pg_stat_wal_receiverの取得（スタンバイ側のWAL受信状態取得）
$receiver = &amp; $PSQL -U $PGUSER -d $PGDATABASE -h $PGHOST -p $PGPORT -c "SELECT status, written_lsn, flushed_lsn, latest_end_lsn FROM pg_stat_wal_receiver;" 2&gt;&amp;1

# ログ出力
Add-Content -Path $LOGFILE -Value "&#91;$timestamp] Replication Status:"
Add-Content -Path $LOGFILE -Value $replication
Add-Content -Path $LOGFILE -Value "&#91;$timestamp] WAL Receiver Status:"
Add-Content -Path $LOGFILE -Value $receiver
Add-Content -Path $LOGFILE -Value "----------------------------------------"
</code></pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>実行結果</strong></li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="657" height="281" src="https://www.kemmy-it.com/wp-content/uploads/2025/10/04_Postgres_Unyou.png" alt="PowerShellでの監視例画面" class="wp-image-6344" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/10/04_Postgres_Unyou.png 657w, https://www.kemmy-it.com/wp-content/uploads/2025/10/04_Postgres_Unyou-300x128.png 300w" sizes="(max-width: 657px) 100vw, 657px" /></figure>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">レプリケーション監視の重要性</h2>



<p>レプリケーション監視は、PostgreSQLの高可用性とデータ整合性を維持するために不可欠です。</p>



<p>プライマリとスタンバイ間の遅延（write_lag、flush_lag、replay_lag）や接続状態（state、sync_state）を定期的に確認することで、障害の予兆を早期に検知できます。</p>



<p>遅延が蓄積すれば、スタンバイの昇格時にデータ不整合が生じるリスクがあり、業務停止や復旧困難につながります。監視を自動化し、可視化することで、安定運用と迅速な障害対応が可能になります。</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【PostgreSQL】2025年最新版 ストリーミングレプリケーション構築手順（Windows対応）</title>
		<link>https://www.kemmy-it.com/2025/10/05/postgesql_s_replication-2/</link>
		
		<dc:creator><![CDATA[Kemmy]]></dc:creator>
		<pubDate>Sun, 05 Oct 2025 11:23:50 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<guid isPermaLink="false">https://www.kemmy-it.com/?p=6281</guid>

					<description><![CDATA[はじめに 本ブログでは、初心者〜中級者向けにPostgreSQLのレプリケーション構築手順を紹介します。レプリケーションは大きく分けると、 があります。ここでは「ストリーミングレプリケーション」の構築を中心に紹介します。 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">はじめに</h2>



<p>本ブログでは、初心者〜中級者向けにPostgreSQLのレプリケーション構築手順を紹介します。レプリケーションは大きく分けると、</p>



<ul class="wp-block-list">
<li>データベースクラスタを一括して複製する「<strong>ストリーミングレプリケーション</strong>（物理レプリケーション）」</li>



<li>テーブル単位やデータベース単位に複製する「<strong>ロジカルレプリケーション</strong>（論理レプリケーション）」</li>
</ul>



<p>があります。<strong>ここでは「ストリーミングレプリケーション」の構築を中心に紹介します。</strong></p>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span class="fz-24px">PostgreSQLレプリケーションとは？</span> なぜ必要？</h2>



<p>レプリケーションとは、1つのデータベース（プライマリ）から別のデータベース（スタンバイ）へリアルタイムでデータを複製する仕組みです。</p>



<p>複製を作成するメリットは、</p>



<ul class="wp-block-list">
<li><strong>障害時の迅速な復旧</strong>（フェイルオーバー）<br>プライマリが故障した場合、複製のスタンバイを使用する</li>



<li><strong>読み取り負荷の分散</strong>（参照系クエリの負荷分散）<br>ユーザーからの多くのクエリ（参照系）スタンバイに分散させる事で、全体として処理能力を高める</li>



<li><strong>災害対策（DR）</strong><br>スタンバイを遠くの地域に置く事で、災害からのデータ損失のリスクを減少させる</li>
</ul>



<p>等です。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="397" src="https://www.kemmy-it.com/wp-content/uploads/2025/10/02_Postgres-1024x397.png" alt="レプリケーションのフェイルオーバーと負荷分散の画像" class="wp-image-6284" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/10/02_Postgres-1024x397.png 1024w, https://www.kemmy-it.com/wp-content/uploads/2025/10/02_Postgres-300x116.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/10/02_Postgres-768x298.png 768w, https://www.kemmy-it.com/wp-content/uploads/2025/10/02_Postgres.png 1072w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">レプリケーションのアーキテクチャ</h2>



<p>ストリーミングでもロジカルでも、基本的な仕組みは「ＷＡＬ」を使用している事です。</p>



<p>「ＷＡＬ」（Write Ahead Log）とは、データベースへの変更内容が全て記録されているログの事で、この「ＷＡＬ」を別のPostgreSQLに転送・リカバリして複製を作成し、レプリケーションを実現しています。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="908" height="233" src="https://www.kemmy-it.com/wp-content/uploads/2025/10/03_Postgres.png" alt="レプリケーションのアーキテクチャ図" class="wp-image-6287" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/10/03_Postgres.png 908w, https://www.kemmy-it.com/wp-content/uploads/2025/10/03_Postgres-300x77.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/10/03_Postgres-768x197.png 768w" sizes="(max-width: 908px) 100vw, 908px" /></figure>



<ul class="wp-block-list">
<li>①クエリにより「WAL」が生成され、テーブルが更新される。</li>



<li>②スタンバイに転送されてきた「WAL」をそのまま「WAL」ファイルに書き込み、「WAL」の内容で、テーブルを更新する。</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>※プライマリから送られてきた「WAL」をそのまま適用する為、以下の条件が必要となります。</p>



<ul class="wp-block-list">
<li><strong>PostgreSQLのメジャーバージョンが同じであること</strong>
<ul class="wp-block-list">
<li>マスタとスタンバイは<strong>同じWALフォーマット・バージョン</strong>である必要あり</li>
</ul>
</li>



<li>ハードウェアやOSのアーキテクチャが同じである事</li>
</ul>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">ストリーミングレプリケーションの特徴</h2>



<p>ストリーミングレプリケーションは、<strong>WAL（Write-Ahead Logging）ファイルをリアルタイムでスタンバイサーバに転送</strong>することで、プライマリとスタンバイ間のデータ同期を実現します。</p>



<ul class="wp-block-list">
<li><strong>特徴</strong>
<ul class="wp-block-list">
<li>プライマリで生成されたWALファイルを、TCP接続を通じてスタンバイに送信</li>



<li>ファイルコピーではなく、ストリーム転送なので即時性が高い</li>



<li>スタンバイ側はSELECTのみ可能（書き込み不可）</li>
</ul>
</li>
</ul>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">使用環境</h2>



<ul class="wp-block-list">
<li>Windows 11 Pro 24H2</li>



<li>PostgreSQL 17.6</li>



<li>プライマリサーバのＩＰ　：192.168.0.80</li>



<li>スタンバイサーバーのＩＰ：192.168.0.60</li>
</ul>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">ストリーミングレプリケーションの設定</h2>



<h3 class="wp-block-heading">プライマリサーバの設定</h3>



<h4 class="wp-block-heading">postgresql.confの設定</h4>



<p>postgresql.confは<strong>メイン設定ファイル</strong>であり、データベースの動作に関するさまざまなパラメータを定義する重要な役割を担っています</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div style="height:0px" aria-hidden="true" class="wp-block-spacer"></div>



<p>先ずは、postgresql.confをプライマリサーバ用に設定します。</p>



<ul class="wp-block-list">
<li>基本接続</li>
</ul>



<pre class="wp-block-code plaintext"><code>listen_addresses = '*'　　　　　　　#外部からの全ての接続を許可
port = 5432　　　　　　　　　　　　 #デフォルトの待ち受けポート</code></pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li>WAL（Write-Ahead Logging）関連設定</li>
</ul>



<pre class="wp-block-code plaintext"><code>wal_level = replica　　　　　　　　#レプリケーション用にreplicaを指定
　　　　　　　　　　　　　　　　　 #ロジカルなら logical を指定
max_wal_senders = 5　　　　　　　　#スタンバイ接続数の上限（必要に応じて設定）
wal_keep_size = '256MB'　　　　　　#WALファイルの保持サイズ。遅延対策に有効。</code></pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li>同期レプリケーション設定</li>
</ul>



<pre class="wp-block-code plaintext"><code>synchronous_commit = on                        #同期レプリケーションを明示的に指定
　　　　　　　　　　　　　　　　　　　　　　　 #標準は、on
synchronous_standby_names = 'standby01'　　　　#同期レプリケーションを使用する場合の
　　　　　　　　　　　　　　　　　　　　　　　 #スタンバイ側の名称を指定</code></pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li>ログ出力設定（トラブルシューティング）</li>
</ul>



<pre class="wp-block-code plaintext"><code>logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_connections = on
log_disconnections = on</code></pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li>メモリ・パフォーマンス関連（環境に応じて調整）</li>
</ul>



<pre class="wp-block-code plaintext"><code>shared_buffers = '512MB'　　　　#PostgreSQLが使用するメモリ領域。物理メモリの
                                #25〜40%が目安。
effective_cache_size = '1GB'　　#OS側のキャッシュ見積もり。クエリプランに影響。
work_mem = '4MB'　　　　　　　　#ソートやハッシュ処理に使うメモリ。
                                #複雑なクエリが多い場合は増やす。
maintenance_work_mem = '64MB'   #PostgreSQLが「メンテナンス系の処理」を
                                #行うときに使うメモリの上限</code></pre>



<p>上記の値は必要に応じて設定してください。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">pg_hba.confファイルの設定</h4>



<p>pg_hba.confは<strong>接続認証の制御ファイル</strong>で、<strong>誰が・どこから・どの方法で接続できるか</strong>を定義します。</p>



<p>インストールされたファイルはUNIX用なので、以下の様にWndows用に書き換えます。</p>



<pre class="wp-block-code plaintext"><code># TYPE  DATABASE        USER            ADDRESS                 METHOD
# IPv4 local connections:
host    all             all             127.0.0.1/32         scram-sha-256


# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256

# Allow replication connections from localhost, by a user with the replication privilege.
host    replication     replicator      192.168.0.60/24         scram-sha-256</code></pre>



<ul class="wp-block-list">
<li>host all all 127.0.0.1/24 scram-sha-256<br>すべてのデータベースに対して、全てのユーザーから接続を許可しています。</li>



<li>host replication replicator 192.168.0.60/24 scram-sha-256<br>レプリケーション専用接続で、ID：replicatorで（192.168.0.1～254：スタンバイサーバー）からプライマリサーバ（192.168.0.80）にアクセスを許可しています。</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">レプリケーション権限を持つユーザーの作成</h4>



<ul class="wp-block-list">
<li>下記コマンドで作成します。</li>
</ul>



<pre class="wp-block-code sql"><code>CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'reppass';</code></pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">PostgreSQLサービス再起動（PowerShell）</h4>



<ul class="wp-block-list">
<li>PostgreSQLが正常に再起動するか確認します。</li>
</ul>



<pre class="wp-block-code bash"><code>Restart-Service -Name postgresql-x64-17</code></pre>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">スタンバイサーバーの設定</h3>



<h4 class="wp-block-heading">初期同期の実行</h4>



<p>pg_basebackupでプライマリからデータを取得し、初期同期を実行します。</p>



<ul class="wp-block-list">
<li>C:\pgsql　フォルダを作成</li>
</ul>



<pre class="wp-block-code bash"><code>mkdir C:\pgsql</code></pre>



<ul class="wp-block-list">
<li>下記コマンドで初期同期を実行</li>
</ul>



<pre class="wp-block-code bash"><code>cd "C:\Program Files\PostgreSQL\17\bin"
.\pg_basebackup.exe -h 192.168.0.80 -D "C:\pgsql\standby_data" -U replicator -P -R -W</code></pre>



<p><strong><span class="marker-under-red">これから以後のファイル設定は、&#8221;C:\pgsql\standby_data&#8221;　内のファイルに対して行います。</span></strong></p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">postgresql.auto.conf の内容追加</h4>



<p>postgresql.auto.conf に下記の内容を追加します。<code>application_name</code> はプライマリ側の <code>synchronous_standby_names</code> に一致させると同期レプリケーションが可能となります。</p>



<pre class="wp-block-code plaintext"><code>primary_conninfo = 'host=192.168.0.80 port=5432 user=replicator password=reppass application_name=standby01'</code></pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">standby.signal ファイルの作成（自動作成されていない場合）</h4>



<p>内容は無くてもよいが、このファイルが存在することで、PostgreSQLはスタンバイモードで起動します。作成方法は下記コマンドを実行。</p>



<pre class="wp-block-code bash"><code>New-Item -Path "C:\pgsql\standby_data\standby.signal" -ItemType File</code></pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">postgresql.conf の調整</h4>



<p>postgresql.conf ファイルの内容が、下記のようになるよう調整します。</p>



<pre class="wp-block-code plaintext"><code># 接続関連
listen_addresses = '*'                 # 外部からの接続を許可
port = 5432                            # 通常のPostgreSQLポート

# WAL受信と適用
wal_level = replica                    # WALを受信する最低レベル
hot_standby = on                       # スタンバイでもSELECTなどの読み取りを許可
wal_receiver_status_interval = 1s     # プライマリへの受信状況報告間隔
wal_retrieve_retry_interval = 3s      # WAL取得失敗時の再試行間隔

# ログ出力（トラブル時の診断に必須）
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_min_messages = info
log_connections = on
log_disconnections = on</code></pre>



<p>hot_standby = on により、スタンバイでも読み取りクエリが可能になります。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">サービスの登録と起動（初回のみ）</h4>



<ul class="wp-block-list">
<li><strong>サービスの登録</strong><br>スタンバイ側で下記のコマンドを実行して「pgsql-standby」サービスを登録します。 C:\Program Files\PostgreSQL\17\bin にパスを通すか、ディレクトリに移動して実行。</li>
</ul>



<pre class="wp-block-code bash"><code>cd "C:\Program Files\PostgreSQL\17\bin"
./pg_ctl register -N "pgsql-standby" -D "C:\pgsql\standby_data"</code></pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li>サービスの起動<br>下記コマンドを実行</li>
</ul>



<pre class="wp-block-code bash"><code>Start-Service -Name pgsql-standby</code></pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li>動作確認<br>下記SELECT文で、trueが返ればスタンバイとして動作中です。</li>
</ul>



<pre class="wp-block-code sql"><code>SELECT pg_is_in_recovery();</code></pre>



<figure class="wp-block-image size-full"><img decoding="async" width="592" height="146" src="https://www.kemmy-it.com/wp-content/uploads/2025/10/06_Postgres.png" alt="" class="wp-image-6321" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/10/06_Postgres.png 592w, https://www.kemmy-it.com/wp-content/uploads/2025/10/06_Postgres-300x74.png 300w" sizes="(max-width: 592px) 100vw, 592px" /></figure>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">レプリケーション動作の確認</h2>



<p>プライマリ側のテーブルに１件のレコードを追加した場合、スタンバイ側にも同様に追加されるか確認してみます。</p>



<ul class="wp-block-list">
<li><strong>プライマリ側の操作</strong><br>articlesテーブルに1件のレコードを追加</li>
</ul>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="430" src="https://www.kemmy-it.com/wp-content/uploads/2025/10/04_Postgres-1024x430.png" alt="プライマリ側のレコード追加画面。" class="wp-image-6310" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/10/04_Postgres-1024x430.png 1024w, https://www.kemmy-it.com/wp-content/uploads/2025/10/04_Postgres-300x126.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/10/04_Postgres-768x323.png 768w, https://www.kemmy-it.com/wp-content/uploads/2025/10/04_Postgres.png 1031w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>スタンドバイ側の状態</strong><br>プライマリ側に追加されたレコードが、スタンドバイ側にも追加され、同期している事が確認できます。</li>
</ul>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="201" src="https://www.kemmy-it.com/wp-content/uploads/2025/10/05_Postgres-1024x201.png" alt="スタンドバイ側の同期状態の画像" class="wp-image-6311" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/10/05_Postgres-1024x201.png 1024w, https://www.kemmy-it.com/wp-content/uploads/2025/10/05_Postgres-300x59.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/10/05_Postgres-768x151.png 768w, https://www.kemmy-it.com/wp-content/uploads/2025/10/05_Postgres.png 1032w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">ストリーミングレプリケーションのまとめ</h2>



<p>ストリーミングレプリケーションは、基本的にデータベース全体を複製します。レプリケーションの元となるサーバーは１台だけ設定できますが、スタンバイは複数台設定できます。又、スタンバイサーバーで実行できるのは参照系のクエリのみです。</p>



<p>冒頭でも述べましたが、ストリーミングレプリケーションは、PostgreSQLの高可用性を実現する重要な機能です。設定はシンプルですが、細部の確認が成功の鍵。この記事を参考に、安全で再現性の高い構成を作成して下さい。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【PostgreSQL】フルテキスト検索入門｜pg_trgmとLIKE検索を徹底比較（初心者向）</title>
		<link>https://www.kemmy-it.com/2025/09/28/pgadmin_fulltext/</link>
		
		<dc:creator><![CDATA[Kemmy]]></dc:creator>
		<pubDate>Sun, 28 Sep 2025 01:28:38 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<guid isPermaLink="false">https://www.kemmy-it.com/?p=6231</guid>

					<description><![CDATA[PostgreSQLで全文検索を使う理由 Webアプリや業務システムで「検索機能」は欠かせません。PostgreSQLは、標準SQLだけでなく強力な全文検索機能を備えており、特にpg_trgm拡張を使うことで、LIKE検 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><span class="fz-24px">PostgreSQLで全文検索を使う理由</span></h2>



<p>Webアプリや業務システムで「検索機能」は欠かせません。PostgreSQLは、標準SQLだけでなく強力な全文検索機能を備えており、特に<code>pg_trgm</code>拡張を使うことで、LIKE検索より高速かつ柔軟な検索が可能になります。</p>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">使用環境</h2>



<ul class="wp-block-list">
<li>Windows 11 Pro 24H2</li>



<li>PostgreSQL 17.6</li>



<li>pgAdmin4 9.6</li>



<li>Chrome 134.0.6998.205</li>
</ul>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">LIKE検索とpg_trgmの違い</h2>



<h3 class="wp-block-heading">LIKE検索</h3>



<ul class="wp-block-list">
<li><strong>SQL標準の部分一致検索にしか過ぎない</strong>
<ul class="wp-block-list">
<li>例：WHERE content LIKE &#8216;%検索%&#8217;</li>



<li><code>%</code>は任意の文字列を表すワイルドカード</li>
</ul>
</li>



<li><strong>問題点</strong>
<ul class="wp-block-list">
<li>インデックスが効きにくい（特に先頭に<code>%</code>がある場合）</li>



<li>大量データになると検索が遅くなる</li>
</ul>
</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">pg_trgm</h3>



<ul class="wp-block-list">
<li><strong>全文検索をする為の拡張機能</strong>
<ul class="wp-block-list">
<li>文字列を「3文字ずつの断片（トライグラム）」に分解して類似度を計算</li>



<li>例：<code>WHERE content % '検索'</code>（<code>%</code>はpg_trgm演算子）</li>
</ul>
</li>
</ul>



<ul class="wp-block-list">
<li><strong>利点</strong>
<ul class="wp-block-list">
<li>類似検索が可能（完全一致でなくてもヒット）</li>



<li>インデックス（GINインデックス）と組み合わせると高速</li>
</ul>
</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">GINインデックス</h3>



<ul class="wp-block-list">
<li><strong>Generalized Inverted Index（汎用反転インデックス<sup data-fn="2449c5a2-0efc-4872-9dd6-aab14e58a3d6" class="fn"><a href="#2449c5a2-0efc-4872-9dd6-aab14e58a3d6" id="2449c5a2-0efc-4872-9dd6-aab14e58a3d6-link">1</a></sup>）</strong>
<ul class="wp-block-list">
<li><code>pg_trgm</code>と組み合わせることで、<strong>トライグラム単位</strong><sup data-fn="37b7f8e9-c1c4-426b-a07a-df163b57473e" class="fn"><a href="#37b7f8e9-c1c4-426b-a07a-df163b57473e" id="37b7f8e9-c1c4-426b-a07a-df163b57473e-link">2</a></sup>で高速検索可能</li>
</ul>
</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">LIKE検索・pg_trgm　どちらを使用すべきか？</h3>



<ul class="wp-block-list">
<li><strong>小規模・簡易検索</strong>
<ul class="wp-block-list">
<li>LIKEで十分</li>
</ul>
</li>



<li><strong>大量データ・類似検索・高速化</strong>
<ul class="wp-block-list">
<li>pg_trgm＋GINインデックスが圧倒的に有利</li>
</ul>
</li>
</ul>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">LIKE検索・pg_trgm 比較準備</h2>



<h3 class="wp-block-heading">サンプルテーブルの作成とデータ登録</h3>



<ul class="wp-block-list">
<li><strong>下記サンプルプログラムを作成します。サンプルプログラムの目的は、</strong>
<ul class="wp-block-list">
<li>LIKE検索とpg_trgm検索の違いを体感する</li>



<li>GINインデックスの有無による速度差を確認する</li>



<li>類似語や誤字でもヒットするかを試す(下記プログラムの、WHEN i % 3 = 1 THEN &#8216;PosgrelSQLは高速な検索が可能です。’　では、<span class="marker-under-red"><strong>PostgreSQL</strong> </span>を<span class="marker-under-red"> <strong>PosgrelSQL </strong></span>にしています。)</li>
</ul>
</li>
</ul>



<pre class="wp-block-code sql"><code>-- サンプルプログラム

CREATE TABLE articles (
  id SERIAL PRIMARY KEY,
  title TEXT,
  content TEXT
);

-- 10000件のサンプルデータを生成（実験用）
INSERT INTO articles (title, content)
SELECT
  '記事' || i,
  CASE
    WHEN i % 3 = 0 THEN '<strong><span class="marker-under-red">PostgreSQL</span></strong>の全文検索は便利です。'
    WHEN i % 3 = 1 THEN '<strong><span class="marker-under-red">PosgrelSQL</span></strong>は高速な検索が可能です。'
    ELSE 'PostgreSQLはオープンソースのRDBMSです。'
  END
FROM generate_series(1, 10000) AS s(i);</code></pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">SQLでの拡張機能「pg_trgm」の有効化</h3>



<ul class="wp-block-list">
<li><strong>psql</strong> で以下のSQLを実行</li>
</ul>



<pre class="wp-block-code sql"><code>CREATE EXTENSION IF NOT EXISTS pg_trgm;</code></pre>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">LIKE検索・pg_trgm検索結果の比較</h2>



<h3 class="wp-block-heading">pgAdmin4 による検索結果の比較</h3>



<p>ここでは、初心者向けでもある為、pgAdmin4の「クエリツール」で確認します。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">pgAdmin4 のクエリ完了時間 とは</h4>



<p>pgAdmin 4がクエリをPostgreSQLに送信し、サーバーが処理して結果を返し、pgAdminがそれを受け取って表示するまでの<strong>一連の流れにかかった時間</strong>です。（以下の表の合計時間）</p>



<figure class="wp-block-flexible-table-block-table"><table class=""><thead><tr><th>処理ステップ</th><th style="text-align:center">内   容</th></tr></thead><tbody><tr><td>クエリ送信</td><td style="text-align:left">pgAdmin → PostgreSQLサーバーへSQLを送信</td></tr><tr><td>実行計画構築</td><td style="text-align:left">PostgreSQLが最適な実行方法を決定（Planning Time）</td></tr><tr><td>実行処理</td><td style="text-align:left">実際にデータを読み込んで処理（Execution Time</td></tr><tr><td>結果返却</td><td style="text-align:left">PostgreSQL → pgAdminへ結果を返す</td></tr><tr><td>表示処理</td><td style="text-align:left">表示処理</td></tr></tbody></table></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">サーバー側の実行処理のみの時間や、実行前の準備の時間を知りたい場合</h4>



<p><strong>以下のコマンドを使用します。</strong></p>



<ul class="wp-block-list">
<li><strong>LIKE検索</strong></li>
</ul>



<pre class="wp-block-code sql"><code>EXPLAIN ANALYZE SELECT * FROM articles WHERE content LIKE '%PostgreSQL%';</code></pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>pg_trgm検索</strong></li>
</ul>



<pre class="wp-block-code sql"><code>EXPLAIN ANALYZE SELECT * FROM articles WHERE content % 'PostgreSQL';</code></pre>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">pgAdmin4 による検索結果</h4>



<ul class="wp-block-list">
<li><strong>LIKEの実行確認用SQL</strong></li>
</ul>



<pre class="wp-block-code sql"><code>-- 部分一致検索（検索語：PostgreSQL）
SELECT * FROM articles WHERE content LIKE '%PostgreSQL%';</code></pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>実行結果と実行時間</strong>
<ul class="wp-block-list">
<li>検索件数：6,666件</li>



<li>検索時間：0.170ms</li>
</ul>
</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="785" height="313" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/10_PostgreSQL_fulltext.png" alt="" class="wp-image-6251" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/10_PostgreSQL_fulltext.png 785w, https://www.kemmy-it.com/wp-content/uploads/2025/09/10_PostgreSQL_fulltext-300x120.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/09/10_PostgreSQL_fulltext-768x306.png 768w" sizes="(max-width: 785px) 100vw, 785px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>pg_trgmの<strong>実行確認用SQL</strong></strong></li>
</ul>



<pre class="wp-block-code sql"><code>-- pg_trgm検索（類似度）
SELECT * FROM articles WHERE content % 'PostgreSQL';</code></pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>実行結果と実行時間</strong>
<ul class="wp-block-list">
<li>検索件数：10,000件</li>



<li>検索時間：0.197ms</li>



<li>類似文字（ここでは、<strong><span class="marker-under-red">PosgrelSQL</span></strong>）も検索されている為多少時間がかかっていると思われる。</li>
</ul>
</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="792" height="314" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/12_PostgreSQL_fulltext.png" alt="pg_trgm　による検索結果画面。" class="wp-image-6252" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/12_PostgreSQL_fulltext.png 792w, https://www.kemmy-it.com/wp-content/uploads/2025/09/12_PostgreSQL_fulltext-300x119.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/09/12_PostgreSQL_fulltext-768x304.png 768w" sizes="(max-width: 792px) 100vw, 792px" /></figure>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">インデックスの作成とパフォーマンス比較</h2>



<h3 class="wp-block-heading">GINインデックス作成</h3>



<ul class="wp-block-list">
<li>下記のSQLを実行してGINインデックス作成を作成します</li>
</ul>



<pre class="wp-block-code sql"><code>CREATE INDEX articles_idx ON articles USING GIN (content gin_trgm_ops);</code></pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>インデックスが作成されているか？</strong></li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="812" height="181" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/07_PostgreSQL_fulltext.png" alt="GINインデックスの確認画面。" class="wp-image-6243" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/07_PostgreSQL_fulltext.png 812w, https://www.kemmy-it.com/wp-content/uploads/2025/09/07_PostgreSQL_fulltext-300x67.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/09/07_PostgreSQL_fulltext-768x171.png 768w" sizes="(max-width: 812px) 100vw, 812px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>pg_trgm</strong>＋<strong>GINインデックスの実行結果</strong></li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="801" height="313" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/13_PostgreSQL_fulltext.png" alt="pg_trgm＋GINインデックスの検索結果画面。" class="wp-image-6253" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/13_PostgreSQL_fulltext.png 801w, https://www.kemmy-it.com/wp-content/uploads/2025/09/13_PostgreSQL_fulltext-300x117.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/09/13_PostgreSQL_fulltext-768x300.png 768w" sizes="(max-width: 801px) 100vw, 801px" /></figure>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">PostgreSQL 「フルテキスト検索入門」 まとめ</h2>



<p>PostgreSQLでの文字列検索は、<code>LIKE '%文字列%'</code> が基本ですが、インデックスが効かず遅くなりがちです。そこで登場するのが <code>pg_trgm</code> 拡張。<strong>曖昧検索を高速化する強力な武器</strong>です。</p>



<ul class="wp-block-list">
<li><strong>LIKE検索の課題</strong>
<ul class="wp-block-list">
<li><code>%</code> で始まる検索はインデックスが使えない</li>



<li>全件走査（Seq Scan）になり、件数が多いと遅い</li>



<li>日本語や長文では特に非効率</li>
</ul>
</li>
</ul>



<ul class="wp-block-list">
<li><strong>pg_trgmとは？</strong>
<ul class="wp-block-list">
<li>「トライグラム（3文字単位）」で文字列を分割し、類似度を計算</li>



<li><code>%</code> 演算子で曖昧検索が可能（<code>content % '検索語'</code>）</li>



<li>GINインデックスと組み合わせることで爆速化</li>
</ul>
</li>
</ul>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">脚　注</h2>


<ol class="wp-block-footnotes"><li id="2449c5a2-0efc-4872-9dd6-aab14e58a3d6"><strong>GINインデックス</strong>（<strong>汎用反転インデックス</strong>）<br>通常のインデックス（BTREEなど）は「行単位」でインデックスを作りますが、<strong>反転インデックス</strong>は「値 → 行」の逆方向でインデックスを作ります。<br>例）<br>通常：<code>id → content</code><br>反転：<code>単語 → 含まれる行ID</code><br>つまり、検索語に対応する行を高速に引き出すための構造です。<br> <a href="#2449c5a2-0efc-4872-9dd6-aab14e58a3d6-link" aria-label="脚注参照1にジャンプ">↩︎</a></li><li id="37b7f8e9-c1c4-426b-a07a-df163b57473e"><strong>トライグラム単位</strong><br>・「Tri（3）」＋「gram（文字列単位）」＝<strong>3文字の連続部分列</strong><br>・文字列を3文字ずつの断片に分割して、検索語との<strong>共通部分の数</strong>で類似度を計算<br> <a href="#37b7f8e9-c1c4-426b-a07a-df163b57473e-link" aria-label="脚注参照2にジャンプ">↩︎</a></li></ol>


<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Python】 VSCode で仮想環境を作成してみよう。</title>
		<link>https://www.kemmy-it.com/2025/09/24/python_verchal/</link>
		
		<dc:creator><![CDATA[Kemmy]]></dc:creator>
		<pubDate>Wed, 24 Sep 2025 12:58:14 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://www.kemmy-it.com/?p=2687</guid>

					<description><![CDATA[「Python」で「仮想環境」という言葉を良く耳にするのではないでしょうか。何故、「仮想環境」を使用するのか？　「仮想環境」を使用するとどんなメリットがあるのか？　ここでは、「仮想環境」を使用するメリットと、仮想環境の作 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>「Python」で「仮想環境」という言葉を良く耳にするのではないでしょうか。何故、「仮想環境」を使用するのか？　「仮想環境」を使用するとどんなメリットがあるのか？　ここでは、「仮想環境」を使用するメリットと、仮想環境の作成方法/使用方法を紹介します。<strong><span class="marker-under-red">「仮想環境」を使用すると、「Python」の使い方が大きく広がります。</span></strong></p>



<p><br></p>



<h2 class="wp-block-heading">【Python】仮想環境とは、そもそも何？</h2>



<p>Pythonの仮想環境は<span class="marker-under-red">ベースとなるPython環境の上に</span>、プロジェクト毎に独立した専用の<strong>site-packages（プロジェクト専用のディレクトリ）</strong>を作成して使用する事を指します。そのため、ベース環境のPython標準ライブラリは共有されますが、<strong><span class="marker-under-red">プロジェクト毎のsite-packagesの部分は独立しており、異なるパッケージや依存関係をプロジェクト毎に持つことが可能な環境の事をいいます。</span></strong></p>



<p><br></p>



<h2 class="wp-block-heading">【Python】仮想環境を使用するメリット</h2>



<ul class="wp-block-list">
<li><strong>プロジェクトごとの依存関係の分離</strong><br>各仮想環境が独自の<strong>site-packagesディレクトリ</strong>を持つため、複数のプロジェクトが異なるバージョンのライブラリを必要とする場合でも干渉せずに管理できます。<br><strong>※site-packages</strong>：他の環境やシステム全体とは独立したプロジェクト専用のディレクトリ<br>　<br></li>



<li><strong>システム環境に影響を与えない</strong><br>仮想環境内にのみパッケージをインストールできるため、システム全体に影響を与えません。<br><br></li>



<li><strong>簡単な移植性</strong><br>仮想環境を使用すると、特定の環境構成を維持したままプロジェクトを別の開発者やサーバーに移行できます。同じ環境でプロジェクトが動作するため、移植性が高くなります。<br><br></li>



<li><strong>異なるPythonバージョンのサポート</strong><br>各仮想環境は異なるPythonバージョンを使用できるため、特定のPythonバージョンに依存するアプリケーションを並行して開発できます。<br><br></li>



<li><strong>バージョン管理との統合が容易</strong><br>仮想環境に必要な依存パッケージをrequirements.txtなどで定義すると、他の開発者が同じ依存関係を簡単に再現でき、Gitなどのバージョン管理と統合が容易になります。<br><br></li>



<li><strong>安全性の向上</strong><br>仮想環境はシステム全体とは独立しているため、環境ごとに必要なセキュリティパッチや更新を行いやすく、プロジェクトごとにセキュリティ対策が施せます。<br><br></li>
</ul>



<h2 class="wp-block-heading">【Python】VSCodeによる仮想環境の作成</h2>



<h3 class="wp-block-heading">ベース環境となるPythonのインストール</h3>



<p>Python（Cpython）は下記のプログを参考にしてインストールして下さい。</p>



<p>参考ブログ：<a href="https://www.kemmy-it.com/2024/09/20/python_install/" data-type="link" data-id="https://www.kemmy-it.com/2024/09/20/python_install/">Python（CPython）のインストール</a></p>



<p><br></p>



<h3 class="wp-block-heading">VSCodeのインストールと日本語化</h3>



<p>VSCodeのインストールと日本語化は下記のブログを参照して下さい。</p>



<p>参照ブログ：<a href="https://www.kemmy-it.com/category/ide/visual-studio-code/" data-type="link" data-id="https://www.kemmy-it.com/category/ide/visual-studio-code/">Visual Studio Code のインストールと日本語化</a></p>



<p></p>



<p></p>



<h3 class="wp-block-heading">VSCode上でのPython環境構築</h3>



<p>下図の様に、<br>①「拡張機能」アイコンをクリックし、<br>②「検索文字入力欄」に、Python と入力する。<br>③表示された「Python」の「インストール |∨」記号をクリックし、<br>④「リリスバージョンのインストール」を選択します。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="582" height="452" src="https://www.kemmy-it.com/wp-content/uploads/2024/11/01_virchal_01.png" alt="Pytnonのインストールの画像" class="wp-image-2695" srcset="https://www.kemmy-it.com/wp-content/uploads/2024/11/01_virchal_01.png 582w, https://www.kemmy-it.com/wp-content/uploads/2024/11/01_virchal_01-300x233.png 300w" sizes="(max-width: 582px) 100vw, 582px" /></figure>



<p><br><br>「Python」が「Python Debugger」と共にインストールされます。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="998" height="298" src="https://www.kemmy-it.com/wp-content/uploads/2024/11/01_virchal_02.png" alt="Pytnonのインストール後の画像" class="wp-image-2697" style="width:581px;height:auto" srcset="https://www.kemmy-it.com/wp-content/uploads/2024/11/01_virchal_02.png 998w, https://www.kemmy-it.com/wp-content/uploads/2024/11/01_virchal_02-300x90.png 300w, https://www.kemmy-it.com/wp-content/uploads/2024/11/01_virchal_02-768x229.png 768w" sizes="(max-width: 998px) 100vw, 998px" /></figure>



<p><br></p>



<h3 class="wp-block-heading">使用するベースPythonの選択</h3>



<ul class="wp-block-list">
<li>VS Codeのコマンドパレットを開きます。（Ctrl + Shift + P または Cmd + Shift + P）</li>



<li>「Python：インタープリターを選択」を選択します。</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="753" height="239" src="https://www.kemmy-it.com/wp-content/uploads/2024/11/01_virchal_15_1.png" alt="Pythonインタープリター選択の画面" class="wp-image-2709" srcset="https://www.kemmy-it.com/wp-content/uploads/2024/11/01_virchal_15_1.png 753w, https://www.kemmy-it.com/wp-content/uploads/2024/11/01_virchal_15_1-300x95.png 300w" sizes="(max-width: 753px) 100vw, 753px" /></figure>



<p><br></p>



<ul class="wp-block-list">
<li>ここでは、先程インストールした「Python 3.13.0」を選択します。</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="740" height="192" src="https://www.kemmy-it.com/wp-content/uploads/2024/11/01_virchal_16_1.png" alt="インストールするPytnonインタプリタの画像" class="wp-image-2710" srcset="https://www.kemmy-it.com/wp-content/uploads/2024/11/01_virchal_16_1.png 740w, https://www.kemmy-it.com/wp-content/uploads/2024/11/01_virchal_16_1-300x78.png 300w" sizes="(max-width: 740px) 100vw, 740px" /></figure>



<p><br></p>



<ul class="wp-block-list">
<li>表示メニューから、ターミナルを開きます。</li>
</ul>



<p></p>



<figure class="wp-block-image size-full"><img decoding="async" width="428" height="558" src="https://www.kemmy-it.com/wp-content/uploads/2024/11/01_virchal_03.png" alt="ターミナルを開く画像" class="wp-image-2698" srcset="https://www.kemmy-it.com/wp-content/uploads/2024/11/01_virchal_03.png 428w, https://www.kemmy-it.com/wp-content/uploads/2024/11/01_virchal_03-230x300.png 230w" sizes="(max-width: 428px) 100vw, 428px" /></figure>



<p><br></p>



<ul class="wp-block-list">
<li>「Python -V」と入力して、インストールした「Python」のバージョンが表示されれば、VSCodeでPython 3.13.0 が使用できます。</li>
</ul>



<p></p>



<figure class="wp-block-image size-full"><img decoding="async" width="523" height="235" src="https://www.kemmy-it.com/wp-content/uploads/2024/11/01_virchal_17.png" alt="Pythonのバージョンを確認する画像" class="wp-image-2711" srcset="https://www.kemmy-it.com/wp-content/uploads/2024/11/01_virchal_17.png 523w, https://www.kemmy-it.com/wp-content/uploads/2024/11/01_virchal_17-300x135.png 300w" sizes="(max-width: 523px) 100vw, 523px" /></figure>



<p><br></p>



<h3 class="wp-block-heading">今回の実行環境</h3>



<ul class="wp-block-list">
<li><strong>OS</strong>
<ul class="wp-block-list">
<li>Windows 10 Pro 22H2</li>



<li>ＯSビルド：19045.5011</li>
</ul>
</li>



<li><strong>コードエディタ（IDE）</strong>
<ul class="wp-block-list">
<li>Visual Studio Code Ver. 1.94<br><strong>※仮想環境（v_scraping</strong><strong>）を作成して実行しています。</strong></li>
</ul>
</li>



<li><strong>Python：</strong>Ver. 3.13.0</li>
</ul>



<p><br></p>



<h3 class="wp-block-heading">Python 仮想環境の作成と起動方法</h3>



<p>仮想環境は、VSCodeのターミナルで、下記のvenvコマンドを使用して作成します。</p>



<ul class="wp-block-list">
<li>先ず、サンプルとなるプロジェクト「01_scraping_01」をVSCodeで開き、ターミナルを表示します。このプロジェクトはスクレイピングを行うプログラムですが、必要なライブラリ「requests」「beautifulsoup4」が未だインストールされていません。又、仮想環境用の<strong>site-packages（プロジェクト専用のディレクトリ）</strong>もありません。</li>
</ul>



<pre class="wp-block-code python"><code>import requests
from bs4 import BeautifulSoup

# スクレイピングする対象のURL（例として仮のニュースサイトのURLを指定します）
url = 'https://www.python.org/downloads/'  # 実際のURLを指定する

# 1. RequestsでHTTPリクエストを送信してHTMLを取得
response = requests.get(url)

# ステータスコードを確認（200は成功を意味します）
if response.status_code == 200:
    # 2. Beautiful SoupでHTMLを解析
    release = &#91;]
    soup = BeautifulSoup(response.text, 'html.parser')

print()   
for li in soup.find_all('li'):
    if x := li.find('span', class_='release-number'):
        if y := x.find('a'):
            if z := li.find('span', class_='release-date'):
                release.append((y.text, z.text))

release.sort()
for name, date in release:
    print(f'{name:15}{date}')</code></pre>



<p><br></p>



<ul class="wp-block-list">
<li>コマンドプロンプト<br><strong><span class="marker-red">ベース環境の中には、pip しか入っていません。</span></strong></li>
</ul>



<pre class="wp-block-code bash"><code>PS C:\Python_Sample\01_scraping_01&gt; pip list
Package Version
------- -------
pip     24.2   
PS C:\Python_Sample\01_scraping_01&gt; dir



    ディレクトリ: C:\Python_Sample\01_scraping_01


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2024/11/02     16:30            873 scraip_01.py


PS C:\Python_Sample\01_scraping_01&gt;</code></pre>



<p><br></p>



<h4 class="wp-block-heading">仮想環境の作成</h4>



<ul class="wp-block-list">
<li>仮想環境は以下のコマンドで作成します。環境名には、プロジェクトに合った名称をつけます。</li>
</ul>



<pre class="wp-block-code bash"><code>python -m venv 環境名</code></pre>



<ul class="wp-block-list">
<li>下記のコマンドで仮想環境を作成します。</li>
</ul>



<pre class="wp-block-code bash"><code>python -m venv v_scraping</code></pre>



<p>そうすると、「v_scraping」フォルダが作成され、フォルダには下記の内容が作成されます。</p>



<pre class="wp-block-code bash"><code>ディレクトリ: C:\Python_Sample\01_scraping_01


Mode                 LastWriteTime         Length Name                                                                              
----                 -------------         ------ ----
d-----        2024/11/10     12:42                v_scraping
-a----        2024/11/02     16:30            873 scraip_01.py


PS C:\Python_Sample\01_scraping_01&gt; cd v_scraping  
PS C:\Python_Sample\01_scraping_01\v_scraping&gt; dir


    ディレクトリ: C:\Python_Sample\01_scraping_01\v_scraping


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2024/11/10     12:42                Include
d-----        2024/11/10     12:42                Lib
d-----        2024/11/10     12:43                Scripts
-a----        2024/11/10     12:42             71 .gitignore
-a----        2024/11/10     12:42            222 pyvenv.cfg</code></pre>



<p><br></p>



<h4 class="wp-block-heading">仮想環境の起動</h4>



<ul class="wp-block-list">
<li>仮想環境は以下のコマンドで起動します。</li>
</ul>



<pre class="wp-block-code bash"><code>環境名\Scripts\Activate</code></pre>



<p><br></p>



<ul class="wp-block-list">
<li>実際に仮想環境を起動してみます。起動すると、コマンドプロンプトの先頭に(環境名)が表示されます。又、<span class="marker-red"><strong>仮想環境の中にも、pip しか入っていません。</strong></span></li>
</ul>



<pre class="wp-block-code bash"><code>PS C:\Python_Sample\01_scraping_01&gt; v_scraping\Scripts\Activate
(v_scraping) PS C:\Python_Sample\01_scraping_01&gt; pip list
Package Version
------- -------
pip     24.2
(v_scraping) PS C:\Python_Sample\01_scraping_01&gt; </code></pre>



<p><br></p>



<ul class="wp-block-list">
<li>スクレイピングに必要な、Beautiful SoupとRequests ライブラリを仮想環境でインストールします。</li>
</ul>



<pre class="wp-block-code bash"><code>(v_scraping) PS C:\Python_Sample\01_scraping_01&gt; pip install beautifulsoup4
Collecting beautifulsoup4
  Downloading beautifulsoup4-4.12.3-py3-none-any.whl.metadata (3.8 kB)
Collecting soupsieve&gt;1.2 (from beautifulsoup4)
  Downloading soupsieve-2.6-py3-none-any.whl.metadata (4.6 kB)
Downloading beautifulsoup4-4.12.3-py3-none-any.whl (147 kB)
Downloading soupsieve-2.6-py3-none-any.whl (36 kB)
Installing collected packages: soupsieve, beautifulsoup4
Successfully installed beautifulsoup4-4.12.3 soupsieve-2.6

&#91;notice] A new release of pip is available: 24.2 -&gt; 24.3.1
&#91;notice] To update, run: python.exe -m pip install --upgrade pip
(v_scraping) PS C:\Python_Sample\01_scraping_01&gt; pip install requests
Collecting requests
Collecting charset-normalizer&lt;4,&gt;=2 (from requests)
  Downloading charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl.metadata (34 kB)
Collecting idna&lt;4,&gt;=2.5 (from requests)
  Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)
Collecting urllib3&lt;3,&gt;=1.21.1 (from requests)
  Downloading urllib3-2.2.3-py3-none-any.whl.metadata (6.5 kB)
Collecting certifi&gt;=2017.4.17 (from requests)
  Downloading certifi-2024.8.30-py3-none-any.whl.metadata (2.2 kB)
Downloading requests-2.32.3-py3-none-any.whl (64 kB)
Downloading certifi-2024.8.30-py3-none-any.whl (167 kB)
Downloading charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl (102 kB)
Downloading idna-3.10-py3-none-any.whl (70 kB)
Downloading urllib3-2.2.3-py3-none-any.whl (126 kB)
Installing collected packages: urllib3, idna, charset-normalizer, certifi, requests
Successfully installed certifi-2024.8.30 charset-normalizer-3.4.0 idna-3.10 requests-2.32.3 urllib3-2.2.3

&#91;notice] A new release of pip is available: 24.2 -&gt; 24.3.1
&#91;notice] To update, run: python.exe -m pip install --upgrade pip
(v_scraping) PS C:\Python_Sample\01_scraping_01&gt; pip list
Package            Version
------------------ ---------
beautifulsoup4     4.12.3
certifi            2024.8.30
charset-normalizer 3.4.0
idna               3.10
pip                24.2
requests           2.32.3
soupsieve          2.6
urllib3            2.2.3
(v_scraping) PS C:\Python_Sample\01_scraping_01&gt; </code></pre>



<ul class="wp-block-list">
<li>そうすると、<strong><span class="marker-red">Beautiful SoupとRequests 関連のライブラリがインストールされ、仮想環境で使用可能となります。</span></strong></li>
</ul>



<p><br></p>



<h4 class="wp-block-heading">仮想環境の停止</h4>



<ul class="wp-block-list">
<li><strong>仮想環境を停止するには、deactivate コマンドを使用します。</strong></li>
</ul>



<pre class="wp-block-code bash"><code>deactivate</code></pre>



<ul class="wp-block-list">
<li>実際に仮想環境を停止してみます。</li>
</ul>



<pre class="wp-block-code bash"><code>(v_scraping) PS C:\Python_Sample\01_scraping_01&gt; deactivate
PS C:\Python_Sample\01_scraping_01&gt; pip list
Package Version
------- -------
pip     24.2
PS C:\Python_Sample\01_scraping_01&gt; </code></pre>



<ul class="wp-block-list">
<li>仮想環境を停止して、インストールしているライブラリを見てみると、<strong><span class="marker-red">ベース環境では pip しかインストールされていません。</span><span class="marker-red">つまり、仮想環境で構築した環境は独立しており、</span><span class="marker-red">ベース</span><span class="marker-red">環境には影響を及ぼさない事が分かります。</span></strong></li>
</ul>



<p><br></p>



<p>更に、仮想環境 v_scraping2を作成してみましょう。</p>



<pre class="wp-block-code bash"><code>PS C:\Python_Sample\01_scraping_01&gt; python -m venv v_scraping2
PS C:\Python_Sample\01_scraping_01&gt; v_scraping2\Scripts\Activate
(v_scraping2) PS C:\Python_Sample\01_scraping_01&gt; pip list
Package Version
------- -------
pip     24.2   
(v_scraping2) PS C:\Python_Sample\01_scraping_01&gt; </code></pre>



<ul class="wp-block-list">
<li>v_scraping2 でもライブラリは pip しかインストールされていません。この事より、<strong><span class="marker-red">仮想環境「v_scraping」と「v_scraping2」も、それぞれ影響されない「独立した環境」である事が分かります。</span></strong></li>
</ul>



<p><br></p>



<h2 class="wp-block-heading">VSCodeでの、Python 仮想環境のまとめ</h2>



<ul class="wp-block-list">
<li><strong>各仮想環境が独自のsite-packagesディレクトリを持つため、複数のプロジェクトが異なるバージョンのライブラリを必要とする場合でも、お互いに影響しないで使用できる。</strong><br><br></li>



<li><strong>Pythonのベース環境を作成（インストール）し、VSCodeのパレット（Ctrl + Shift + P または Cmd + Shift + P）で、「Python：インタープリターを選択」を選択し、インストールしたPythonと関連付ける。</strong><br><br></li>



<li><strong>仮想環境の作成：</strong><br>「<strong><span class="marker-red">python -m venv 環境名</span></strong>」コマンド<br><br></li>



<li><strong>仮想環境の起動：</strong><br>「<strong><span class="marker-red">環境名\Scripts\Activate</span></strong>」コマンド<br><br></li>



<li><strong>仮想環境の終了：</strong><br>「<strong><span class="marker-red">deactivate</span></strong>」コマンド<br><br></li>
</ul>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Windows版 Anacondaのインストール方法詳細</title>
		<link>https://www.kemmy-it.com/2025/09/24/python_anaconda_install/</link>
		
		<dc:creator><![CDATA[Kemmy]]></dc:creator>
		<pubDate>Wed, 24 Sep 2025 12:50:20 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://www.kemmy-it.com/?p=5488</guid>

					<description><![CDATA[本ブログはPython 初心者向けに、Anacondaのインストール方法を具体的に紹介します。 ●インストール環境（2024年9月現在） Anaconda をインストールする目的 Anaconda のインストール Ana [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>本ブログはPython 初心者向けに、Anacondaのインストール方法を具体的に紹介します。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><strong>●インストール環境（2024年9月現在）</strong></p>



<ul class="wp-block-list">
<li>Windows 10 Pro 22H2　（19045.4894）</li>



<li>Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz 3.19 GHz</li>



<li>16.0 GB</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Anaconda をインストールする目的</h2>



<ul class="wp-block-list">
<li><strong>環境構築の手間を減らしたい</strong>
<ul class="wp-block-list">
<li>Anacondaは、Python や R 言語、Jupyter Notebook など <strong>1000以上のライブラリ</strong> が標準でインストールされるため、すぐに開発を始められます。<br>ただし、サイズが約４GBと大きく自身の開発に不要なパッケージが含まれることもあります。</li>
</ul>
</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Anaconda のインストール</h2>



<h3 class="wp-block-heading">Anaconda インストーラーのダウンロード</h3>



<p>下記の公式Webサイトのダウンロードページから、インストーラーをダウンロードしてインスト―ルします。<br><br><a href="https://www.anaconda.com/">Anaconda 公式サイト</a><br></p>



<p>※以下の画面はGoogleの翻訳機能で日本語に翻訳しています。</p>



<p>画面上部右側の「↓ 無料ダウンロード」をクリック。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="405" src="https://www.kemmy-it.com/wp-content/uploads/2025/06/01_Anaconda_install-1024x405.png" alt="" class="wp-image-5539" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/06/01_Anaconda_install-1024x405.png 1024w, https://www.kemmy-it.com/wp-content/uploads/2025/06/01_Anaconda_install-300x119.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/06/01_Anaconda_install-768x304.png 768w, https://www.kemmy-it.com/wp-content/uploads/2025/06/01_Anaconda_install.png 1470w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>次の画面で以下を入力し、<strong>「提出する &gt;」ボタンをクリック</strong>。又は、<strong>「登録をスキップ」する</strong>。</p>



<ul class="wp-block-list">
<li><strong>メールアドレス</strong></li>



<li><strong>サービスに関する連絡の受け取り</strong>
<ul class="wp-block-list">
<li>同意するならば&#x2714;、しない場合は&#x2714;しない</li>
</ul>
</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="557" height="490" src="https://www.kemmy-it.com/wp-content/uploads/2025/06/04_Anaconda_install.png" alt="" class="wp-image-5543" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/06/04_Anaconda_install.png 557w, https://www.kemmy-it.com/wp-content/uploads/2025/06/04_Anaconda_install-300x264.png 300w" sizes="(max-width: 557px) 100vw, 557px" /></figure>



<p><br></p>



<p>下記の画面でWindows版 64bit インストーラーをクリックすると、Windows版の最新インストーラー「<strong>Anaconda3-2024.10-1-Windows-x86_64.exe</strong>」がダウンロードされます。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="553" height="716" src="https://www.kemmy-it.com/wp-content/uploads/2025/06/03_Anaconda_install.png" alt="" class="wp-image-5547" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/06/03_Anaconda_install.png 553w, https://www.kemmy-it.com/wp-content/uploads/2025/06/03_Anaconda_install-232x300.png 232w" sizes="(max-width: 553px) 100vw, 553px" /></figure>



<p><br></p>



<h3 class="wp-block-heading">インストールの開始</h3>



<p>ダウンロードした「<strong><strong>Anaconda3-2024.10-1-Windows-x86_64.exe</strong></strong>」をダブルクリックしてインストールします。Welcom to Anaconda3 の画面が表示されたら、「NEXT」ボタンをクリックします。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="499" height="388" src="https://www.kemmy-it.com/wp-content/uploads/2025/06/10_Anaconda_install.png" alt="" class="wp-image-5555" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/06/10_Anaconda_install.png 499w, https://www.kemmy-it.com/wp-content/uploads/2025/06/10_Anaconda_install-300x233.png 300w" sizes="(max-width: 499px) 100vw, 499px" /></figure>



<p><br></p>



<p>ライセンス契約への同意画面が表示されるので、内容を確認し同意可能だったら、「I Agree」ボタンをクリックします。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="499" height="388" src="https://www.kemmy-it.com/wp-content/uploads/2025/06/11_Anaconda_install.png" alt="" class="wp-image-5556" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/06/11_Anaconda_install.png 499w, https://www.kemmy-it.com/wp-content/uploads/2025/06/11_Anaconda_install-300x233.png 300w" sizes="(max-width: 499px) 100vw, 499px" /></figure>



<p><br></p>



<p>自分だけが使用する場合は、「Just Me」、他のユーザーも使用する場合は「All Users」を選択し、「Next」ボタンをクリックします。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="499" height="388" src="https://www.kemmy-it.com/wp-content/uploads/2025/06/12_Anaconda_install.png" alt="" class="wp-image-5558" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/06/12_Anaconda_install.png 499w, https://www.kemmy-it.com/wp-content/uploads/2025/06/12_Anaconda_install-300x233.png 300w" sizes="(max-width: 499px) 100vw, 499px" /></figure>



<p><br></p>



<p>インストール先を聞いてくるので、標準フォルダで良ければそのまま、カスタムフォルダにインストールする場合は、カスタムフォルダ名を入力して「Next」ボタンをクリックします。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="499" height="388" src="https://www.kemmy-it.com/wp-content/uploads/2025/06/13_Anaconda_install.png" alt="" class="wp-image-5559" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/06/13_Anaconda_install.png 499w, https://www.kemmy-it.com/wp-content/uploads/2025/06/13_Anaconda_install-300x233.png 300w" sizes="(max-width: 499px) 100vw, 499px" /></figure>



<p><br></p>



<p>インストールのオプションを指定します。ここでは以下の2つのオプションをチェックしました。</p>



<ul class="wp-block-list">
<li><strong>Create shortcuts(supported packege only)</strong></li>



<li><strong>Clear the package cache upon completion.</strong></li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="499" height="388" src="https://www.kemmy-it.com/wp-content/uploads/2025/06/14_Anaconda_install.png" alt="" class="wp-image-5560" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/06/14_Anaconda_install.png 499w, https://www.kemmy-it.com/wp-content/uploads/2025/06/14_Anaconda_install-300x233.png 300w" sizes="(max-width: 499px) 100vw, 499px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><strong>■オプションの意味</strong></p>



<ul class="wp-block-list">
<li><strong>Create shortcuts(supported packege only)</strong><br>Anacondaに含まれるいくつかのアプリケーション（例: Jupyter Notebook、Spyderなど）のショートカットを、スタートメニューに作成するオプションです。<br><br></li>



<li><strong>Add anaconda3 to my PATH environment variable.</strong><br>Anaconda3をPATH環境変数に追加するオプションですが、<strong>このオプションは選択しないのが推奨されています。</strong>Anacondaには専用の環境管理システム（Conda）があるため、PATHに追加すると他のPython環境と競合する可能性があるためです。<br><br></li>



<li><strong>Register anaconda3 as my default Python 3.12</strong><br>VSCode や PyCharm などの他のプログラムが、Anaconda3 をシステム上の主要な Python 3.12 として自動的に検出できるようにするオプションです。<br><br>Anaconda をメインで使いたい場合は&#x2714;し、既存の Python 環境を維持したい方は&#x2714;しない方が良いでしょう。<br><br><br></li>



<li><strong>Clear the package cache upon completion.</strong><br>Anacondaが一時的に保存したキャッシュファイル（インストール済みのパッケージのコピーやメタデータ）を削除するか否かを指定します。指定すると、ディスクスペースが節約され、クリーンな状態が保たれます。<br><br></li>
</ul>



<p>インストール進行中の表示です。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="499" height="388" src="https://www.kemmy-it.com/wp-content/uploads/2025/06/15_Anaconda_install.png" alt="" class="wp-image-5561" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/06/15_Anaconda_install.png 499w, https://www.kemmy-it.com/wp-content/uploads/2025/06/15_Anaconda_install-300x233.png 300w" sizes="(max-width: 499px) 100vw, 499px" /></figure>



<p><br></p>



<p>インストール完了のメッセ―ジが表示されるので、「Next」ボタンをクリックします。<br>画像は「Show details」ボタンをクリックした時の表示です。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="499" height="388" src="https://www.kemmy-it.com/wp-content/uploads/2025/06/16_Anaconda_install.png" alt="" class="wp-image-5562" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/06/16_Anaconda_install.png 499w, https://www.kemmy-it.com/wp-content/uploads/2025/06/16_Anaconda_install-300x233.png 300w" sizes="(max-width: 499px) 100vw, 499px" /></figure>



<p><br></p>



<p>下記のダイアログボックスには、<br>「Anacondaのフル装備のJupyter Notebookを使えば、セットアップ不要でクラウドから利用可能になります。無料で始めましょう。」と記入されています。「Next」ボタンをクリックします。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="499" height="388" src="https://www.kemmy-it.com/wp-content/uploads/2025/06/17_Anaconda_install.png" alt="" class="wp-image-5563" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/06/17_Anaconda_install.png 499w, https://www.kemmy-it.com/wp-content/uploads/2025/06/17_Anaconda_install-300x233.png 300w" sizes="(max-width: 499px) 100vw, 499px" /></figure>



<p><br></p>



<p>インストール終了のメッセージが表示されます。「Finish」ボタンをクリックしてインストールを終了しますが、「Launch Anaconda Navigator」と「Getting Started with Anaconda Distribution」にチェックが入っているので、ここでは両方ともチェックを外します。必要な場合はチェックを入れて下さい。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="499" height="388" src="https://www.kemmy-it.com/wp-content/uploads/2025/06/18_Anaconda_install.png" alt="" class="wp-image-5564" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/06/18_Anaconda_install.png 499w, https://www.kemmy-it.com/wp-content/uploads/2025/06/18_Anaconda_install-300x233.png 300w" sizes="(max-width: 499px) 100vw, 499px" /></figure>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Anaconda インストール結果の確認</h3>



<p>「スタート」から「Anaconda Prompt」を選択します。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="303" height="340" src="https://www.kemmy-it.com/wp-content/uploads/2024/09/25_Anaconda_install.png" alt="" class="wp-image-1815" srcset="https://www.kemmy-it.com/wp-content/uploads/2024/09/25_Anaconda_install.png 303w, https://www.kemmy-it.com/wp-content/uploads/2024/09/25_Anaconda_install-267x300.png 267w" sizes="(max-width: 303px) 100vw, 303px" /></figure>



<p><br></p>



<p>「conda」コマンドで、正しいバージョンやヘルプが表示できればインストールは成功です。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="797" height="512" src="https://www.kemmy-it.com/wp-content/uploads/2025/06/20_Anaconda_install.png" alt="" class="wp-image-5566" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/06/20_Anaconda_install.png 797w, https://www.kemmy-it.com/wp-content/uploads/2025/06/20_Anaconda_install-300x193.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/06/20_Anaconda_install-768x493.png 768w" sizes="(max-width: 797px) 100vw, 797px" /></figure>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Anaconda インストールまとめ</h2>



<p>「Anaconda」は公式ホームページから、インストーラーをダウンロードしてインストールします。<br><a href="https://www.anaconda.com/">Anaconda 公式サイト</a></p>



<p>システム開発に必要なライブラリは本体のインストールと同時にインストールされ、すぐに開発が始められます。但し、サイズが約４GBと大きく自身の開発に不要なパッケージが含まれている可能性がある事を認識しておきましょう。</p>



<div style="height:120px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【PostgreSQL】ストアドファンクション・ストアドプロシジャ 違いと用途を徹底比較（初心者）</title>
		<link>https://www.kemmy-it.com/2025/09/20/pgadmin_stored/</link>
		
		<dc:creator><![CDATA[Kemmy]]></dc:creator>
		<pubDate>Sat, 20 Sep 2025 11:41:30 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<guid isPermaLink="false">https://www.kemmy-it.com/?p=6135</guid>

					<description><![CDATA[はじめに PostgreSQLを使った業務システム開発において、ストアドプロシジャ（PROCEDURE）とストアドファンクション（FUNCTION）は、処理の再利用性や保守性を高める重要な要素です。 本ブログでは、「ps [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><span class="fz-24px">はじめに</span></h2>



<p>PostgreSQLを使った業務システム開発において、ストアドプロシジャ（<code>PROCEDURE</code>）とストアドファンクション（<code>FUNCTION</code>）は、処理の再利用性や保守性を高める重要な要素です。</p>



<p>本ブログでは、「psql」と「pgAdmin4」を使って、簡単な「本の在庫管理システム」を題材に、両者の違いや使い方を紹介します。</p>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">使用環境</h2>



<ul class="wp-block-list">
<li>Windows 11 Pro 24H2</li>



<li>PostgreSQL 17.6</li>



<li>pgAdmin4 9.6</li>



<li>Chrome 134.0.6998.205</li>
</ul>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">ストアドファンクション（Stored Function）とは？</h2>



<p>ストアドファンクションは、<strong>値を返す処理を定義するSQLの関数</strong>です。たとえば「在庫数を取得する」「売上を計算する」といった処理を関数として定義し、<code>SELECT</code>文などから呼び出すことができます。</p>



<ul class="wp-block-list">
<li><strong>特徴</strong>
<ul class="wp-block-list">
<li>RETURNS で戻り値を定義</li>



<li>SELECT や PERFORM で呼び出し</li>



<li>単一の値や集計結果を返す用途に最適</li>
</ul>
</li>



<li><strong>基本構文</strong></li>
</ul>



<pre class="wp-block-code"><code>CREATE &#91;OR REPLACE] FUNCTION 関数名(引数 型, ...)
RETURNS 戻り値の型
LANGUAGE plpgsql
AS $$
DECLARE
  -- 変数宣言（任意）
BEGIN
  -- 処理内容
  RETURN 戻り値;
END;
$$;</code></pre>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">ストアドプロシジャ（Stored Procedure）とは？</h2>



<p>ストアドプロシジャは、<strong>複数ステップの処理や副作用を伴う業務ロジックをまとめた手続き型の処理</strong>です。たとえば「在庫を更新し、ログを記録する」といった一連の処理を1つのプロシジャにまとめることができます。</p>



<ul class="wp-block-list">
<li><strong>特徴</strong>
<ul class="wp-block-list">
<li>戻り値はなし（ただしOUTパラメータは使える）</li>



<li><code>CALL</code> で呼び出し</li>



<li><code>BEGIN</code>, <code>COMMIT</code>, <code>ROLLBACK</code> によるトランザクション制御が可能</li>



<li>複雑な業務処理に適している</li>
</ul>
</li>



<li><strong>基本構文</strong></li>
</ul>



<pre class="wp-block-code"><code>CREATE &#91;OR REPLACE] PROCEDURE プロシジャ名(引数 型, ...)
LANGUAGE plpgsql
AS $$
DECLARE
  -- 変数宣言（任意）
BEGIN
  -- 処理内容（複数ステップ可）
  -- トランザクション制御も可能
END;
$$;</code></pre>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">ストアドファンクション・ストアドプロシジャの作成と実行</h2>



<h3 class="wp-block-heading">テーブルの作成</h3>



<p>先ず 以下のテーブルを作成します。</p>



<ul class="wp-block-list">
<li>booksテーブル<br>在庫数テーブル。在庫数を入力しておき、ストアドファンクションから参照されます。</li>
</ul>



<pre class="wp-block-code"><code>CREATE TABLE books (
  book_id SERIAL PRIMARY KEY,
  title TEXT NOT NULL,
  stock INT DEFAULT 0
);</code></pre>



<figure class="wp-block-image size-full"><img decoding="async" width="928" height="507" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/01_PostgreSQL_Stoerd.png" alt="booksテーブルのデータ表示画面" class="wp-image-6141" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/01_PostgreSQL_Stoerd.png 928w, https://www.kemmy-it.com/wp-content/uploads/2025/09/01_PostgreSQL_Stoerd-300x164.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/09/01_PostgreSQL_Stoerd-768x420.png 768w" sizes="(max-width: 928px) 100vw, 928px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>stock_logs</strong><br>在庫数の変化を記録するログテーブルです。ストアドプロシジャによって更新されます。</li>
</ul>



<pre class="wp-block-code"><code>CREATE TABLE stock_logs (
  log_id SERIAL PRIMARY KEY,
  book_id INT REFERENCES books(book_id),
  change INT,
  log_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);</code></pre>



<figure class="wp-block-image size-full"><img decoding="async" width="873" height="332" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/02_PostgreSQL_Stoerd-1.png" alt="stock_logsの内容表示画面。" class="wp-image-6146" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/02_PostgreSQL_Stoerd-1.png 873w, https://www.kemmy-it.com/wp-content/uploads/2025/09/02_PostgreSQL_Stoerd-1-300x114.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/09/02_PostgreSQL_Stoerd-1-768x292.png 768w" sizes="(max-width: 873px) 100vw, 873px" /></figure>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">ストアドファンクションの作成</h3>



<p>在庫数を取得するストアドファンクションを作成します。</p>



<p>記号：$$は、<strong>「ドルクオート（dollar-quoting）」と呼ばれる構文で、関数やプロシジャの本体（つまりPL/pgSQLコード）を囲むための区切り記号です。</strong></p>



<pre class="wp-block-code"><code>-- 関数を作成または置き換える（既存の関数があれば上書き）
CREATE OR REPLACE FUNCTION get_stock(book_title TEXT)
-- 戻り値の型を指定（在庫数：整数）
RETURNS INT AS $$
-- 変数宣言部：在庫数を一時的に保持する変数
DECLARE
  current_stock INT;
BEGIN
  -- booksテーブルから、指定されたタイトルの在庫数を取得し、変数に格納
  SELECT stock INTO current_stock
  FROM books
  WHERE title = book_title;
  -- 取得した在庫数を関数の戻り値として返す
  RETURN current_stock;
END;
-- PL/pgSQL言語で記述された関数であることを指定
$$ LANGUAGE plpgsql;</code></pre>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">psqlでの作成</h4>



<p>psqlに「CREATE FUNCTION…」文を入力して作成。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="745" height="798" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/10_PostgreSQL_Stoerd.png" alt="ストアドファンクションの作成画面。" class="wp-image-6163" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/10_PostgreSQL_Stoerd.png 745w, https://www.kemmy-it.com/wp-content/uploads/2025/09/10_PostgreSQL_Stoerd-280x300.png 280w" sizes="(max-width: 745px) 100vw, 745px" /></figure>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">pgadmin4 での作成</h4>



<ul class="wp-block-list">
<li><strong>「関数」右クリック⇀「作成」⇀「関数」</strong></li>
</ul>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="650" height="283" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/03_PostgreSQL_Stoerd.png" alt="pgAdmin4による、ストアドファンクションの作成画面。" class="wp-image-6149" style="width:680px;height:auto" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/03_PostgreSQL_Stoerd.png 650w, https://www.kemmy-it.com/wp-content/uploads/2025/09/03_PostgreSQL_Stoerd-300x131.png 300w" sizes="(max-width: 650px) 100vw, 650px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>「一般」タブにストアドファンクションの名称を入力</strong></li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="681" height="359" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/04_PostgreSQL_Stoerd.png" alt="" class="wp-image-6150" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/04_PostgreSQL_Stoerd.png 681w, https://www.kemmy-it.com/wp-content/uploads/2025/09/04_PostgreSQL_Stoerd-300x158.png 300w" sizes="(max-width: 681px) 100vw, 681px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>「定義」タブで、「返り値の型」「言語」「引数」を以下の様に設定</strong></li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="681" height="359" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/05_PostgreSQL_Stoerd.png" alt="" class="wp-image-6152" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/05_PostgreSQL_Stoerd.png 681w, https://www.kemmy-it.com/wp-content/uploads/2025/09/05_PostgreSQL_Stoerd-300x158.png 300w" sizes="(max-width: 681px) 100vw, 681px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>「コード」タブには、「DECLARE」文から「END;」までを作成して入力</strong></li>
</ul>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="663" height="332" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/06_PostgreSQL_Stoerd.png" alt="" class="wp-image-6154" style="width:678px;height:auto" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/06_PostgreSQL_Stoerd.png 663w, https://www.kemmy-it.com/wp-content/uploads/2025/09/06_PostgreSQL_Stoerd-300x150.png 300w" sizes="(max-width: 663px) 100vw, 663px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>「オプション」タグの動作属性に、「STABLE」を指定</strong></li>
</ul>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="699" height="331" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/07_PostgreSQL_Stoerd-1.png" alt="" class="wp-image-6157" style="width:677px;height:auto" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/07_PostgreSQL_Stoerd-1.png 699w, https://www.kemmy-it.com/wp-content/uploads/2025/09/07_PostgreSQL_Stoerd-1-300x142.png 300w" sizes="(max-width: 699px) 100vw, 699px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>「パラメータ」タグには下記の値を指定</strong>
<ul class="wp-block-list">
<li><strong>client_min_messages</strong>
<ul class="wp-block-list">
<li>クライアント向けにどのレベルのログ情報出力を指定するかのパラメタ</li>
</ul>
</li>



<li><strong>debug1</strong>
<ul class="wp-block-list">
<li>一般的なデバッグ情報（ユーザー向け）</li>
</ul>
</li>
</ul>
</li>
</ul>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="707" height="352" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/08_PostgreSQL_Stoerd.png" alt="" class="wp-image-6159" style="width:695px;height:auto" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/08_PostgreSQL_Stoerd.png 707w, https://www.kemmy-it.com/wp-content/uploads/2025/09/08_PostgreSQL_Stoerd-300x149.png 300w" sizes="(max-width: 707px) 100vw, 707px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>「保存」ボタンをクリック</strong><br>内容は、上記の指定でpgadmin4 が作成した「get_stock」ストアドファンクション</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="697" height="492" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/09_PostgreSQL_Stoerd.png" alt="" class="wp-image-6161" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/09_PostgreSQL_Stoerd.png 697w, https://www.kemmy-it.com/wp-content/uploads/2025/09/09_PostgreSQL_Stoerd-300x212.png 300w" sizes="(max-width: 697px) 100vw, 697px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li>「ストアドファンクション」の詳細については、以下の公式サイトを参照ください。</li>
</ul>



<p><a href="https://www.postgresql.jp/document/17/html/sql-createfunction.html">CREATE FUNCTION（公式ドキュメント）</a></p>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">ストアドプロシジャの作成</h3>



<p>在庫数の変化を「stock_logs」テーブルに記録するストアドプロシジャを作成します。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">psqlでの作成</h4>



<p>psqlに「CREATE PROCEDURE…」文を入力して作成。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="1015" height="912" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/11_PostgreSQL_Stoerd.png" alt="" class="wp-image-6164" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/11_PostgreSQL_Stoerd.png 1015w, https://www.kemmy-it.com/wp-content/uploads/2025/09/11_PostgreSQL_Stoerd-300x270.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/09/11_PostgreSQL_Stoerd-768x690.png 768w" sizes="(max-width: 1015px) 100vw, 1015px" /></figure>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">pgadmin4 での作成</h4>



<ul class="wp-block-list">
<li><strong>「プロシージャ」右クリック⇀「作成」⇀「<strong>プロシージャ</strong>」</strong></li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="245" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/12_PostgreSQL_Stoerd.png" alt="" class="wp-image-6165" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/12_PostgreSQL_Stoerd.png 624w, https://www.kemmy-it.com/wp-content/uploads/2025/09/12_PostgreSQL_Stoerd-300x118.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>「一般」タブにストアドプロシジャの名称を入力</strong></li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="698" height="406" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/13_PostgreSQL_Stoerd.png" alt="" class="wp-image-6166" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/13_PostgreSQL_Stoerd.png 698w, https://www.kemmy-it.com/wp-content/uploads/2025/09/13_PostgreSQL_Stoerd-300x174.png 300w" sizes="(max-width: 698px) 100vw, 698px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong><strong>「定義」タブで、「言語」「引数」を以下の様に設定</strong></strong></li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="695" height="407" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/14_PostgreSQL_Stoerd.png" alt="" class="wp-image-6167" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/14_PostgreSQL_Stoerd.png 695w, https://www.kemmy-it.com/wp-content/uploads/2025/09/14_PostgreSQL_Stoerd-300x176.png 300w" sizes="(max-width: 695px) 100vw, 695px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>「コード」タブには、「DECLARE」文から「END;」までを作成して入力</strong></li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="701" height="405" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/15_PostgreSQL_Stoerd.png" alt="" class="wp-image-6168" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/15_PostgreSQL_Stoerd.png 701w, https://www.kemmy-it.com/wp-content/uploads/2025/09/15_PostgreSQL_Stoerd-300x173.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/09/15_PostgreSQL_Stoerd-120x68.png 120w" sizes="(max-width: 701px) 100vw, 701px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li>「パラメータ」タブは「ストアドファンクション」と同様に設定。</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="697" height="403" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/16_PostgreSQL_Stoerd.png" alt="" class="wp-image-6169" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/16_PostgreSQL_Stoerd.png 697w, https://www.kemmy-it.com/wp-content/uploads/2025/09/16_PostgreSQL_Stoerd-300x173.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/09/16_PostgreSQL_Stoerd-120x68.png 120w" sizes="(max-width: 697px) 100vw, 697px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>「SQL」タグで内容を確認し、「保存」ボタンをクリック</strong>
<ul class="wp-block-list">
<li>内容は、上記の指定でpgadmin4 が作成した「update_stock_and_log」ストアドプロシジャ</li>
</ul>
</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="805" height="472" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/17_PostgreSQL_Stoerd.png" alt="" class="wp-image-6170" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/17_PostgreSQL_Stoerd.png 805w, https://www.kemmy-it.com/wp-content/uploads/2025/09/17_PostgreSQL_Stoerd-300x176.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/09/17_PostgreSQL_Stoerd-768x450.png 768w" sizes="(max-width: 805px) 100vw, 805px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li>「ストアドプロシジャ」の詳細については、以下の公式サイトを参照ください。</li>
</ul>



<p><a href="https://www.postgresql.jp/document/17/html/sql-createprocedure.html">CREATE PROCEDURE（公式ドキュメント）</a></p>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">ストアドファンクション・ストアドプロシジャの実行</h2>



<p>手動実行（psql）して、「ストアドファンクション」及び「ストアドプロシジャ」が正常動作する事を確認します。</p>



<p>【結果】：psql でもadmin4 でも正常動作を確認できました。（当たり前です）</p>



<ul class="wp-block-list">
<li>ストアドファンクション</li>
</ul>



<p>psql SELECT 関数名(&#8230;&#8230;)</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="437" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/18_PostgreSQL_Stoerd.png" alt="" class="wp-image-6173" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/18_PostgreSQL_Stoerd.png 624w, https://www.kemmy-it.com/wp-content/uploads/2025/09/18_PostgreSQL_Stoerd-300x210.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>pgadmin4 SELECT 関数名(&#8230;&#8230;)</p>



<figure class="wp-block-image size-full"><img decoding="async" width="446" height="248" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/20_PostgreSQL_Stoerd.png" alt="" class="wp-image-6177" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/20_PostgreSQL_Stoerd.png 446w, https://www.kemmy-it.com/wp-content/uploads/2025/09/20_PostgreSQL_Stoerd-300x167.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/09/20_PostgreSQL_Stoerd-120x68.png 120w, https://www.kemmy-it.com/wp-content/uploads/2025/09/20_PostgreSQL_Stoerd-160x90.png 160w" sizes="(max-width: 446px) 100vw, 446px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="434" height="248" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/21_PostgreSQL_Stoerd.png" alt="" class="wp-image-6178" style="width:446px;height:auto" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/21_PostgreSQL_Stoerd.png 434w, https://www.kemmy-it.com/wp-content/uploads/2025/09/21_PostgreSQL_Stoerd-300x171.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/09/21_PostgreSQL_Stoerd-120x68.png 120w, https://www.kemmy-it.com/wp-content/uploads/2025/09/21_PostgreSQL_Stoerd-160x90.png 160w" sizes="(max-width: 434px) 100vw, 434px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li>ストアドプロシジャ</li>
</ul>



<p>psql CALL プロシジャ名(&#8230;..)</p>



<figure class="wp-block-image size-full"><img decoding="async" width="609" height="476" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/19_PostgreSQL_Stoerd.png" alt="" class="wp-image-6174" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/19_PostgreSQL_Stoerd.png 609w, https://www.kemmy-it.com/wp-content/uploads/2025/09/19_PostgreSQL_Stoerd-300x234.png 300w" sizes="(max-width: 609px) 100vw, 609px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>pgAdmin4 CALL プロシジャ名(&#8230;..)</p>



<figure class="wp-block-image size-full"><img decoding="async" width="884" height="415" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/22_PostgreSQL_Stoerd.png" alt="" class="wp-image-6179" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/22_PostgreSQL_Stoerd.png 884w, https://www.kemmy-it.com/wp-content/uploads/2025/09/22_PostgreSQL_Stoerd-300x141.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/09/22_PostgreSQL_Stoerd-768x361.png 768w" sizes="(max-width: 884px) 100vw, 884px" /></figure>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">有効活用できる場面</h2>



<h3 class="wp-block-heading">ストアドファンクション</h3>



<ul class="wp-block-list">
<li>集計や計算ロジックを共通化したいとき</li>



<li>SELECT文の中で使用したいとき</li>



<li>トリガーで呼びたいとき</li>



<li>トリガーで呼び出したいとき
<ul class="wp-block-list">
<li>レコードを追加した後での自動処理等</li>
</ul>
</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">ストアドプロシジャ</h3>



<ul class="wp-block-list">
<li>複数の更新・挿入処理をまとめたいとき
<ul class="wp-block-list">
<li>在庫更新＋ログ記録等</li>
</ul>
</li>



<li>トランザクション制御を含めたいとき
<ul class="wp-block-list">
<li> <code>BEGIN ... COMMIT</code> を明示的に扱える</li>
</ul>
</li>



<li>外部から明示的に呼び出す業務処理
<ul class="wp-block-list">
<li>バッチ処理やAPI連携のエントリポイントとして</li>
</ul>
</li>
</ul>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">まとめ</h2>



<p>本ブログでは以下の事項を紹介しました。</p>



<ul class="wp-block-list">
<li>ストアドファンクションとストアドプロシジャの違い</li>



<li>ストアドファンクションとストアドプロシジャの主な用途</li>



<li>psql と、pgadmin4（GUI）による作成方法</li>



<li>ストアドファンクションとストアドプロシジャの実行方法</li>



<li>有効活用できる場面</li>
</ul>



<p>ストアドファンクションやストアドプロシジャは、データベースの中で処理を共通化できる事、及びトリガーに応じて起動できる点で有効性が高いと考えられます。但し、ストアドプロシジャは、トリガー関数等を使用する必要が有りますが…。</p>



<p>今回、pgadmin4 でも作成しましたが、初心者にとっては最初の理解に役立つと思うが、一度覚えてしまったら手数の多さが気になって使用しなくなるのではないかと思いました。実際、処理の部分は自分で作成するわけで、ＧＵＩのメリットが十分生かされていないと感じた。但し、デバッグできるのは魅力。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Visual Studio Code】VSCodeでTypeScript開発環境を構築する（初心者向け）</title>
		<link>https://www.kemmy-it.com/2025/09/19/vscode_typescript_debug/</link>
		
		<dc:creator><![CDATA[Kemmy]]></dc:creator>
		<pubDate>Fri, 19 Sep 2025 04:56:16 +0000</pubDate>
				<category><![CDATA[Visual Studio Code]]></category>
		<guid isPermaLink="false">https://www.kemmy-it.com/?p=6088</guid>

					<description><![CDATA[はじめに TypeScriptは、JavaScriptに型安全性を加えた強力な言語です。最近ではReactやNode.jsなどの開発でも主流となりつつあります。 本ブログでは、初心者でも迷わずVSCodeでTypeScr [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">はじめに</h2>



<p>TypeScriptは、JavaScriptに型安全性を加えた強力な言語です。最近ではReactやNode.jsなどの開発でも主流となりつつあります。</p>



<p>本ブログでは、<strong>初心者でも迷わずVSCodeでTypeScript開発環境を構築できるように</strong>、手順をおって紹介します。</p>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">TypeScriptとは？　なぜ使用するのか？</h2>



<p>TypeScriptは、型定義やクラスベースの構文などを追加することで、<strong>保守性・可読性・安全性</strong>を向上させます。</p>



<p>例えば、以下のようなコードで型エラーを防ぐことが可能です。</p>



<pre class="wp-block-code"><code>function greet(name: string) {
  return `Hello, ${name}`;
}
greet(42); // エラー：number型はstring型に代入できません</code></pre>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">開発環境の準備</h2>



<h3 class="wp-block-heading">VSCodeのインストール</h3>



<p>VSCodeのインストールは、以下のブログを参考にして下さい。</p>



<p><a href="https://www.kemmy-it.com/2024/10/20/vscode_install/">VSCodeのインストール</a></p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Node.jsのインストール</h3>



<p>TypeScriptはNode.js環境で動作します。Node.jsは下記の公式サイトからインストールしてください。</p>



<p><a href="https://nodejs.org/ja/">Node.jsの公式サイト</a></p>



<p>インストール後、ターミナルで以下を確認します。各バージョンが表示されれば正常です。</p>



<ul class="wp-block-list">
<li>npm（エヌピーエム）コマンドは <strong>Node Package Manager</strong> の略で、Node.jsのための<strong>パッケージ管理ツール</strong>です。</li>
</ul>



<pre class="wp-block-code"><code>node -v   # Node.jsのバージョン確認
npm -v    # npmのバージョン確認</code></pre>



<figure class="wp-block-image size-full"><img decoding="async" width="910" height="167" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/01_VSCode_TupeScript.png" alt="" class="wp-image-6091" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/01_VSCode_TupeScript.png 910w, https://www.kemmy-it.com/wp-content/uploads/2025/09/01_VSCode_TupeScript-300x55.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/09/01_VSCode_TupeScript-768x141.png 768w" sizes="(max-width: 910px) 100vw, 910px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Node.js 環境とは</h3>



<p>通常、JavaScriptはブラウザ上でしか動作しません（例：Chromeの開発者ツールなど）。しかし、Node.jsを使用する事で、<strong>JavaScriptをPC上で直接実行できる</strong>ようになります。</p>



<p>PC上で実行する事により、以下が可能となります。</p>



<ul class="wp-block-list">
<li><strong>ブラウザでは制限されていた「ファイル操作」「ネットワーク通信」「プロセス管理」</strong></li>



<li><strong>サーバーアプリケーションやCLIツール（コマンドラインインタフェースで動作するツール）の開発</strong></li>
</ul>



<pre class="wp-block-code"><code>// ファイルを読み込む例（Node.js環境）
import { readFileSync } from 'fs';
const data = readFileSync('data.txt', 'utf-8');
console.log(data);</code></pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">TypeScriptのインストール</h3>



<p>本ブログでは、「TypeScript_prj」フォルダを作成し、プロジェクトにTypeScriptを適用させる方式で進めます。</p>



<p>以下のコマンドを実行し、TypeScriptをインストールします。</p>



<pre class="wp-block-code"><code>mkdir TypeScript_prj
cd TypeScript_prj
npm init -y
npm install --save-dev typescript
npx tsc --init</code></pre>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="583" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/02_VSCode_TupeScript-1024x583.png" alt="" class="wp-image-6093" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/02_VSCode_TupeScript-1024x583.png 1024w, https://www.kemmy-it.com/wp-content/uploads/2025/09/02_VSCode_TupeScript-300x171.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/09/02_VSCode_TupeScript-768x438.png 768w, https://www.kemmy-it.com/wp-content/uploads/2025/09/02_VSCode_TupeScript-120x68.png 120w, https://www.kemmy-it.com/wp-content/uploads/2025/09/02_VSCode_TupeScript-160x90.png 160w, https://www.kemmy-it.com/wp-content/uploads/2025/09/02_VSCode_TupeScript.png 1104w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li>補足：グローバル環境にTypeScriptを適用させる場合は以下のコマンドでインストールします。</li>
</ul>



<pre class="wp-block-code"><code>npm install -g typescript</code></pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">tsconfig.jsonの基本設定</h3>



<p>tsconfig.jsonは<strong>TypeScriptコンパイラ（tsc）の動作を制御するための設定ファイル</strong>です。これにより、どのファイルをどう変換するか、どんな型チェックを行うか、成果物をどこに出力するかなどを一元管理できます。</p>



<ul class="wp-block-list">
<li><strong>基本構成</strong><br>以下は「ESM対応」「型安全性」「ライブラリ公開」などを意識した<strong>TypeScript設計</strong>です。</li>
</ul>



<pre class="wp-block-code"><code>{
  // Visit https://aka.ms/tsconfig to read more about this file
  "compilerOptions": {
    // File Layout
    "rootDir": "./src",
    "outDir": "./dist",

    // Environment Settings
    // See also https://aka.ms/tsconfig/module
    "module": "esnext",
    "target": "esnext",
    "types": &#91;],

    // Other Outputs
    "sourceMap": true,
    "declaration": true,
    "declarationMap": true,

    // Stricter Typechecking Options
    "noUncheckedIndexedAccess": true,
    "exactOptionalPropertyTypes": true,

    // Recommended Options
    "strict": true,
    "jsx": "react-jsx",
    "verbatimModuleSyntax": true,
    "isolatedModules": true,
    "noUncheckedSideEffectImports": true,
    "moduleDetection": "force",
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  }
}
</code></pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>パラメータの内容</strong></li>
</ul>



<figure class="wp-block-flexible-table-block-table"><table class=""><thead><tr><th>パラメータ</th><th>設定値</th><th style="text-align:left">目的・効果</th><th style="text-align:left">補足</th></tr></thead><tbody><tr><td>rootDir</td><td>&#8220;./src&#8221;</td><td style="text-align:left">ソースコードの起点ディレクトリ</td><td style="text-align:left"><code>.ts</code> ファイルはここに配置</td></tr><tr><td>outDir</td><td>&#8220;./dist&#8221;</td><td style="text-align:left">コンパイル後の出力先</td><td style="text-align:left"><code>.js</code>, <code>.d.ts</code>, <code>.map</code> などが生成される</td></tr><tr><td>module</td><td>&#8220;esnext&#8221;</td><td style="text-align:left">ESモジュール形式で出力</td><td style="text-align:left"><code>import</code> / <code>export</code> を保持</td></tr><tr><td>target</td><td>&#8220;esnext&#8221;</td><td style="text-align:left">最新のJS構文で出力</td><td style="text-align:left">Node.js v20+ やモダンブラウザ向け</td></tr><tr><td>types</td><td>[]</td><td style="text-align:left">グローバル型定義を読み込まない</td><td style="text-align:left">明示的な型管理を前提とした設計</td></tr><tr><td>sourceMap</td><td>true</td><td style="text-align:left">ソースマップを生成</td><td style="text-align:left"><code>.ts</code> と <code>.js</code> の対応が可能になる</td></tr><tr><td>declaration</td><td>true</td><td style="text-align:left"><code>.d.ts</code> 型定義ファイルを生成</td><td style="text-align:left">ライブラリ公開や補完に有効</td></tr><tr><td><code>declarationMap</code></td><td>true</td><td style="text-align:left"><code>.d.ts.map</code> を生成</td><td style="text-align:left">型安全性が向上するが記述は冗長に</td></tr><tr><td>noUncheckedIndexedAccess</td><td>true</td><td style="text-align:left">インデックスアクセスに <code>undefined</code> を含める</td><td style="text-align:left"><code>null</code> を含めない厳密設計に</td></tr><tr><td>exactOptionalPropertyTypes</td><td>true</td><td style="text-align:left">オプショナルは <code>undefined</code> のみ許容</td><td style="text-align:left"><code>null</code> を含めない厳密設計に</td></tr><tr><td>strict</td><td>true</td><td style="text-align:left">型チェックを一括強化</td><td style="text-align:left"><code>noImplicitAny</code> などが有効化される</td></tr><tr><td>jsx</td><td>&#8220;react-jsx&#8221;</td><td style="text-align:left">React 17以降のJSX変換方式</td><td style="text-align:left"><code>import React</code> 不要で簡潔な構文に</td></tr><tr><td>verbatimModuleSyntax</td><td>true</td><td style="text-align:left"><code>import</code> / <code>export</code> をそのまま出力</td><td style="text-align:left">バンドラーとの整合性が向上</td></tr><tr><td>isolatedModules</td><td>true</td><td style="text-align:left">各ファイルを単体でコンパイル可能に</td><td style="text-align:left">暗黙的なモジュール化を防止</td></tr><tr><td>noUncheckedSideEffectImports</td><td>true</td><td style="text-align:left">副作用のある <code>import</code> に警告</td><td style="text-align:left">安全性と可読性が向上</td></tr><tr><td>moduleDetection</td><td>&#8220;force&#8221;</td><td style="text-align:left">明示的な <code>import</code> / <code>export</code> のみをモジュールと判定</td><td style="text-align:left">暗黙的なモジュール化を防止</td></tr><tr><td>skipLibCheck</td><td>true</td><td style="text-align:left"><code>node_modules</code> の型チェックをスキップ</td><td style="text-align:left">ビルド高速化に有効</td></tr><tr><td>forceConsistentCasingInFileNames</td><td>true</td><td style="text-align:left">ファイル名の大文字・小文字を厳密に扱う</td><td style="text-align:left">OS間の互換性を保つ（特にLinux）</td></tr></tbody></table></figure>



<p>パラメータの詳細については、以下のサイトを参照ください。</p>



<ul class="wp-block-list">
<li><a href="https://www.typescriptlang.org/docs/handbook/tsconfig-json.html">公式ハンドブック</a></li>



<li><a href="https://www.typescriptlang.org/tsconfig/">公式 tsconfig オプション一覧</a></li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">package.json の設定</h3>



<ul class="wp-block-list">
<li><strong>役割</strong><br>Node.js／JavaScriptプロジェクトの構成・依存関係・スクリプトを管理する中心ファイル。</li>
</ul>



<pre class="wp-block-code"><code>{
  "devDependencies": {
    "typescript": "^5.9.2"
  },
  "name": "typescript_prj",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" &amp;&amp; exit 1"
  },
  "keywords": &#91;],
  "author": "",
  "license": "ISC",
  "type": "module"
}</code></pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">プロジェクトのディレクトリ構成を整える</h3>



<p>tsconfig.json の基本設定が完了したら、TypeScriptプロジェクトとしての土台が整った状態です。ここからは、<strong>実際にコードを書いて、コンパイル・実行・開発環境を整えるステップ</strong>に進みます。</p>



<p>・TypeScript_prj内をtsconfig.jsonに合わせて構成します。</p>



<pre class="wp-block-code"><code>TypeScript_prj/
├── src/                ← TypeScriptファイルを置く場所
│   └── index.ts       ← エントリーポイント
├── dist/               ← コンパイル後の出力先（tsconfigで指定済み）
├── tsconfig.json       ← コンパイラ設定ファイル
├── package.json        ← npm管理ファイル
├── package-lock.json   ← npmの依存パッケージと構成を記録する自動生成するファイル
├── .vscode/　　　　　　← （VSCode）でプロジェクトごとの開発環境設定を保存
├── node_modules/　　　 ← npmでインストールしたパッケージを保存</code></pre>



<p>以上で、TypeScript環境の構築は完了です。</p>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">サンプルプログラムの動作確認</h2>



<h3 class="wp-block-heading">サンプルプログラムの作成・コンパイル・デバッグ</h3>



<ul class="wp-block-list">
<li><strong>サンプルプログラムの作成</strong><br>index.ts をsrcディレクトの中に以下の内容で作成します。</li>
</ul>



<pre class="wp-block-code"><code>// src/index.ts
const greet = (name: string): string =&gt; {
  return `こんにちは、${name}さん！`;
};

console.log(greet("太郎"));</code></pre>



<ul class="wp-block-list">
<li><strong>コンパイル</strong><br>VSCodeのターミナルで以下のコマンドを実行。今回の設定では、src/ディレクト内の全ての.tsファイルがコンパイルされ、dist/ディレクトに出力されます。</li>
</ul>



<pre class="wp-block-code"><code>npx tsc</code></pre>



<ul class="wp-block-list">
<li>コンパイルされた、index.js</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="942" height="358" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/03_VSCode_TupeScript.png" alt="" class="wp-image-6111" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/03_VSCode_TupeScript.png 942w, https://www.kemmy-it.com/wp-content/uploads/2025/09/03_VSCode_TupeScript-300x114.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/09/03_VSCode_TupeScript-768x292.png 768w" sizes="(max-width: 942px) 100vw, 942px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">launch.jsonの設定</h3>



<ul class="wp-block-list">
<li><strong>役割</strong><br><strong>Visual Studio Codeで、デバッグの構成を設定するためのファイル</strong>で、どのファイルをどう実行するか、どの環境で動かすか、引数や環境変数などを定義します。</li>
</ul>



<pre class="wp-block-code"><code>// .vscode/launch.json
{
  "version": "0.2.0",
  "configurations": &#91;
    {
      "name": "Debug TypeScript",
      "type": "node",
      "request": "launch",
      "program": "${workspaceFolder}/dist/index.js",
      /* "preLaunchTask": "tsc: build - tsconfig.json",　←　自動コンパイルを
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　コメントアウト */
      "outFiles": &#91;"${workspaceFolder}/dist/**/*.js"]
    }
  ]
}</code></pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>launch.jsonの作成方法</strong>
<ul class="wp-block-list">
<li>①デバッグアイコンをクリック</li>



<li>②「launch.json ファイルを作成します。」をクリック</li>



<li>③内容を入力。”program”パラメーターには今回デバッグする.jsの名称が入る。</li>
</ul>
</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="949" height="393" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/04_VSCode_TupeScript.png" alt="" class="wp-image-6113" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/04_VSCode_TupeScript.png 949w, https://www.kemmy-it.com/wp-content/uploads/2025/09/04_VSCode_TupeScript-300x124.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/09/04_VSCode_TupeScript-768x318.png 768w" sizes="(max-width: 949px) 100vw, 949px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>デバッグ</strong>
<ul class="wp-block-list">
<li>①index.js を開いて、ブレークポイントを設定</li>



<li>②「デバッグ開始」をクリック</li>



<li>ブレークポイントでブレークし、デバッグ可能となる</li>
</ul>
</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="873" height="298" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/05_VSCode_TupeScript.png" alt="" class="wp-image-6118" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/05_VSCode_TupeScript.png 873w, https://www.kemmy-it.com/wp-content/uploads/2025/09/05_VSCode_TupeScript-300x102.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/09/05_VSCode_TupeScript-768x262.png 768w" sizes="(max-width: 873px) 100vw, 873px" /></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="1017" height="279" src="https://www.kemmy-it.com/wp-content/uploads/2025/09/06_VSCode_TupeScript.png" alt="" class="wp-image-6119" srcset="https://www.kemmy-it.com/wp-content/uploads/2025/09/06_VSCode_TupeScript.png 1017w, https://www.kemmy-it.com/wp-content/uploads/2025/09/06_VSCode_TupeScript-300x82.png 300w, https://www.kemmy-it.com/wp-content/uploads/2025/09/06_VSCode_TupeScript-768x211.png 768w" sizes="(max-width: 1017px) 100vw, 1017px" /></figure>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">「VSCodeでTypeScript開発環境を構築する」　まとめ</h2>



<p>ここまで、VSCodeでTypeScriptを使用できる環境の設定方法を紹介してきました。</p>



<ul class="wp-block-list">
<li>TypeScriptは、JavaScriptに型安全性を加えた強力な言語であること</li>



<li>TypeScriptは、Node.js環境で動作すること</li>



<li>TypeScriptのインストール方法と、プロジェクトの初期化</li>



<li>tsconfig.jsonの基本設定</li>



<li>.tsファイルのコンパイル</li>



<li>VSCodeにTypeScript環境を構築</li>



<li>コンパイルした.jsファイルをVSCodでデバッグ</li>
</ul>



<p>超初心者の方は、インストールや設定ファイルが多くあり、苦労されたかもしれません。基本をしっかりと身に着けたあとは、ReactやVueと組み合わせたTypeScript開発に挑戦してみて下さい。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
