<?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>webstation-plus</title>
	<atom:link href="https://webstation-plus.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://webstation-plus.com</link>
	<description></description>
	<lastBuildDate>Mon, 02 Nov 2026 23:17:55 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</generator>

<image>
	<url>https://webstation-plus.com/wp/wp-content/uploads/2024/01/cropped-logo_512x512-32x32.png</url>
	<title>webstation-plus</title>
	<link>https://webstation-plus.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>『グラスホッパー』感想｜理不尽な世界で、流れに身を任せながら生きる</title>
		<link>https://webstation-plus.com/grasshopper/</link>
					<comments>https://webstation-plus.com/grasshopper/#respond</comments>
		
		<dc:creator><![CDATA[toshi]]></dc:creator>
		<pubDate>Mon, 02 Nov 2026 23:17:55 +0000</pubDate>
				<category><![CDATA[小説]]></category>
		<category><![CDATA[伊坂幸太郎]]></category>
		<category><![CDATA[殺し屋シリーズ]]></category>
		<guid isPermaLink="false">https://webstation-plus.com/?p=1818</guid>

					<description><![CDATA[おすすめ度： 伊坂幸太郎さんの小説『グラスホッパー』を読んだ。 妻を失い、復讐のために裏社会へ足を踏み入れた元教師の鈴木。そこに、蝉や鯨といった殺し屋たちの思惑が絡み合い、物語は思いがけない方向へ進んでいく。 この作品で [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>おすすめ度：<span class="rating-star"><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star-o" aria-hidden="true"></span><span class="rating-number">4.0</span></span></p>
<p>伊坂幸太郎さんの小説『グラスホッパー』を読んだ。</p>
<p>妻を失い、復讐のために裏社会へ足を踏み入れた元教師の鈴木。そこに、蝉や鯨といった殺し屋たちの思惑が絡み合い、物語は思いがけない方向へ進んでいく。</p>
<p>この作品で特に面白いと思ったのは、裏社会に描かれる食物連鎖のような関係だ。強い者が弱い者を追い詰める一方で、その強者もまた別の存在や自分自身の恐怖に追い詰められている。</p>
<p>そして、この構図は、過密な環境で性質を変えるバッタを意味する『グラスホッパー』というタイトルとも重なって感じられた。</p>
<p>そんな理不尽な世界の中で、特に心に残ったのが鈴木の生き方だった。次々と予想外の出来事に巻き込まれながらも、流れに身を任せ、自分にできることを続けていく。</p>
<p>今回は、裏社会の食物連鎖とタイトルの意味、そして鈴木の姿から感じたことを中心に紹介したい。</p>
<p><strong>※以下、ネタバレを含みます。物語の重要な展開や結末に触れているため、未読の方はご注意ください。</strong></p>
<h2>1．追い詰められた人間たちが、互いを傷つけ合う世界</h2>
<p>『グラスホッパー』では、元教師の鈴木、若い殺し屋の蝉、そして人を死へと追い込む鯨という、まったく異なる3人の視点から物語が描かれる。</p>
<p>鈴木は、妻を奪われた復讐のために裏社会へ足を踏み入れた普通の人間だ。殺し屋たちと比べれば、圧倒的に弱い立場にいる。</p>
<p>一方、蝉は腕の立つ殺し屋で、鈴木にとっては恐ろしい存在だ。しかし、そんな蝉も自分の立場や存在価値に不安を抱えている。鯨もまた、人を追い詰める力を持ちながら、過去に関わった人々の幻影に苦しめられている。</p>
<p>この3人を見ていると、裏社会には食物連鎖のような関係があると感じる。</p>
<p>弱い者は強い者に追い詰められる。しかし、強い者も決して自由ではなく、別の存在や自分自身の恐怖に追い詰められている。</p>
<p><strong>誰かを追い詰める側に立ったからといって、その人自身が追い詰められなくなるわけではない。</strong></p>
<p>この不条理な関係を考えると、『グラスホッパー』というタイトルにも意味があるように思える。</p>
<p>バッタには、密集した環境で育つことで、行動や姿が変化する種類がいる。普段は単独で暮らしていても、過密な状態が続くと、群集相と呼ばれる状態へ変化する。</p>
<p>この現象を知ると、東京という過密な都市で追い詰められていく登場人物たちが、バッタの姿と重なって見えてくる。</p>
<p>鈴木は妻を失った悲しみと復讐への思いを抱え、蝉は自分の存在価値を求め、鯨は過去にとらわれている。3人の苦しみはそれぞれ異なるが、誰もが自分の置かれた状況から抜け出せずにいる。</p>
<p>もちろん、彼らが追い詰められた原因は、単に都市の過密さだけではない。</p>
<p>それでも、<strong>過酷な環境の中で人間が変わり、互いを傷つけ合うようになる姿</strong>は、群集相のバッタと重なるように感じた。</p>
<p>裏社会の食物連鎖と、群集相へ変わるバッタ。一見すると異なる二つの要素が、追い詰められた人間たちの姿を通して、一つにつながっているところが面白かった。</p>
<h2>2．流れに身を任せながら、自分にできることを続ける鈴木</h2>
<p>そんな世界の中で、特に心に残ったのが鈴木の姿だった。</p>
<p>鈴木は妻を失った復讐のために裏社会へ足を踏み入れるが、そこで待っていたのは、自分の思いどおりにはならない出来事の連続だった。</p>
<p>押し屋と呼ばれる人物を追うことになり、殺し屋たちの思惑に巻き込まれ、何度も危険な状況に追い込まれる。</p>
<p>それでも鈴木は、ただ立ち止まっているわけではない。</p>
<p>押し屋の家に家庭教師を装って入り込んだり、目の前の状況を何とか切り抜けようとしたり、そのとき自分にできることを続けていく。</p>
<p>もちろん、鈴木の行動がいつもうまくいくわけではない。騙されることもあれば、さらに厄介な状況へ巻き込まれることもある。</p>
<p>それでも、起きてしまった出来事を受け止めながら、次にできることを考えているように見えた。</p>
<p>私は、そんな鈴木の姿に惹かれた。</p>
<p>理不尽な出来事に遭遇したとき、何とか状況を変えようと必死にもがくことがある。しかし、自分の力ではどうにもならないこともある。</p>
<p>そんなとき、無理にすべてを変えようとするのではなく、流れに身を任せながら、自分にできることを一つずつ続けていく。それも一つの生き方なのではないかと思った。</p>
<p><strong>流れに身を任せることは、何もしないことではない。</strong></p>
<p>自分では変えられない状況を受け止めながらも、できることは諦めずに続ける。</p>
<p>鈴木の姿を見ていると、そんな生き方にも強さがあるように感じられた。</p>
<h2>3．すべては鈴木の幻覚だったのか？</h2>
<p>もう一つ、この作品で驚かされたのが、結末に用意された仕掛けだった。</p>
<p>物語の終盤、鈴木は通過する列車を眺めながら、その列車が妙に長いと感じる。</p>
<p>一見すると何でもない描写だが、作中ではそれ以前に、幻覚の兆候として、いつまでも通り過ぎない列車の話が登場している。</p>
<p>この二つの描写を結びつけると、それまで読んできた物語が本当に現実だったのか、疑問が生まれてくる。</p>
<p>もしかすると、鈴木が経験した出来事の一部、あるいは物語そのものが幻想だったのではないか。</p>
<p>もちろん、これだけですべてが幻覚だったと断定することはできない。しかし、物語の最後になって、それまで当然のように受け入れていた出来事の現実性が揺らぐところが面白い。</p>
<p>殺し屋たちの思惑が交錯する物語を楽しんでいたはずなのに、最後には、その物語をどこまで信じてよいのかわからなくなる。</p>
<p>結末を知ったあと、もう一度最初から読み返したくなる仕掛けだった。</p>
<h2>まとめ｜理不尽な世界で、どう生きるのか</h2>
<p>『グラスホッパー』は、殺し屋たちの思惑が絡み合うミステリーとしての面白さだけでなく、人間が追い詰められたときにどう変わるのかを考えさせられる作品だった。</p>
<p>特に心に残ったのは、そんな理不尽な世界を生きる鈴木の姿だ。</p>
<p>思いどおりにならない出来事が続いても、流れに身を任せながら、自分にできることを続けていく。</p>
<p>すべてを自分の力で変えようとしなくてもいい。それでも、目の前のことに向き合うことはできる。</p>
<p>『グラスホッパー』を読んで、そんな生き方もあるのだと思えた。</p>

<a rel="noopener" href="https://link.amazon/B09fMEdzs" title="&#12464;&#12521;&#12473;&#12507;&#12483;&#12497;&#12540; (&#35282;&#24029;&#25991;&#24235;) | &#20234;&#22338; &#24184;&#22826;&#37070; |&#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 fetchpriority="high" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Flink.amazon%2FB09fMEdzs?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#12464;&#12521;&#12473;&#12507;&#12483;&#12497;&#12540; (&#35282;&#24029;&#25991;&#24235;) | &#20234;&#22338; &#24184;&#22826;&#37070; |&#26412; | &#36890;&#36009; | Amazon</div><div class="blogcard-snippet external-blogcard-snippet">Amazonで伊坂 幸太郎のグラスホッパー (角川文庫)。アマゾンならポイント還元本が多数。伊坂 幸太郎作品ほか、お急ぎ便対象商品は当日お届けも可能。またグラスホッパー (角川文庫)もアマゾン配送商品なら通常配送無料。</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://link.amazon/B09fMEdzs" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">link.amazon</div></div></div></div></a>
]]></content:encoded>
					
					<wfw:commentRss>https://webstation-plus.com/grasshopper/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>夕木春央の小説3作品を読んだ感想｜『方舟』『十戒』『楽園』を比較</title>
		<link>https://webstation-plus.com/yuki-ark-series-summary/</link>
					<comments>https://webstation-plus.com/yuki-ark-series-summary/#respond</comments>
		
		<dc:creator><![CDATA[toshi]]></dc:creator>
		<pubDate>Sun, 01 Nov 2026 05:01:57 +0000</pubDate>
				<category><![CDATA[小説]]></category>
		<category><![CDATA[夕木春央]]></category>
		<guid isPermaLink="false">https://webstation-plus.com/?p=1780</guid>

					<description><![CDATA[夕木春央さんの『方舟』『十戒』『楽園』を読んだ。 どの作品も、普通では考えられない状況に追い込まれた登場人物たちが、独特なルールや制約のもとで行動するミステリーだ。そして、最後にはそれまでの物語の見え方が変わるようなどん [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>夕木春央さんの『方舟』『十戒』『楽園』を読んだ。</p>
<p>どの作品も、普通では考えられない状況に追い込まれた登場人物たちが、独特なルールや制約のもとで行動するミステリーだ。そして、最後にはそれまでの物語の見え方が変わるようなどんでん返しが待っている。</p>
<p>特に面白いと思ったのは、3作品で犯人探しの意味がまったく違うことだ。『方舟』では犯人を見つけることが生き残るための手段になり、『十戒』では反対に、犯人を見つけることが禁じられる。そして『楽園』では、脱出するために自分が犯人になることを迫られる。</p>
<p>同じミステリーでも、条件を変えることで、これほど違う物語になるのかと感心した。</p>
<p>また、3作品ともおすすめ度は4.0だが、心に残った理由は少しずつ違っている。今回は、それぞれの作品の感想と、3作品を読み比べて感じたことをまとめたい。</p>
<p><strong>※以下、各作品の状況設定や展開に触れていますが、犯人の正体や結末の核心は明かしていません。</strong></p>
<h2>1．夕木春央の小説3作品の評価と感想</h2>
<table class="standard-table">
<thead>
<tr>
<th>作品</th>
<th>おすすめ度</th>
<th>特に印象に残ったこと</th>
</tr>
</thead>
<tbody>
<tr>
<td>『方舟』</td>
<td>4.0</td>
<td>真相を知った瞬間、それまでの物語の見え方が変わるどんでん返し</td>
</tr>
<tr>
<td>『十戒』</td>
<td>4.0</td>
<td>犯人を見つけてはいけないという独創的なルール</td>
</tr>
<tr>
<td>『楽園』</td>
<td>4.0</td>
<td>巧みなどんでん返しと、自分の生き方を考えさせられた沙織の言葉</td>
</tr>
</tbody>
</table>
<h3>『方舟』｜最後のどんでん返しに圧倒された</h3>
<p>おすすめ度：<span class="rating-star"><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star-o" aria-hidden="true"></span><span class="rating-number">4.0</span></span></p>
<p>山奥の地下建築に閉じ込められた10人が、誰か一人を犠牲にしなければ脱出できない状況に追い込まれるミステリー。</p>
<p>この設定だけでも引き込まれるが、さらに殺人事件が起きたことで、犯人を見つけて犠牲者にしようという展開が始まる。</p>
<p>特にすごいと思ったのは、最後のどんでん返しだ。犯人を追い詰めていく推理が、真相を知った瞬間、まったく違う角度から見えてくる。単に意外な犯人が明らかになるのではなく、それまで読んできた物語そのものの見え方が変わる構成に驚かされた。</p>
<p>一方で、誰かを犠牲にしなければならないという設定は巧みだと思ったものの、極限状態の心理描写も含めて、そこまで強く心に残ってはいない。</p>
<p>それでも、最後のどんでん返しは圧倒的で、今でも強く印象に残っている。</p>
<div style="margin-bottom: 0.6em;">&#x25b6; Amazonで『方舟』を見る</div>

<a rel="noopener" href="https://link.amazon/B0iLC5YBJ" title="&#26041;&#33311; (&#35611;&#35527;&#31038;&#25991;&#24235; &#12422; 10-3) | &#22805;&#26408; &#26149;&#22830; |&#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%2Flink.amazon%2FB0iLC5YBJ?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#26041;&#33311; (&#35611;&#35527;&#31038;&#25991;&#24235; &#12422; 10-3) | &#22805;&#26408; &#26149;&#22830; |&#26412; | &#36890;&#36009; | Amazon</div><div class="blogcard-snippet external-blogcard-snippet">Amazonで夕木 春央の方舟 (講談社文庫 ゆ 10-3)。アマゾンならポイント還元本が多数。夕木 春央作品ほか、お急ぎ便対象商品は当日お届けも可能。また方舟 (講談社文庫 ゆ 10-3)もアマゾン配送商品なら通常配送無料。</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 loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://link.amazon/B0iLC5YBJ" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">link.amazon</div></div></div></div></a>
<h3>『十戒』｜犯人を見つけてはいけないという逆転の発想</h3>
<p>おすすめ度：<span class="rating-star"><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star-o" aria-hidden="true"></span><span class="rating-number">4.0</span></span></p>
<p>離島を訪れた9人が、殺人事件をきっかけに、犯人の残した十の戒律に従って過ごすことになるミステリー。なかでも異様なのは、「殺人犯を見つけてはいけない」という決まりだ。</p>
<p>普通のミステリーなら犯人を探すところだが、この作品では犯人を探そうとすること自体が危険につながる。しかも、犯人と意思疎通できる仕組みまで用意されており、この独特な状況設定がとても面白かった。</p>
<p>ラストのどんでん返しも面白い。ある程度展開を予想していても驚かされる部分があり、『方舟』とのつながりが見えたときには思わず「おお！」となった。</p>
<p>何かを深く考察したくなる作品というより、設定と仕掛けの巧みさを存分に楽しめるミステリーだった。『方舟』を読んでから手に取ると、さらに楽しめると思う。</p>
<div style="margin-bottom: 0.6em;">&#x25b6; Amazonで『十戒』を見る</div>

<a rel="noopener" href="https://link.amazon/B0dZx5Wya" title="&#21313;&#25106; (&#35611;&#35527;&#31038;&#25991;&#24235; &#12422; 10-4) | &#22805;&#26408; &#26149;&#22830; |&#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 loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Flink.amazon%2FB0dZx5Wya?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#21313;&#25106; (&#35611;&#35527;&#31038;&#25991;&#24235; &#12422; 10-4) | &#22805;&#26408; &#26149;&#22830; |&#26412; | &#36890;&#36009; | Amazon</div><div class="blogcard-snippet external-blogcard-snippet">Amazonで夕木 春央の十戒 (講談社文庫 ゆ 10-4)。アマゾンならポイント還元本が多数。夕木 春央作品ほか、お急ぎ便対象商品は当日お届けも可能。また十戒 (講談社文庫 ゆ 10-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 loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://link.amazon/B0dZx5Wya" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">link.amazon</div></div></div></div></a>
<h3>『楽園』｜どんでん返し以上に、沙織の言葉が心に残った</h3>
<p>おすすめ度：<span class="rating-star"><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star-o" aria-hidden="true"></span><span class="rating-number">4.0</span></span></p>
<p>犯罪者たちが身を隠して暮らす場所に迷い込んだ男女が、脱出するために誰かを殺すことを要求されるミステリー。</p>
<p>『方舟』『十戒』に続き、今回も独特な状況設定と巧みなどんでん返しが面白かった。ある程度展開を予想していたものの、結末には思いがけない驚きがあった。</p>
<p>しかし、それ以上に印象に残ったのは、沙織が語った言葉だった。</p>
<p>主人公の迫田が、自分の判断で沙織を危険な状況に巻き込んだことを謝る場面がある。そこで沙織は、二人で決めたことなのだから、何でも自分の責任だと考える必要はないという趣旨のことを話す。</p>
<p>私は、この言葉にハッとさせられた。自分を責めたり、相手の気持ちを気にしたりするだけでは、何も解決しないことがある。また、他人の期待ばかりを優先していては、自分のやりたいことを実現できないのではないかとも考えさせられた。</p>
<p><strong>『楽園』は、ミステリーとしての驚きだけでなく、自分の考え方を振り返るきっかけになった作品だった。</strong></p>
<p>詳しい感想は、個別記事「『楽園』感想｜自分の望みを後回しにしていては、人生は変わらない」にまとめている。</p>
<div style="margin-bottom: 0.6em;">&#x25b6; 『楽園』の詳しい感想はこちら</div>

<a href="https://webstation-plus.com/yuki-eden/" title="『楽園』感想｜自分の望みを後回しにしていては、人生は変わらない" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://webstation-plus.com/wp/wp-content/uploads/2026/11/yuki-eden-00-320x180.webp" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/11/yuki-eden-00-320x180.webp 320w, https://webstation-plus.com/wp/wp-content/uploads/2026/11/yuki-eden-00-500x281.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/11/yuki-eden-00-300x169.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/11/yuki-eden-00-768x432.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/11/yuki-eden-00-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/11/yuki-eden-00-640x360.webp 640w, https://webstation-plus.com/wp/wp-content/uploads/2026/11/yuki-eden-00-752x423.webp 752w, https://webstation-plus.com/wp/wp-content/uploads/2026/11/yuki-eden-00.webp 800w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">『楽園』感想｜自分の望みを後回しにしていては、人生は変わらない</div><div class="blogcard-snippet internal-blogcard-snippet">夕木春央『楽園』の感想・レビュー。『方舟』『十戒』に続くミステリーの巧みなどんでん返しと、沙織の言葉から考えさせられたことを紹介します。他人への配慮と自分の望みの間で、どう生きるべきなのか。結末を知っても心に残った言葉について考察します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://webstation-plus.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">webstation-plus.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.11.01</div></div></div></div></a>
<div style="margin-bottom: 0.6em;">&#x25b6; Amazonで『楽園』を見る</div>

<a rel="noopener" href="https://link.amazon/B072FB6H0" title="Amazon.co.jp" 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 loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Flink.amazon%2FB072FB6H0?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Amazon.co.jp</div><div class="blogcard-snippet external-blogcard-snippet"></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 loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://link.amazon/B072FB6H0" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">link.amazon</div></div></div></div></a>
<h2>まとめ｜3作品それぞれに違う面白さがあった</h2>
<p>『方舟』『十戒』『楽園』は、いずれも独特な状況設定と巧みなどんでん返しを楽しめるミステリーだった。</p>
<p>3作品ともおすすめ度は4.0だが、心に残った理由は違っている。『方舟』では結末に驚かされ、『十戒』では独創的な設定を楽しみ、『楽園』では登場人物の言葉から自分の考え方を振り返った。</p>
<p>同じ作家の作品でも、これほど違った楽しみ方ができるのだと感じた。</p>
<p>ミステリーの仕掛けを楽しみたい人には、ぜひ3作品を読み比べてみてほしい。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webstation-plus.com/yuki-ark-series-summary/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>『楽園』感想｜自分の望みを後回しにしていては、人生は変わらない</title>
		<link>https://webstation-plus.com/yuki-eden/</link>
					<comments>https://webstation-plus.com/yuki-eden/#respond</comments>
		
		<dc:creator><![CDATA[toshi]]></dc:creator>
		<pubDate>Sun, 01 Nov 2026 02:56:40 +0000</pubDate>
				<category><![CDATA[小説]]></category>
		<category><![CDATA[夕木春央]]></category>
		<guid isPermaLink="false">https://webstation-plus.com/?p=1775</guid>

					<description><![CDATA[おすすめ度： 夕木春央さんの『楽園』を読んだ。犯罪者たちが身を隠して暮らす場所に迷い込んだ男女が、そこから脱出するために過酷な選択を迫られるミステリーだ。 『方舟』『十戒』に続く作品ということもあり、今回も独特な状況設定 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>おすすめ度：<span class="rating-star"><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star-o" aria-hidden="true"></span><span class="rating-number">4.0</span></span></p>
<p>夕木春央さんの『楽園』を読んだ。犯罪者たちが身を隠して暮らす場所に迷い込んだ男女が、そこから脱出するために過酷な選択を迫られるミステリーだ。</p>
<p>『方舟』『十戒』に続く作品ということもあり、今回も独特な状況設定と、最後に待ち受けるどんでん返しを楽しみに読み始めた。実際、ミステリーとしての仕掛けは今回も巧みだった。ある程度展開を予想していたにもかかわらず、結末では思いがけない驚きがあった。</p>
<p>しかし、今回それ以上に印象に残ったのは、登場人物の沙織が語った言葉だった。</p>
<p>最初はその言葉にハッとさせられ、読み進めるうちに、沙織と主人公・迫田の考え方の違いが気になるようになった。そして、自分の望みを実現するためには、他人への配慮だけでなく、自分の意思を優先する姿勢も必要なのではないかと考えさせられた。</p>
<p><strong>※以下、ネタバレを含みます。物語の重要な展開や結末に触れているため、未読の方はご注意ください。</strong></p>
<h2>1．自分を責めても、何も解決しない</h2>
<p>迫田と恋人の沙織は、行方がわからなくなった海原という女性の手がかりを追って、山奥の施設を訪れる。しかし、そこは指名手配犯たちが身を隠して暮らす場所だった。二人は自由を奪われ、脱出するために誰かを殺し、その証拠を残すよう要求される。</p>
<p>そんな状況に追い込まれた迫田は、自分の都合で沙織を巻き込んでしまったことを謝る。</p>
<p>ところが、沙織は、二人で決めたことなのだから謝る必要はないと返す。さらに、人は生きていれば、気づかないうちに誰かを不幸に巻き込むこともあるのだから、何でも自分の責任だと考える必要はない、という趣旨のことを話す。</p>
<p>私は、この言葉にハッとさせられた。</p>
<p>もし自分が迫田と同じ立場だったら、きっと同じように謝っていたと思う。自分の判断がきっかけで大切な人を危険な状況に巻き込んだのなら、申し訳なく感じるのは自然なことだ。</p>
<p>しかし、謝ったところで状況が変わるわけではない。もちろん、謝ること自体が悪いとは思わない。ただ、迫田の言葉には、自分を責めることで気持ちを落ち着かせ、今の状況をごまかそうとしているようなところも感じられた。</p>
<p>そして、これは自分にも当てはまると思った。</p>
<p>何か問題が起きたとき、自分の責任を考えたり、相手の気持ちを気にしたりする。しかし、それだけでは何も解決しないことがある。むしろ、自分を責めたり、慰めるような言葉を並べたりすることで、問題に向き合っているつもりになっているだけなのかもしれない。</p>
<p>大切なのは、誰の責任なのかを考え続けることではなく、今の状況をどう変えていくかではないだろうか。</p>
<p>沙織の言葉を読んで、そんなことに気づかされた。</p>
<h2>2．自分の望みを実現する人と、他人に振り回される人</h2>
<p>読み進めるうちに、沙織と迫田の考え方の違いが、さらに印象に残るようになった。</p>
<p>迫田は、沙織にどう思われているのかを気にしている。彼女が何かを隠しているのではないかと疑いながらも、見捨てられることが怖くて問い詰められない。</p>
<p>脱出するためには考え、行動できる迫田も、沙織との関係になると、自分の疑問や考えをはっきり伝えられなくなってしまう。</p>
<p>一方の沙織は、自分がどうしたいのかがはっきりしている。物語の結末を知れば、彼女が自分の望みを実現するために、どれほど周到に行動してきたのかがわかる。</p>
<p>もちろん、沙織のように他人を犠牲にしてまで、自分の望みを実現することが正しいとは思わない。しかし、他人の気持ちや期待ばかりを優先していては、自分のやりたいことを実現できないのも事実ではないだろうか。</p>
<p>普段の生活でも、周囲との関係を壊したくないからと、自分の考えを飲み込んでしまうことがある。それを続けていたら、いつの間にか自分の時間や人生を、他人の都合に合わせて使うことになってしまう。</p>
<p>私は、沙織と迫田の対比を見て、自分のやりたいことを実現する人と、他人にいいように利用されてしまう人の違いは、ここにあるのかもしれないと思った。</p>
<p><strong>他人への配慮は必要だ。しかし、自分の望みまで手放してしまう必要はない。</strong></p>
<h2>3．結末を知っても、沙織の言葉への共感は変わらなかった</h2>
<p>『楽園』は、ミステリーとしても面白い作品だった。特に驚かされたのは、沙織の正体をある程度予想できても、結末の衝撃が失われないことだ。</p>
<p>『方舟』『十戒』とのつながりから、沙織が何者なのかを疑いながら読み進めていた。それでも、今回の出来事が彼女の計画によるものだったとは気づかなかった。</p>
<p>また、物語の途中には、鍵やドアノブなど、事件の真相につながる手がかりも用意されている。私はトリックを見抜けなかったが、真相が明らかになったときには、それまでの細かな描写にも意味があったのだと納得できた。</p>
<p>そして、結末を知ることで、最初に共感した沙織の言葉も違って聞こえてくる。自分を責める必要はないという考え方は、彼女自身の行動を正当化するためのものだったのかもしれない。</p>
<p>しかし、私は結末を知っても、沙織の言葉への共感がなくなることはなかった。</p>
<p>もちろん、自分の望みを実現するために、他人を傷つけたり、犠牲にしたりしてよいわけではない。ただ、だからといって、自分の望みを後回しにし続けることが正しいとも思えない。</p>
<p>自分の行動に責任を持つことと、何でも自分の責任だと考えてしまうことは違う。他人の気持ちを大切にすることと、他人の都合に振り回されることも違う。</p>
<p>沙織は、自分の欲求を優先する姿勢が極端な形になった人物だと思う。その生き方を真似したいわけではない。それでも、自分の望みを実現するためには、自分の意思を大切にし、行動することが必要なのだと感じた。</p>
<h2>まとめ｜自分の望みを大切にするということ</h2>
<p>『楽園』は、独特な状況設定と巧みなどんでん返しを楽しめるミステリーだった。</p>
<p>しかし、今回最も心に残ったのは、沙織の言葉にハッとさせられ、自分の考え方を振り返ることになったことだ。</p>
<p>沙織の行動には共感できない。それでも、自分の望みを後回しにしないという考え方には、今でも共感できる部分がある。</p>
<p>他人の気持ちを大切にしながらも、自分のやりたいことを諦めない。そんな姿勢を持ちたいと思った。</p>
<div style="margin-bottom: 0.6em;">&#x25b6; 夕木春央さんの小説3作品『方舟』『十戒』『楽園』を読み比べた感想はこちら</div>

<a href="https://webstation-plus.com/yuki-ark-series-summary/" title="夕木春央の小説3作品を読んだ感想｜『方舟』『十戒』『楽園』を比較" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://webstation-plus.com/wp/wp-content/uploads/2026/11/yuki-ark-series-summary-00-320x180.webp" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/11/yuki-ark-series-summary-00-320x180.webp 320w, https://webstation-plus.com/wp/wp-content/uploads/2026/11/yuki-ark-series-summary-00-500x281.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/11/yuki-ark-series-summary-00-800x450.webp 800w, https://webstation-plus.com/wp/wp-content/uploads/2026/11/yuki-ark-series-summary-00-300x169.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/11/yuki-ark-series-summary-00-768x432.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/11/yuki-ark-series-summary-00-1536x864.webp 1536w, https://webstation-plus.com/wp/wp-content/uploads/2026/11/yuki-ark-series-summary-00-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/11/yuki-ark-series-summary-00-640x360.webp 640w, https://webstation-plus.com/wp/wp-content/uploads/2026/11/yuki-ark-series-summary-00-752x423.webp 752w, https://webstation-plus.com/wp/wp-content/uploads/2026/11/yuki-ark-series-summary-00.webp 1672w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">夕木春央の小説3作品を読んだ感想｜『方舟』『十戒』『楽園』を比較</div><div class="blogcard-snippet internal-blogcard-snippet">夕木春央さんの『方舟』『十戒』『楽園』を読んだ感想をまとめました。犯人を見つける、見つけてはいけない、犯人になる。3作品に共通する独特な状況設定と巧みなどんでん返しを比較しながら、それぞれの魅力や印象に残ったこと、おすすめ度を紹介します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://webstation-plus.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">webstation-plus.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.11.01</div></div></div></div></a>
<div style="margin-bottom: 0.6em;">&#x25b6; Amazonで『楽園』を見る</div>

<a rel="noopener" href="https://link.amazon/B072FB6H0" title="Amazon.co.jp" 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 loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Flink.amazon%2FB072FB6H0?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Amazon.co.jp</div><div class="blogcard-snippet external-blogcard-snippet"></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 loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://link.amazon/B072FB6H0" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">link.amazon</div></div></div></div></a>
]]></content:encoded>
					
					<wfw:commentRss>https://webstation-plus.com/yuki-eden/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ReLU関数とは何か？｜シンプルな計算が学習に適している理由</title>
		<link>https://webstation-plus.com/relu-function/</link>
					<comments>https://webstation-plus.com/relu-function/#respond</comments>
		
		<dc:creator><![CDATA[toshi]]></dc:creator>
		<pubDate>Wed, 28 Oct 2026 11:30:07 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[ディープラーニング]]></category>
		<category><![CDATA[ニューラルネットワーク]]></category>
		<category><![CDATA[活性化関数]]></category>
		<guid isPermaLink="false">https://webstation-plus.com/?p=1654</guid>

					<description><![CDATA[はじめに 前回の記事では、tanh関数が入力を \(-1\) から \(1\) の範囲に変換する仕組みと、シグモイド関数との違いを確認しました。 tanh関数は、入力が \(0\) の付近では比較的大きな勾配を持ちます。 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2>はじめに</h2>
<p>前回の記事では、tanh関数が入力を \(-1\) から \(1\) の範囲に変換する仕組みと、シグモイド関数との違いを確認しました。</p>
<p>tanh関数は、入力が \(0\) の付近では比較的大きな勾配を持ちます。しかし、入力の絶対値が大きくなると出力が \(1\) または \(-1\) に近づき、導関数が小さくなります。この性質は、深いニューラルネットワークで勾配消失問題が起こる要因の1つです。</p>
<p>では、入力が正の方向に大きくなっても、導関数が小さくならない活性化関数を使ったらどうでしょうか。</p>
<p>その代表的な関数が、<strong>ReLU関数（Rectified Linear Unit）</strong>です。</p>
<p class="is-style-info-box has-box-style">この記事では、<strong>ReLU関数がどのような計算を行うのかを理解し、計算のシンプルさと勾配の性質という2つの観点から、ニューラルネットワークの学習に適している理由</strong>を考えます。</p>
<h3>この記事でわかること</h3>
<p>この記事では、次の内容の理解を目指します。</p>
<ul>
<li>ReLU関数がどのような計算を行うのか</li>
<li>シグモイド関数・tanh関数との違い</li>
<li>ニューロンでReLU関数を使う計算例</li>
<li>ReLU関数の微分と勾配の関係</li>
<li>計算のシンプルさがもたらす利点</li>
<li>正の領域で勾配が小さくなりにくい理由</li>
<li>ReLU関数の特徴と限界</li>
</ul>
<h2>1．ReLU関数とは何か？</h2>
<p>ReLU関数（Rectified Linear Unit）は、入力が正の場合にはその値をそのまま出力し、入力が負の場合には \(0\) を出力する活性化関数です。</p>
<p>次の式で定義されます。</p>
<p>$$<br />
\mathrm{ReLU}(x)=\max(0,x)<br />
$$</p>
<p>ここで、\(\max(0,x)\) は、\(0\) と \(x\) のうち大きい方を選ぶことを意味します。</p>
<p>場合分けして表すと、次のようになります。</p>
<p>$$<br />
\mathrm{ReLU}(x)=<br />
\begin{cases}<br />
0 &#038; (x\leq0)\\<br />
x &#038; (x>0)<br />
\end{cases}<br />
$$</p>
<p>つまり、ReLU関数は指数関数などを使わず、入力が正かどうかを確認するだけで出力を計算できます。</p>
<h3>1.1．具体的な値を計算してみる</h3>
<p>まず、入力が \(x=-2\) の場合を考えます。入力が負なので、ReLU関数の出力は \(0\) になります。</p>
<p>$$<br />
\mathrm{ReLU}(-2)=0<br />
$$</p>
<p>一方、入力が \(x=2\) の場合は、入力をそのまま出力します。</p>
<p>$$<br />
\mathrm{ReLU}(2)=2<br />
$$</p>
<p>入力が \(x=0\) の場合も、出力は \(0\) です。</p>
<p>$$<br />
\mathrm{ReLU}(0)=0<br />
$$</p>
<p>このように、ReLU関数は負の入力を \(0\) にし、正の入力はそのまま通すという、非常にシンプルな計算を行います。</p>
<h3>1.2．ReLU関数のグラフ</h3>
<p>ReLU関数をグラフにすると、次のようになります。</p>
<p><img loading="lazy" decoding="async" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-01.webp" alt="ReLU関数のグラフ" width="800" height="440" class="alignnone size-full wp-image-1655" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-01.webp 800w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-01-500x275.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-01-300x165.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-01-768x422.webp 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>グラフを見ると、入力が \(0\) 以下の領域では出力が \(0\) のまま変化しません。一方、入力が正の領域では、入力が増えると出力も同じ割合で増加します。</p>
<p>シグモイド関数やtanh関数のような滑らかなS字型ではなく、原点で折れ曲がった形になることが特徴です。</p>
<h2>2．シグモイド関数・tanh関数とは何が違うのか？</h2>
<p>これまでに学んだシグモイド関数とtanh関数は、どちらも滑らかなS字型の関数でした。一方、ReLU関数は入力が正の領域では直線になり、負の領域では出力が \(0\) になります。</p>
<p>3つの関数をグラフで比較してみましょう。</p>
<p><img loading="lazy" decoding="async" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-02.webp" alt="シグモイド関数・tanh関数・ReLU関数の比較" width="800" height="440" class="alignnone size-full wp-image-1656" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-02.webp 800w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-02-500x275.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-02-300x165.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-02-768x422.webp 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>それぞれの特徴を整理すると、次のようになります。</p>
<table class="standard-table">
<thead>
<tr>
<th>特徴</th>
<th>シグモイド</th>
<th>tanh</th>
<th>ReLU</th>
</tr>
</thead>
<tbody>
<tr>
<td>出力範囲</td>
<td>\(0<\sigma(x)<1\)</td>
<td>\(-1<\tanh(x)<1\)</td>
<td>\(\mathrm{ReLU}(x)\geq0\)</td>
</tr>
<tr>
<td>入力が \(0\) のとき</td>
<td>\(0.5\)</td>
<td>\(0\)</td>
<td>\(0\)</td>
</tr>
<tr>
<td>負の入力に対する出力</td>
<td>正の値</td>
<td>負の値</td>
<td>\(0\)</td>
</tr>
<tr>
<td>正の入力が大きいとき</td>
<td>\(1\) に近づく</td>
<td>\(1\) に近づく</td>
<td>入力とともに増加</td>
</tr>
</tbody>
</table>
<p>特に重要なのは、<strong>ReLU関数には正の方向で出力が一定の値に近づく性質がない</strong>ことです。</p>
<p>シグモイド関数やtanh関数では、入力が大きくなると出力の変化が小さくなります。一方、ReLU関数では、正の入力がどれだけ大きくなっても、出力は入力と同じ割合で増加します。</p>
<p>この違いは、後で確認する微分と勾配の性質につながります。</p>
<h2>3．ReLU関数はニューロンでどのように使われるのか？</h2>
<p>では、ReLU関数をニューロンに組み込むと、どのような計算になるのでしょうか。前回と同じように、2つの入力を受け取るニューロンを考えます。</p>
<p>入力を \(x_1,\ x_2\)、重みを \(w_1,\ w_2\)、バイアスを \(b\) とすると、活性化関数を適用する前の値は次のようになります。</p>
<p>$$<br />
z=w_1x_1+w_2x_2+b<br />
$$</p>
<p>ここにReLU関数を適用すると、ニューロンの出力 \(y\) は次のようになります。</p>
<p>$$<br />
y=\mathrm{ReLU}(z)=\max(0,z)<br />
$$</p>
<p>つまり、重み付き和とバイアスの計算結果が正であればそのまま出力し、負であれば \(0\) に変換します。</p>
<h3>3.1．具体例で計算してみる</h3>
<p>前回の記事と同じ条件で比較してみましょう。重みとバイアスを次のように設定します。</p>
<p>$$<br />
w_1=1,\quad w_2=1,\quad b=-3<br />
$$</p>
<p>このとき、ニューロンの計算は \(z=x_1+x_2-3\) となります。</p>
<p>まず、入力が \(x_1=2,\ x_2=2\) の場合を計算します。</p>
<p>$$<br />
\begin{aligned}<br />
z&#038;=2+2-3=1\\<br />
y&#038;=\mathrm{ReLU}(1)=1<br />
\end{aligned}<br />
$$</p>
<p>一方、入力が \(x_1=1,\ x_2=1\) の場合は、次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
z&#038;=1+1-3=-1\\<br />
y&#038;=\mathrm{ReLU}(-1)=0<br />
\end{aligned}<br />
$$</p>
<p>同じ重みとバイアスでも、入力によってニューロンの出力が変化します。ReLU関数では、重み付き和が正の場合には値がそのまま伝わり、負の場合には \(0\) になることがわかります。</p>
<h2>4．ReLU関数を微分するとどうなるのか？</h2>
<p>ここからは、ReLU関数を微分すると何がわかるのかを考えます。</p>
<p>前回のtanh関数では、導関数を求めるために指数関数や商の微分公式を使いました。一方、ReLU関数は場合分けされた簡単な式なので、微分も比較的シンプルです。</p>
<h3>4.1．ReLU関数の導関数を求める</h3>
<p>ReLU関数は、次のように定義されます。</p>
<p>$$<br />
\mathrm{ReLU}(x)=<br />
\begin{cases}<br />
0 &#038; (x\leq0)\\<br />
x &#038; (x \gt 0)<br />
\end{cases}<br />
$$</p>
<p>入力が負の場合、出力は常に \(0\) です。そのため、\(x \lt 0\) での導関数は \(0\) になります。</p>
<p>$$<br />
\frac{d}{dx}0=0<br />
$$</p>
<p>一方、入力が正の場合、出力は \(x\) なので、導関数は \(1\) になります。</p>
<p>$$<br />
\frac{d}{dx}x=1<br />
$$</p>
<p>したがって、ReLU関数の導関数は、\(x\neq0\) において次のようになります。</p>
<p>$$<br />
\mathrm{ReLU}'(x)=<br />
\begin{cases}<br />
0 &#038; (x\lt0)\\<br />
1 &#038; (x\gt0)<br />
\end{cases}<br />
$$</p>
<p>つまり、ReLU関数では、入力が正の領域で導関数が常に \(1\) になります。</p>
<h3>4.2．入力が \(0\) のときは微分できるのか？</h3>
<p>ここで注意したいのは、入力が \(x=0\) の場合です。</p>
<p>ReLU関数は原点で折れ曲がっているため、左側から近づいたときの傾きと、右側から近づいたときの傾きが異なります。</p>
<p>$$<br />
\begin{aligned}<br />
\text{左側の傾き}&#038;=0\\<br />
\text{右側の傾き}&#038;=1<br />
\end{aligned}<br />
$$</p>
<p>そのため、<strong>ReLU関数は数学的には \(x=0\) で微分できません</strong>。</p>
<p>ただし、ニューラルネットワークの実装では、\(x=0\) の場合の勾配を便宜的に \(0\) などと定めて計算を行います。</p>
<p>このように扱うことで、ReLU関数は原点で微分できなくても、勾配を利用した学習に使用できます。</p>
<h2>5．ReLU関数はなぜ学習に適しているのか？</h2>
<p>ここまで、ReLU関数の計算と微分の特徴を確認しました。では、なぜReLU関数は深いニューラルネットワークで広く使われているのでしょうか。</p>
<p>ReLU関数には、大きく分けて2つの利点があります。</p>
<p>1つ目は、<strong>出力の計算が簡単であること</strong>です。2つ目は、<strong>正の領域で導関数が小さくならないこと</strong>です。</p>
<p>この2つは異なる特徴なので、それぞれ分けて確認していきましょう。</p>
<h3>5.1．計算が簡単であることの利点</h3>
<p>シグモイド関数とtanh関数は、どちらも指数関数を使って定義されます。</p>
<p>$$<br />
\sigma(x)=\frac{1}{1+e^{-x}}<br />
$$</p>
<p>$$<br />
\tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}<br />
$$</p>
<p>一方、ReLU関数は次の式で表せます。</p>
<p>$$<br />
\mathrm{ReLU}(x)=\max(0,x)<br />
$$</p>
<p>ReLU関数では、指数関数や除算を使う必要がありません。入力が正かどうかを判定し、正であればそのまま出力し、そうでなければ \(0\) を出力するだけです。</p>
<p>このため、<strong>ReLU関数の活性化処理は、シグモイド関数やtanh関数に比べて計算が単純</strong>です。</p>
<p>ニューラルネットワークでは、多数のニューロンに対して活性化関数を適用します。特に深いネットワークでは、この計算が何度も繰り返されるため、1回あたりの計算が簡単であることは、処理の効率を高めるうえで利点になります。</p>
<p>ただし、実際の実行時間はハードウェアや実装方法、行列演算などの処理にも左右されます。そのため、ReLU関数を使えばネットワーク全体の計算が必ず大幅に速くなるわけではありません。</p>
<p>また、ここで説明した計算の簡単さは、<strong>1回の活性化処理に必要な演算が少ない</strong>という意味です。次に説明する勾配の性質とは、分けて考える必要があります。</p>
<h3>5.2．正の領域では勾配が小さくなりにくい</h3>
<p>次に、ReLU関数のもう1つの利点である、微分と勾配の関係を考えます。</p>
<p>前回の記事では、tanh関数の導関数が次のようになることを確認しました。</p>
<p>$$<br />
\tanh'(x)=1-\tanh^2(x)<br />
$$</p>
<p>tanh関数では、入力の絶対値が大きくなると導関数が \(0\) に近づきます。また、シグモイド関数の導関数も、入力の絶対値が大きい領域では \(0\) に近づきます。</p>
<p>一方、ReLU関数の導関数は、入力が正の場合には常に \(1\) です。</p>
<p>$$<br />
\mathrm{ReLU}'(x)=1\quad(x\gt0)<br />
$$</p>
<p>3つの関数の導関数をグラフで比較してみましょう。</p>
<p><img loading="lazy" decoding="async" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-03.webp" alt="シグモイド関数・tanh関数・ReLU関数の導関数の比較" width="800" height="367" class="alignnone size-full wp-image-1657" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-03.webp 800w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-03-500x229.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-03-300x138.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-03-768x352.webp 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>グラフから、シグモイド関数とtanh関数の導関数は入力の絶対値が大きくなると小さくなるのに対し、ReLU関数の導関数は正の領域で \(1\) を維持することがわかります。</p>
<p>ニューラルネットワークでは、誤差逆伝播法によって勾配を前の層へ伝えるときに、活性化関数の導関数を掛け合わせます。</p>
<p>たとえば、ある層に伝わってきた勾配を \(g\)、活性化関数を \(f\)、その入力を \(z\) とすると、活性化関数を通過した後の勾配は、次のように表せます。</p>
<p>$$<br />
g_{\mathrm{new}}=g f'(z)<br />
$$</p>
<p>ここで、\(g=0.8\) として、活性化関数の導関数が \(0.2\) の場合を考えると、次のようになります。</p>
<p>$$<br />
g_{\mathrm{new}}=0.8\times0.2=0.16<br />
$$</p>
<p>一方、ReLU関数の正の領域では導関数が \(1\) なので、次のようになります。</p>
<p>$$<br />
g_{\mathrm{new}}=0.8\times1=0.8<br />
$$</p>
<p>このように、<strong>ReLU関数の正の領域では、活性化関数の導関数によって勾配が縮小されません</strong>。</p>
<p>これは、深いニューラルネットワークで勾配を伝える際に重要な利点となります。</p>
<p>ただし、実際のニューラルネットワークでは、勾配は重み行列などの影響も受けます。そのため、ReLU関数を使えば勾配消失問題が必ず起こらなくなるわけではありません。</p>
<h3>5.3．具体例で重みの勾配を確認する</h3>
<p>ここで、ReLU関数を使ったニューロンの重みの勾配を計算してみましょう。前回と同じように、1つの入力を持つニューロンを考えます。</p>
<p>$$<br />
z=wx+b,\quad y=\mathrm{ReLU}(z)<br />
$$</p>
<p>まず、入力を \(x=1\)、重みを \(w=1\)、バイアスを \(b=0\) とします。このとき、次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
z&#038;=1\times1+0=1\\<br />
y&#038;=\mathrm{ReLU}(1)=1<br />
\end{aligned}<br />
$$</p>
<p>正解を \(t=2\) とし、損失には二乗誤差を使います。</p>
<p>$$<br />
L=\frac12(y-t)^2<br />
$$</p>
<p>この損失を重み \(w\) で微分すると、連鎖律より、次のようになります。</p>
<p>$$<br />
\frac{\partial L}{\partial w}<br />
=<br />
\frac{\partial L}{\partial y}<br />
\frac{\partial y}{\partial z}<br />
\frac{\partial z}{\partial w}<br />
$$</p>
<p>それぞれの微分は、次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
\frac{\partial L}{\partial y}&#038;=y-t\\<br />
\frac{\partial y}{\partial z}&#038;=\mathrm{ReLU}'(z)\\<br />
\frac{\partial z}{\partial w}&#038;=x<br />
\end{aligned}<br />
$$</p>
<p>したがって、重みの勾配は次のように表せます。</p>
<p>$$<br />
\frac{\partial L}{\partial w}<br />
=<br />
(y-t)\mathrm{ReLU}'(z)x<br />
$$</p>
<p>今回の例では \(z=1\gt0\) なので、\(\mathrm{ReLU}'(z)=1\) です。値を代入すると、次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
\frac{\partial L}{\partial w}<br />
&#038;=(1-2)\times1\times1\\<br />
&#038;=-1<br />
\end{aligned}<br />
$$</p>
<p>勾配降下法では、学習率を \(\eta\) とすると、重みを次のように更新します。</p>
<p>$$<br />
w_{\mathrm{new}}<br />
=<br />
w-\eta\frac{\partial L}{\partial w}<br />
$$</p>
<p>学習率を \(\eta=0.1\) とすると、更新後の重みは次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
w_{\mathrm{new}}<br />
&#038;=1-0.1(-1)\\<br />
&#038;=1.1<br />
\end{aligned}<br />
$$</p>
<p>このように、ReLU関数の入力が正の場合には、活性化関数の導関数が \(1\) になるため、勾配の計算に余分な縮小が入りません。</p>
<p>では、重みを更新することで、損失はどのように変化するのでしょうか。</p>
<p>更新前の出力は \(y=1\)、正解は \(t=2\) なので、損失は次のようになります。</p>
<p>$$<br />
L_{\mathrm{before}}<br />
=\frac12(1-2)^2<br />
=0.5<br />
$$</p>
<p>重みを \(w=1.1\) に更新すると、入力とバイアスは変わらないため、ニューロンの出力は次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
z&#038;=1.1\times1+0=1.1\\<br />
y&#038;=\mathrm{ReLU}(1.1)=1.1<br />
\end{aligned}<br />
$$</p>
<p>したがって、更新後の損失は次のようになります。</p>
<p>$$<br />
L_{\mathrm{after}}<br />
=\frac12(1.1-2)^2<br />
=0.405<br />
$$</p>
<p>この例では、重みの更新によって損失が \(0.5\) から \(0.405\) に減少しました。ReLU関数の正の領域では、勾配を使って重みを更新し、予測を正解に近づけられることがわかります。</p>
<h3>5.4．負の領域では勾配が \(0\) になる</h3>
<p>一方、ReLU関数には注意すべき性質もあります。入力が負の場合には出力が \(0\) になり、導関数も \(0\) になります。</p>
<p>$$<br />
\mathrm{ReLU}'(x)=0\quad(x\lt0)<br />
$$</p>
<p>先ほどの例で、重みだけを \(w=-1\) に変更してみましょう。入力を \(x=1\)、バイアスを \(b=0\) とすると、次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
z&#038;=-1\times1+0=-1\\<br />
y&#038;=\mathrm{ReLU}(-1)=0<br />
\end{aligned}<br />
$$</p>
<p>正解を先ほどと同じ \(t=2\) とすると、重みの勾配は次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
\frac{\partial L}{\partial w}<br />
&#038;=(y-t)\mathrm{ReLU}'(z)x\\<br />
&#038;=(0-2)\times0\times1\\<br />
&#038;=0<br />
\end{aligned}<br />
$$</p>
<p>この場合、予測と正解には差があるにもかかわらず、ReLU関数の導関数が \(0\) なので、この入力例からは重みを更新するための勾配が得られません。</p>
<p>勾配降下法では、勾配が \(0\) なので、重みを更新しても値は変化しません。つまり、予測と正解に差があっても、この入力からは学習が進まないことになります。</p>
<p>ただし、1つの入力例で勾配が \(0\) になっただけで、そのニューロンが常に学習できなくなるわけではありません。別の入力に対して重み付き和が正になれば、勾配が流れる可能性があります。</p>
<h3>5.5．Dying ReLU問題とは何か？</h3>
<p>ReLU関数を使うニューロンで、多くの入力に対して重み付き和が負になり続けると、出力が常に \(0\) になり、重みの更新が進まなくなる場合があります。</p>
<p>このような状態は、<strong>Dying ReLU問題</strong>と呼ばれます。</p>
<p>ReLU関数は、正の領域では勾配が小さくなりにくい一方、負の領域では勾配が完全に \(0\) になるという特徴があります。</p>
<p>この問題を軽減するために、負の入力に対しても小さな傾きを持たせたLeaky ReLUなどの関数が提案されています。Leaky ReLUについては、発展的な活性化関数を扱う記事で詳しく確認します。</p>
<h2>6．ReLU関数は現在どのように使われているのか？</h2>
<p>ReLU関数は、計算が簡単で、正の領域では勾配が小さくならないという特徴から、深いニューラルネットワークの中間層で広く使われてきました。</p>
<p>特に、画像認識に使われるCNNでは、畳み込み層の後などにReLU関数を適用する構成が代表的です。重み付き和による計算にReLU関数を組み合わせることで、ニューラルネットワークに非線形性を持たせることができます。</p>
<p>また、ReLU関数は負の入力を \(0\) にするため、出力の一部が \(0\) になることがあります。このように、多くのニューロンの出力が \(0\) になる状態を「疎な活性化」と呼びます。</p>
<p>ただし、すべてのニューラルネットワークでReLU関数が最適というわけではありません。モデルの構造や用途によっては、tanh関数やGELU、SiLUなど、別の活性化関数が選ばれることもあります。</p>
<h2>まとめ</h2>
<p>今回、見てきたことをまとめます。</p>
<ul>
<li>ReLU関数は、負の入力を \(0\) にし、正の入力をそのまま出力する活性化関数である</li>
<li>ReLU関数は、\(\mathrm{ReLU}(x)=\max(0,x)\) というシンプルな式で表せる</li>
<li>指数関数や除算が不要なため、活性化処理の計算が比較的簡単である</li>
<li>正の領域では導関数が \(1\) となり、活性化関数によって勾配が小さくならない</li>
<li>入力が \(0\) の点では数学的に微分できないが、実装上は勾配を定めて学習できる</li>
<li>負の領域では導関数が \(0\) になり、重みが更新されない場合がある</li>
<li>多くの入力に対してニューロンが出力 \(0\) のままになるDying ReLU問題が起こることがある</li>
<li>ReLU関数は、CNNなどの深いニューラルネットワークで広く使われている</li>
</ul>
<p class="is-style-info-box has-box-style">ReLU関数は、<strong>計算がシンプルであることと、正の領域では勾配が小さくなりにくいこと</strong>が大きな特徴です。一方、負の領域では勾配が \(0\) になるため、学習が進まなくなる場合もあります。</p>
<p>今回は、ReLU関数の仕組みと、シグモイド関数・tanh関数との違いを確認しました。</p>
<p>次回は、複数の出力を確率分布に変換するソフトマックス関数について考えます。ReLU関数が中間層でよく使われるのに対し、ソフトマックス関数は複数クラスの分類問題における出力層で重要な役割を持っています。</p>
<h3>関連記事</h3>
<div style="margin-bottom: 0.6em;">&#x25b6; 前回：tanh関数とは何か？｜シグモイド関数との違いと特徴</div>

<a href="https://webstation-plus.com/tanh-function/" title="tanh関数とは何か？｜シグモイド関数との違いと特徴" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-00-320x180.webp" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-00-320x180.webp 320w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-00-500x281.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-00-300x169.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-00-768x432.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-00-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-00-640x360.webp 640w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-00-752x423.webp 752w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-00.webp 800w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">tanh関数とは何か？｜シグモイド関数との違いと特徴</div><div class="blogcard-snippet internal-blogcard-snippet">tanh関数とは何か？シグモイド関数との違いを、グラフや計算例からわかりやすく解説。出力がゼロ中心となる特徴や、微分・勾配消失との関係、ニューラルネットワークの学習に与える影響まで理解します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://webstation-plus.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">webstation-plus.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.10.28</div></div></div></div></a>
<div style="margin-bottom: 0.6em;">&#x25b6; 関連：シグモイド関数とは何か？｜出力を0から1に変換する仕組み</div>

<a href="https://webstation-plus.com/sigmoid-function/" title="シグモイド関数とは何か？｜出力を0から1に変換する仕組み" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-00-320x180.webp" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-00-320x180.webp 320w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-00-500x281.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-00-300x169.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-00-768x432.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-00-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-00-640x360.webp 640w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-00-752x423.webp 752w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-00.webp 800w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">シグモイド関数とは何か？｜出力を0から1に変換する仕組み</div><div class="blogcard-snippet internal-blogcard-snippet">シグモイド関数とは何か？入力を0から1の範囲に変換する仕組みを、グラフや具体的な計算例から解説します。ステップ関数との違い、ニューロンでの使い方、微分と勾配の関係、勾配消失問題につながる理由まで、ニューラルネットワークの学習における役割をわかりやすく説明します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://webstation-plus.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">webstation-plus.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.10.28</div></div></div></div></a>
<div style="margin-bottom: 0.6em;">&#x25b6; 次回：ソフトマックス関数とは何か？｜複数の出力を確率分布に変換する仕組み</div>
<p>（準備中）</p>
<h3>シリーズ全体を理解する</h3>
<div style="margin-bottom: 0.6em;">&#x25b6; 活性化関数の基本をまとめて理解したい</div>
<p>（準備中）</p>
<h3>関連書籍</h3>
<p>ニューラルネットワークの活性化関数や学習の仕組みをさらに理解したい方には、次のような書籍もおすすめです。</p>

<a rel="noopener" href="https://link.amazon/B0e37VNmw" title="&#12476;&#12525;&#12363;&#12425;&#20316;&#12427;Deep Learning &#8213;Python&#12391;&#23398;&#12406;&#12487;&#12451;&#12540;&#12503;&#12521;&#12540;&#12491;&#12531;&#12464;&#12398;&#29702;&#35542;&#12392;&#23455;&#35013; | &#25998;&#34276; &#24247;&#27589; |&#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 loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Flink.amazon%2FB0e37VNmw?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#12476;&#12525;&#12363;&#12425;&#20316;&#12427;Deep Learning &#8213;Python&#12391;&#23398;&#12406;&#12487;&#12451;&#12540;&#12503;&#12521;&#12540;&#12491;&#12531;&#12464;&#12398;&#29702;&#35542;&#12392;&#23455;&#35013; | &#25998;&#34276; &#24247;&#27589; |&#26412; | &#36890;&#36009; | Amazon</div><div class="blogcard-snippet external-blogcard-snippet">Amazonで斎藤 康毅のゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装。アマゾンならポイント還元本が多数。斎藤 康毅作品ほか、お急ぎ便対象商品は当日お届けも可能。またゼロから作るDeep Lea...</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 loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://link.amazon/B0e37VNmw" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">link.amazon</div></div></div></div></a>

<a rel="noopener" href="https://link.amazon/B07ZRHYyB" title="Python&#12395;&#12424;&#12427;&#12487;&#12451;&#12540;&#12503;&#12521;&#12540;&#12491;&#12531;&#12464; (Compass Books&#12471;&#12522;&#12540;&#12474;) | Fran&#231;ois Chollet, &#24035;&#31840;&#24736;&#36628;, &#26666;&#24335;&#20250;&#31038;&#12463;&#12452;&#12540;&#12503; |&#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 loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Flink.amazon%2FB07ZRHYyB?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Python&#12395;&#12424;&#12427;&#12487;&#12451;&#12540;&#12503;&#12521;&#12540;&#12491;&#12531;&#12464; (Compass Books&#12471;&#12522;&#12540;&#12474;) | Fran&#231;ois Chollet, &#24035;&#31840;&#24736;&#36628;, &#26666;&#24335;&#20250;&#31038;&#12463;&#12452;&#12540;&#12503; |&#26412; | &#36890;&#36009; | Amazon</div><div class="blogcard-snippet external-blogcard-snippet">AmazonでFrançois Chollet, 巣籠悠輔, 株式会社クイープのPythonによるディープラーニング (Compass Booksシリーズ)。アマゾンならポイント還元本が多数。François Chollet, 巣籠悠輔, ...</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 loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://link.amazon/B07ZRHYyB" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">link.amazon</div></div></div></div></a>

<a rel="noopener" href="https://link.amazon/B0gdSluYn" title="&#29289;&#20307;&#12539;&#30011;&#20687;&#35469;&#35672;&#12392;&#26178;&#31995;&#21015;&#12487;&#12540;&#12479;&#20966;&#29702;&#20837;&#38272; [TensorFlow2/PyTorch&#23550;&#24540;&#31532;2&#29256;] NumPy/TensorFlow2(Keras)/PyTorch&#12395;&#12424;&#12427;&#23455;&#35013;&#12487;&#12451;&#12540;&#12503;&#12521;&#12540;&#12491;&#12531;&#12464; | &#12481;&#12540;&#12512;&#12539;&#12459;&#12523;&#12509; |&#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 loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Flink.amazon%2FB0gdSluYn?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#29289;&#20307;&#12539;&#30011;&#20687;&#35469;&#35672;&#12392;&#26178;&#31995;&#21015;&#12487;&#12540;&#12479;&#20966;&#29702;&#20837;&#38272; [TensorFlow2/PyTorch&#23550;&#24540;&#31532;2&#29256;] NumPy/TensorFlow2(Keras)/PyTorch&#12395;&#12424;&#12427;&#23455;&#35013;&#12487;&#12451;&#12540;&#12503;&#12521;&#12540;&#12491;&#12531;&#12464; | &#12481;&#12540;&#12512;&#12539;&#12459;&#12523;&#12509; |&#26412; | &#36890;&#36009; | Amazon</div><div class="blogcard-snippet external-blogcard-snippet">Amazonでチーム・カルポの物体・画像認識と時系列データ処理入門 NumPy/TensorFlow2(Keras)/PyTorchによる実装ディープラーニング。アマゾンならポイント還元本が多数。チーム・カルポ作品ほか、お急ぎ便対象商品は当...</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 loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://link.amazon/B0gdSluYn" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">link.amazon</div></div></div></div></a>
]]></content:encoded>
					
					<wfw:commentRss>https://webstation-plus.com/relu-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>tanh関数とは何か？｜シグモイド関数との違いと特徴</title>
		<link>https://webstation-plus.com/tanh-function/</link>
					<comments>https://webstation-plus.com/tanh-function/#respond</comments>
		
		<dc:creator><![CDATA[toshi]]></dc:creator>
		<pubDate>Wed, 28 Oct 2026 11:00:11 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[ディープラーニング]]></category>
		<category><![CDATA[ニューラルネットワーク]]></category>
		<category><![CDATA[活性化関数]]></category>
		<guid isPermaLink="false">https://webstation-plus.com/?p=1646</guid>

					<description><![CDATA[はじめに 前回の記事では、シグモイド関数が入力を \(0\) から \(1\) の範囲に変換する仕組みを確認しました。 シグモイド関数は、入力に応じて滑らかに変化し、微分を使って勾配を計算できる活性化関数です。しかし、出 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2>はじめに</h2>
<p>前回の記事では、シグモイド関数が入力を \(0\) から \(1\) の範囲に変換する仕組みを確認しました。</p>
<p>シグモイド関数は、入力に応じて滑らかに変化し、微分を使って勾配を計算できる活性化関数です。しかし、出力が常に正の値になることや、入力の絶対値が大きい領域では勾配が小さくなることなどの特徴もあります。</p>
<p>では、出力が \(0\) から \(1\) ではなく、\(-1\) から \(1\) の範囲になる関数を使ったらどうでしょうか。その代表的な活性化関数が、<strong>tanh関数（双曲線正接関数）</strong>です。</p>
<p class="is-style-info-box has-box-style">この記事では、<strong>tanh関数が入力を \(-1\) から \(1\) の範囲に変換する仕組みを理解し、シグモイド関数との違いがニューラルネットワークの計算や学習にどのような影響を与えるのか</strong>を考えます。</p>
<h3>この記事でわかること</h3>
<p>この記事では、次の内容の理解を目指します。</p>
<ul>
<li>tanh関数がどのような計算を行うのか</li>
<li>シグモイド関数との数学的な関係</li>
<li>出力が \(0\) を中心とすることの意味</li>
<li>ニューロンでtanh関数を使う計算例</li>
<li>tanh関数の微分と勾配の関係</li>
<li>tanh関数の特徴と限界</li>
</ul>
<h2>1．tanh関数とは何か？</h2>
<p>tanh関数（hyperbolic tangent function）は、入力を \(-1\) から \(1\) の範囲に滑らかに変換するS字型の関数です。次の式で定義されます。</p>
<p>$$<br />
\tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}<br />
$$</p>
<p>ここで、\(e\) は自然対数の底で、約 \(2.71828\) です。</p>
<p>この関数の特徴は、入力 \(x\) がどのような実数であっても、出力が次の範囲に収まることです。</p>
<p>$$<br />
-1\lt\tanh(x)\lt1<br />
$$</p>
<p>シグモイド関数が \(0\) から \(1\) の範囲に出力するのに対し、tanh関数は負の値も出力できます。</p>
<h3>1.1．具体的な値を計算してみる</h3>
<p>まず、入力が \(x=0\) の場合を考えます。</p>
<p>$$<br />
\tanh(0)<br />
=\frac{e^0-e^0}{e^0+e^0}<br />
=0<br />
$$</p>
<p>次に、入力が \(x=1\) の場合は、次のようになります。</p>
<p>$$<br />
\tanh(1)<br />
=\frac{e-e^{-1}}{e+e^{-1}}<br />
\approx0.762<br />
$$</p>
<p>一方、入力が \(x=-1\) の場合は、\(\tanh(-1)\approx-0.762\) となります。</p>
<p>このように、tanh関数は入力が正の場合には正の値、負の場合には負の値を出力し、入力が \(0\) のときには出力も \(0\) になります。</p>
<h3>1.2．tanh関数のグラフ</h3>
<p>tanh関数をグラフにすると、次のようになります。</p>
<p><img loading="lazy" decoding="async" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-01.webp" alt="tanh関数のグラフ" width="800" height="440" class="alignnone size-full wp-image-1647" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-01.webp 800w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-01-500x275.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-01-300x165.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-01-768x422.webp 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>グラフを見ると、入力が \(x=0\) のとき出力は \(0\) になり、その周辺では入力の変化に応じて出力が大きく変化しています。</p>
<p>一方、入力が正の方向に大きくなると出力は \(1\) に、負の方向に小さくなると \(-1\) に近づきます。ただし、有限の入力では出力がちょうど \(1\) や \(-1\) になることはありません。</p>
<p>また、tanh関数には次の性質があります。</p>
<p>$$<br />
\tanh(-x)=-\tanh(x)<br />
$$</p>
<p>これは、グラフが原点を中心として対称になることを意味します。このような関数を<strong>奇関数</strong>と呼びます。</p>
<h2>2．シグモイド関数とは何が違うのか？</h2>
<p>tanh関数とシグモイド関数は、どちらも滑らかなS字型の関数です。しかし、出力の範囲と中心が異なります。まず、2つの関数を比較してみましょう。</p>
<p><img loading="lazy" decoding="async" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-02.webp" alt="シグモイド関数とtanh関数の比較" width="800" height="314" class="alignnone size-full wp-image-1648" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-02.webp 800w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-02-500x196.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-02-300x118.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-02-768x301.webp 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>2つの関数は形が似ていますが、シグモイド関数は \(0\) から \(1\)、tanh関数は \(-1\) から \(1\) の範囲で変化します。</p>
<table class="standard-table">
<thead>
<tr>
<th>特徴</th>
<th>シグモイド関数</th>
<th>tanh関数</th>
</tr>
</thead>
<tbody>
<tr>
<td>出力範囲</td>
<td>\(0\) から \(1\)</td>
<td>\(-1\) から \(1\)</td>
</tr>
<tr>
<td>入力が \(0\) のとき</td>
<td>\(0.5\)</td>
<td>\(0\)</td>
</tr>
<tr>
<td>負の出力</td>
<td>出力しない</td>
<td>出力する</td>
</tr>
<tr>
<td>グラフの対称性</td>
<td>\((0, 0.5)\) を中心とする点対称</td>
<td>原点対称</td>
</tr>
</tbody>
</table>
<p>tanh関数は、シグモイド関数の出力を単純に上下へ移動しただけの関数ではありません。出力の範囲だけでなく、入力に対する変化の大きさも異なります。</p>
<h3>2.1．tanh関数とシグモイド関数の数学的な関係</h3>
<p>実は、tanh関数はシグモイド関数を使って表すことができます。シグモイド関数は、次の式で定義されます。</p>
<p>$$<br />
\sigma(x)=\frac{1}{1+e^{-x}}<br />
$$</p>
<p>ここで、入力を \(2x\) に置き換えると、\(\sigma(2x)=\frac{1}{1+e^{-2x}}\) となります。</p>
<p>この式を使って \(2\sigma(2x)-1\) を計算すると、次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
2\sigma(2x)-1<br />
&#038;=\frac{2}{1+e^{-2x}}-1\\<br />
&#038;=\frac{1-e^{-2x}}{1+e^{-2x}}\\<br />
&#038;=\frac{e^x-e^{-x}}{e^x+e^{-x}}\\<br />
&#038;=\tanh(x)<br />
\end{aligned}<br />
$$</p>
<p>したがって、次の関係が成り立ちます。</p>
<p>$$<br />
\tanh(x)=2\sigma(2x)-1<br />
$$</p>
<p>つまり、tanh関数は、シグモイド関数の入力を2倍にし、出力を2倍してから \(1\) を引いた関数です。この関係から、tanh関数とシグモイド関数のグラフが似ている理由もわかります。</p>
<h3>2.2．出力が \(0\) を中心とするとはどういうことか？</h3>
<p>シグモイド関数は、入力が負の場合でも正の値を出力します。一方、tanh関数は入力の符号に応じて、正の値と負の値を出力できます。</p>
<p>たとえば、入力が \(x=-1,\ 0,\ 1\) の場合を比較します。</p>
<table class="center-table">
<thead>
<tr>
<th>入力</th>
<th>シグモイド関数</th>
<th>tanh関数</th>
</tr>
</thead>
<tbody>
<tr>
<td>\(-1\)</td>
<td>約 \(0.269\)</td>
<td>約 \(-0.762\)</td>
</tr>
<tr>
<td>\(0\)</td>
<td>\(0.5\)</td>
<td>\(0\)</td>
</tr>
<tr>
<td>\(1\)</td>
<td>約 \(0.731\)</td>
<td>約 \(0.762\)</td>
</tr>
</tbody>
</table>
<p>このように、シグモイド関数の出力は \(0.5\) を中心として変化するのに対し、tanh関数の出力は \(0\) を中心として変化します。特に、tanh関数では入力が \(0\) を境に正負へ変化すると、出力も正負へ変化します。</p>
<p>この性質を<strong>ゼロ中心（zero-centered）の出力</strong>と呼びます。ただし、ゼロ中心とは、どのような入力データに対しても出力の平均が必ず \(0\) になるという意味ではありません。tanh関数の形が原点対称であり、正負の出力を持つことを表しています。</p>
<h2>3．tanh関数はニューロンでどのように使われるのか？</h2>
<p>では、tanh関数をニューロンに組み込むと、どのような計算になるのでしょうか。前回と同じように、2つの入力を受け取るニューロンを考えます。</p>
<p>入力を \(x_1,\ x_2\)、重みを \(w_1,\ w_2\)、バイアスを \(b\) とすると、活性化関数を適用する前の値は次のようになります。</p>
<p>$$<br />
z=w_1x_1+w_2x_2+b<br />
$$</p>
<p>ここにtanh関数を適用すると、ニューロンの出力 \(y\) は次のようになります。</p>
<p>$$<br />
y=\tanh(z)<br />
$$</p>
<p>シグモイド関数では、重み付き和とバイアスの計算結果を \(0\) から \(1\) の範囲に変換しました。一方、tanh関数では、\(-1\) から \(1\) の範囲に変換します。</p>
<h3>3.1．具体例で計算してみる</h3>
<p>前回のシグモイド関数の記事と同じ条件で比較してみましょう。重みとバイアスを次のように設定します。</p>
<p>$$<br />
w_1=1,\quad w_2=1,\quad b=-3<br />
$$</p>
<p>このとき、ニューロンの計算は \(z=x_1+x_2-3\) となります。</p>
<p>まず、入力が \(x_1=2,\ x_2=2\) の場合を計算します。</p>
<p>$$<br />
\begin{aligned}<br />
z&#038;=2+2-3=1\\<br />
y&#038;=\tanh(1)\approx0.762<br />
\end{aligned}<br />
$$</p>
<p>一方、入力が \(x_1=1,\ x_2=1\) の場合は、次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
z&#038;=1+1-3=-1\\<br />
y&#038;=\tanh(-1)\approx-0.762<br />
\end{aligned}<br />
$$</p>
<p>前回のシグモイド関数では、同じ入力に対して約 \(0.731\) と \(0.269\) を出力しました。一方、tanh関数では、入力に応じて正の値と負の値を出力できることがわかります。</p>
<h2>4．tanh関数を微分するとどうなるのか？</h2>
<p>ここからは、tanh関数を微分すると何がわかるのかを考えます。</p>
<p>前回の記事では、シグモイド関数の導関数が、シグモイド関数自身の出力を使って計算できることを確認しました。実は、tanh関数にも同じような性質があります。</p>
<h3>4.1．tanh関数の導関数を求める</h3>
<p>tanh関数は、次の式で定義されます。</p>
<p>$$<br />
\tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}<br />
$$</p>
<p>分子と分母をそれぞれ次のように置きます。</p>
<p>$$<br />
u=e^x-e^{-x},\quad v=e^x+e^{-x}<br />
$$</p>
<p>これらを微分すると、\(u&#8217;=e^x+e^{-x}\)、\(v&#8217;=e^x-e^{-x}\) となります。</p>
<p>商の微分公式を使うと、次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
\tanh'(x)<br />
&#038;=\frac{u&#8217;v-uv&#8217;}{v^2}\\<br />
&#038;=\frac{(e^x+e^{-x})^2-(e^x-e^{-x})^2}<br />
{(e^x+e^{-x})^2}\\<br />
&#038;=1-<br />
\left(<br />
\frac{e^x-e^{-x}}{e^x+e^{-x}}<br />
\right)^2<br />
\end{aligned}<br />
$$</p>
<p>ここで、tanh関数の定義を使うと、次の関係が得られます。</p>
<p>$$<br />
\tanh'(x)=1-\tanh^2(x)<br />
$$</p>
<p>つまり、<strong>tanh関数の導関数も、tanh関数自身の出力を使って計算できる</strong>のです。</p>
<h3>4.2．導関数の値を確認する</h3>
<p>入力が \(x=0\) のとき、\(\tanh(0)=0\) なので、導関数は次のようになります。</p>
<p>$$<br />
\tanh'(0)=1-0^2=1<br />
$$</p>
<p>一方、入力が \(x=1\) のときは、\(\tanh(1)\approx0.762\) なので、次のようになります。</p>
<p>$$<br />
\tanh'(1)<br />
\approx1-0.762^2<br />
\approx0.420<br />
$$</p>
<p>同様に、\(x=-1\) のときも導関数の値は約 \(0.420\) です。このように、tanh関数の導関数は入力が \(0\) のときに最大値 \(1\) を取り、入力の絶対値が大きくなるほど小さくなります。</p>
<h2>5．tanh関数は学習にどのような影響を与えるのか？</h2>
<p>ここまで、tanh関数の出力と微分の特徴を確認しました。では、これらの特徴はニューラルネットワークの学習にどのような影響を与えるのでしょうか。</p>
<h3>5.1．シグモイド関数との勾配の違い</h3>
<p>前回の記事では、シグモイド関数の導関数が次のようになることを確認しました。</p>
<p>$$<br />
\sigma'(x)=\sigma(x)(1-\sigma(x))<br />
$$</p>
<p>この導関数の最大値は \(0.25\) です。一方、tanh関数の導関数は、</p>
<p>$$<br />
\tanh'(x)=1-\tanh^2(x)<br />
$$</p>
<p>であり、最大値は \(1\) です。2つの導関数をグラフで比較すると、次のようになります。</p>
<p><img loading="lazy" decoding="async" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-03.webp" alt="シグモイド関数とtanh関数の導関数の比較" width="800" height="314" class="alignnone size-full wp-image-1649" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-03.webp 800w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-03-500x196.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-03-300x118.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-03-768x301.webp 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>グラフから、入力が \(0\) の付近ではtanh関数の導関数がシグモイド関数より大きいことがわかります。</p>
<p>具体的に、入力が \(x=0\) の場合を比較すると、次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
\sigma'(0)&#038;=0.25\\<br />
\tanh'(0)&#038;=1<br />
\end{aligned}<br />
$$</p>
<p>同じ入力 \(x=0\) に対して、tanh関数の導関数はシグモイド関数の4倍です。また、入力が \(x=1\) の場合は、次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
\sigma'(1)&#038;\approx0.197\\<br />
\tanh'(1)&#038;\approx0.420<br />
\end{aligned}<br />
$$</p>
<p>これらの計算からも、tanh関数とシグモイド関数では、入力の変化に対する出力の変化率が異なることがわかります。ただし、導関数の最大値が大きいからといって、tanh関数を使ったネットワークの学習が必ず速くなるわけではありません。実際の勾配は、重み行列や損失関数などにも依存します。</p>
<h3>5.2．出力が \(0\) を中心とすると、なぜ学習に有利な場合があるのか？</h3>
<p>第2.2節では、tanh関数が正負の値を出力できることを確認しました。では、この性質はニューラルネットワークの学習にどのような影響を与えるのでしょうか。</p>
<p>あるニューロンの出力 \(a\) が、次の層のニューロンに入力される場合を考えます。次の層の重みを \(w\)、バイアスを \(b\) とすると、重み付き和は次のようになります。</p>
<p>$$<br />
z=wa+b<br />
$$</p>
<p>ここで、損失を \(L\) とすると、連鎖律を使って重みの勾配は次のように表せます。</p>
<p>$$<br />
\frac{\partial L}{\partial w}<br />
=<br />
\frac{\partial L}{\partial z}<br />
\frac{\partial z}{\partial w}<br />
$$</p>
<p>\(\frac{\partial z}{\partial w}=a\) なので、次の関係が得られます。</p>
<p>$$<br />
\frac{\partial L}{\partial w}<br />
=<br />
\frac{\partial L}{\partial z}a<br />
$$</p>
<p>つまり、<strong>次の層の重みの勾配には、前の層から伝わる出力 \(a\) が直接関係している</strong>のです。</p>
<p>ここで、説明を簡単にするために、2つの入力例で \(\frac{\partial L}{\partial z}=1\) だったと仮定します。この場合、重みの勾配は次のようになります。</p>
<p>$$<br />
\frac{\partial L}{\partial w}=a<br />
$$</p>
<p>たとえば、前の層の出力が \(a=-0.5\) と \(a=0.5\) だった場合、重みの勾配は次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
a=-0.5&#038;\Rightarrow\frac{\partial L}{\partial w}=-0.5\\<br />
a=0.5&#038;\Rightarrow\frac{\partial L}{\partial w}=0.5<br />
\end{aligned}<br />
$$</p>
<p>一方、前の層の出力が常に正の値である場合、同じ条件では重みの勾配も正の値になります。</p>
<p>このように、前の層の出力が正負の値を持つと、次の層の重みの勾配にも正負の変化が生じる場合があります。その結果、条件によっては重みの更新方向の偏りが軽減され、学習を進めやすくなることがあります。</p>
<p>ただし、実際の勾配は \(\frac{\partial L}{\partial z}\) の符号や大きさにも依存します。tanh関数を使えば必ず勾配の符号が分散したり、学習が速くなったりするわけではありません。</p>
<h3>5.3．具体例で重みの勾配を確認する</h3>
<p>ここで、tanh関数を使ったニューロンの重みの勾配を計算してみましょう。前回と同じように、1つの入力を持つニューロンを考えます。</p>
<p>$$<br />
z=wx+b,\quad y=\tanh(z)<br />
$$</p>
<p>入力を \(x=1\)、重みを \(w=-1\)、バイアスを \(b=0\) とすると、次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
z&#038;=wx+b=-1\\<br />
y&#038;=\tanh(-1)\approx-0.762<br />
\end{aligned}<br />
$$</p>
<p>正解を \(t=1\) とし、損失には二乗誤差を使います。</p>
<p>$$<br />
L=\frac12(y-t)^2<br />
$$</p>
<p>この損失を重み \(w\) で微分すると、連鎖律より、次のようになります。</p>
<p>$$<br />
\frac{\partial L}{\partial w}<br />
=<br />
\frac{\partial L}{\partial y}<br />
\frac{\partial y}{\partial z}<br />
\frac{\partial z}{\partial w}<br />
$$</p>
<p>ここで、それぞれの微分は次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
\frac{\partial L}{\partial y}&#038;=y-t\\<br />
\frac{\partial y}{\partial z}&#038;=1-\tanh^2(z)\\<br />
\frac{\partial z}{\partial w}&#038;=x<br />
\end{aligned}<br />
$$</p>
<p>したがって、重みの勾配は次のように表せます。</p>
<p>$$<br />
\frac{\partial L}{\partial w}<br />
=<br />
(y-t)(1-\tanh^2(z))x<br />
$$</p>
<p>今回の値を代入して計算すると、次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
\frac{\partial L}{\partial w}<br />
&#038;\approx(-0.762-1)(1-(-0.762)^2)\times1\\<br />
&#038;\approx(-1.762)\times0.420\\<br />
&#038;\approx-0.740<br />
\end{aligned}<br />
$$</p>
<p>勾配降下法では、学習率を \(\eta\) とすると、重みを次のように更新します。</p>
<p>$$<br />
w_{\mathrm{new}}<br />
=<br />
w-\eta\frac{\partial L}{\partial w}<br />
$$</p>
<p>学習率を \(\eta=0.1\) とすると、更新後の重みは次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
w_{\mathrm{new}}<br />
&#038;\approx-1-0.1(-0.740)\\<br />
&#038;=-0.926<br />
\end{aligned}<br />
$$</p>
<p>つまり、tanh関数でも、導関数を使って重みの勾配を計算し、損失を小さくする方向へ重みを更新できます。</p>
<p>なお、前回のシグモイド関数の記事では、同じ入力と重みの条件で勾配が約 \(-0.144\) となりました。しかし、今回は活性化関数が異なるため、ニューロンの出力や損失も変わっています。そのため、勾配の絶対値が大きいことだけを理由に、tanh関数の方が学習性能に優れていると判断することはできません。</p>
<h3>5.4．tanh関数でも勾配消失問題は起こる</h3>
<p>tanh関数は、入力が \(0\) の付近では導関数が比較的大きくなります。しかし、入力の絶対値が大きくなると、出力は \(1\) または \(-1\) に近づきます。</p>
<p>このとき、導関数は次のようになります。</p>
<p>$$<br />
\tanh'(x)=1-\tanh^2(x)\to0<br />
$$</p>
<p>つまり、tanh関数も入力の絶対値が大きい領域では飽和し、導関数が \(0\) に近づきます。そのため、深いニューラルネットワークでは、誤差逆伝播法によって勾配を伝える際に値が小さくなり、前の層の重みが更新されにくくなる場合があります。</p>
<p>これは、シグモイド関数と同様に<strong>勾配消失問題</strong>につながる要因の1つです。tanh関数はシグモイド関数とは異なる利点を持ちますが、勾配消失問題を完全に解決する関数ではありません。</p>
<h2>6．tanh関数は現在どのように使われているのか？</h2>
<p>tanh関数は、ニューラルネットワークの中間層で使われてきた代表的な活性化関数です。</p>
<p>現在、一般的な深いフィードフォワードネットワークやCNNの中間層では、ReLUなどの活性化関数が広く使われています。一方、tanh関数も特定のモデルでは重要な役割を持っています。</p>
<p>たとえば、RNNやLSTMなどでは、隠れ状態や内部状態の候補を計算するときにtanh関数が使われます。tanh関数を使うと、計算結果を \(-1\) から \(1\) の範囲に変換できるため、正負の値を持つ情報を表現できます。</p>
<p>ただし、すべてのRNNやLSTMで同じ構成が使われるわけではなく、モデルの設計によって活性化関数の使い方は異なります。</p>
<h2>まとめ</h2>
<p>今回、見てきたことをまとめます。</p>
<ul>
<li>tanh関数は、入力を \(-1\) から \(1\) の範囲に滑らかに変換するS字型の関数である</li>
<li>入力が \(0\) のとき出力は \(0\) になり、グラフは原点対称になる</li>
<li>tanh関数とシグモイド関数には、\(\tanh(x)=2\sigma(2x)-1\) という関係がある</li>
<li>出力が \(0\) を中心とする性質は、条件によっては学習に有利に働く</li>
<li>導関数は \(\tanh'(x)=1-\tanh^2(x)\) と表せ、最大値は \(1\) である</li>
<li>入力の絶対値が大きい領域では導関数が小さくなり、勾配消失問題につながる場合がある</li>
<li>現在もRNNやLSTMなどで利用されている</li>
</ul>
<p class="is-style-info-box has-box-style">tanh関数は、<strong>入力を \(-1\) から \(1\) の範囲に変換し、正負の値を出力できる活性化関数</strong>です。シグモイド関数とは異なり出力が \(0\) を中心とする一方、入力が飽和領域に入ると勾配が小さくなるという限界もあります。</p>
<p>今回は、tanh関数の仕組みと、シグモイド関数との違いを確認しました。</p>
<p>次回は、入力が正のときにはそのまま出力し、負のときには \(0\) を出力するReLU関数について考えます。ReLU関数が深いニューラルネットワークで広く使われる理由を、微分と勾配の観点から理解していきます。</p>
<h3>関連記事</h3>
<div style="margin-bottom: 0.6em;">&#x25b6; 前回：シグモイド関数とは何か？｜出力を0から1に変換する仕組み</div>

<a href="https://webstation-plus.com/sigmoid-function/" title="シグモイド関数とは何か？｜出力を0から1に変換する仕組み" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-00-320x180.webp" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-00-320x180.webp 320w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-00-500x281.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-00-300x169.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-00-768x432.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-00-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-00-640x360.webp 640w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-00-752x423.webp 752w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-00.webp 800w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">シグモイド関数とは何か？｜出力を0から1に変換する仕組み</div><div class="blogcard-snippet internal-blogcard-snippet">シグモイド関数とは何か？入力を0から1の範囲に変換する仕組みを、グラフや具体的な計算例から解説します。ステップ関数との違い、ニューロンでの使い方、微分と勾配の関係、勾配消失問題につながる理由まで、ニューラルネットワークの学習における役割をわかりやすく説明します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://webstation-plus.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">webstation-plus.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.10.28</div></div></div></div></a>
<div style="margin-bottom: 0.6em;">&#x25b6; 関連：合成関数の微分とは何か？｜連鎖律が成り立つ理由を理解する</div>

<a href="https://webstation-plus.com/chain-rule/" title="合成関数の微分とは何か？｜連鎖律が成り立つ理由を理解する" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/chain-rule-00-320x180.webp" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/chain-rule-00-320x180.webp 320w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/chain-rule-00-500x281.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/chain-rule-00-300x169.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/chain-rule-00-768x432.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/chain-rule-00-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/chain-rule-00-640x360.webp 640w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/chain-rule-00-752x423.webp 752w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/chain-rule-00.webp 800w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">合成関数の微分とは何か？｜連鎖律が成り立つ理由を理解する</div><div class="blogcard-snippet internal-blogcard-snippet">合成関数の微分とは何か？連鎖律がなぜ成り立つのかを、変化率の連鎖と微分の定義から丁寧に解説します。入力・中間変数・出力の関係を図で理解し、具体的な計算例を通して連鎖律の使い方を学びます。AIの誤差逆伝播法とのつながりも紹介します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://webstation-plus.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">webstation-plus.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.10.19</div></div></div></div></a>
<div style="margin-bottom: 0.6em;">&#x25b6; 次回：ReLU関数とは何か？｜シンプルな計算が学習に適している理由</div>

<a href="https://webstation-plus.com/relu-function/" title="ReLU関数とは何か？｜シンプルな計算が学習に適している理由" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-00-320x180.webp" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-00-320x180.webp 320w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-00-500x281.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-00-300x169.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-00-768x432.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-00-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-00-640x360.webp 640w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-00-752x423.webp 752w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/relu-function-00.webp 800w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">ReLU関数とは何か？｜シンプルな計算が学習に適している理由</div><div class="blogcard-snippet internal-blogcard-snippet">ReLU関数とは何か？シグモイド関数やtanh関数との違いを、グラフと計算例でわかりやすく解説。計算が簡単な理由や、正の領域で勾配が小さくなりにくい仕組み、Dying ReLU問題まで理解します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://webstation-plus.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">webstation-plus.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.10.28</div></div></div></div></a>
<h3>シリーズ全体を理解する</h3>
<div style="margin-bottom: 0.6em;">&#x25b6; 活性化関数の基本をまとめて理解したい</div>
<p>（準備中）</p>
<h3>関連書籍</h3>
<p>ニューラルネットワークの活性化関数や学習の仕組みをさらに理解したい方には、次のような書籍もおすすめです。</p>

<a rel="noopener" href="https://link.amazon/B0e37VNmw" title="&#12476;&#12525;&#12363;&#12425;&#20316;&#12427;Deep Learning &#8213;Python&#12391;&#23398;&#12406;&#12487;&#12451;&#12540;&#12503;&#12521;&#12540;&#12491;&#12531;&#12464;&#12398;&#29702;&#35542;&#12392;&#23455;&#35013; | &#25998;&#34276; &#24247;&#27589; |&#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 loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Flink.amazon%2FB0e37VNmw?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#12476;&#12525;&#12363;&#12425;&#20316;&#12427;Deep Learning &#8213;Python&#12391;&#23398;&#12406;&#12487;&#12451;&#12540;&#12503;&#12521;&#12540;&#12491;&#12531;&#12464;&#12398;&#29702;&#35542;&#12392;&#23455;&#35013; | &#25998;&#34276; &#24247;&#27589; |&#26412; | &#36890;&#36009; | Amazon</div><div class="blogcard-snippet external-blogcard-snippet">Amazonで斎藤 康毅のゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装。アマゾンならポイント還元本が多数。斎藤 康毅作品ほか、お急ぎ便対象商品は当日お届けも可能。またゼロから作るDeep Lea...</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 loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://link.amazon/B0e37VNmw" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">link.amazon</div></div></div></div></a>

<a rel="noopener" href="https://link.amazon/B07ZRHYyB" title="Python&#12395;&#12424;&#12427;&#12487;&#12451;&#12540;&#12503;&#12521;&#12540;&#12491;&#12531;&#12464; (Compass Books&#12471;&#12522;&#12540;&#12474;) | Fran&#231;ois Chollet, &#24035;&#31840;&#24736;&#36628;, &#26666;&#24335;&#20250;&#31038;&#12463;&#12452;&#12540;&#12503; |&#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 loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Flink.amazon%2FB07ZRHYyB?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Python&#12395;&#12424;&#12427;&#12487;&#12451;&#12540;&#12503;&#12521;&#12540;&#12491;&#12531;&#12464; (Compass Books&#12471;&#12522;&#12540;&#12474;) | Fran&#231;ois Chollet, &#24035;&#31840;&#24736;&#36628;, &#26666;&#24335;&#20250;&#31038;&#12463;&#12452;&#12540;&#12503; |&#26412; | &#36890;&#36009; | Amazon</div><div class="blogcard-snippet external-blogcard-snippet">AmazonでFrançois Chollet, 巣籠悠輔, 株式会社クイープのPythonによるディープラーニング (Compass Booksシリーズ)。アマゾンならポイント還元本が多数。François Chollet, 巣籠悠輔, ...</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 loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://link.amazon/B07ZRHYyB" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">link.amazon</div></div></div></div></a>

<a rel="noopener" href="https://link.amazon/B0gdSluYn" title="&#29289;&#20307;&#12539;&#30011;&#20687;&#35469;&#35672;&#12392;&#26178;&#31995;&#21015;&#12487;&#12540;&#12479;&#20966;&#29702;&#20837;&#38272; [TensorFlow2/PyTorch&#23550;&#24540;&#31532;2&#29256;] NumPy/TensorFlow2(Keras)/PyTorch&#12395;&#12424;&#12427;&#23455;&#35013;&#12487;&#12451;&#12540;&#12503;&#12521;&#12540;&#12491;&#12531;&#12464; | &#12481;&#12540;&#12512;&#12539;&#12459;&#12523;&#12509; |&#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 loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Flink.amazon%2FB0gdSluYn?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#29289;&#20307;&#12539;&#30011;&#20687;&#35469;&#35672;&#12392;&#26178;&#31995;&#21015;&#12487;&#12540;&#12479;&#20966;&#29702;&#20837;&#38272; [TensorFlow2/PyTorch&#23550;&#24540;&#31532;2&#29256;] NumPy/TensorFlow2(Keras)/PyTorch&#12395;&#12424;&#12427;&#23455;&#35013;&#12487;&#12451;&#12540;&#12503;&#12521;&#12540;&#12491;&#12531;&#12464; | &#12481;&#12540;&#12512;&#12539;&#12459;&#12523;&#12509; |&#26412; | &#36890;&#36009; | Amazon</div><div class="blogcard-snippet external-blogcard-snippet">Amazonでチーム・カルポの物体・画像認識と時系列データ処理入門 NumPy/TensorFlow2(Keras)/PyTorchによる実装ディープラーニング。アマゾンならポイント還元本が多数。チーム・カルポ作品ほか、お急ぎ便対象商品は当...</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 loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://link.amazon/B0gdSluYn" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">link.amazon</div></div></div></div></a>
]]></content:encoded>
					
					<wfw:commentRss>https://webstation-plus.com/tanh-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>シグモイド関数とは何か？｜出力を0から1に変換する仕組み</title>
		<link>https://webstation-plus.com/sigmoid-function/</link>
					<comments>https://webstation-plus.com/sigmoid-function/#respond</comments>
		
		<dc:creator><![CDATA[toshi]]></dc:creator>
		<pubDate>Tue, 27 Oct 2026 22:30:15 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[ディープラーニング]]></category>
		<category><![CDATA[ニューラルネットワーク]]></category>
		<category><![CDATA[活性化関数]]></category>
		<guid isPermaLink="false">https://webstation-plus.com/?p=1640</guid>

					<description><![CDATA[はじめに 前回の記事では、ステップ関数の仕組みと、なぜ勾配を使ったニューラルネットワークの学習に向かないのかを確認しました。 ステップ関数は、入力に応じて出力を \(0\) か \(1\) に切り替える関数です。しかし、 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2>はじめに</h2>
<p>前回の記事では、ステップ関数の仕組みと、なぜ勾配を使ったニューラルネットワークの学習に向かないのかを確認しました。</p>
<p>ステップ関数は、入力に応じて出力を \(0\) か \(1\) に切り替える関数です。しかし、境界以外では微分すると \(0\) になり、境界では微分できないため、通常の勾配降下法による学習には適していません。</p>
<p>では、出力を突然切り替えるのではなく、入力に応じて滑らかに変化させたらどうでしょうか。</p>
<p>その考え方を実現する代表的な活性化関数が、<strong>シグモイド関数</strong>です。</p>
<p class="is-style-info-box has-box-style">この記事では、<strong>シグモイド関数が入力を \(0\) から \(1\) の範囲に変換する仕組みを理解し、微分と勾配の観点から、ニューラルネットワークの学習でどのような役割を持つのか</strong>を考えます。</p>
<h3>この記事でわかること</h3>
<p>この記事では、次の内容の理解を目指します。</p>
<ul>
<li>シグモイド関数がどのような計算を行うのか</li>
<li>入力を \(0\) から \(1\) の範囲に変換する仕組み</li>
<li>ステップ関数との違い</li>
<li>ニューロンでシグモイド関数を使う計算例</li>
<li>シグモイド関数の微分と勾配の関係</li>
<li>シグモイド関数の特徴と限界</li>
</ul>
<h2>1．シグモイド関数とは何か？</h2>
<p>シグモイド関数（sigmoid function）は、入力の値を滑らかに変換するS字型の関数です。ニューラルネットワークでは、一般に次の<strong>ロジスティック関数</strong>をシグモイド関数と呼びます。</p>
<p>$$<br />
\sigma(x)=\frac{1}{1+e^{-x}}<br />
$$</p>
<p>ここで、\(e\) は自然対数の底と呼ばれる定数で、約 \(2.71828\) です。</p>
<p>この関数の特徴は、入力 \(x\) がどのような実数であっても、出力が必ず \(0\) より大きく、\(1\) より小さくなることです。</p>
<p>$$<br />
0\lt\sigma(x)\lt1<br />
$$</p>
<p>つまり、シグモイド関数は、負の値から正の値まで広がる入力を、\(0\) から \(1\) の間の値に変換します。</p>
<h3>1.1．具体的な値を計算してみる</h3>
<p>まず、入力が \(x=0\) の場合を考えます。</p>
<p>$$<br />
\sigma(0)<br />
=<br />
\frac{1}{1+e^0}<br />
=<br />
\frac12<br />
=<br />
0.5<br />
$$</p>
<p>次に、入力が \(x=2\) の場合は、次のようになります。</p>
<p>$$<br />
\sigma(2)<br />
=<br />
\frac{1}{1+e^{-2}}<br />
\approx0.881<br />
$$</p>
<p>一方、入力が \(x=-2\) の場合は、次のようになります。</p>
<p>$$<br />
\sigma(-2)<br />
=<br />
\frac{1}{1+e^2}<br />
\approx0.119<br />
$$</p>
<p>このように、入力が正の方向に大きくなると出力は \(1\) に近づき、負の方向に小さくなると出力は \(0\) に近づきます。ただし、入力が有限の値である限り、出力がちょうど \(0\) や \(1\) になることはありません。</p>
<h3>1.2．シグモイド関数のグラフ</h3>
<p>シグモイド関数をグラフにすると、次のようになります。</p>
<p><img loading="lazy" decoding="async" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-01.webp" alt="シグモイド関数のグラフ" width="800" height="440" class="alignnone size-full wp-image-1642" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-01.webp 800w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-01-500x275.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-01-300x165.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-01-768x422.webp 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>グラフを見ると、入力が \(x=0\) のとき出力は \(0.5\) になり、その周辺では入力の変化に応じて出力が大きく変化しています。</p>
<p>一方、入力が正の方向に大きくなると出力は \(1\) に、負の方向に小さくなると \(0\) に近づきます。</p>
<p>このように、シグモイド関数は入力を滑らかに変換するS字型の関数です。</p>
<h2>2．ステップ関数とは何が違うのか？</h2>
<p>前回の記事で扱ったステップ関数も、入力に応じて \(0\) か \(1\) の出力を決める関数でした。しかし、ステップ関数とシグモイド関数では、出力の変化の仕方が大きく異なります。</p>
<p>ステップ関数は、入力が境界をまたぐと出力が突然切り替わります。一方、シグモイド関数では、入力が変化すると出力も連続的に変化します。</p>
<p><img loading="lazy" decoding="async" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-02.webp" alt="ステップ関数とシグモイド関数の比較" width="800" height="367" class="alignnone size-full wp-image-1643" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-02.webp 800w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-02-500x229.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-02-300x138.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-02-768x352.webp 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>たとえば、入力が \(x=0\) の近くでわずかに変化した場合を考えます。</p>
<p>ステップ関数では、入力が境界をまたぐと出力が \(0\) から \(1\) へ突然切り替わります。しかし、シグモイド関数では、入力の変化に応じて出力も少しずつ変わります。</p>
<p>この違いは、ニューラルネットワークの学習を考えるうえで重要です。なぜなら、シグモイド関数は滑らかに変化するため、微分を使って出力の変化を調べられるからです。</p>
<h2>3．シグモイド関数はニューロンでどのように使われるのか？</h2>
<p>では、シグモイド関数をニューロンに組み込むと、どのような計算になるのでしょうか。</p>
<p>前回と同じように、2つの入力を受け取るニューロンを考えます。</p>
<p>入力を \(x_1,\ x_2\)、重みを \(w_1,\ w_2\)、バイアスを \(b\) とすると、活性化関数を適用する前の値は、次のようになります。</p>
<p>$$<br />
z=w_1x_1+w_2x_2+b<br />
$$</p>
<p>ここにシグモイド関数を適用すると、ニューロンの出力 \(y\) は次のようになります。</p>
<p>$$<br />
y=\sigma(z)=\frac{1}{1+e^{-z}}<br />
$$</p>
<p>ステップ関数の場合は、出力が \(0\) か \(1\) のどちらかでした。一方、シグモイド関数では、重み付き和とバイアスの計算結果に応じて、\(0\) から \(1\) の間の値を出力します。</p>
<h3>3.1．具体例で計算してみる</h3>
<p>たとえば、重みとバイアスを次のように設定します。</p>
<p>$$<br />
w_1=1,\quad w_2=1,\quad b=-3<br />
$$</p>
<p>このとき、ニューロンの計算は \(z=x_1+x_2-3\) となります。</p>
<p>まず、入力が \(x_1=2,\ x_2=2\) の場合、ニューロンの出力は次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
z&#038;=2+2-3=1\\<br />
y&#038;=\sigma(1)=\frac{1}{1+e^{-1}}\approx0.731<br />
\end{aligned}<br />
$$</p>
<p>一方、入力が \(x_1=1,\ x_2=1\) の場合は、次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
z&#038;=1+1-3=-1\\<br />
y&#038;=\sigma(-1)=\frac{1}{1+e^1}\approx0.269<br />
\end{aligned}<br />
$$</p>
<p>このように、シグモイド関数を使うと、ニューロンは入力に応じて連続的な値を出力できます。</p>
<p>なお、出力が \(0\) から \(1\) の範囲にあるからといって、必ずしも正解である確率を表しているわけではありません。二値分類などでは確率として解釈することがありますが、その意味はモデルの設計や学習方法によって決まります。</p>
<h2>4．シグモイド関数を微分するとどうなるのか？</h2>
<p>ここからは、シグモイド関数を微分すると何がわかるのかを考えます。</p>
<p>前回の記事では、ステップ関数は境界以外で微分すると \(0\) になり、通常の勾配降下法による学習に適していないことを確認しました。</p>
<p>では、シグモイド関数を微分すると、どのようになるのでしょうか。</p>
<h3>4.1．シグモイド関数の導関数を求める</h3>
<p>シグモイド関数は、次の式で定義されます。</p>
<p>$$<br />
\sigma(x)=\frac{1}{1+e^{-x}}<br />
$$</p>
<p>これを微分してみましょう。まず、分数を指数の形で表します。</p>
<p>$$<br />
\sigma(x)=(1+e^{-x})^{-1}<br />
$$</p>
<p>合成関数の微分である連鎖律を使うと、次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
\sigma'(x)<br />
&#038;=-(1+e^{-x})^{-2}(-e^{-x})\\<br />
&#038;=\frac{e^{-x}}{(1+e^{-x})^2}<br />
\end{aligned}<br />
$$</p>
<p>ここで、この式を少し変形します。</p>
<p>$$<br />
\sigma'(x)<br />
=<br />
\frac{1}{1+e^{-x}}<br />
\left(<br />
1-\frac{1}{1+e^{-x}}<br />
\right)<br />
$$</p>
<p>シグモイド関数の定義を使うと、次のようになります。</p>
<p>$$<br />
\sigma'(x)=\sigma(x)(1-\sigma(x))<br />
$$</p>
<p>つまり、<strong>シグモイド関数の導関数は、シグモイド関数自身の出力を使って計算できる</strong>のです。この性質は、ニューラルネットワークの学習で勾配を計算するときにも役立ちます。</p>
<h3>4.2．導関数の値を確認する</h3>
<p>では、具体的な値を使って確認してみましょう。</p>
<p>入力が \(x=0\) のとき、\(\sigma(0)=0.5\) なので、</p>
<p>$$<br />
\sigma'(0)<br />
=<br />
0.5(1-0.5)<br />
=<br />
0.25<br />
$$</p>
<p>となります。</p>
<p>一方、入力が \(x=2\) のときは、\(\sigma(2)\approx0.881\) なので、</p>
<p>$$<br />
\sigma'(2)<br />
\approx<br />
0.881(1-0.881)<br />
\approx0.105<br />
$$</p>
<p>となります。同様に、\(x=-2\) のときも、導関数の値は約 \(0.105\) です。</p>
<p>このように、シグモイド関数の導関数は、入力が \(0\) の付近で大きく、入力の絶対値が大きくなるほど小さくなります。また、導関数の最大値は \(x=0\) のときの \(0.25\) です。</p>
<h2>5．なぜシグモイド関数は勾配を使った学習に利用できるのか？</h2>
<p>ニューラルネットワークの学習では、損失を小さくするように、重みやバイアスを更新します。</p>
<p>前回の記事と同じように、1つの入力を持つニューロンを考えます。</p>
<p>$$<br />
z=wx+b,\quad y=\sigma(z)<br />
$$</p>
<p>損失を \(L\) とすると、連鎖律を使って、損失を重みで微分した値は次のように表せます。</p>
<p>$$<br />
\frac{\partial L}{\partial w}<br />
=<br />
\frac{\partial L}{\partial y}<br />
\frac{\partial y}{\partial z}<br />
\frac{\partial z}{\partial w}<br />
$$</p>
<p>ここで、\(\frac{\partial y}{\partial z}=\sigma'(z)\)、\(\frac{\partial z}{\partial w}=x\) なので、</p>
<p>$$<br />
\frac{\partial L}{\partial w}<br />
=<br />
\frac{\partial L}{\partial y}<br />
\sigma'(z)x<br />
$$</p>
<p>となります。</p>
<p>ステップ関数では、境界以外で活性化関数の微分が \(0\) になりました。一方、シグモイド関数では、有限の入力に対して、</p>
<p>$$<br />
\sigma'(z)=\sigma(z)(1-\sigma(z))\gt0<br />
$$</p>
<p>です。</p>
<p>そのため、ステップ関数のように、境界以外のすべての点で活性化関数の微分が \(0\) になる問題を避けられます。</p>
<p>ただし、これは重みの勾配が必ず \(0\) 以外になるという意味ではありません。勾配は、入力 \(x\) や損失関数の微分にも依存します。</p>
<h3>5.1．具体例で重みの更新を確認する</h3>
<p>たとえば、入力を \(x=1\)、重みを \(w=-1\)、バイアスを \(b=0\) とします。このとき、ニューロンの出力は次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
z&#038;=wx+b=-1\\<br />
y&#038;=\sigma(-1)\approx0.269<br />
\end{aligned}<br />
$$</p>
<p>正解を \(t=1\) とし、損失には二乗誤差を使います。</p>
<p>$$<br />
L=\frac12(y-t)^2<br />
$$</p>
<p>この損失を出力 \(y\) で微分すると、次のようになります。</p>
<p>$$<br />
\frac{\partial L}{\partial y}=y-t<br />
$$</p>
<p>また、シグモイド関数の導関数は、</p>
<p>$$<br />
\sigma'(-1)<br />
=<br />
\sigma(-1)(1-\sigma(-1))<br />
\approx0.197<br />
$$</p>
<p>です。</p>
<p>したがって、重みの勾配は次のようになります。</p>
<p>$$<br />
\begin{aligned}<br />
\frac{\partial L}{\partial w}<br />
&#038;=(y-t)\sigma'(z)x\\<br />
&#038;\approx(0.269-1)\times0.197\times1\\<br />
&#038;\approx-0.144<br />
\end{aligned}<br />
$$</p>
<p>勾配降下法では、学習率を \(\eta\) とすると、重みを次のように更新します。</p>
<p>$$<br />
w_{\mathrm{new}}<br />
=<br />
w-\eta\frac{\partial L}{\partial w}<br />
$$</p>
<p>たとえば、学習率を \(\eta=0.1\) とすると、</p>
<p>$$<br />
\begin{aligned}<br />
w_{\mathrm{new}}<br />
&#038;\approx-1-0.1(-0.144)\\<br />
&#038;=-0.9856<br />
\end{aligned}<br />
$$</p>
<p>となります。</p>
<p>つまり、ステップ関数では更新できなかったこの例でも、シグモイド関数を使うことで、勾配に基づいて重みを更新できます。</p>
<p>なお、ここでは重みの更新だけを確認していますが、バイアスについても同様に勾配を計算できます。</p>
<h2>6．シグモイド関数にも問題はあるのか？</h2>
<p>ここまで見てきたように、シグモイド関数は滑らかに変化し、すべての実数で微分できます。</p>
<p>しかし、シグモイド関数を使えば、ニューラルネットワークの学習に関する問題がすべて解決するわけではありません。</p>
<h3>6.1．入力の絶対値が大きいと勾配が小さくなる</h3>
<p>シグモイド関数の導関数は、次の式で表されます。</p>
<p>$$<br />
\sigma'(x)=\sigma(x)(1-\sigma(x))<br />
$$</p>
<p>この導関数は、\(x=0\) のときに最大値 \(0.25\) を取ります。</p>
<p>一方、入力が正の方向に大きくなると、\(\sigma(x)\) は \(1\) に近づくため、\(1-\sigma(x)\) は \(0\) に近づきます。</p>
<p>また、入力が負の方向に小さくなると、\(\sigma(x)\) 自体が \(0\) に近づきます。</p>
<p>その結果、どちらの場合も導関数は \(0\) に近づきます。</p>
<p><img loading="lazy" decoding="async" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-03.webp" alt="シグモイド関数と導関数の比較" width="800" height="367" class="alignnone size-full wp-image-1644" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-03.webp 800w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-03-500x229.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-03-300x138.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/sigmoid-function-03-768x352.webp 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>左側のグラフを見ると、入力の絶対値が大きい領域では、シグモイド関数の出力がほとんど変化していません。このような状態を<strong>飽和</strong>と呼びます。</p>
<p>右側のグラフでは、導関数が \(x=0\) で最大値 \(0.25\) を取り、入力の絶対値が大きくなるにつれて \(0\) に近づいています。</p>
<p>つまり、シグモイド関数は微分できるものの、飽和領域では勾配が非常に小さくなるのです。</p>
<h3>6.2．勾配消失問題との関係</h3>
<p>ニューラルネットワークでは、誤差逆伝播法を使って、各層の重みの勾配を計算します。この計算では、活性化関数の微分が関係します。</p>
<p>シグモイド関数の導関数は最大でも \(0.25\) であり、入力が飽和領域に入ると、さらに小さくなります。</p>
<p>そのため、深いニューラルネットワークでは、勾配を逆向きに伝える過程で値が小さくなり、前の層の重みが更新されにくくなる場合があります。</p>
<p>これが、<strong>勾配消失問題</strong>につながる要因の1つです。</p>
<p>ただし、ネットワーク全体の勾配は重み行列などにも依存するため、シグモイド関数を使うと必ず勾配が消失するわけではありません。</p>
<p>この問題は、後の「勾配消失問題」の記事で詳しく説明します。</p>
<h2>7．シグモイド関数は現在どのように使われているのか？</h2>
<p>シグモイド関数は、かつてニューラルネットワークの中間層でも広く使われていました。しかし、深いネットワークでは勾配消失問題が起こりやすいことなどから、現在は中間層の活性化関数としてReLUなどが広く使われています。</p>
<p>一方、シグモイド関数が使われなくなったわけではありません。</p>
<p>たとえば、二値分類では、出力層でシグモイド関数を使い、1つの値を \(0\) から \(1\) の範囲に変換することがあります。</p>
<p>また、LSTMなどのゲート機構でも、情報をどの程度通すかを調整するためにシグモイド関数が使われます。</p>
<p>つまり、シグモイド関数は、すべての層に適しているわけではありませんが、<strong>出力を \(0\) から \(1\) の範囲に変換したい場面では、現在も重要な役割を持つ関数</strong>です。</p>
<h2>まとめ</h2>
<p>今回、見てきたことをまとめます。</p>
<ul>
<li>シグモイド関数は、入力を \(0\) から \(1\) の範囲に滑らかに変換するS字型の関数である</li>
<li>入力が \(0\) のとき出力は \(0.5\) になり、入力の絶対値が大きくなると出力は \(0\) または \(1\) に近づく</li>
<li>ステップ関数とは異なり、すべての実数で微分できる</li>
<li>導関数は \(\sigma'(x)=\sigma(x)(1-\sigma(x))\) と表せる</li>
<li>有限の入力では導関数が正になるため、勾配を利用した学習に使用できる</li>
<li>ただし、入力が飽和領域に入ると導関数が小さくなり、勾配消失問題につながる場合がある</li>
<li>現在も二値分類の出力層やLSTMなどのゲート機構で利用されている</li>
</ul>
<p class="is-style-info-box has-box-style">シグモイド関数は、<strong>入力を \(0\) から \(1\) の範囲に滑らかに変換し、微分を使って勾配を計算できる活性化関数</strong>です。ただし、入力の絶対値が大きい領域では勾配が小さくなるという限界もあります。</p>
<p>今回は、シグモイド関数の仕組みと、微分がニューラルネットワークの学習にどのように関係するのかを確認しました。</p>
<p>次回は、シグモイド関数と似たS字型の形状を持ちながら、出力が \(-1\) から \(1\) の範囲になるtanh関数について考えます。</p>
<h3>関連記事</h3>
<div style="margin-bottom: 0.6em;">&#x25b6; 前回：ステップ関数とは何か？｜なぜニューラルネットワークの学習に向かないのか</div>

<a href="https://webstation-plus.com/step-function/" title="ステップ関数とは何か？｜なぜニューラルネットワークの学習に向かないのか" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/step-function-00a-320x180.webp" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/step-function-00a-320x180.webp 320w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/step-function-00a-500x281.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/step-function-00a-800x450.webp 800w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/step-function-00a-300x169.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/step-function-00a-768x432.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/step-function-00a-1536x864.webp 1536w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/step-function-00a-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/step-function-00a-640x360.webp 640w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/step-function-00a-752x423.webp 752w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/step-function-00a.webp 1672w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">ステップ関数とは何か？｜なぜニューラルネットワークの学習に向かないのか</div><div class="blogcard-snippet internal-blogcard-snippet">ステップ関数とは何か？入力を0か1に切り替える仕組みを、グラフとニューロンの計算例で解説します。微分するとほとんどの場所で0になる理由や、勾配降下法による学習に向かない理由を数式で確認し、シグモイド関数とのつながりも紹介します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://webstation-plus.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">webstation-plus.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.10.12</div></div></div></div></a>
<div style="margin-bottom: 0.6em;">&#x25b6; 関連：合成関数の微分とは何か？｜連鎖律が成り立つ理由を理解する</div>

<a href="https://webstation-plus.com/chain-rule/" title="合成関数の微分とは何か？｜連鎖律が成り立つ理由を理解する" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/chain-rule-00-320x180.webp" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/chain-rule-00-320x180.webp 320w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/chain-rule-00-500x281.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/chain-rule-00-300x169.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/chain-rule-00-768x432.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/chain-rule-00-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/chain-rule-00-640x360.webp 640w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/chain-rule-00-752x423.webp 752w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/chain-rule-00.webp 800w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">合成関数の微分とは何か？｜連鎖律が成り立つ理由を理解する</div><div class="blogcard-snippet internal-blogcard-snippet">合成関数の微分とは何か？連鎖律がなぜ成り立つのかを、変化率の連鎖と微分の定義から丁寧に解説します。入力・中間変数・出力の関係を図で理解し、具体的な計算例を通して連鎖律の使い方を学びます。AIの誤差逆伝播法とのつながりも紹介します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://webstation-plus.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">webstation-plus.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.10.19</div></div></div></div></a>
<div style="margin-bottom: 0.6em;">&#x25b6; 次回：tanh関数とは何か？｜シグモイド関数との違いと特徴</div>

<a href="https://webstation-plus.com/tanh-function/" title="tanh関数とは何か？｜シグモイド関数との違いと特徴" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-00-320x180.webp" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-00-320x180.webp 320w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-00-500x281.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-00-300x169.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-00-768x432.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-00-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-00-640x360.webp 640w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-00-752x423.webp 752w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/tanh-function-00.webp 800w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">tanh関数とは何か？｜シグモイド関数との違いと特徴</div><div class="blogcard-snippet internal-blogcard-snippet">tanh関数とは何か？シグモイド関数との違いを、グラフや計算例からわかりやすく解説。出力がゼロ中心となる特徴や、微分・勾配消失との関係、ニューラルネットワークの学習に与える影響まで理解します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://webstation-plus.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">webstation-plus.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.10.28</div></div></div></div></a>
<h3>シリーズ全体を理解する</h3>
<div style="margin-bottom: 0.6em;">&#x25b6; 活性化関数の基本をまとめて理解したい</div>
<p>（準備中）</p>
<h3>関連書籍</h3>
<p>ニューラルネットワークの活性化関数や学習の仕組みをさらに理解したい方には、次のような書籍もおすすめです。</p>

<a rel="noopener" href="https://link.amazon/B0e37VNmw" title="&#12476;&#12525;&#12363;&#12425;&#20316;&#12427;Deep Learning &#8213;Python&#12391;&#23398;&#12406;&#12487;&#12451;&#12540;&#12503;&#12521;&#12540;&#12491;&#12531;&#12464;&#12398;&#29702;&#35542;&#12392;&#23455;&#35013; | &#25998;&#34276; &#24247;&#27589; |&#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 loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Flink.amazon%2FB0e37VNmw?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#12476;&#12525;&#12363;&#12425;&#20316;&#12427;Deep Learning &#8213;Python&#12391;&#23398;&#12406;&#12487;&#12451;&#12540;&#12503;&#12521;&#12540;&#12491;&#12531;&#12464;&#12398;&#29702;&#35542;&#12392;&#23455;&#35013; | &#25998;&#34276; &#24247;&#27589; |&#26412; | &#36890;&#36009; | Amazon</div><div class="blogcard-snippet external-blogcard-snippet">Amazonで斎藤 康毅のゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装。アマゾンならポイント還元本が多数。斎藤 康毅作品ほか、お急ぎ便対象商品は当日お届けも可能。またゼロから作るDeep Lea...</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 loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://link.amazon/B0e37VNmw" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">link.amazon</div></div></div></div></a>

<a rel="noopener" href="https://link.amazon/B07ZRHYyB" title="Python&#12395;&#12424;&#12427;&#12487;&#12451;&#12540;&#12503;&#12521;&#12540;&#12491;&#12531;&#12464; (Compass Books&#12471;&#12522;&#12540;&#12474;) | Fran&#231;ois Chollet, &#24035;&#31840;&#24736;&#36628;, &#26666;&#24335;&#20250;&#31038;&#12463;&#12452;&#12540;&#12503; |&#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 loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Flink.amazon%2FB07ZRHYyB?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Python&#12395;&#12424;&#12427;&#12487;&#12451;&#12540;&#12503;&#12521;&#12540;&#12491;&#12531;&#12464; (Compass Books&#12471;&#12522;&#12540;&#12474;) | Fran&#231;ois Chollet, &#24035;&#31840;&#24736;&#36628;, &#26666;&#24335;&#20250;&#31038;&#12463;&#12452;&#12540;&#12503; |&#26412; | &#36890;&#36009; | Amazon</div><div class="blogcard-snippet external-blogcard-snippet">AmazonでFrançois Chollet, 巣籠悠輔, 株式会社クイープのPythonによるディープラーニング (Compass Booksシリーズ)。アマゾンならポイント還元本が多数。François Chollet, 巣籠悠輔, ...</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 loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://link.amazon/B07ZRHYyB" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">link.amazon</div></div></div></div></a>

<a rel="noopener" href="https://link.amazon/B0gdSluYn" title="&#29289;&#20307;&#12539;&#30011;&#20687;&#35469;&#35672;&#12392;&#26178;&#31995;&#21015;&#12487;&#12540;&#12479;&#20966;&#29702;&#20837;&#38272; [TensorFlow2/PyTorch&#23550;&#24540;&#31532;2&#29256;] NumPy/TensorFlow2(Keras)/PyTorch&#12395;&#12424;&#12427;&#23455;&#35013;&#12487;&#12451;&#12540;&#12503;&#12521;&#12540;&#12491;&#12531;&#12464; | &#12481;&#12540;&#12512;&#12539;&#12459;&#12523;&#12509; |&#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 loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Flink.amazon%2FB0gdSluYn?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#29289;&#20307;&#12539;&#30011;&#20687;&#35469;&#35672;&#12392;&#26178;&#31995;&#21015;&#12487;&#12540;&#12479;&#20966;&#29702;&#20837;&#38272; [TensorFlow2/PyTorch&#23550;&#24540;&#31532;2&#29256;] NumPy/TensorFlow2(Keras)/PyTorch&#12395;&#12424;&#12427;&#23455;&#35013;&#12487;&#12451;&#12540;&#12503;&#12521;&#12540;&#12491;&#12531;&#12464; | &#12481;&#12540;&#12512;&#12539;&#12459;&#12523;&#12509; |&#26412; | &#36890;&#36009; | Amazon</div><div class="blogcard-snippet external-blogcard-snippet">Amazonでチーム・カルポの物体・画像認識と時系列データ処理入門 NumPy/TensorFlow2(Keras)/PyTorchによる実装ディープラーニング。アマゾンならポイント還元本が多数。チーム・カルポ作品ほか、お急ぎ便対象商品は当...</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 loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://link.amazon/B0gdSluYn" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">link.amazon</div></div></div></div></a>
]]></content:encoded>
					
					<wfw:commentRss>https://webstation-plus.com/sigmoid-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Pythonのスコープとは？｜ローカル変数とグローバル変数の違い</title>
		<link>https://webstation-plus.com/python-scope/</link>
					<comments>https://webstation-plus.com/python-scope/#respond</comments>
		
		<dc:creator><![CDATA[toshi]]></dc:creator>
		<pubDate>Mon, 26 Oct 2026 22:30:33 +0000</pubDate>
				<category><![CDATA[ソフトウェア]]></category>
		<category><![CDATA[関数]]></category>
		<category><![CDATA[スコープ]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[変数]]></category>
		<guid isPermaLink="false">https://webstation-plus.com/?p=1595</guid>

					<description><![CDATA[はじめに Pythonでは、関数の中で定義した変数を、関数の外から使おうとするとエラーになることがあります。一方、関数の外で定義した変数は、関数の中から参照できる場合があります。 例えば、次のコードを見てください。 de [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>はじめに</h2>
<p>Pythonでは、関数の中で定義した変数を、関数の外から使おうとするとエラーになることがあります。一方、関数の外で定義した変数は、関数の中から参照できる場合があります。</p>
<p>例えば、次のコードを見てください。</p>
<pre class="wp-block-code python"><code>def show_value():
    x = 10
    print(x)

show_value()
print(x)
</code></pre>
<p>実行すると、関数内では <code>10</code> が表示されますが、関数外の <code>print(x)</code> でエラーになります。</p>
<pre class="wp-block-code plaintext"><code>10
NameError: name 'x' is not defined
</code></pre>
<p>※エラー表示は、原因となった行などを省略しています。</p>
<p>なぜ、同じ名前の <code>x</code> なのに、関数の中と外で使える場所が違うのでしょうか。この違いを理解する鍵が、<strong>スコープ（scope）</strong>です。</p>
<p class="is-style-info-box has-box-style"><strong>スコープとは、プログラムの中で名前を参照できる範囲のことです。Pythonでは、名前がどのスコープに属するかによって、その名前を参照できる場所が変わります。</strong></p>
<p>この記事では、前回学んだ「変数と参照」の考え方を使いながら、ローカル変数とグローバル変数の違いを、コードと図で確認します。</p>
<h3>この記事でわかること</h3>
<p>この記事では、次の内容の理解を目指します。</p>
<ul>
<li>Pythonのスコープとは何か</li>
<li>ローカル変数とグローバル変数の違い</li>
<li>関数内で定義した変数を外から使えない理由</li>
<li>関数外の変数を関数内から参照できる理由</li>
<li>同じ名前の変数が関数内外にあるときの動作</li>
<li>関数内の代入で <code>UnboundLocalError</code> が起こる理由</li>
</ul>
<h2>1．Pythonのスコープとは何か？</h2>
<p>Pythonでは、変数はオブジェクトを参照する名前として扱われます。しかし、ある場所で名前を定義したからといって、プログラムのどこからでもその名前を使えるわけではありません。</p>
<p>例えば、次のコードを見てください。</p>
<pre class="wp-block-code python"><code>def greet():
    message = "Hello"
    print(message)

greet()
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>Hello
</code></pre>
<p><code>message</code> は関数 <code>greet()</code> の中で定義されています。この名前は関数内では参照できますが、関数外から直接参照することはできません。</p>
<pre class="wp-block-code python"><code>def greet():
    message = "Hello"

greet()
print(message)
</code></pre>
<p>実行すると、次のエラーが発生します。</p>
<pre class="wp-block-code plaintext"><code>NameError: name 'message' is not defined
</code></pre>
<p>これは、関数内で定義された名前 <code>message</code> が、関数外から名前を探すときの対象にならないためです。</p>
<p>この関係を図で確認してみましょう。</p>
<p><img loading="lazy" decoding="async" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-01.webp" alt="ローカルスコープとグローバルスコープ" width="800" height="408" class="alignnone size-full wp-image-1597" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-01.webp 800w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-01-500x255.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-01-300x153.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-01-768x392.webp 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>上の図では、<code>message</code> という名前が関数のローカルスコープに属しています。そのため、関数内では参照できますが、関数外から同じ名前を直接参照することはできません。</p>
<p>なお、この図は名前を参照できる範囲を模式的に表したものであり、実際のメモリ配置を示したものではありません。</p>
<p>ここで重要なのは、<strong>名前を参照できる範囲と、オブジェクトが存在する範囲は同じではない</strong>という点です。</p>
<p>例えば、関数がオブジェクトを戻り値として返せば、そのオブジェクトを関数外から利用できます。</p>
<pre class="wp-block-code python"><code>def greet():
    message = "Hello"
    return message

result = greet()
print(result)
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>Hello
</code></pre>
<p>この場合、関数外から <code>message</code> を直接参照しているわけではありません。関数が返したオブジェクトを、関数外の <code>result</code> という名前で参照しています。</p>
<p class="is-style-info-box has-box-style"><strong>スコープが制限するのは名前の参照であり、オブジェクトを関数の外へ渡すことではありません。</strong></p>
<h2>2．ローカル変数とは何か？</h2>
<p>関数のローカルスコープに属する変数を、ローカル変数と呼びます。</p>
<p>例えば、次のコードを見てください。</p>
<pre class="wp-block-code python"><code>def calculate():
    x = 10
    y = 20
    result = x + y
    print(result)

calculate()
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>30
</code></pre>
<p><code>x</code>、<code>y</code>、<code>result</code> は関数内で使われるローカル変数です。これらの名前は、通常、関数の外から直接参照できません。</p>
<h3>2-1．引数もローカル変数として扱われる</h3>
<p>前回の記事では、関数に引数を渡すと、関数内の引数名が渡されたオブジェクトを参照することを確認しました。</p>
<p>例えば、次のコードです。</p>
<pre class="wp-block-code python"><code>def show_number(x):
    y = x * 2
    print(y)

show_number(10)
show_number(20)
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>20
40
</code></pre>
<p>この例では、引数名 <code>x</code> も、関数内で定義した <code>y</code> もローカル変数です。</p>
<p>最初の呼び出しでは <code>x</code> が整数オブジェクト <code>10</code> を参照し、次の呼び出しでは、その呼び出しに対応する <code>x</code> が整数オブジェクト <code>20</code> を参照します。</p>
<p>関数を呼び出すたびに、その呼び出しに対応するローカルな名前の束縛が用意されます。つまり、<strong>関数の引数も、関数内で使われるローカルな名前の1つ</strong>です。</p>
<p>なお、関数の呼び出しが終了しても、そこで使われたオブジェクトが必ず消えるわけではありません。ほかの場所から参照されているオブジェクトは、引き続き利用できます。</p>
<h2>3．グローバル変数とは何か？</h2>
<p>モジュールのトップレベルで定義された変数を、グローバル変数と呼びます。</p>
<p>例えば、次のコードを見てください。</p>
<pre class="wp-block-code python"><code>message = "Hello"

def greet():
    print(message)

greet()
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>Hello
</code></pre>
<p><code>message</code> は関数の外で定義されたグローバル変数です。この例では、関数内に <code>message</code> というローカル変数がありません。そのため、Pythonはグローバルスコープにある <code>message</code> を見つけ、その名前が参照するオブジェクトを利用します。</p>
<p>この関係を図で確認してみましょう。</p>
<p><img loading="lazy" decoding="async" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-02.webp" alt="関数内からグローバル変数を参照する" width="800" height="408" class="alignnone size-full wp-image-1598" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-02.webp 800w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-02-500x255.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-02-300x153.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-02-768x392.webp 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>上の図では、関数内の <code>print(message)</code> が、グローバルスコープにある <code>message</code> を参照しています。関数内に新しいローカル変数 <code>message</code> が作られたという意味ではありません。</p>
<p><strong>ローカルスコープに対象の名前がない場合、外側のスコープにある名前を参照できることがあります。</strong></p>
<p>ただし、Pythonにはグローバルスコープ以外にも名前を探す場所があります。その探索順序については、次回の「LEGBルール」で詳しく解説します。</p>
<h3>3-1．グローバル変数はモジュール単位で管理される</h3>
<p>ここで注意したいのは、Pythonのグローバル変数は、厳密にはモジュール単位で管理されるという点です。</p>
<p>例えば、あるPythonファイルのトップレベルで定義した名前は、そのモジュールのグローバルスコープに属します。別のモジュールにも、同じ名前のグローバル変数を定義できます。</p>
<p>したがって、グローバル変数は「プログラム全体で必ず1つだけ存在する変数」という意味ではありません。</p>
<h2>4．関数内と関数外に同じ名前があるとどうなる？</h2>
<p>次のコードを見てください。</p>
<pre class="wp-block-code python"><code>x = 10

def show_value():
    x = 20
    print("関数内:", x)

show_value()
print("関数外:", x)
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>関数内: 20
関数外: 10
</code></pre>
<p>関数内では <code>20</code>、関数外では <code>10</code> が表示されました。なぜでしょうか。</p>
<p>関数内の <code>x = 20</code> はローカル変数 <code>x</code> への代入です。一方、関数外の <code>x = 10</code> はグローバル変数 <code>x</code> への代入です。</p>
<p>同じ <code>x</code> という名前でも、異なるスコープに属しているため、別々の名前として扱われます。</p>
<p>この関係を図で確認してみましょう。</p>
<p><img loading="lazy" decoding="async" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-03.webp" alt="同じ名前のローカル変数とグローバル変数" width="800" height="406" class="alignnone size-full wp-image-1599" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-03.webp 800w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-03-500x254.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-03-300x152.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-03-768x390.webp 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>上の図では、グローバルスコープの <code>x</code> とローカルスコープの <code>x</code> が、それぞれ別の整数オブジェクトを参照しています。</p>
<p>関数内で <code>x</code> を参照するとローカル変数 <code>x</code> が使われ、関数外ではグローバル変数 <code>x</code> が使われます。</p>
<p>このように、内側のスコープに同じ名前があることで、外側の名前が隠されることを<strong>シャドーイング（shadowing）</strong>と呼びます。ただし、外側の変数が削除されたり、参照先のオブジェクトが変更されたりするわけではありません。</p>
<p class="is-style-info-box has-box-style"><strong>同じ名前であっても、属するスコープが異なれば、別の名前の束縛として扱われます。</strong></p>
<h2>5．関数内でグローバル変数に代入しようとするとどうなる？</h2>
<p>ここまでを見ると、関数内からグローバル変数を参照できるなら、その名前に代入することもできそうに思えるかもしれません。</p>
<p>しかし、次のコードはエラーになります。</p>
<pre class="wp-block-code python"><code>x = 10

def change_value():
    x = x + 1
    print(x)

change_value()
</code></pre>
<p>実行すると、次のようなエラーが発生します。</p>
<pre class="wp-block-code plaintext"><code>UnboundLocalError: cannot access local variable 'x' where it is not associated with a value
</code></pre>
<p>※エラー表示は、原因となった行などを省略しています。</p>
<p>関数外には <code>x = 10</code> があるのに、なぜエラーになるのでしょうか。</p>
<h3>5-1．Pythonは関数内の代入を見てローカル変数を判断する</h3>
<p>Pythonでは、関数内に名前への代入がある場合、<code>global</code> や <code>nonlocal</code> などの宣言がなければ、その名前は原則としてローカル変数として扱われます。</p>
<p>先ほどのコードには、次の代入があります。</p>
<pre class="wp-block-code python"><code>x = x + 1
</code></pre>
<p>この文では、左辺の <code>x</code> に代入しています。そのため、Pythonは関数のコードを解析する段階で、この <code>x</code> をローカル変数として扱うことを決めます。</p>
<p>しかし、代入文を実行するときは、右辺の <code>x + 1</code> を先に評価する必要があります。この時点では、ローカル変数 <code>x</code> にまだ値が束縛されていません。そのため、<code>UnboundLocalError</code> が発生します。</p>
<p>処理の流れを整理すると、次のようになります。</p>
<ol>
<li>関数内に <code>x</code> への代入があるため、<code>x</code> はローカル変数として扱われる</li>
<li><code>x = x + 1</code> を実行すると、右辺の <code>x + 1</code> が先に評価される</li>
<li>ローカル変数 <code>x</code> には、まだ値が束縛されていない</li>
<li><code>UnboundLocalError</code> が発生する</li>
</ol>
<p>ここで重要なのは、<strong>Pythonがグローバル変数 <code>x</code> を探しに行って失敗したわけではない</strong>という点です。関数内の <code>x</code> がローカル変数として扱われ、値を束縛する前に参照したことがエラーの原因です。</p>
<h3>5-2．必要な値を引数として渡す方法</h3>
<p>このような場合、必要な値を引数として渡し、結果を戻り値で受け取る方法があります。</p>
<pre class="wp-block-code python"><code>def increment(x):
    return x + 1

x = 10
x = increment(x)

print(x)
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>11
</code></pre>
<p>このコードでは、関数 <code>increment()</code> が引数 <code>x</code> を受け取り、<code>x + 1</code> の結果を返します。関数外では、戻り値をグローバル変数 <code>x</code> に再代入しています。</p>
<p>この方法なら、関数内でグローバル変数を直接再代入する必要がありません。</p>
<p>なお、Pythonには関数内からグローバル変数への代入を可能にする <code>global</code> という構文もあります。ただし、その詳しい仕組みは別の記事「Pythonのglobalとnonlocalの違いとは？｜名前の束縛を変更する仕組み」で解説します。</p>
<h2>6．ローカル変数とグローバル変数の違いを整理する</h2>
<p>ここまでの内容を表にまとめます。</p>
<table class="standard-table">
<thead>
<tr>
<th>比較項目</th>
<th>ローカル変数</th>
<th>グローバル変数</th>
</tr>
</thead>
<tbody>
<tr>
<td>主な定義場所</td>
<td>関数内</td>
<td>モジュールのトップレベル</td>
</tr>
<tr>
<td>属するスコープ</td>
<td>ローカルスコープ</td>
<td>グローバルスコープ</td>
</tr>
<tr>
<td>関数内からの参照</td>
<td>値が束縛されていればできる</td>
<td>同名のローカル変数などがなければできる</td>
</tr>
<tr>
<td>関数外からの直接参照</td>
<td>通常はできない</td>
<td>同じモジュール内でできる</td>
</tr>
<tr>
<td>関数内からの再代入</td>
<td>通常の代入でできる</td>
<td><code>global</code> 宣言が必要</td>
</tr>
</tbody>
</table>
<p>重要なのは、ローカル変数とグローバル変数が、異なる種類のオブジェクトを表しているわけではないことです。</p>
<p>どちらも、オブジェクトを参照する名前です。違うのは、その名前がどのスコープに属し、どこから参照できるかという点です。</p>
<h2>7．スコープを意識すると何がよいのか？</h2>
<p>スコープを理解すると、関数の動作を予測しやすくなります。特に、関数が外側の変数に依存しているかどうかを意識することが大切です。</p>
<p>例えば、次の関数を見てください。</p>
<pre class="wp-block-code python"><code>tax_rate = 0.1

def calculate_tax(price):
    return price * tax_rate

print(calculate_tax(1000))
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>100.0
</code></pre>
<p>この関数は、引数 <code>price</code> だけでなく、外側で定義された <code>tax_rate</code> にも依存しています。</p>
<p>一方、次のように書くこともできます。</p>
<pre class="wp-block-code python"><code>def calculate_tax(price, tax_rate):
    return price * tax_rate

print(calculate_tax(1000, 0.1))
</code></pre>
<p>実行結果は同じです。</p>
<pre class="wp-block-code plaintext"><code>100.0
</code></pre>
<p>後者では、計算に必要な値が引数として明示されています。このようにすると、関数がどの値を使って計算するのかがわかりやすくなり、テストや再利用もしやすくなります。</p>
<p>もちろん、グローバル変数を使うことが常に悪いわけではありません。ただし、変更される可能性のある外部の状態に関数が強く依存すると、動作を追いにくくなる場合があります。</p>
<p><strong>関数に必要な値を引数として渡し、結果を戻り値で受け取る設計は、意図しない依存関係を減らす基本的な方法の1つです。</strong></p>
<h2>まとめ</h2>
<p>今回は、Pythonのスコープと、ローカル変数・グローバル変数の違いを確認しました。重要なポイントを整理します。</p>
<ul>
<li>スコープとは、名前を参照できる範囲のこと</li>
<li>関数内のローカル変数は、通常、関数外から直接参照できない</li>
<li>関数の引数もローカル変数として扱われる</li>
<li>関数内からグローバル変数を参照できる場合がある</li>
<li>同じ名前でも、異なるスコープに属していれば別の名前として扱われる</li>
<li>関数内に代入がある名前は、原則としてローカル変数として扱われる</li>
<li>必要な値を引数で受け取り、戻り値を返すと、外部への依存を減らしやすい</li>
</ul>
<p class="is-style-info-box has-box-style"><strong>Pythonのスコープを理解する鍵は、「オブジェクトの参照」と「名前を探す場所」を区別することです。</strong></p>
<p>前回の記事では、関数に引数を渡したとき、関数内の引数名が同じオブジェクトを参照することを確認しました。今回の記事では、さらに、その名前がどの範囲で使えるのかを確認しました。</p>
<p>次回は、Pythonが名前を探す順序を決める「LEGBルール」を解説します。ローカルスコープとグローバルスコープに加えて、関数を入れ子にした場合のスコープや組み込みの名前を扱います。</p>
<h3>関連記事</h3>
<div style="margin-bottom: 0.6em;">&#x25b6; 前回：Pythonの関数の引数はどう渡される？｜変数と参照から理解する</div>

<a href="https://webstation-plus.com/python-function-argument/" title="Pythonの関数の引数はどう渡される？｜変数と参照から理解する" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-00-320x180.webp" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-00-320x180.webp 320w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-00-500x281.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-00-300x169.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-00-768x432.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-00-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-00-640x360.webp 640w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-00-752x423.webp 752w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-00.webp 800w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Pythonの関数の引数はどう渡される？｜変数と参照から理解する</div><div class="blogcard-snippet internal-blogcard-snippet">Pythonの関数の引数は値渡し？参照渡し？変数とオブジェクトの参照関係を図とコードで解説。整数を再代入しても呼び出し元が変わらず、リストを変更すると影響する理由を、Pythonの仕組みから理解します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://webstation-plus.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">webstation-plus.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.10.26</div></div></div></div></a>
<div style="margin-bottom: 0.6em;">&#x25b6; 次回：PythonのLEGBルールとは？｜変数はどこから探されるのか</div>
<p>（準備中）</p>
<h3>Part 2：Pythonの関数とスコープをまとめて理解する</h3>
<div style="margin-bottom: 0.6em;">&#x25b6; Pythonの関数とスコープを理解する｜引数・LEGB・クロージャ</div>
<p>（準備中）</p>
<h3>関連書籍</h3>
<p>Pythonのスコープや関数の仕組みをさらに学びたい人には『入門 Python 3』もおすすめです。基本的な文法から関数、名前空間などを確認したいときに役立ちます。</p>

<a rel="noopener" href="https://link.amazon/B04nm1wwD" title="Amazon.co.jp" 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 loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Flink.amazon%2FB04nm1wwD?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Amazon.co.jp</div><div class="blogcard-snippet external-blogcard-snippet"></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 loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://link.amazon/B04nm1wwD" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">link.amazon</div></div></div></div></a>
]]></content:encoded>
					
					<wfw:commentRss>https://webstation-plus.com/python-scope/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Pythonの関数の引数はどう渡される？｜変数と参照から理解する</title>
		<link>https://webstation-plus.com/python-function-argument/</link>
					<comments>https://webstation-plus.com/python-function-argument/#respond</comments>
		
		<dc:creator><![CDATA[toshi]]></dc:creator>
		<pubDate>Mon, 26 Oct 2026 11:00:24 +0000</pubDate>
				<category><![CDATA[ソフトウェア]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[変数]]></category>
		<category><![CDATA[関数]]></category>
		<guid isPermaLink="false">https://webstation-plus.com/?p=1584</guid>

					<description><![CDATA[はじめに Pythonで関数に変数を渡したとき、関数の中で値を変更すると、呼び出し元にも影響するのでしょうか。 まずは、整数とリストを使った次のコードを見てください。 def change_number(x): x =  [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>はじめに</h2>
<p>Pythonで関数に変数を渡したとき、関数の中で値を変更すると、呼び出し元にも影響するのでしょうか。</p>
<p>まずは、整数とリストを使った次のコードを見てください。</p>
<pre class="wp-block-code python"><code>def change_number(x):
    x = 20

def change_list(items):
    items.append(30)

a = 10
numbers = [10, 20]

change_number(a)
change_list(numbers)

print(a)
print(numbers)
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>10
[10, 20, 30]
</code></pre>
<p>整数の <code>a</code> は変わらないのに、リストの <code>numbers</code> には <code>30</code> が追加されました。同じように関数へ引数を渡したのに、なぜ結果が違うのでしょうか。</p>
<p>この違いを理解する鍵は、Pythonの変数がオブジェクトを参照する名前であること、そして「名前への再代入」と「オブジェクト自体の変更」が異なることです。</p>
<p class="is-style-info-box has-box-style"><strong>Pythonでは、引数として渡したオブジェクトへの参照が、関数内の引数名に束縛されます。</strong>関数内で何を操作するかによって、呼び出し元への影響が変わります。</p>
<p>この記事では、変数と参照の考え方を使って、関数の引数がどのように渡されるのかを順番に確認します。</p>
<h3>この記事でわかること</h3>
<p>この記事では、次の内容の理解を目指します。</p>
<ul>
<li>Pythonの引数渡しが「値渡し」「参照渡し」とどう違うのか</li>
<li>関数を呼び出すと、引数名とオブジェクトの間に何が起こるのか</li>
<li>整数を関数内で再代入しても、呼び出し元が変わらない理由</li>
<li>リストを関数内で変更すると、呼び出し元にも影響する理由</li>
<li>リストの変更と再代入の違い、元のデータを守る方法</li>
</ul>
<h2>1．Pythonの引数は値渡し？参照渡し？</h2>
<p>関数の引数の渡し方は、プログラミング言語によって異なります。一般に「値渡し」は値をコピーして渡す方式、「参照渡し」は呼び出し元の変数に対して関数側から代入できる方式として説明されます。</p>
<p>Pythonでは、関数を呼び出すと、渡されたオブジェクトが関数内の引数名に束縛されます。この方式は「オブジェクト共有渡し（call by sharing）」と呼ばれることもあります。</p>
<p>ここでコピーされるのは、リストや整数などのオブジェクトそのものではありません。関数内には新しい引数名が用意され、その名前が呼び出し元から渡されたオブジェクトを参照します。</p>
<p>そのため、関数内で引数名を別のオブジェクトに再代入しても、呼び出し元の名前の参照先は変わりません。一方、共有しているミュータブルなオブジェクトを変更すれば、その変更は呼び出し元からも見えます。</p>
<p class="is-style-info-box has-box-style"><strong>引数名は関数内で使われる別の名前ですが、最初は呼び出し元と同じオブジェクトを参照します。</strong></p>
<h2>2．関数に引数を渡すと何が起こるのか？</h2>
<p>まず、最も単純な関数で確認しましょう。</p>
<pre class="wp-block-code python"><code>def show_value(x):
    print(x)

a = 10
show_value(a)
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>10
</code></pre>
<p><code>a = 10</code> によって、名前 <code>a</code> が整数オブジェクト <code>10</code> を参照します。次に <code>show_value(a)</code> を呼び出すと、関数内の引数名 <code>x</code> も、その同じ整数オブジェクトを参照します。</p>
<p>この関係を図で確認してみましょう。</p>
<p><img loading="lazy" decoding="async" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-01.webp" alt="関数に引数を渡したときの参照関係" width="800" height="452" class="alignnone size-full wp-image-1585" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-01.webp 800w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-01-500x283.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-01-300x170.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-01-768x434.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-01-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-01-320x180.webp 320w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>上の図では、<code>a</code> と <code>x</code> という2つの名前から、同じオブジェクト <code>10</code> へ矢印が伸びています。これは参照関係を説明する模式図であり、実際のメモリ配置を表すものではありません。</p>
<p>重要なのは、<code>a</code> と <code>x</code> が同じ名前になるわけではないことです。それぞれ独立した名前でありながら、同じオブジェクトを参照しています。</p>
<h3>2-1．<code>is</code> で同じオブジェクトか確認する</h3>
<p>オブジェクトの同一性は、<code>is</code> を使って確認できます。</p>
<pre class="wp-block-code python"><code>def check_reference(x):
    print(x is a)

a = [10, 20]
check_reference(a)
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>True
</code></pre>
<p><code>x is a</code> が <code>True</code> なのは、関数内の <code>x</code> と呼び出し元の <code>a</code> が同じリストオブジェクトを参照しているからです。この例では同一性の確認だけを目的として、関数内から外側の <code>a</code> を参照しています。</p>
<p><code>is</code> と <code>==</code> の違いについては、前の記事で詳しく解説しています。</p>
<div style="margin-bottom: 0.6em;">&#x25b6; 「値の等価性」と「オブジェクトの同一性」の違いを復習したい</div>

<a href="https://webstation-plus.com/python-equality-is/" title="Pythonの「==」と「is」の違いとは？｜値とオブジェクトの同一性を理解する" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-320x180.webp" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-320x180.webp 320w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-500x281.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-300x169.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-768x432.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-640x360.webp 640w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-752x423.webp 752w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00.webp 800w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Pythonの「==」と「is」の違いとは？｜値とオブジェクトの同一性を理解する</div><div class="blogcard-snippet internal-blogcard-snippet">Pythonの「==」と「is」は何が違うのでしょうか。値の等価性とオブジェクトの同一性を、変数の参照や代入・コピーの仕組みから図解。id()による確認やNoneとの比較など、具体例を使って初心者向けにわかりやすく解説します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://webstation-plus.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">webstation-plus.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.10.08</div></div></div></div></a>
<h2>3．整数を関数内で再代入しても呼び出し元が変わらない理由</h2>
<p>次は、関数内で引数名に別の値を代入してみましょう。</p>
<pre class="wp-block-code python"><code>def change_number(x):
    x = 20
    print("関数内:", x)

a = 10
change_number(a)
print("呼び出し元:", a)
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>関数内: 20
呼び出し元: 10
</code></pre>
<p>関数内では <code>x</code> が <code>20</code> になりましたが、呼び出し元の <code>a</code> は <code>10</code> のままです。</p>
<h3>3-1．再代入は名前の参照先を変更する</h3>
<p><code>x = 20</code> は、整数オブジェクト <code>10</code> の中身を <code>20</code> に書き換える操作ではありません。関数内の名前 <code>x</code> を、整数オブジェクト <code>20</code> に新しく束縛する操作です。</p>
<p>このとき、呼び出し元の <code>a</code> は引き続き <code>10</code> を参照しています。図で見ると、2つの名前の参照先が分かれます。</p>
<p><img loading="lazy" decoding="async" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-02.webp" alt="関数内で再代入したときの参照先の変化" width="800" height="452" class="alignnone size-full wp-image-1586" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-02.webp 800w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-02-500x283.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-02-300x170.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-02-768x434.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-02-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-02-320x180.webp 320w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>上の図では、再代入後の <code>x</code> だけが <code>20</code> を指しています。呼び出し元の <code>a</code> の矢印は変わりません。</p>
<p>整数はイミュータブル（変更不可能）なオブジェクトです。そのため、整数の値そのものを書き換えることはできません。ただし、ここで呼び出し元が変わらない直接の理由は、関数内の名前を再代入しても、呼び出し元の名前は再代入されないことです。</p>
<h2>4．リストを変更すると呼び出し元にも影響する理由</h2>
<p>次に、リストを関数に渡してみましょう。</p>
<pre class="wp-block-code python"><code>def add_item(items):
    items.append(30)

numbers = [10, 20]
add_item(numbers)
print(numbers)
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>[10, 20, 30]
</code></pre>
<p>今度は、呼び出し元の <code>numbers</code> にも <code>30</code> が追加されました。これは、<code>append()</code> が引数名を別のリストに再代入するのではなく、参照先のリストオブジェクトそのものを変更するためです。</p>
<p>リストはミュータブル（変更可能）なオブジェクトです。関数内の <code>items</code> と呼び出し元の <code>numbers</code> は同じリストを参照しているので、どちらから見ても変更後の内容になります。</p>
<p>この関係を図で確認してみましょう。</p>
<p><img loading="lazy" decoding="async" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-03.webp" alt="リストの内容を変更したときの参照関係" width="800" height="452" class="alignnone size-full wp-image-1587" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-03.webp 800w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-03-500x283.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-03-300x170.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-03-768x434.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-03-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-03-320x180.webp 320w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>上の図では、2つの名前の矢印は変わらず、参照先のリストの内容だけが変化しています。これが、呼び出し元からも変更が見える理由です。</p>
<p>整数のようなイミュータブルなオブジェクトと、リストのようなミュータブルなオブジェクトの違いについては、次の記事で詳しく解説しています。</p>
<div style="margin-bottom: 0.6em;">&#x25b6; Pythonのミュータブル・イミュータブルの違いを復習したい</div>

<a href="https://webstation-plus.com/mutable-immutable/" title="Pythonのミュータブル・イミュータブルとは？｜型ごとの違いを整理" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/mutable-immutable-00-320x180.webp" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/mutable-immutable-00-320x180.webp 320w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/mutable-immutable-00-500x281.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/mutable-immutable-00-300x169.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/mutable-immutable-00-768x432.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/mutable-immutable-00-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/mutable-immutable-00-640x360.webp 640w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/mutable-immutable-00-752x423.webp 752w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/mutable-immutable-00.webp 800w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Pythonのミュータブル・イミュータブルとは？｜型ごとの違いを整理</div><div class="blogcard-snippet internal-blogcard-snippet">Pythonのミュータブル・イミュータブルとは？list、dict、set、int、str、tupleなどの型ごとの違いを図解で解説します。再代入とオブジェクトの変更、タプル内のリストを変更できる理由、参照の共有との関係まで、初心者向けにわかりやすく説明します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://webstation-plus.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">webstation-plus.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.10.06</div></div></div></div></a>
<h3>4-1．要素への代入でも同じことが起こる</h3>
<p><code>append()</code> だけでなく、リストの要素を変更した場合も同様です。</p>
<pre class="wp-block-code python"><code>def change_first(items):
    items[0] = 99

numbers = [10, 20]
change_first(numbers)
print(numbers)
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>[99, 20]
</code></pre>
<p><code>items[0] = 99</code> は、<code>items</code> という名前の参照先を変更するのではなく、参照先のリストの先頭要素を変更します。そのため、呼び出し元のリストにも結果が反映されます。</p>
<h2>5．リストでも再代入すれば呼び出し元は変わらない</h2>
<p>ここまでの結果だけを見ると、整数は呼び出し元に影響せず、リストは影響するように思えるかもしれません。しかし、違いを決めているのは型だけではありません。</p>
<p>リストでも、関数内で引数名を再代入するだけなら、呼び出し元の参照先は変わりません。</p>
<pre class="wp-block-code python"><code>def change_list(items):
    items = [100, 200]
    print("関数内:", items)

numbers = [10, 20]
change_list(numbers)
print("呼び出し元:", numbers)
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>関数内: [100, 200]
呼び出し元: [10, 20]
</code></pre>
<p><code>items = [100, 200]</code> では、新しいリストオブジェクトが作られ、関数内の <code>items</code> がそのリストを参照するようになります。一方、<code>numbers</code> は元の <code>[10, 20]</code> を参照したままです。</p>
<p>つまり、整数でもリストでも、<strong>引数名への再代入は呼び出し元の名前を変更しません。</strong>リストの場合に呼び出し元へ影響するのは、共有しているリスト自体を変更したときです。</p>
<h2>6．引数の再代入とオブジェクトの変更を比較する</h2>
<p>ここまでの違いを整理してみましょう。</p>
<table class="standard-table">
<thead>
<tr>
<th>関数内の操作</th>
<th>起こること</th>
<th>呼び出し元への影響</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>x = 20</code></td>
<td>引数名を別の整数に再束縛</td>
<td>なし</td>
</tr>
<tr>
<td><code>items.append(30)</code></td>
<td>共有しているリストを変更</td>
<td>あり</td>
</tr>
<tr>
<td><code>items[0] = 99</code></td>
<td>共有しているリストの要素を変更</td>
<td>あり</td>
</tr>
<tr>
<td><code>items = [100, 200]</code></td>
<td>引数名を別のリストに再束縛</td>
<td>なし</td>
</tr>
</tbody>
</table>
<p>ここでの「影響なし」は、例に示した操作によって、呼び出し元の名前や元のオブジェクトが変更されないことを意味します。</p>
<p>この表からわかるように、<code>items</code> がリストを参照していても、操作が再代入なのかオブジェクトの変更なのかによって結果は異なります。</p>
<p class="is-style-info-box has-box-style"><strong>「ミュータブルだから必ず呼び出し元が変わる」のではありません。</strong>共有しているオブジェクトを変更したときに、その変更が呼び出し元からも見えます。</p>
<h2>7．呼び出し元のリストを変更したくない場合は？</h2>
<p>関数を作るときは、渡されたリストを直接変更してよいかどうかを意識することが大切です。意図しない変更を避けたい場合は、元のリストを変更しない処理を選べます。</p>
<p>例えば、<code>sort()</code> は元のリストを並べ替えます。</p>
<pre class="wp-block-code python"><code>def sort_numbers(items):
    items.sort()

numbers = [30, 10, 20]
sort_numbers(numbers)
print(numbers)
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>[10, 20, 30]
</code></pre>
<p>一方、<code>sorted()</code> は新しいリストを返すため、元のリストの並び順を変えずに結果を得られます。</p>
<pre class="wp-block-code python"><code>def sort_numbers(items):
    return sorted(items)

numbers = [30, 10, 20]
result = sort_numbers(numbers)

print("元のリスト:", numbers)
print("並べ替え結果:", result)
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>元のリスト: [30, 10, 20]
並べ替え結果: [10, 20, 30]
</code></pre>
<p>このように、関数が元のオブジェクトを変更するのか、新しいオブジェクトを返すのかを区別すると、予期しない動作を防ぎやすくなります。</p>
<p>また、<code>items.copy()</code> を使ってリストをコピーする方法もあります。ただし、これは浅いコピーであり、入れ子になったリストなどの内部オブジェクトは共有されることがあります。コピーの詳細は次の記事で解説しています。</p>
<div style="margin-bottom: 0.6em;">&#x25b6; Pythonの浅いコピーと深いコピーの違いを復習したい</div>

<a href="https://webstation-plus.com/python-copy/" title="Pythonの代入とコピーの違いとは？｜copyとdeepcopyを理解する" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-copy-00-320x180.webp" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-copy-00-320x180.webp 320w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-copy-00-500x281.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-copy-00-300x169.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-copy-00-768x432.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-copy-00-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-copy-00-640x360.webp 640w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-copy-00-752x423.webp 752w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-copy-00.webp 800w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Pythonの代入とコピーの違いとは？｜copyとdeepcopyを理解する</div><div class="blogcard-snippet internal-blogcard-snippet">Pythonの代入とコピーは何が違うのでしょうか。代入、浅いコピー、深いコピーの違いを、オブジェクトと参照の仕組みから図解。copyやdeepcopyの使い分けまで、具体例を使ってわかりやすく解説します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://webstation-plus.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">webstation-plus.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.10.07</div></div></div></div></a>
<h2>まとめ</h2>
<p>Pythonの関数に引数を渡したときの仕組みを、整数とリストの例で確認しました。今回のポイントを整理します。</p>
<ul>
<li>関数を呼び出すと、引数名は渡されたオブジェクトを参照する</li>
<li>関数内の引数名と呼び出し元の変数名は別の名前である</li>
<li>引数名に再代入しても、呼び出し元の名前の参照先は変わらない</li>
<li>共有しているミュータブルなオブジェクトを変更すると、呼び出し元からも変更が見える</li>
<li>呼び出し元のデータを変更したくない場合は、新しいオブジェクトを返す処理などを選ぶ</li>
</ul>
<p class="is-style-info-box has-box-style"><strong>Pythonの引数渡しを理解する鍵は、「名前の再束縛」と「オブジェクト自体の変更」を区別することです。</strong></p>
<p>これまで学んだ変数・参照・ミュータブル・イミュータブルの考え方は、関数の中でも同じように成り立ちます。</p>
<p>次回の記事では、関数内の名前と関数外の名前が、どの範囲で使えるのかを考えます。ローカル変数とグローバル変数の違いを理解することで、今回の「関数内の引数名は別の名前」という考え方をさらに深めていきます。</p>
<h3>関連記事</h3>
<div style="margin-bottom: 0.6em;">&#x25b6; 前の学習テーマ：Pythonの「==」と「is」の違いとは？｜値とオブジェクトの同一性を理解する</div>

<a href="https://webstation-plus.com/python-equality-is/" title="Pythonの「==」と「is」の違いとは？｜値とオブジェクトの同一性を理解する" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-320x180.webp" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-320x180.webp 320w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-500x281.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-300x169.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-768x432.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-640x360.webp 640w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-752x423.webp 752w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00.webp 800w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Pythonの「==」と「is」の違いとは？｜値とオブジェクトの同一性を理解する</div><div class="blogcard-snippet internal-blogcard-snippet">Pythonの「==」と「is」は何が違うのでしょうか。値の等価性とオブジェクトの同一性を、変数の参照や代入・コピーの仕組みから図解。id()による確認やNoneとの比較など、具体例を使って初心者向けにわかりやすく解説します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://webstation-plus.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">webstation-plus.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.10.08</div></div></div></div></a>
<div style="margin-bottom: 0.6em;">&#x25b6; 次回：Pythonのスコープとは？｜ローカル変数とグローバル変数の違い</div>

<a href="https://webstation-plus.com/python-scope/" title="Pythonのスコープとは？｜ローカル変数とグローバル変数の違い" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-00-320x180.webp" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-00-320x180.webp 320w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-00-500x281.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-00-300x169.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-00-768x432.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-00-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-00-640x360.webp 640w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-00-752x423.webp 752w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-scope-00.webp 800w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Pythonのスコープとは？｜ローカル変数とグローバル変数の違い</div><div class="blogcard-snippet internal-blogcard-snippet">Pythonのスコープとは何か？ローカル変数とグローバル変数の違いを、コードと図でわかりやすく解説します。関数内外で変数を参照できる範囲や、同じ名前の変数がある場合の動作、UnboundLocalErrorが発生する理由を、名前とオブジェクトの参照関係から理解します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://webstation-plus.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">webstation-plus.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.10.27</div></div></div></div></a>
<h3>Part 2：Pythonの関数とスコープをまとめて理解する</h3>
<div style="margin-bottom: 0.6em;">&#x25b6; Pythonの関数とスコープを理解する｜引数・LEGB・クロージャ</div>
<p>（準備中）</p>
<h3>関連書籍</h3>
<p>Pythonの関数やオブジェクトの仕組みをさらに学びたい人には『入門 Python 3』もおすすめです。基本的な文法から関数やデータ構造まで確認したいときに役立ちます。</p>

<a rel="noopener" href="https://link.amazon/B04nm1wwD" title="Amazon.co.jp" 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 loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Flink.amazon%2FB04nm1wwD?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Amazon.co.jp</div><div class="blogcard-snippet external-blogcard-snippet"></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 loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://link.amazon/B04nm1wwD" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">link.amazon</div></div></div></div></a>
]]></content:encoded>
					
					<wfw:commentRss>https://webstation-plus.com/python-function-argument/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Pythonの変数とオブジェクトの仕組みを理解する｜参照・ミュータブル・コピー・同一性</title>
		<link>https://webstation-plus.com/python-object-summary/</link>
					<comments>https://webstation-plus.com/python-object-summary/#respond</comments>
		
		<dc:creator><![CDATA[toshi]]></dc:creator>
		<pubDate>Sun, 25 Oct 2026 11:00:20 +0000</pubDate>
				<category><![CDATA[ソフトウェア]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://webstation-plus.com/?p=1570</guid>

					<description><![CDATA[はじめに Pythonを学んでいると、次のような疑問に出会うことがあります。 なぜ、別の変数からリストを変更すると元のリストも変わるのか？ なぜ、整数や文字列はリストのように変更できないのか？ なぜ、コピーしたはずのリス [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>はじめに</h2>
<p>Pythonを学んでいると、次のような疑問に出会うことがあります。</p>
<ul>
<li>なぜ、別の変数からリストを変更すると元のリストも変わるのか？</li>
<li>なぜ、整数や文字列はリストのように変更できないのか？</li>
<li>なぜ、コピーしたはずのリストを変更すると元のリストにも影響するのか？</li>
<li>なぜ、同じ値を持つのに <code>is</code> では <code>False</code> になるのか？</li>
</ul>
<p>これらは別々の問題に見えますが、共通する考え方があります。それが、<strong>「変数名はオブジェクトを参照する」</strong>という仕組みです。</p>
<p>Pythonでは、変数名とオブジェクトを分けて考えることで、代入や再代入、データの変更、コピー、比較などの動作を一貫して理解できます。</p>
<p class="is-style-info-box has-box-style"><strong>Pythonのデータの仕組みを理解するには、「どのオブジェクトを参照しているのか」「そのオブジェクトを変更できるのか」を考えることが重要です。</strong></p>
<p>この記事では、4つのテーマを振り返りながら、Pythonの変数とオブジェクトの仕組みを体系的に整理します。</p>
<h3>この記事でわかること</h3>
<ul>
<li>Pythonの変数名とオブジェクトの関係</li>
<li>ミュータブルとイミュータブルの違い</li>
<li>代入・浅いコピー・深いコピーの仕組み</li>
<li><code>==</code> と <code>is</code> の違い</li>
<li>4つの知識がどのようにつながっているのか</li>
</ul>
<h2>1．Pythonの変数とオブジェクトを理解するための全体像</h2>
<p>まず、このシリーズで学ぶ内容の関係を整理しましょう。</p>
<p>Pythonでは、変数名はオブジェクトを参照しています。たとえば、次のコードです。</p>
<pre class="wp-block-code python"><code>x = [1, 2, 3]
y = x
</code></pre>
<p>この場合、<code>x</code> と <code>y</code> は同じリストオブジェクトを参照しています。ここから、次の4つのテーマにつながります。</p>
<ul>
<li><strong>変数と参照：</strong>変数名はどのオブジェクトを参照しているのか？</li>
<li><strong>ミュータブル・イミュータブル：</strong>参照先のオブジェクトは変更できるのか？</li>
<li><strong>代入とコピー：</strong>オブジェクトは共有されるのか、それとも別に作られるのか？</li>
<li><strong>等価性と同一性：</strong>値が等しいことと、同じオブジェクトであることはどう違うのか？</li>
</ul>
<p><img loading="lazy" decoding="async" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-object-summary-01.webp" alt="Pythonの変数とオブジェクトの仕組み" width="800" height="538" class="alignnone size-full wp-image-1571" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-object-summary-01.webp 800w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-object-summary-01-500x336.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-object-summary-01-300x202.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-object-summary-01-768x516.webp 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p class="is-style-info-box has-box-style"><strong>変数と参照が基本になり、そこから可変性・コピー・同一性の理解につながります。</strong></p>
<h2>2．Pythonの変数は「箱」ではない？｜オブジェクトと参照を理解する</h2>
<p>最初に理解したいのが、変数名とオブジェクトの関係です。</p>
<p>Pythonの変数は「値を入れる箱」と説明されることがあります。しかし、Pythonの動作を正確に理解するには、<strong>変数名はオブジェクトを参照する名前</strong>と考えることが重要です。</p>
<p>たとえば、次のコードです。</p>
<pre class="wp-block-code python"><code>x = [1, 2, 3]
y = x

y.append(4)

print(x)
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>[1, 2, 3, 4]
</code></pre>
<p><code>y</code> を使ってリストを変更したのに、<code>x</code> からも変更後の内容が見えています。これは、<code>x</code> と <code>y</code> が別々のリストを持っているのではなく、同じ1つのリストオブジェクトを参照しているからです。</p>
<p class="is-style-info-box has-box-style"><strong>変数名とオブジェクトは別のものです。複数の変数名が同じオブジェクトを参照することがあります。</strong></p>
<p>次の記事では、オブジェクトの型・値・識別性や、代入・再代入・参照の共有を詳しく説明しています。</p>
<div style="margin-bottom: 0.6em;">&#x25b6; Pythonの変数は「箱」ではない？｜オブジェクトと参照を理解する</div>

<a href="https://webstation-plus.com/python-variable/" title="Pythonの変数は「箱」ではない？｜オブジェクトと参照を理解する" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-variable-00-320x180.webp" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-variable-00-320x180.webp 320w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-variable-00-500x281.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-variable-00-300x169.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-variable-00-768x432.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-variable-00-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-variable-00-640x360.webp 640w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-variable-00-752x423.webp 752w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-variable-00.webp 800w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Pythonの変数は「箱」ではない？｜オブジェクトと参照を理解する</div><div class="blogcard-snippet internal-blogcard-snippet">Pythonの変数は本当に「値を入れる箱」なのでしょうか。オブジェクトと参照の仕組みを図解しながら、代入や再代入、複数の変数が同じオブジェクトを参照する仕組みを解説します。リストを変更すると別の変数からも変更が見える理由も、具体的なコードでわかりやすく説明します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://webstation-plus.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">webstation-plus.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.10.06</div></div></div></div></a>
<h2>3．Pythonのミュータブル・イミュータブルとは？｜型ごとの違いを整理</h2>
<p>次に考えたいのが、参照先のオブジェクトを変更できるかどうかです。Pythonでは、オブジェクトを次の2つに分類できます。</p>
<ul>
<li><strong>ミュータブル（mutable）：</strong>同じオブジェクトのまま内容を変更できる</li>
<li><strong>イミュータブル（immutable）：</strong>作成されたオブジェクトの内容を変更できない</li>
</ul>
<p>たとえば、リストはミュータブルです。</p>
<pre class="wp-block-code python"><code>numbers = [1, 2, 3]
numbers.append(4)

print(numbers)
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>[1, 2, 3, 4]
</code></pre>
<p><code>append()</code> によって、同じリストオブジェクトの内容が変更されています。</p>
<p>一方、整数を表す <code>int</code> はイミュータブルです。<code>x = 10</code> の後に <code>x = 20</code> としても、整数オブジェクト <code>10</code> が変化するわけではなく、<code>x</code> の参照先が変わります。</p>
<p>代表的な型を整理すると、次のようになります。</p>
<table class="standard-table">
<thead>
<tr>
<th>分類</th>
<th>代表的な型</th>
</tr>
</thead>
<tbody>
<tr>
<td>ミュータブル</td>
<td><code>list</code>、<code>dict</code>、<code>set</code></td>
</tr>
<tr>
<td>イミュータブル</td>
<td><code>int</code>、<code>float</code>、<code>str</code>、<code>tuple</code></td>
</tr>
</tbody>
</table>
<p class="is-style-info-box has-box-style"><strong>ミュータブルとイミュータブルの違いは、変数名を変更できるかではなく、同じオブジェクトの内容を変更できるかです。</strong></p>
<p>次の記事では、代表的な型の違いや、イミュータブルなタプルが参照するリストを変更できる理由も説明しています。</p>
<div style="margin-bottom: 0.6em;">&#x25b6; Pythonのミュータブル・イミュータブルとは？｜型ごとの違いを整理</div>

<a href="https://webstation-plus.com/mutable-immutable/" title="Pythonのミュータブル・イミュータブルとは？｜型ごとの違いを整理" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/mutable-immutable-00-320x180.webp" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/mutable-immutable-00-320x180.webp 320w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/mutable-immutable-00-500x281.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/mutable-immutable-00-300x169.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/mutable-immutable-00-768x432.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/mutable-immutable-00-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/mutable-immutable-00-640x360.webp 640w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/mutable-immutable-00-752x423.webp 752w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/mutable-immutable-00.webp 800w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Pythonのミュータブル・イミュータブルとは？｜型ごとの違いを整理</div><div class="blogcard-snippet internal-blogcard-snippet">Pythonのミュータブル・イミュータブルとは？list、dict、set、int、str、tupleなどの型ごとの違いを図解で解説します。再代入とオブジェクトの変更、タプル内のリストを変更できる理由、参照の共有との関係まで、初心者向けにわかりやすく説明します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://webstation-plus.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">webstation-plus.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.10.06</div></div></div></div></a>
<h2>4．Pythonの代入とコピーの違いとは？｜copyとdeepcopyを理解する</h2>
<p>次に理解したいのが、代入とコピーの違いです。</p>
<p>Pythonでは、<code>y = x</code> と代入しても、新しいオブジェクトが自動的に作られるわけではありません。元のリストとは別のリストを作りたい場合には、<code>list.copy()</code> や <code>copy.deepcopy()</code> などを使います。</p>
<p>ただし、コピーには浅いコピーと深いコピーがあります。たとえば、次のコードです。</p>
<pre class="wp-block-code python"><code>x = [[1, 2], [3, 4]]
y = x.copy()

y[0].append(5)

print(x)
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>[[1, 2, 5], [3, 4]]
</code></pre>
<p>コピーしたにもかかわらず、元のリストからも変更後の内容が見えています。これは、<code>list.copy()</code> が浅いコピーだからです。外側のリストは新しく作られますが、内側のリストへの参照は共有されます。</p>
<p>一方、<code>copy.deepcopy()</code> は、内部のオブジェクトについても必要に応じて再帰的にコピーします。今回のような入れ子のリストでは、次の違いがあります。</p>
<table class="center-table">
<thead>
<tr>
<th>方法</th>
<th>外側のリスト</th>
<th>内側のリスト</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>y = x</code></td>
<td>共有</td>
<td>共有</td>
</tr>
<tr>
<td><code>y = x.copy()</code></td>
<td>別</td>
<td>共有</td>
</tr>
<tr>
<td><code>y = copy.deepcopy(x)</code></td>
<td>別</td>
<td>別</td>
</tr>
</tbody>
</table>
<p class="is-style-info-box has-box-style"><strong>代入とコピーを使い分けるときは、どのオブジェクトを共有し、どこから別のオブジェクトにしたいのかを考えます。</strong></p>
<p>次の記事では、浅いコピーと深いコピーの仕組みを図解し、外側と内側のリストを変更したときの違いも説明しています。</p>
<div style="margin-bottom: 0.6em;">&#x25b6; Pythonの代入とコピーの違いとは？｜copyとdeepcopyを理解する</div>

<a href="https://webstation-plus.com/python-copy/" title="Pythonの代入とコピーの違いとは？｜copyとdeepcopyを理解する" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-copy-00-320x180.webp" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-copy-00-320x180.webp 320w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-copy-00-500x281.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-copy-00-300x169.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-copy-00-768x432.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-copy-00-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-copy-00-640x360.webp 640w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-copy-00-752x423.webp 752w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-copy-00.webp 800w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Pythonの代入とコピーの違いとは？｜copyとdeepcopyを理解する</div><div class="blogcard-snippet internal-blogcard-snippet">Pythonの代入とコピーは何が違うのでしょうか。代入、浅いコピー、深いコピーの違いを、オブジェクトと参照の仕組みから図解。copyやdeepcopyの使い分けまで、具体例を使ってわかりやすく解説します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://webstation-plus.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">webstation-plus.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.10.07</div></div></div></div></a>
<h2>5．Pythonの「==」と「is」の違いとは？｜値とオブジェクトの同一性を理解する</h2>
<p>最後に理解したいのが、値の等価性とオブジェクトの同一性です。Pythonには、2つのオブジェクトを比較するために <code>==</code> と <code>is</code> があります。</p>
<ul>
<li><code>==</code>：値の等価性を比較する</li>
<li><code>is</code>：オブジェクトの同一性を比較する</li>
</ul>
<p>たとえば、次のコードです。</p>
<pre class="wp-block-code python"><code>x = [1, 2, 3]
y = [1, 2, 3]

print(x == y)
print(x is y)
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>True
False
</code></pre>
<p><code>x</code> と <code>y</code> が参照しているリストは、内容は同じですが、別のオブジェクトです。そのため、<code>==</code> では <code>True</code>、<code>is</code> では <code>False</code> になります。</p>
<p>なお、数値や文字列の値を比較するときは <code>==</code> を使います。また、<code>None</code> との比較には <code>is None</code> や <code>is not None</code> を使います。</p>
<p class="is-style-info-box has-box-style"><strong><code>==</code> は値の等価性、<code>is</code> はオブジェクトの同一性を比較します。</strong>何を比較したいのかによって使い分けることが重要です。</p>
<p>次の記事では、<code>id()</code> との関係や、同じオブジェクトでも <code>==</code> が <code>False</code> になる特殊な例も説明しています。</p>
<div style="margin-bottom: 0.6em;">&#x25b6; Pythonの「==」と「is」の違いとは？｜値とオブジェクトの同一性を理解する</div>

<a href="https://webstation-plus.com/python-equality-is/" title="Pythonの「==」と「is」の違いとは？｜値とオブジェクトの同一性を理解する" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-320x180.webp" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-320x180.webp 320w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-500x281.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-300x169.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-768x432.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-640x360.webp 640w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00-752x423.webp 752w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-equality-is-00.webp 800w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Pythonの「==」と「is」の違いとは？｜値とオブジェクトの同一性を理解する</div><div class="blogcard-snippet internal-blogcard-snippet">Pythonの「==」と「is」は何が違うのでしょうか。値の等価性とオブジェクトの同一性を、変数の参照や代入・コピーの仕組みから図解。id()による確認やNoneとの比較など、具体例を使って初心者向けにわかりやすく解説します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://webstation-plus.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">webstation-plus.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.10.08</div></div></div></div></a>
<h2>6．4つの知識を組み合わせると何がわかる？</h2>
<p>ここまで、変数と参照、ミュータブル・イミュータブル、代入とコピー、等価性と同一性について整理してきました。</p>
<p>これらの知識を組み合わせると、Pythonの動作を一貫して説明できます。たとえば、次のコードです。</p>
<pre class="wp-block-code python"><code>x = [[1, 2], [3, 4]]
y = x.copy()

print(x == y)
print(x is y)
print(x[0] is y[0])

y[0].append(5)

print(x)
print(y)
</code></pre>
<p>実行結果は次のようになります。</p>
<pre class="wp-block-code plaintext"><code>True
False
True
[[1, 2, 5], [3, 4]]
[[1, 2, 5], [3, 4]]
</code></pre>
<p>なぜ、このような結果になるのでしょうか。</p>
<p>まず、<code>y = x.copy()</code> によって浅いコピーが作られます。このとき、外側のリストは別のオブジェクトになりますが、内側のリストは共有されます。</p>
<p>そのため、比較結果は次のようになります。</p>
<ul>
<li><code>x == y</code> は、リストの内容が等しいため <code>True</code></li>
<li><code>x is y</code> は、外側のリストが別のオブジェクトなので <code>False</code></li>
<li><code>x[0] is y[0]</code> は、内側のリストが共有されているため <code>True</code></li>
</ul>
<p>さらに、内側のリストはミュータブルです。そのため、<code>y[0].append(5)</code> によって共有されている内側のリストが変更され、<code>x</code> と <code>y</code> の両方から変更後の内容が見えます。</p>
<p><img loading="lazy" decoding="async" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-object-summary-02.webp" alt="浅いコピーにおける参照・可変性・同一性の関係" width="800" height="524" class="alignnone size-full wp-image-1572" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-object-summary-02.webp 800w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-object-summary-02-500x328.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-object-summary-02-300x197.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-object-summary-02-768x503.webp 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>この例では、4つの知識がすべて関係しています。</p>
<ul>
<li><strong>変数と参照：</strong><code>x</code> と <code>y</code> はそれぞれリストを参照する</li>
<li><strong>ミュータブル：</strong>共有されている内側のリストを変更できる</li>
<li><strong>浅いコピー：</strong>外側は別、内側は共有される</li>
<li><strong>等価性と同一性：</strong><code>==</code> と <code>is</code> で異なる関係を確認できる</li>
</ul>
<p class="is-style-info-box has-box-style"><strong>Pythonの動作を理解するときは、「どのオブジェクトを参照しているか」「同じオブジェクトを共有しているか」「そのオブジェクトを変更できるか」を組み合わせて考えます。</strong></p>
<h2>まとめ</h2>
<p>今回は、Pythonの変数とオブジェクトの仕組みについて、4つの記事を通して整理しました。</p>
<ul>
<li>Pythonの変数名は、オブジェクトを参照する名前である</li>
<li>複数の変数名が同じオブジェクトを参照することがある</li>
<li>ミュータブルなオブジェクトは、同じオブジェクトのまま内容を変更できる</li>
<li>イミュータブルなオブジェクトは、作成後に内容を変更できない</li>
<li>代入はオブジェクトをコピーする操作ではない</li>
<li>浅いコピーでは、外側のオブジェクトを新しく作り、内部の参照先を共有する</li>
<li>深いコピーでは、内部のオブジェクトも必要に応じて再帰的にコピーする</li>
<li><code>==</code> は値の等価性、<code>is</code> はオブジェクトの同一性を比較する</li>
</ul>
<p class="is-style-info-box has-box-style"><strong>Pythonでは、変数名とオブジェクトを分けて考え、「どのオブジェクトを参照しているのか」「そのオブジェクトを変更できるのか」を意識することが重要です。</strong></p>
<p>この考え方は、Pythonの関数やクラスを理解するうえでも重要な土台になります。</p>
<h3>Part 1の個別記事一覧</h3>
<p>それぞれのテーマを詳しく学びたい場合は、次の記事を順番に読むのがおすすめです。</p>
<table class="standard-table">
<thead>
<tr>
<th>学習順</th>
<th>テーマ</th>
<th>個別記事</th>
</tr>
</thead>
<tbody>
<tr>
<td>①</td>
<td>変数と参照</td>
<td><a href="https://webstation-plus.com/python-variable/">Pythonの変数は「箱」ではない？</a></td>
</tr>
<tr>
<td>②</td>
<td>可変性</td>
<td><a href="https://webstation-plus.com/mutable-immutable/">ミュータブル・イミュータブルとは？</a></td>
</tr>
<tr>
<td>③</td>
<td>代入とコピー</td>
<td><a href="https://webstation-plus.com/python-copy/">代入とコピーの違いとは？</a></td>
</tr>
<tr>
<td>④</td>
<td>等価性と同一性</td>
<td><a href="https://webstation-plus.com/python-equality-is/">「==」と「is」の違いとは？</a></td>
</tr>
</tbody>
</table>
<h3>次に学ぶテーマ</h3>
<p>次のPart 2では、今回の知識を発展させて、<strong>Pythonの関数とスコープの仕組み</strong>を説明していきます。まずは、関数に引数がどのように渡されるのかを、変数と参照の関係から考えていきましょう。</p>
<div style="margin-bottom: 0.6em;">&#x25b6; Pythonの関数の引数はどう渡される？｜変数と参照から理解する</div>

<a href="https://webstation-plus.com/python-function-argument/" title="Pythonの関数の引数はどう渡される？｜変数と参照から理解する" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-00-320x180.webp" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-00-320x180.webp 320w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-00-500x281.webp 500w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-00-300x169.webp 300w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-00-768x432.webp 768w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-00-240x135.webp 240w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-00-640x360.webp 640w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-00-752x423.webp 752w, https://webstation-plus.com/wp/wp-content/uploads/2026/10/python-function-argument-00.webp 800w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Pythonの関数の引数はどう渡される？｜変数と参照から理解する</div><div class="blogcard-snippet internal-blogcard-snippet">Pythonの関数の引数は値渡し？参照渡し？変数とオブジェクトの参照関係を図とコードで解説。整数を再代入しても呼び出し元が変わらず、リストを変更すると影響する理由を、Pythonの仕組みから理解します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://webstation-plus.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">webstation-plus.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.10.26</div></div></div></div></a>
<h3>シリーズ全体を学ぶ</h3>
<div style="margin-bottom: 0.6em;">&#x25b6; Pythonの言語仕様をしくみから理解する</div>
<p>（準備中）</p>
<h3>関連書籍</h3>
<p>Pythonの文法だけでなく、オブジェクトやデータモデルなど、Pythonの仕組みをもう少し深く理解したい人には『入門 Python 3』もおすすめです。</p>

<a rel="noopener" href="https://link.amazon/B04nm1wwD" title="Amazon.co.jp" 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 loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Flink.amazon%2FB04nm1wwD?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Amazon.co.jp</div><div class="blogcard-snippet external-blogcard-snippet"></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 loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://link.amazon/B04nm1wwD" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">link.amazon</div></div></div></div></a>
]]></content:encoded>
					
					<wfw:commentRss>https://webstation-plus.com/python-object-summary/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>『呪術廻戦 0 東京都立呪術高等専門学校』感想｜自信は行動の先にある、乙骨憂太の成長物語</title>
		<link>https://webstation-plus.com/jujutsu-kaisen-0/</link>
					<comments>https://webstation-plus.com/jujutsu-kaisen-0/#respond</comments>
		
		<dc:creator><![CDATA[toshi]]></dc:creator>
		<pubDate>Sat, 24 Oct 2026 11:00:59 +0000</pubDate>
				<category><![CDATA[漫画]]></category>
		<guid isPermaLink="false">https://webstation-plus.com/?p=1535</guid>

					<description><![CDATA[おすすめ度： 『呪術廻戦 0 東京都立呪術高等専門学校』は、強い呪いに苦しむ乙骨憂太が、呪術高専で仲間たちと出会い、少しずつ成長していく物語だ。 乙骨には、幼い頃に亡くなった里香という少女の呪いがついている。その強大な力 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>おすすめ度：<span class="rating-star"><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star" aria-hidden="true"></span><span class="fa fa-star-half-o" aria-hidden="true"></span><span class="fa fa-star-o" aria-hidden="true"></span><span class="rating-number">3.5</span></span></p>
<p>『呪術廻戦 0 東京都立呪術高等専門学校』は、強い呪いに苦しむ乙骨憂太が、呪術高専で仲間たちと出会い、少しずつ成長していく物語だ。</p>
<p>乙骨には、幼い頃に亡くなった里香という少女の呪いがついている。その強大な力によって周囲の人を傷つけてしまうため、乙骨は他人と関わることを恐れていた。</p>
<p>しかし、呪術高専で五条悟や禪院真希たちと出会い、乙骨は少しずつ変わっていく。</p>
<p>この作品で最も心に残ったのは、真希が乙骨に伝えた言葉だった。</p>
<p><strong>自信がつくのを待つのではなく、まず目の前のことに向き合う。自信は、その先についてくるものなのだ。</strong></p>
<p>短い物語でありながら、心に響く言葉があり、乙骨の成長もしっかりと描かれている。また、乙骨と里香の関係や、五条と夏油の結末など、切なさを感じる場面も印象に残った。</p>
<p>本編につながる登場人物たちの過去を知ることができる点も面白く、0巻だけでも楽しめる作品だった。</p>
<p>※この記事は『呪術廻戦 0 東京都立呪術高等専門学校』を読んだ感想です。以下、結末を含む物語の展開に触れています。</p>
<h2>1．自信は行動した先についてくる</h2>
<p>この作品で最も心を動かされたのは、禪院真希が乙骨にかけた言葉だった。</p>
<p>乙骨は、里香の呪いによって周囲の人を傷つけてしまうことを恐れ、他人と関わることを避けようとしていた。呪術高専に入ってからも、自分に自信を持てず、何かにつけて迷ってしまう。</p>
<p>そんな乙骨が、真希とともに小学校での実習に向かう。しかし、二人は呪いに飲み込まれ、真希は呪具を失ってしまう。さらに、助けなければならない子供たちも危険な状況に置かれていた。</p>
<p>そこで真希は、乙骨に何のために呪術高専へ来たのかと問いかける。乙骨は、自信が欲しいのだと答える。</p>
<p>しかし、真希が伝えたのは、目の前のことに向き合わなければ何も始まらず、自信も周囲との関係も後からついてくるという考え方だった。</p>
<p>私は、この言葉がとても心に響いた。</p>
<p>自信がないから行動できない。失敗するかもしれないから、一歩を踏み出せない。そんな気持ちは理解できる。しかし、自信がつくまで待っていても、何も変わらないのではないだろうか。</p>
<p><strong>自信があるから行動できるのではなく、目の前のことに向き合い、行動することで自信が生まれていく。</strong></p>
<p>また、この場面で印象的なのは、真希が単に乙骨を励ましているわけではないことだ。</p>
<p>目の前には、助けを必要としている子供たちがいる。それなのに、自分に自信がないという理由で立ち止まっていては、誰も助けられない。真希の言葉には、そんな厳しさもある。</p>
<p>もちろん、乙骨が他人と関わることを恐れるのには理由がある。自分の意思とは関係なく里香の力が働き、周囲の人を傷つけてしまった経験があるからだ。</p>
<p>真希の言葉を受けた乙骨は、里香に力を貸してほしいと頼み、子供たちと真希を助ける。それまで恐れていた力を、今度は誰かを助けるために使う。</p>
<p>私は、この変化がよかった。</p>
<p>自分の弱さや不安にとらわれていた乙骨が、目の前の人を助けるために行動する。その姿に、真希の言葉の意味が表れていると思った。</p>
<h2>2．呪いに隠されていた乙骨と里香の関係</h2>
<p>乙骨と里香の関係も、この作品で印象に残った部分だ。</p>
<p>里香は、乙骨が幼い頃に結婚を約束した少女だった。しかし、事故によって亡くなってしまい、その後、強い呪いとなって乙骨につきまとうようになる。</p>
<p>乙骨は、里香に呪われていると思っていた。しかし、物語の最後に明らかになるのは、乙骨自身が里香を呪っていたという事実だった。</p>
<p>私は、この結末が印象的だった。</p>
<p>大切な人を失いたくないという気持ちは、誰にでも理解できるものだと思う。しかし、その思いがあまりにも強かったために、乙骨は里香をこの世につなぎとめてしまった。</p>
<p><strong>大切に思う気持ちが、相手を縛る呪いになってしまう。</strong></p>
<p>愛情と呪いが結びついているところに、この物語ならではの切なさを感じた。</p>
<p>そして、乙骨が里香との関係に向き合い、最後には彼女を解放する。</p>
<p>最初は自分の力を恐れ、他人との関わりを避けていた乙骨が、仲間を守るために戦い、最後には里香との関係にも決着をつける。</p>
<p>この一連の流れから、乙骨の成長が感じられた。</p>
<h2>3．短い物語に詰まった笑いと切なさ</h2>
<p>『呪術廻戦 0 東京都立呪術高等専門学校』は、乙骨の成長だけでなく、笑いや切なさも描かれているところが面白かった。</p>
<p>特に印象に残ったのは、狗巻棘の設定だ。</p>
<p>狗巻は、おにぎりの具でしか会話をしない。最初は変わった人物だと思ったが、その理由は、言葉に呪いの力が宿っているからだった。</p>
<p>何気ない言葉でも、相手に影響を与えてしまう可能性がある。そのため、普段から使う言葉を制限しているのだ。</p>
<p>私は、この設定が面白いと思った。</p>
<p><strong>単なる笑いの要素かと思っていたものに、きちんと理由があり、登場人物の個性と呪術の世界観が結びついているところがよかった。</strong></p>
<p>一方、物語の終盤では、夏油傑と五条悟の関係にも切なさを感じた。</p>
<p>夏油は、非術師を見下し、呪術師だけの世界を作ろうとしていた。そのために乙骨の持つ里香の力を奪おうとし、呪術高専に戦いを仕掛ける。</p>
<p>最後には乙骨に敗れ、かつての友人である五条によって命を落とす。</p>
<p>私は、この結末が切なかった。</p>
<p>夏油はなぜ、非術師をそこまで見下すようになったのだろうか。五条とは、かつてどのような関係だったのだろうか。</p>
<p>0巻だけでは詳しくわからない部分もあるが、最後に友人である五条が夏油の命を絶つという展開には、二人の間にある複雑な事情を感じた。</p>
<p>また、乙骨の過去や、真希、狗巻たちとの出会いを知ることで、本編に登場する人物への理解が深まるところも面白かった。</p>
<p>0巻だけでひとつの物語として楽しめる一方、本編とのつながりも感じられる作品だった。</p>
<h2>まとめ：目の前のことに向き合うことで変わっていく</h2>
<p>『呪術廻戦 0 東京都立呪術高等専門学校』は、乙骨憂太の成長を中心に、呪いと愛情、仲間との関係が描かれた作品だった。</p>
<p>特に心に残ったのは、真希が乙骨に伝えた考え方だ。</p>
<p><strong>自信がつくのを待っているだけでは、何も変わらない。まず目の前のことに向き合い、行動することが大切なのだ。</strong></p>
<p>自分の力を恐れていた乙骨が、仲間を助けるために行動し、少しずつ変わっていく。その姿が印象的だった。</p>
<p>また、乙骨と里香の関係が明らかになる結末や、五条と夏油の切ない関係も心に残った。</p>
<p>短い物語ながら、心に響く言葉と登場人物たちの魅力が詰まっており、本編とのつながりも楽しめる作品だった。</p>

<a rel="noopener" href="https://link.amazon/B05IoO2Lq" title="&#21610;&#34899;&#24315;&#25126; 0 &#26481;&#20140;&#37117;&#31435;&#21610;&#34899;&#39640;&#31561;&#23554;&#38272;&#23398;&#26657; (&#12472;&#12515;&#12531;&#12503;&#12467;&#12511;&#12483;&#12463;&#12473;) | &#33445;&#35211; &#19979;&#12293; |&#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 loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Flink.amazon%2FB05IoO2Lq?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#21610;&#34899;&#24315;&#25126; 0 &#26481;&#20140;&#37117;&#31435;&#21610;&#34899;&#39640;&#31561;&#23554;&#38272;&#23398;&#26657; (&#12472;&#12515;&#12531;&#12503;&#12467;&#12511;&#12483;&#12463;&#12473;) | &#33445;&#35211; &#19979;&#12293; |&#26412; | &#36890;&#36009; | Amazon</div><div class="blogcard-snippet external-blogcard-snippet">Amazonで芥見 下々の呪術廻戦 0 東京都立呪術高等専門学校 (ジャンプコミックス)。アマゾンならポイント還元本が多数。芥見 下々作品ほか、お急ぎ便対象商品は当日お届けも可能。また呪術廻戦 0 東京都立呪術高等専門学校 (ジャンプコミッ...</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 loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://link.amazon/B05IoO2Lq" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">link.amazon</div></div></div></div></a>
]]></content:encoded>
					
					<wfw:commentRss>https://webstation-plus.com/jujutsu-kaisen-0/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
