<?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>メサイア・ワークス</title>
	<atom:link href="http://www.messiahworks.com/feed" rel="self" type="application/rss+xml" />
	<link>https://www.messiahworks.com</link>
	<description>本とか料理とかコンピュータとか</description>
	<lastBuildDate>Tue, 02 Jun 2026 07:35:02 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>
	<item>
		<title>24時間営業のソルロンタン専門店、一龍別館＠赤坂。1980円は高い～！</title>
		<link>https://www.messiahworks.com/archives/33684</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 02 Jun 2026 07:35:02 +0000</pubDate>
				<category><![CDATA[ランチ(赤坂・溜池山王)]]></category>
		<guid isPermaLink="false">https://www.messiahworks.com/?p=33684</guid>

					<description><![CDATA[<p>24時間営業のソルロンタン専門店「赤坂一龍 別館」1980円は高い～！ 赤坂一龍 別館 実質的にメニューが一種類しかないので、店員さんは「ソルロンタンでいいですか？」しか言わない。 韓国料理定番の小皿料理パンチャン サク <a class="more-link" href="https://www.messiahworks.com/archives/33684">続きを読む <span class="screen-reader-text">  24時間営業のソルロンタン専門店、一龍別館＠赤坂。1980円は高い～！</span><span class="meta-nav">&#8594;</span></a></p>
The post <a href="https://www.messiahworks.com/archives/33684">24時間営業のソルロンタン専門店、一龍別館＠赤坂。1980円は高い～！</a> first appeared on <a href="https://www.messiahworks.com">メサイア・ワークス</a>.]]></description>
										<content:encoded><![CDATA[<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33684&amp;linkname=24%E6%99%82%E9%96%93%E5%96%B6%E6%A5%AD%E3%81%AE%E3%82%BD%E3%83%AB%E3%83%AD%E3%83%B3%E3%82%BF%E3%83%B3%E5%B0%82%E9%96%80%E5%BA%97%E3%80%81%E4%B8%80%E9%BE%8D%E5%88%A5%E9%A4%A8%EF%BC%A0%E8%B5%A4%E5%9D%82%E3%80%821980%E5%86%86%E3%81%AF%E9%AB%98%E3%81%84%EF%BD%9E%EF%BC%81" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33684&amp;linkname=24%E6%99%82%E9%96%93%E5%96%B6%E6%A5%AD%E3%81%AE%E3%82%BD%E3%83%AB%E3%83%AD%E3%83%B3%E3%82%BF%E3%83%B3%E5%B0%82%E9%96%80%E5%BA%97%E3%80%81%E4%B8%80%E9%BE%8D%E5%88%A5%E9%A4%A8%EF%BC%A0%E8%B5%A4%E5%9D%82%E3%80%821980%E5%86%86%E3%81%AF%E9%AB%98%E3%81%84%EF%BD%9E%EF%BC%81" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33684&amp;linkname=24%E6%99%82%E9%96%93%E5%96%B6%E6%A5%AD%E3%81%AE%E3%82%BD%E3%83%AB%E3%83%AD%E3%83%B3%E3%82%BF%E3%83%B3%E5%B0%82%E9%96%80%E5%BA%97%E3%80%81%E4%B8%80%E9%BE%8D%E5%88%A5%E9%A4%A8%EF%BC%A0%E8%B5%A4%E5%9D%82%E3%80%821980%E5%86%86%E3%81%AF%E9%AB%98%E3%81%84%EF%BD%9E%EF%BC%81" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33684&#038;title=24%E6%99%82%E9%96%93%E5%96%B6%E6%A5%AD%E3%81%AE%E3%82%BD%E3%83%AB%E3%83%AD%E3%83%B3%E3%82%BF%E3%83%B3%E5%B0%82%E9%96%80%E5%BA%97%E3%80%81%E4%B8%80%E9%BE%8D%E5%88%A5%E9%A4%A8%EF%BC%A0%E8%B5%A4%E5%9D%82%E3%80%821980%E5%86%86%E3%81%AF%E9%AB%98%E3%81%84%EF%BD%9E%EF%BC%81" data-a2a-url="https://www.messiahworks.com/archives/33684" data-a2a-title="24時間営業のソルロンタン専門店、一龍別館＠赤坂。1980円は高い～！"></a></p><p>24時間営業のソルロンタン専門店「赤坂一龍 別館」1980円は高い～！</p>
<div><strong><a target="_blank" href="https://tabelog.com/tokyo/A1308/A130801/13002759/">赤坂一龍 別館</a></strong><br />
<script src="https://tabelog.com/badge/google_badge?escape=false&#038;rcd=13002759" type="text/javascript" charset="utf-8"></script>
</div>
<p>実質的にメニューが一種類しかないので、店員さんは「ソルロンタンでいいですか？」しか言わない。<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-05-21-11.40.12.jpg"><img fetchpriority="high" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-05-21-11.40.12.jpg" alt="" width="1280" height="960" class="alignnone size-full wp-image-33687" srcset="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-05-21-11.40.12.jpg 1280w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-05-21-11.40.12-300x225.jpg 300w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-05-21-11.40.12-1024x768.jpg 1024w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-05-21-11.40.12-150x113.jpg 150w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-05-21-11.40.12-768x576.jpg 768w" sizes="(max-width: 1280px) 100vw, 1280px" /></a></p>
<p>韓国料理定番の小皿料理パンチャン<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-05-21-11.26.18-rotated.jpg"><img decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-05-21-11.26.18-rotated.jpg" alt="" width="1280" height="960" class="alignnone size-full wp-image-33685" srcset="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-05-21-11.26.18-rotated.jpg 1280w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-05-21-11.26.18-300x225.jpg 300w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-05-21-11.26.18-1024x768.jpg 1024w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-05-21-11.26.18-150x113.jpg 150w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-05-21-11.26.18-768x576.jpg 768w" sizes="(max-width: 1280px) 100vw, 1280px" /></a></p>
<p>サクッと出てきた。かなり薄味なので自分で塩を降って味を整える。<br />
それにしても、1980円は高い～！<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-05-21-11.27.27.jpg"><img decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-05-21-11.27.27.jpg" alt="" width="960" height="1280" class="alignnone size-full wp-image-33686" srcset="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-05-21-11.27.27.jpg 960w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-05-21-11.27.27-225x300.jpg 225w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-05-21-11.27.27-768x1024.jpg 768w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-05-21-11.27.27-113x150.jpg 113w" sizes="(max-width: 960px) 100vw, 960px" /></a></p>The post <a href="https://www.messiahworks.com/archives/33684">24時間営業のソルロンタン専門店、一龍別館＠赤坂。1980円は高い～！</a> first appeared on <a href="https://www.messiahworks.com">メサイア・ワークス</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ここはオススメ！中華バイキング付き（平日ランチのみ）お得定食の酢豚1100円＠金陵 銀座本店</title>
		<link>https://www.messiahworks.com/archives/33673</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 02 Jun 2026 07:20:02 +0000</pubDate>
				<category><![CDATA[ランチ(新橋)]]></category>
		<category><![CDATA[ランチ(銀座・築地)]]></category>
		<guid isPermaLink="false">https://www.messiahworks.com/?p=33673</guid>

					<description><![CDATA[<p>ここはオススメ！中華バイキング付き（平日ランチのみ）お得定食の酢豚1100円＠金陵 銀座本店 金陵 銀座本店 リアルに考えると、お得定食が一番人気になりそうだけど…。 高い店の一番安いメニューが一番お得！？ 店員さんが「 <a class="more-link" href="https://www.messiahworks.com/archives/33673">続きを読む <span class="screen-reader-text">  ここはオススメ！中華バイキング付き（平日ランチのみ）お得定食の酢豚1100円＠金陵 銀座本店</span><span class="meta-nav">&#8594;</span></a></p>
The post <a href="https://www.messiahworks.com/archives/33673">ここはオススメ！中華バイキング付き（平日ランチのみ）お得定食の酢豚1100円＠金陵 銀座本店</a> first appeared on <a href="https://www.messiahworks.com">メサイア・ワークス</a>.]]></description>
										<content:encoded><![CDATA[<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33673&amp;linkname=%E3%81%93%E3%81%93%E3%81%AF%E3%82%AA%E3%82%B9%E3%82%B9%E3%83%A1%EF%BC%81%E4%B8%AD%E8%8F%AF%E3%83%90%E3%82%A4%E3%82%AD%E3%83%B3%E3%82%B0%E4%BB%98%E3%81%8D%EF%BC%88%E5%B9%B3%E6%97%A5%E3%83%A9%E3%83%B3%E3%83%81%E3%81%AE%E3%81%BF%EF%BC%89%E3%81%8A%E5%BE%97%E5%AE%9A%E9%A3%9F%E3%81%AE%E9%85%A2%E8%B1%9A1100%E5%86%86%EF%BC%A0%E9%87%91%E9%99%B5%20%E9%8A%80%E5%BA%A7%E6%9C%AC%E5%BA%97" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33673&amp;linkname=%E3%81%93%E3%81%93%E3%81%AF%E3%82%AA%E3%82%B9%E3%82%B9%E3%83%A1%EF%BC%81%E4%B8%AD%E8%8F%AF%E3%83%90%E3%82%A4%E3%82%AD%E3%83%B3%E3%82%B0%E4%BB%98%E3%81%8D%EF%BC%88%E5%B9%B3%E6%97%A5%E3%83%A9%E3%83%B3%E3%83%81%E3%81%AE%E3%81%BF%EF%BC%89%E3%81%8A%E5%BE%97%E5%AE%9A%E9%A3%9F%E3%81%AE%E9%85%A2%E8%B1%9A1100%E5%86%86%EF%BC%A0%E9%87%91%E9%99%B5%20%E9%8A%80%E5%BA%A7%E6%9C%AC%E5%BA%97" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33673&amp;linkname=%E3%81%93%E3%81%93%E3%81%AF%E3%82%AA%E3%82%B9%E3%82%B9%E3%83%A1%EF%BC%81%E4%B8%AD%E8%8F%AF%E3%83%90%E3%82%A4%E3%82%AD%E3%83%B3%E3%82%B0%E4%BB%98%E3%81%8D%EF%BC%88%E5%B9%B3%E6%97%A5%E3%83%A9%E3%83%B3%E3%83%81%E3%81%AE%E3%81%BF%EF%BC%89%E3%81%8A%E5%BE%97%E5%AE%9A%E9%A3%9F%E3%81%AE%E9%85%A2%E8%B1%9A1100%E5%86%86%EF%BC%A0%E9%87%91%E9%99%B5%20%E9%8A%80%E5%BA%A7%E6%9C%AC%E5%BA%97" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33673&#038;title=%E3%81%93%E3%81%93%E3%81%AF%E3%82%AA%E3%82%B9%E3%82%B9%E3%83%A1%EF%BC%81%E4%B8%AD%E8%8F%AF%E3%83%90%E3%82%A4%E3%82%AD%E3%83%B3%E3%82%B0%E4%BB%98%E3%81%8D%EF%BC%88%E5%B9%B3%E6%97%A5%E3%83%A9%E3%83%B3%E3%83%81%E3%81%AE%E3%81%BF%EF%BC%89%E3%81%8A%E5%BE%97%E5%AE%9A%E9%A3%9F%E3%81%AE%E9%85%A2%E8%B1%9A1100%E5%86%86%EF%BC%A0%E9%87%91%E9%99%B5%20%E9%8A%80%E5%BA%A7%E6%9C%AC%E5%BA%97" data-a2a-url="https://www.messiahworks.com/archives/33673" data-a2a-title="ここはオススメ！中華バイキング付き（平日ランチのみ）お得定食の酢豚1100円＠金陵 銀座本店"></a></p><p>ここはオススメ！中華バイキング付き（平日ランチのみ）お得定食の酢豚1100円＠金陵 銀座本店</p>
<div><strong><a target="_blank" href="https://tabelog.com/tokyo/A1301/A130101/13289004/">金陵 銀座本店</a></strong><br />
<script src="https://tabelog.com/badge/google_badge?escape=false&#038;rcd=13289004" type="text/javascript" charset="utf-8"></script>
</div>
<p>リアルに考えると、お得定食が一番人気になりそうだけど…。<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.38.57.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.38.57.jpg" alt="" width="960" height="1280" class="alignnone size-full wp-image-33680" srcset="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.38.57.jpg 960w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.38.57-225x300.jpg 225w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.38.57-768x1024.jpg 768w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.38.57-113x150.jpg 113w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></p>
<p>高い店の一番安いメニューが一番お得！？<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.14.23.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.14.23.jpg" alt="" width="960" height="1280" class="alignnone size-full wp-image-33674" srcset="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.14.23.jpg 960w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.14.23-225x300.jpg 225w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.14.23-768x1024.jpg 768w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.14.23-113x150.jpg 113w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></p>
<p>店員さんが「サービス」と言ってたけど、むしろコッチがメインでは！？<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.17.35.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.17.35.jpg" alt="" width="1280" height="960" class="alignnone size-full wp-image-33675" srcset="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.17.35.jpg 1280w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.17.35-300x225.jpg 300w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.17.35-1024x768.jpg 1024w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.17.35-150x113.jpg 150w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.17.35-768x576.jpg 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></a></p>
<p>メインが来る前に、これだけで結構な満足感！<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.19.19.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.19.19.jpg" alt="" width="960" height="1280" class="alignnone size-full wp-image-33676" srcset="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.19.19.jpg 960w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.19.19-225x300.jpg 225w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.19.19-768x1024.jpg 768w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.19.19-113x150.jpg 113w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></p>
<p>酢豚もお肉たっぷり！<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.21.24.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.21.24.jpg" alt="" width="960" height="1280" class="alignnone size-full wp-image-33677" srcset="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.21.24.jpg 960w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.21.24-225x300.jpg 225w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.21.24-768x1024.jpg 768w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.21.24-113x150.jpg 113w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></p>
<p>二皿目<br />
謎の幅広春雨、拉皮（ラーピー）、または粉皮（フェンピー）のあんかけ<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.26.39.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.26.39.jpg" alt="" width="960" height="1280" class="alignnone size-full wp-image-33678" srcset="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.26.39.jpg 960w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.26.39-225x300.jpg 225w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.26.39-768x1024.jpg 768w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.26.39-113x150.jpg 113w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></p>
<p>デザートは杏仁豆腐と思いきや、まさかの白キクラゲ！？<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.35.17.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.35.17.jpg" alt="" width="960" height="1280" class="alignnone size-full wp-image-33679" srcset="https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.35.17.jpg 960w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.35.17-225x300.jpg 225w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.35.17-768x1024.jpg 768w, https://www.messiahworks.com/wp-content/uploads/2026/06/2026-06-02-11.35.17-113x150.jpg 113w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></p>The post <a href="https://www.messiahworks.com/archives/33673">ここはオススメ！中華バイキング付き（平日ランチのみ）お得定食の酢豚1100円＠金陵 銀座本店</a> first appeared on <a href="https://www.messiahworks.com">メサイア・ワークス</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>毎日更新の自作の新刊コミックの平積み表示を、楽天APIで取得して表示できるようになった！</title>
		<link>https://www.messiahworks.com/archives/33671</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 02 Jun 2026 05:52:14 +0000</pubDate>
				<category><![CDATA[自作アプリ]]></category>
		<category><![CDATA[読書]]></category>
		<guid isPermaLink="false">https://www.messiahworks.com/?p=33671</guid>

					<description><![CDATA[<p>毎日更新の自作の新刊コミックの平積み表示を、楽天APIで取得して表示できるようになった！ https://www.messiahworks.com/comics/ 今年の一月から楽天の非公式JSON(新刊コミック一覧)が <a class="more-link" href="https://www.messiahworks.com/archives/33671">続きを読む <span class="screen-reader-text">  毎日更新の自作の新刊コミックの平積み表示を、楽天APIで取得して表示できるようになった！</span><span class="meta-nav">&#8594;</span></a></p>
The post <a href="https://www.messiahworks.com/archives/33671">毎日更新の自作の新刊コミックの平積み表示を、楽天APIで取得して表示できるようになった！</a> first appeared on <a href="https://www.messiahworks.com">メサイア・ワークス</a>.]]></description>
										<content:encoded><![CDATA[<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33671&amp;linkname=%E6%AF%8E%E6%97%A5%E6%9B%B4%E6%96%B0%E3%81%AE%E8%87%AA%E4%BD%9C%E3%81%AE%E6%96%B0%E5%88%8A%E3%82%B3%E3%83%9F%E3%83%83%E3%82%AF%E3%81%AE%E5%B9%B3%E7%A9%8D%E3%81%BF%E8%A1%A8%E7%A4%BA%E3%82%92%E3%80%81%E6%A5%BD%E5%A4%A9API%E3%81%A7%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E8%A1%A8%E7%A4%BA%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%EF%BC%81" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33671&amp;linkname=%E6%AF%8E%E6%97%A5%E6%9B%B4%E6%96%B0%E3%81%AE%E8%87%AA%E4%BD%9C%E3%81%AE%E6%96%B0%E5%88%8A%E3%82%B3%E3%83%9F%E3%83%83%E3%82%AF%E3%81%AE%E5%B9%B3%E7%A9%8D%E3%81%BF%E8%A1%A8%E7%A4%BA%E3%82%92%E3%80%81%E6%A5%BD%E5%A4%A9API%E3%81%A7%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E8%A1%A8%E7%A4%BA%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%EF%BC%81" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33671&amp;linkname=%E6%AF%8E%E6%97%A5%E6%9B%B4%E6%96%B0%E3%81%AE%E8%87%AA%E4%BD%9C%E3%81%AE%E6%96%B0%E5%88%8A%E3%82%B3%E3%83%9F%E3%83%83%E3%82%AF%E3%81%AE%E5%B9%B3%E7%A9%8D%E3%81%BF%E8%A1%A8%E7%A4%BA%E3%82%92%E3%80%81%E6%A5%BD%E5%A4%A9API%E3%81%A7%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E8%A1%A8%E7%A4%BA%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%EF%BC%81" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33671&#038;title=%E6%AF%8E%E6%97%A5%E6%9B%B4%E6%96%B0%E3%81%AE%E8%87%AA%E4%BD%9C%E3%81%AE%E6%96%B0%E5%88%8A%E3%82%B3%E3%83%9F%E3%83%83%E3%82%AF%E3%81%AE%E5%B9%B3%E7%A9%8D%E3%81%BF%E8%A1%A8%E7%A4%BA%E3%82%92%E3%80%81%E6%A5%BD%E5%A4%A9API%E3%81%A7%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E8%A1%A8%E7%A4%BA%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%EF%BC%81" data-a2a-url="https://www.messiahworks.com/archives/33671" data-a2a-title="毎日更新の自作の新刊コミックの平積み表示を、楽天APIで取得して表示できるようになった！"></a></p><p>毎日更新の自作の新刊コミックの平積み表示を、楽天APIで取得して表示できるようになった！<br />
<a href="https://www.messiahworks.com/comics/">https://www.messiahworks.com/comics/</a></p>
<p>今年の一月から楽天の非公式JSON(新刊コミック一覧)が更新されなくなってた。<br />
楽天APIでサクッと作り直せるだろ！と思ってたら、アプリケーションタイプをWebアプリじゃなくてAPI/Backend Serviceにしないと駄目だった…。</p>
<p>しかし、マジで本屋が潰れまくって、新宿・池袋・秋葉原・神保町・川崎・横浜くらいしかマトモな大型書店が無い…。</p>The post <a href="https://www.messiahworks.com/archives/33671">毎日更新の自作の新刊コミックの平積み表示を、楽天APIで取得して表示できるようになった！</a> first appeared on <a href="https://www.messiahworks.com">メサイア・ワークス</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>生成AIに「バニーガーデン2の英梨紗の同人誌を描いて」とお願いしたら、斜め上の展開で「ミギー、続きを頼む」としか言えなかった。</title>
		<link>https://www.messiahworks.com/archives/33658</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 29 May 2026 12:26:39 +0000</pubDate>
				<category><![CDATA[chatGPT]]></category>
		<category><![CDATA[自作物]]></category>
		<category><![CDATA[電子書籍]]></category>
		<guid isPermaLink="false">https://www.messiahworks.com/?p=33658</guid>

					<description><![CDATA[<p>生成AIに「バニーガーデン2の英梨紗の同人誌を描いて」とお願いしたら、斜め上の展開で「ミギー、続きを頼む」としか言えなかった。</p>
The post <a href="https://www.messiahworks.com/archives/33658">生成AIに「バニーガーデン2の英梨紗の同人誌を描いて」とお願いしたら、斜め上の展開で「ミギー、続きを頼む」としか言えなかった。</a> first appeared on <a href="https://www.messiahworks.com">メサイア・ワークス</a>.]]></description>
										<content:encoded><![CDATA[<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33658&amp;linkname=%E7%94%9F%E6%88%90AI%E3%81%AB%E3%80%8C%E3%83%90%E3%83%8B%E3%83%BC%E3%82%AC%E3%83%BC%E3%83%87%E3%83%B32%E3%81%AE%E8%8B%B1%E6%A2%A8%E7%B4%97%E3%81%AE%E5%90%8C%E4%BA%BA%E8%AA%8C%E3%82%92%E6%8F%8F%E3%81%84%E3%81%A6%E3%80%8D%E3%81%A8%E3%81%8A%E9%A1%98%E3%81%84%E3%81%97%E3%81%9F%E3%82%89%E3%80%81%E6%96%9C%E3%82%81%E4%B8%8A%E3%81%AE%E5%B1%95%E9%96%8B%E3%81%A7%E3%80%8C%E3%83%9F%E3%82%AE%E3%83%BC%E3%80%81%E7%B6%9A%E3%81%8D%E3%82%92%E9%A0%BC%E3%82%80%E3%80%8D%E3%81%A8%E3%81%97%E3%81%8B%E8%A8%80%E3%81%88%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E3%80%82" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33658&amp;linkname=%E7%94%9F%E6%88%90AI%E3%81%AB%E3%80%8C%E3%83%90%E3%83%8B%E3%83%BC%E3%82%AC%E3%83%BC%E3%83%87%E3%83%B32%E3%81%AE%E8%8B%B1%E6%A2%A8%E7%B4%97%E3%81%AE%E5%90%8C%E4%BA%BA%E8%AA%8C%E3%82%92%E6%8F%8F%E3%81%84%E3%81%A6%E3%80%8D%E3%81%A8%E3%81%8A%E9%A1%98%E3%81%84%E3%81%97%E3%81%9F%E3%82%89%E3%80%81%E6%96%9C%E3%82%81%E4%B8%8A%E3%81%AE%E5%B1%95%E9%96%8B%E3%81%A7%E3%80%8C%E3%83%9F%E3%82%AE%E3%83%BC%E3%80%81%E7%B6%9A%E3%81%8D%E3%82%92%E9%A0%BC%E3%82%80%E3%80%8D%E3%81%A8%E3%81%97%E3%81%8B%E8%A8%80%E3%81%88%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E3%80%82" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33658&amp;linkname=%E7%94%9F%E6%88%90AI%E3%81%AB%E3%80%8C%E3%83%90%E3%83%8B%E3%83%BC%E3%82%AC%E3%83%BC%E3%83%87%E3%83%B32%E3%81%AE%E8%8B%B1%E6%A2%A8%E7%B4%97%E3%81%AE%E5%90%8C%E4%BA%BA%E8%AA%8C%E3%82%92%E6%8F%8F%E3%81%84%E3%81%A6%E3%80%8D%E3%81%A8%E3%81%8A%E9%A1%98%E3%81%84%E3%81%97%E3%81%9F%E3%82%89%E3%80%81%E6%96%9C%E3%82%81%E4%B8%8A%E3%81%AE%E5%B1%95%E9%96%8B%E3%81%A7%E3%80%8C%E3%83%9F%E3%82%AE%E3%83%BC%E3%80%81%E7%B6%9A%E3%81%8D%E3%82%92%E9%A0%BC%E3%82%80%E3%80%8D%E3%81%A8%E3%81%97%E3%81%8B%E8%A8%80%E3%81%88%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E3%80%82" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33658&#038;title=%E7%94%9F%E6%88%90AI%E3%81%AB%E3%80%8C%E3%83%90%E3%83%8B%E3%83%BC%E3%82%AC%E3%83%BC%E3%83%87%E3%83%B32%E3%81%AE%E8%8B%B1%E6%A2%A8%E7%B4%97%E3%81%AE%E5%90%8C%E4%BA%BA%E8%AA%8C%E3%82%92%E6%8F%8F%E3%81%84%E3%81%A6%E3%80%8D%E3%81%A8%E3%81%8A%E9%A1%98%E3%81%84%E3%81%97%E3%81%9F%E3%82%89%E3%80%81%E6%96%9C%E3%82%81%E4%B8%8A%E3%81%AE%E5%B1%95%E9%96%8B%E3%81%A7%E3%80%8C%E3%83%9F%E3%82%AE%E3%83%BC%E3%80%81%E7%B6%9A%E3%81%8D%E3%82%92%E9%A0%BC%E3%82%80%E3%80%8D%E3%81%A8%E3%81%97%E3%81%8B%E8%A8%80%E3%81%88%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E3%80%82" data-a2a-url="https://www.messiahworks.com/archives/33658" data-a2a-title="生成AIに「バニーガーデン2の英梨紗の同人誌を描いて」とお願いしたら、斜め上の展開で「ミギー、続きを頼む」としか言えなかった。"></a></p><p>生成AIに「バニーガーデン2の英梨紗の同人誌を描いて」とお願いしたら、斜め上の展開で「ミギー、続きを頼む」としか言えなかった。</p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/05/57c51e7e524fe21a1aa0bd10253a51ed.png"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/57c51e7e524fe21a1aa0bd10253a51ed.png" alt="" width="1216" height="1294" class="alignnone size-full wp-image-33667" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/57c51e7e524fe21a1aa0bd10253a51ed.png 1216w, https://www.messiahworks.com/wp-content/uploads/2026/05/57c51e7e524fe21a1aa0bd10253a51ed-282x300.png 282w, https://www.messiahworks.com/wp-content/uploads/2026/05/57c51e7e524fe21a1aa0bd10253a51ed-962x1024.png 962w, https://www.messiahworks.com/wp-content/uploads/2026/05/57c51e7e524fe21a1aa0bd10253a51ed-141x150.png 141w, https://www.messiahworks.com/wp-content/uploads/2026/05/57c51e7e524fe21a1aa0bd10253a51ed-768x817.png 768w" sizes="auto, (max-width: 1216px) 100vw, 1216px" /></a></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/05/eca102b1752e7e9f03376e4459746e4c.png"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/eca102b1752e7e9f03376e4459746e4c.png" alt="" width="1448" height="1086" class="alignnone size-full wp-image-33666" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/eca102b1752e7e9f03376e4459746e4c.png 1448w, https://www.messiahworks.com/wp-content/uploads/2026/05/eca102b1752e7e9f03376e4459746e4c-300x225.png 300w, https://www.messiahworks.com/wp-content/uploads/2026/05/eca102b1752e7e9f03376e4459746e4c-1024x768.png 1024w, https://www.messiahworks.com/wp-content/uploads/2026/05/eca102b1752e7e9f03376e4459746e4c-150x113.png 150w, https://www.messiahworks.com/wp-content/uploads/2026/05/eca102b1752e7e9f03376e4459746e4c-768x576.png 768w" sizes="auto, (max-width: 1448px) 100vw, 1448px" /></a></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/05/2554bf75da258e664407c9016adfb287.png"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/2554bf75da258e664407c9016adfb287.png" alt="" width="1054" height="1492" class="alignnone size-full wp-image-33665" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/2554bf75da258e664407c9016adfb287.png 1054w, https://www.messiahworks.com/wp-content/uploads/2026/05/2554bf75da258e664407c9016adfb287-212x300.png 212w, https://www.messiahworks.com/wp-content/uploads/2026/05/2554bf75da258e664407c9016adfb287-723x1024.png 723w, https://www.messiahworks.com/wp-content/uploads/2026/05/2554bf75da258e664407c9016adfb287-106x150.png 106w, https://www.messiahworks.com/wp-content/uploads/2026/05/2554bf75da258e664407c9016adfb287-768x1087.png 768w" sizes="auto, (max-width: 1054px) 100vw, 1054px" /></a></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/05/4228a96d6b95b516d0f334bc52f15f62.png"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/4228a96d6b95b516d0f334bc52f15f62.png" alt="" width="1055" height="1491" class="alignnone size-full wp-image-33664" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/4228a96d6b95b516d0f334bc52f15f62.png 1055w, https://www.messiahworks.com/wp-content/uploads/2026/05/4228a96d6b95b516d0f334bc52f15f62-212x300.png 212w, https://www.messiahworks.com/wp-content/uploads/2026/05/4228a96d6b95b516d0f334bc52f15f62-725x1024.png 725w, https://www.messiahworks.com/wp-content/uploads/2026/05/4228a96d6b95b516d0f334bc52f15f62-106x150.png 106w, https://www.messiahworks.com/wp-content/uploads/2026/05/4228a96d6b95b516d0f334bc52f15f62-768x1085.png 768w" sizes="auto, (max-width: 1055px) 100vw, 1055px" /></a></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/05/c68c1370afa7ec41f7072b388ab13bf7.png"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/c68c1370afa7ec41f7072b388ab13bf7.png" alt="" width="1055" height="1491" class="alignnone size-full wp-image-33663" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/c68c1370afa7ec41f7072b388ab13bf7.png 1055w, https://www.messiahworks.com/wp-content/uploads/2026/05/c68c1370afa7ec41f7072b388ab13bf7-212x300.png 212w, https://www.messiahworks.com/wp-content/uploads/2026/05/c68c1370afa7ec41f7072b388ab13bf7-725x1024.png 725w, https://www.messiahworks.com/wp-content/uploads/2026/05/c68c1370afa7ec41f7072b388ab13bf7-106x150.png 106w, https://www.messiahworks.com/wp-content/uploads/2026/05/c68c1370afa7ec41f7072b388ab13bf7-768x1085.png 768w" sizes="auto, (max-width: 1055px) 100vw, 1055px" /></a></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/05/01506f78c374337fa173cbbdbf9273c8.png"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/01506f78c374337fa173cbbdbf9273c8.png" alt="" width="1054" height="1492" class="alignnone size-full wp-image-33662" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/01506f78c374337fa173cbbdbf9273c8.png 1054w, https://www.messiahworks.com/wp-content/uploads/2026/05/01506f78c374337fa173cbbdbf9273c8-212x300.png 212w, https://www.messiahworks.com/wp-content/uploads/2026/05/01506f78c374337fa173cbbdbf9273c8-723x1024.png 723w, https://www.messiahworks.com/wp-content/uploads/2026/05/01506f78c374337fa173cbbdbf9273c8-106x150.png 106w, https://www.messiahworks.com/wp-content/uploads/2026/05/01506f78c374337fa173cbbdbf9273c8-768x1087.png 768w" sizes="auto, (max-width: 1054px) 100vw, 1054px" /></a></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/05/5388a0f224db800c07854b53e5715f79.png"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/5388a0f224db800c07854b53e5715f79.png" alt="" width="1024" height="1536" class="alignnone size-full wp-image-33661" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/5388a0f224db800c07854b53e5715f79.png 1024w, https://www.messiahworks.com/wp-content/uploads/2026/05/5388a0f224db800c07854b53e5715f79-200x300.png 200w, https://www.messiahworks.com/wp-content/uploads/2026/05/5388a0f224db800c07854b53e5715f79-683x1024.png 683w, https://www.messiahworks.com/wp-content/uploads/2026/05/5388a0f224db800c07854b53e5715f79-100x150.png 100w, https://www.messiahworks.com/wp-content/uploads/2026/05/5388a0f224db800c07854b53e5715f79-768x1152.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/05/ae10b65c0d2714a16150a27bd943d482.png"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/ae10b65c0d2714a16150a27bd943d482.png" alt="" width="1024" height="1536" class="alignnone size-full wp-image-33660" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/ae10b65c0d2714a16150a27bd943d482.png 1024w, https://www.messiahworks.com/wp-content/uploads/2026/05/ae10b65c0d2714a16150a27bd943d482-200x300.png 200w, https://www.messiahworks.com/wp-content/uploads/2026/05/ae10b65c0d2714a16150a27bd943d482-683x1024.png 683w, https://www.messiahworks.com/wp-content/uploads/2026/05/ae10b65c0d2714a16150a27bd943d482-100x150.png 100w, https://www.messiahworks.com/wp-content/uploads/2026/05/ae10b65c0d2714a16150a27bd943d482-768x1152.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/05/431078e072e540c3ea7d78f6281715c0.png"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/431078e072e540c3ea7d78f6281715c0.png" alt="" width="1122" height="1402" class="alignnone size-full wp-image-33659" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/431078e072e540c3ea7d78f6281715c0.png 1122w, https://www.messiahworks.com/wp-content/uploads/2026/05/431078e072e540c3ea7d78f6281715c0-240x300.png 240w, https://www.messiahworks.com/wp-content/uploads/2026/05/431078e072e540c3ea7d78f6281715c0-819x1024.png 819w, https://www.messiahworks.com/wp-content/uploads/2026/05/431078e072e540c3ea7d78f6281715c0-120x150.png 120w, https://www.messiahworks.com/wp-content/uploads/2026/05/431078e072e540c3ea7d78f6281715c0-768x960.png 768w" sizes="auto, (max-width: 1122px) 100vw, 1122px" /></a></p>The post <a href="https://www.messiahworks.com/archives/33658">生成AIに「バニーガーデン2の英梨紗の同人誌を描いて」とお願いしたら、斜め上の展開で「ミギー、続きを頼む」としか言えなかった。</a> first appeared on <a href="https://www.messiahworks.com">メサイア・ワークス</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>reactのApp.tsxのステップ・バイ・ステップで学習してみた。</title>
		<link>https://www.messiahworks.com/archives/33654</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Mon, 25 May 2026 08:33:53 +0000</pubDate>
				<category><![CDATA[react]]></category>
		<guid isPermaLink="false">https://www.messiahworks.com/?p=33654</guid>

					<description><![CDATA[<p>reactのApp.tsxのステップ・バイ・ステップで学習してみた。 最小のreact [crayon-6a1e9f7867fd7866853016/] はじめての変数 [crayon-6a1e9f7867fdd6621 <a class="more-link" href="https://www.messiahworks.com/archives/33654">続きを読む <span class="screen-reader-text">  reactのApp.tsxのステップ・バイ・ステップで学習してみた。</span><span class="meta-nav">&#8594;</span></a></p>
The post <a href="https://www.messiahworks.com/archives/33654">reactのApp.tsxのステップ・バイ・ステップで学習してみた。</a> first appeared on <a href="https://www.messiahworks.com">メサイア・ワークス</a>.]]></description>
										<content:encoded><![CDATA[<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33654&amp;linkname=react%E3%81%AEApp.tsx%E3%81%AE%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%83%BB%E3%83%90%E3%82%A4%E3%83%BB%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%81%A7%E5%AD%A6%E7%BF%92%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F%E3%80%82" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33654&amp;linkname=react%E3%81%AEApp.tsx%E3%81%AE%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%83%BB%E3%83%90%E3%82%A4%E3%83%BB%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%81%A7%E5%AD%A6%E7%BF%92%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F%E3%80%82" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33654&amp;linkname=react%E3%81%AEApp.tsx%E3%81%AE%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%83%BB%E3%83%90%E3%82%A4%E3%83%BB%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%81%A7%E5%AD%A6%E7%BF%92%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F%E3%80%82" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33654&#038;title=react%E3%81%AEApp.tsx%E3%81%AE%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%83%BB%E3%83%90%E3%82%A4%E3%83%BB%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%81%A7%E5%AD%A6%E7%BF%92%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F%E3%80%82" data-a2a-url="https://www.messiahworks.com/archives/33654" data-a2a-title="reactのApp.tsxのステップ・バイ・ステップで学習してみた。"></a></p><p>reactのApp.tsxのステップ・バイ・ステップで学習してみた。</p>
<p>最小のreact</p><pre class="urvanov-syntax-highlighter-plain-tag">export default function App() {
  return &lt;h1&gt;こんにちは&lt;/h1&gt;;
}</pre><p></p>
<p>はじめての変数</p><pre class="urvanov-syntax-highlighter-plain-tag">export default function App() {
  // はじめての変数
  const message = &quot;こんにちは!!&quot;;
  // 変数の値を使う
  return &lt;h1&gt;{message}&lt;/h1&gt;;
}</pre><p></p>
<p>複数の変数の表示</p><pre class="urvanov-syntax-highlighter-plain-tag">export default function App() {
  // 変数その１
  const message1 = &quot;こんにちは!!&quot;;
  // 変数その２
  const message2 = &quot;さようなら&quot;;

  // Flagment(単一ルートが絶対必要) &lt;&gt;...&lt;/&gt;
  // 複数のタグを直接returnできない。
  return (
    &lt;&gt;
      &lt;h1&gt;{message1}&lt;/h1&gt;
      &lt;h1&gt;{message2}&lt;/h1&gt;
    &lt;/&gt;
  );
}</pre><p></p>
<p>ボタンクリックの処理</p><pre class="urvanov-syntax-highlighter-plain-tag">export default function App() {
  // クリック関数
  function handleClick() {
    alert(&quot;クリックされた！&quot;);
  }

  // ボタンだけ
  return (
    &lt;&gt;
      &lt;button onClick={handleClick}&gt;click me&lt;/button&gt;
    &lt;/&gt;
  );
}</pre><p></p>
<p>値の保持</p><pre class="urvanov-syntax-highlighter-plain-tag">// Reactから useState という機能を読み込む
import { useState } from &quot;react&quot;;

export default function App() {
  // const　直接代入はしない()
  // count     現在の値
  // setCount  countを変更するための関数
  // number    countは数値型
  // 0         初期値
  const [count, setCount] = useState&lt;number&gt;(0);

  // クリック関数
  function handleClick() {
    setCount(count + 1);
  }

  // ボタン押下で関数実行
  return (
    &lt;&gt;
      &lt;p&gt;現在のカウント{count}&lt;/p&gt;
      &lt;button onClick={handleClick}&gt;ぷらす１&lt;/button&gt;
    &lt;/&gt;
  );
}</pre><p></p>
<p>Webフォーム(空文字じゃなくなったら登録ボタンをenable)</p><pre class="urvanov-syntax-highlighter-plain-tag">import { useState } from &quot;react&quot;;

export default function App() {
  // 入力欄の文字を管理する状態
  const [name, setName] = useState&lt;string&gt;(&quot;&quot;);

  // 入力欄の内容が変わったときに実行される処理
  function handleChange(event: React.ChangeEvent&lt;HTMLInputElement&gt;) {
    setName(event.target.value);
  }

  // 登録ボタンを押したときの処理
  function handleSubmit() {
    alert(`${name}さんを登録します`);
  }

  return (
    &lt;&gt;
      &lt;h1&gt;ユーザー登録(空文字では登録ボタンがdisable)&lt;/h1&gt;

      &lt;input
        type=&quot;text&quot;
        value={name}
        onChange={handleChange}
        placeholder=&quot;名前を入力してください&quot;
      /&gt;

      &lt;p&gt;入力中の名前: {name}&lt;/p&gt;

      &lt;button onClick={handleSubmit} disabled={name === &quot;&quot;}&gt;
        登録
      &lt;/button&gt;
    &lt;/&gt;
  );
}</pre><p></p>
<p>入力途中の文字列を使って、結果をフィルタリング</p><pre class="urvanov-syntax-highlighter-plain-tag">import { useState } from &quot;react&quot;;

export default function App() {
  // 検索欄に入力された文字を管理する状態
  const [keyword, setKeyword] = useState&lt;string&gt;(&quot;&quot;);

  // 表示対象のユーザー一覧
  const users = [
    &quot;Alice&quot;,
    &quot;Alan&quot;,
    &quot;Amanda&quot;,
    &quot;Bob&quot;,
    &quot;Brian&quot;,
    &quot;Betty&quot;,
    &quot;Charlie&quot;,
    &quot;Chris&quot;,
    &quot;Catherine&quot;,
    &quot;David&quot;,
    &quot;Daniel&quot;,
    &quot;Diana&quot;,
  ];

  // 大文字・小文字を区別せずに検索できるようにする
  const lowerKeyword = keyword.toLowerCase();

  // 入力された文字を含むユーザーだけに絞り込む
  const filteredUsers = users.filter((user) =&gt; {
    return user.toLowerCase().includes(lowerKeyword);
  });

  // 検索欄の内容が変わったときに実行される処理
  function handleChange(event: React.ChangeEvent&lt;HTMLInputElement&gt;) {
    setKeyword(event.target.value);
  }

  return (
    &lt;&gt;
      &lt;h1&gt;User Search&lt;/h1&gt;

      &lt;input
        type=&quot;text&quot;
        value={keyword}
        onChange={handleChange}
        placeholder=&quot;Search by name&quot;
      /&gt;

      &lt;p&gt;Keyword: {keyword}&lt;/p&gt;

      &lt;ul&gt;
        {filteredUsers.map((user) =&gt; (
          &lt;li key={user}&gt;{user}&lt;/li&gt;
        ))}
      &lt;/ul&gt;
    &lt;/&gt;
  );
}</pre><p></p>
<p>公開API(ZipCloud)を使って、郵便番号から住所を取得</p>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">import { useState, type ChangeEvent } from &quot;react&quot;;

// ZipCloudから返ってくる住所1件分の型
type Address = {
  zipcode: string;
  prefcode: string;
  address1: string;
  address2: string;
  address3: string;
  kana1: string;
  kana2: string;
  kana3: string;
};

// ZipCloud API全体のレスポンスの型
type ZipCloudResponse = {
  message: string | null;
  results: Address[] | null;
  status: number;
};

export default function App() {
  // 郵便番号の前半3桁を管理する状態
  const [zipcodeFirst, setZipcodeFirst] = useState&lt;string&gt;(&quot;&quot;);

  // 郵便番号の後半4桁を管理する状態
  const [zipcodeSecond, setZipcodeSecond] = useState&lt;string&gt;(&quot;&quot;);

  // APIから取得した住所一覧を管理する状態
  const [addresses, setAddresses] = useState&lt;Address[]&gt;([]);

  // 通信中かどうかを管理する状態
  const [loading, setLoading] = useState&lt;boolean&gt;(false);

  // エラーメッセージを管理する状態
  const [errorMessage, setErrorMessage] = useState&lt;string&gt;(&quot;&quot;);

  // 郵便番号の前半3桁が変更されたときに実行される処理
  function handleZipcodeFirstChange(event: ChangeEvent&lt;HTMLInputElement&gt;) {
    // 数字以外を取り除き、最大3桁までにする
    const value = event.target.value.replace(/\D/g, &quot;&quot;).slice(0, 3);

    setZipcodeFirst(value);
  }

  // 郵便番号の後半4桁が変更されたときに実行される処理
  function handleZipcodeSecondChange(event: ChangeEvent&lt;HTMLInputElement&gt;) {
    // 数字以外を取り除き、最大4桁までにする
    const value = event.target.value.replace(/\D/g, &quot;&quot;).slice(0, 4);

    setZipcodeSecond(value);
  }

  // 郵便番号から住所を検索する処理
  async function searchAddress() {
    // 前半3桁と後半4桁を結合して、7桁の郵便番号にする
    const normalizedZipcode = `${zipcodeFirst}${zipcodeSecond}`;

    // 前回の検索結果とエラーを一度クリアする
    setAddresses([]);
    setErrorMessage(&quot;&quot;);

    // 郵便番号が7桁でなければAPIを呼ばない
    if (normalizedZipcode.length !== 7) {
      setErrorMessage(&quot;郵便番号は3桁と4桁で入力してください&quot;);
      return;
    }

    try {
      // 通信中の状態にする
      setLoading(true);

      // ZipCloud APIを呼び出す
      const response = await fetch(
        `https://zipcloud.ibsnet.co.jp/api/search?zipcode=${normalizedZipcode}`
      );

      // レスポンスをJSONとして受け取る
      const data: ZipCloudResponse = await response.json();

      // API側でエラーメッセージが返ってきた場合
      if (data.message) {
        setErrorMessage(data.message);
        return;
      }

      // 該当する住所がなかった場合
      if (!data.results) {
        setErrorMessage(&quot;該当する住所がありません&quot;);
        return;
      }

      // 取得した住所をstateに入れる
      setAddresses(data.results);
    } catch {
      // 通信そのものに失敗した場合
      setErrorMessage(&quot;住所検索に失敗しました&quot;);
    } finally {
      // 成功しても失敗しても、最後に通信中状態を解除する
      setLoading(false);
    }
  }

  return (
    &lt;&gt;
      &lt;h1&gt;郵便番号検索&lt;/h1&gt;

      &lt;div&gt;
        &lt;input
          type=&quot;text&quot;
          value={zipcodeFirst}
          onChange={handleZipcodeFirstChange}
          placeholder=&quot;100&quot;
        /&gt;

        &lt;span&gt; - &lt;/span&gt;

        &lt;input
          type=&quot;text&quot;
          value={zipcodeSecond}
          onChange={handleZipcodeSecondChange}
          placeholder=&quot;0001&quot;
        /&gt;

        &lt;button type=&quot;button&quot; onClick={searchAddress} disabled={loading}&gt;
          検索
        &lt;/button&gt;
      &lt;/div&gt;

      &lt;p&gt;
        入力中の郵便番号: {zipcodeFirst}-{zipcodeSecond}
      &lt;/p&gt;

      {loading &amp;&amp; &lt;p&gt;検索中...&lt;/p&gt;}

      {errorMessage &amp;&amp; &lt;p&gt;{errorMessage}&lt;/p&gt;}

      &lt;ul&gt;
        {addresses.map((address) =&gt; (
          &lt;li key={address.zipcode}&gt;
            {address.zipcode}: {address.address1}
            {address.address2}
            {address.address3}
          &lt;/li&gt;
        ))}
      &lt;/ul&gt;
    &lt;/&gt;
  );
}</pre><p></p>The post <a href="https://www.messiahworks.com/archives/33654">reactのApp.tsxのステップ・バイ・ステップで学習してみた。</a> first appeared on <a href="https://www.messiahworks.com">メサイア・ワークス</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Laravel 13のAI SDKとLaravel Boostとは？Codexと組み合わせたAI開発環境の整理</title>
		<link>https://www.messiahworks.com/archives/33648</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 21 May 2026 06:33:00 +0000</pubDate>
				<category><![CDATA[chatGPT]]></category>
		<category><![CDATA[laravel]]></category>
		<guid isPermaLink="false">https://www.messiahworks.com/?p=33648</guid>

					<description><![CDATA[<p>Laravel 13のAI SDKとLaravel Boostとは？Codexと組み合わせたAI開発環境の整理 Laravel 13では、AI関連の機能がかなり前面に出てきました。特に重要なのは、Laravelアプリ自体 <a class="more-link" href="https://www.messiahworks.com/archives/33648">続きを読む <span class="screen-reader-text">  Laravel 13のAI SDKとLaravel Boostとは？Codexと組み合わせたAI開発環境の整理</span><span class="meta-nav">&#8594;</span></a></p>
The post <a href="https://www.messiahworks.com/archives/33648">Laravel 13のAI SDKとLaravel Boostとは？Codexと組み合わせたAI開発環境の整理</a> first appeared on <a href="https://www.messiahworks.com">メサイア・ワークス</a>.]]></description>
										<content:encoded><![CDATA[<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33648&amp;linkname=Laravel%2013%E3%81%AEAI%20SDK%E3%81%A8Laravel%20Boost%E3%81%A8%E3%81%AF%EF%BC%9FCodex%E3%81%A8%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B%E3%81%9FAI%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%81%AE%E6%95%B4%E7%90%86" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33648&amp;linkname=Laravel%2013%E3%81%AEAI%20SDK%E3%81%A8Laravel%20Boost%E3%81%A8%E3%81%AF%EF%BC%9FCodex%E3%81%A8%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B%E3%81%9FAI%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%81%AE%E6%95%B4%E7%90%86" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33648&amp;linkname=Laravel%2013%E3%81%AEAI%20SDK%E3%81%A8Laravel%20Boost%E3%81%A8%E3%81%AF%EF%BC%9FCodex%E3%81%A8%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B%E3%81%9FAI%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%81%AE%E6%95%B4%E7%90%86" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33648&#038;title=Laravel%2013%E3%81%AEAI%20SDK%E3%81%A8Laravel%20Boost%E3%81%A8%E3%81%AF%EF%BC%9FCodex%E3%81%A8%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B%E3%81%9FAI%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%81%AE%E6%95%B4%E7%90%86" data-a2a-url="https://www.messiahworks.com/archives/33648" data-a2a-title="Laravel 13のAI SDKとLaravel Boostとは？Codexと組み合わせたAI開発環境の整理"></a></p><h1>Laravel 13のAI SDKとLaravel Boostとは？Codexと組み合わせたAI開発環境の整理</h1>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/05/b2d21bcecda59c14ade4740d36639a99.png"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/b2d21bcecda59c14ade4740d36639a99.png" alt="" width="1536" height="1024" class="alignnone size-full wp-image-33650" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/b2d21bcecda59c14ade4740d36639a99.png 1536w, https://www.messiahworks.com/wp-content/uploads/2026/05/b2d21bcecda59c14ade4740d36639a99-300x200.png 300w, https://www.messiahworks.com/wp-content/uploads/2026/05/b2d21bcecda59c14ade4740d36639a99-1024x683.png 1024w, https://www.messiahworks.com/wp-content/uploads/2026/05/b2d21bcecda59c14ade4740d36639a99-150x100.png 150w, https://www.messiahworks.com/wp-content/uploads/2026/05/b2d21bcecda59c14ade4740d36639a99-768x512.png 768w" sizes="auto, (max-width: 1536px) 100vw, 1536px" /></a></p>
<p>Laravel 13では、AI関連の機能がかなり前面に出てきました。特に重要なのは、Laravelアプリ自体にAI機能を組み込むための <strong>Laravel AI SDK</strong> と、CodexなどのAIコーディングエージェントにLaravel開発を手伝わせるための <strong>Laravel Boost</strong> です。</p>
<p>名前だけ見ると似ていますが、役割はかなり違います。この記事では、<strong>Codex + Laravel 13</strong> で開発する場合に、Laravel AI SDKとLaravel Boostが何をしてくれるのかを整理します。</p>
<h2>結論：AI SDKとBoostは別物</h2>
<pre><code class="language-text">Laravel AI SDK
→ LaravelアプリにAI機能を組み込むためのもの

Laravel Boost
→ AIコーディングエージェントにLaravel開発を手伝わせるためのもの

Codex
→ コード生成・編集・テスト実行などを行うAI開発エージェント
</code></pre>
<p>AI SDKは<strong>アプリ利用者向けのAI機能</strong>を作るためのものです。一方、Boostは<strong>開発者向けのAI支援環境</strong>です。</p>
<h2>Laravel 13で何が変わったのか</h2>
<p>Laravel 13では、ファーストパーティのLaravel AI SDKが導入されました。これにより、OpenAI、Anthropic、GeminiなどのAIプロバイダーを、Laravelらしい統一的なAPIで扱えるようになっています。</p>
<p>また、Laravel Boostにより、Codex、Claude Code、Cursor、Gemini CLIなどのAIエージェントが、Laravelプロジェクトの情報や公式ドキュメントを参照しながらコードを書きやすくなりました。</p>
<p>Laravel 13を新規に使う場合は、PHP 8.3以上が必要です。今回はPHP 8.4で環境を作る前提にしています。</p>
<h2>全体像</h2>
<pre><code class="language-text">開発者
↓
Codex
↓
Laravel Boost
↓
Laravelプロジェクトの情報・DBスキーマ・ログ・Laravel公式ドキュメント

一方で、

Laravelアプリ
↓
Laravel AI SDK
↓
OpenAI / Anthropic / Gemini などのAIプロバイダー
</code></pre>
<p>Laravel Boostは、Codexに「このLaravelプロジェクトはこういう構成です」と教える役割です。Laravel AI SDKは、LaravelアプリからAIモデルを呼び出す役割です。</p>
<h2>Laravel Boostとは</h2>
<p>Laravel Boostは、AIコーディングエージェントがLaravelのベストプラクティスに沿ってコードを書けるようにするための開発支援ツールです。</p>
<p>たとえばCodexに、以下のような作業を頼むとします。</p>
<pre><code class="language-text">Laravel 13でリアルタイムチャット機能を作ってください。
</code></pre>
<p>BoostなしでもCodexはコードを書けます。しかし、BoostがあるとCodexは以下の情報を確認しながら作業できます。</p>
<ul>
<li>Laravelのバージョン</li>
<li>PHPのバージョン</li>
<li>インストール済みパッケージ</li>
<li>DB接続情報</li>
<li>DBスキーマ</li>
<li>Laravelのログ</li>
<li>直近のエラー</li>
<li>Laravel公式ドキュメント</li>
</ul>
<p>つまり、BoostはAIに対して「このプロジェクトの文脈」を渡すための仕組みです。</p>
<h2>Laravel Boostで使える主なMCPツール</h2>
<p>Laravel BoostをCodexに連携すると、以下のようなMCPツールが使えるようになります。</p>
<ul>
<li><code>application-info</code>：LaravelやPHPのバージョン、パッケージ情報を確認する</li>
<li><code>database-connections</code>：DB接続情報を確認する</li>
<li><code>database-schema</code>：テーブルやカラム構造を確認する</li>
<li><code>database-query</code>：DBにクエリを実行する</li>
<li><code>read-log-entries</code>：ログを読む</li>
<li><code>last-error</code>：直近エラーを確認する</li>
<li><code>search-docs</code>：Laravel公式ドキュメントを検索する</li>
<li><code>browser-logs</code>：ブラウザログを読む</li>
<li><code>get-absolute-url</code>：相対URLから絶対URLを作る</li>
</ul>
<p>これにより、Codexが「推測だけでコードを書く」状態から、「プロジェクトの実情を見てコードを書く」状態になります。</p>
<h2>Laravel Boostのインストール</h2>
<p>Laravelプロジェクトの中で実行します。</p>
<pre><code class="language-bash">composer require laravel/boost --dev
php artisan boost:install
</code></pre>
<p><code>--dev</code> が付いている通り、Boostは基本的に開発環境用のツールです。</p>
<p><code>php artisan boost:install</code> を実行すると、どのAIエージェント向けに設定するか聞かれます。Codexを使う場合は、AI agentsの選択で <strong>Codex</strong> を選びます。</p>
<pre><code class="language-text">Which AI agents would you like to configure?

□ Amp
□ Claude Code
&#x2611; Codex
□ Cursor
□ Gemini CLI
□ GitHub Copilot
...
</code></pre>
<p>インストール後、Codex側で以下を実行するとMCPの登録状況を確認できます。</p>
<pre><code class="language-text">/mcp
</code></pre>
<p>以下のように <code>laravel-boost</code> が表示されれば成功です。</p>
<pre><code class="language-text">laravel-boost
  Command: php artisan boost:mcp
  Tools: application-info, database-schema, search-docs, read-log-entries, ...
</code></pre>
<h2>CodexとBoostを組み合わせると何が嬉しいのか</h2>
<p>通常のAIコーディングでは、AIがプロジェクトの実態を知らないままコードを書くことがあります。その結果、存在しないカラム名を使ったり、古いLaravelの書き方をしたり、DB構造と合わないModelを書いたりすることがあります。</p>
<p>Boostを使うと、CodexがLaravelプロジェクトの状態を確認できます。たとえば、PHP 8.4、Laravel 13.11.1、MySQL、インストール済みパッケージなどを見た上で実装できます。</p>
<h2>BoostはアプリにAI機能を入れるものではない</h2>
<p>Laravel Boostを入れても、アプリ利用者向けのAIチャットボットが自動で作られるわけではありません。Boostは、あくまで<strong>開発支援</strong>です。</p>
<pre><code class="language-text">Boost
→ 開発者がCodexなどでLaravel開発しやすくなる

AI SDK
→ LaravelアプリにAI機能を組み込む
</code></pre>
<p>AIチャット、文章要約、画像生成、音声文字起こし、ベクトル検索などをアプリに入れたい場合は、Laravel AI SDKを使います。</p>
<h2>Laravel AI SDKとは</h2>
<p>Laravel AI SDKは、LaravelアプリからAIプロバイダーを扱うための公式SDKです。対応する機能は幅広く、たとえば以下のようなものがあります。</p>
<ul>
<li>テキスト生成</li>
<li>AIエージェント</li>
<li>ツール呼び出し</li>
<li>構造化出力</li>
<li>画像生成</li>
<li>音声合成</li>
<li>音声文字起こし</li>
<li>埋め込みベクトル</li>
<li>ベクトルストア連携</li>
<li>リランキング</li>
<li>ストリーミング</li>
<li>キュー連携</li>
<li>テスト支援</li>
</ul>
<p>Laravelらしい書き方でAI機能を扱えるのが特徴です。</p>
<h2>Laravel AI SDKのインストール</h2>
<p>AI SDKは以下でインストールします。</p>
<pre><code class="language-bash">composer require laravel/ai
</code></pre>
<p>次に設定ファイルとマイグレーションを公開します。</p>
<pre><code class="language-bash">php artisan vendor:publish --provider="Laravel\Ai\AiServiceProvider"
</code></pre>
<p>最後にマイグレーションを実行します。</p>
<pre><code class="language-bash">php artisan migrate
</code></pre>
<p>このマイグレーションにより、AI SDKが会話履歴を保存するためのテーブルが作成されます。</p>
<h2>AIプロバイダーのAPIキー設定</h2>
<p>利用するAIプロバイダーに応じて、<code>.env</code> にAPIキーを設定します。</p>
<pre><code class="language-env">OPENAI_API_KEY=
ANTHROPIC_API_KEY=
GEMINI_API_KEY=
GROQ_API_KEY=
MISTRAL_API_KEY=
DEEPSEEK_API_KEY=
OPENROUTER_API_KEY=
</code></pre>
<p>すべて設定する必要はありません。使うプロバイダーのキーだけ設定します。</p>
<h2>AI SDKでエージェントを作る</h2>
<p>AI SDKでは、AI処理の単位として「Agent」を作れます。</p>
<pre><code class="language-bash">php artisan make:agent ChatAssistant
</code></pre>
<p>構造化出力を使いたい場合は、以下のように作れます。</p>
<pre><code class="language-bash">php artisan make:agent ChatAssistant --structured
</code></pre>
<p>Agentは、AIへの指示、会話コンテキスト、ツール、出力形式などをまとめるクラスです。イメージとしては、Laravelアプリ内に置く「専門AI担当クラス」です。</p>
<h2>AI SDKの利用イメージ</h2>
<p>たとえば、チャット内容を要約するAIエージェントを作った場合、以下のような使い方になります。</p>
<pre><code class="language-php">&lt;?php

use App\Ai\Agents\ChatSummaryAgent;

$response = ChatSummaryAgent::make()
    -&gt;prompt('このチャットログを3行で要約してください。');

return (string) $response;
</code></pre>
<p>このように、LaravelのコードからAIを呼び出せます。</p>
<h2>リアルタイムチャットにAI SDKを組み込むなら</h2>
<p>今回作ったLaravel ReverbのリアルタイムチャットにAI SDKを足すなら、以下のような機能が考えられます。</p>
<ul>
<li>チャット内容の自動要約</li>
<li>不適切な投稿の検出</li>
<li>AI Botの自動返信</li>
<li>質問に対して過去ログから回答</li>
<li>会話タイトルの自動生成</li>
<li>投稿内容の感情分析</li>
<li>チャットログのベクトル検索</li>
</ul>
<p>たとえば、メッセージ投稿時にAIで不適切表現を判定する場合は、以下のような流れになります。</p>
<pre><code class="language-text">ユーザーが投稿
↓
Laravelでバリデーション
↓
AI SDKで内容チェック
↓
問題なければmessagesテーブルに保存
↓
MessageCreatedイベントをbroadcast
↓
Reverbで他ブラウザへ配信
</code></pre>
<h2>MCPとは何か</h2>
<p>Laravel Boostの話でよく出てくるのがMCPです。MCPはModel Context Protocolの略で、AIクライアントが外部ツールやアプリケーションとやり取りするための仕組みです。</p>
<p>Laravel Boostの場合、CodexはMCPを通じてLaravelアプリの情報を読みます。</p>
<pre><code class="language-text">Codex
↓
MCP
↓
Laravel Boost
↓
Laravelアプリの情報、DBスキーマ、ログ、ドキュメント検索
</code></pre>
<p>Laravel MCPという別パッケージもあり、こちらは自分のLaravelアプリをMCPサーバーとして公開するためのものです。Boostは「開発支援用のMCP」、Laravel MCPは「自分のアプリにMCPサーバーを作るための仕組み」と考えると分かりやすいです。</p>
<h2>Laravel BoostとLaravel MCPの違い</h2>
<table>
<thead>
<tr>
<th>項目</th>
<th>Laravel Boost</th>
<th>Laravel MCP</th>
</tr>
</thead>
<tbody>
<tr>
<td>主な目的</td>
<td>AIにLaravel開発を手伝わせる</td>
<td>LaravelアプリをMCPサーバー化する</td>
</tr>
<tr>
<td>利用者</td>
<td>開発者</td>
<td>AIクライアントや外部ツール</td>
</tr>
<tr>
<td>使いどころ</td>
<td>Codex、Cursor、Claude Codeなどで開発支援</td>
<td>自分のアプリにツール、リソース、プロンプトを公開</td>
</tr>
<tr>
<td>例</td>
<td>DBスキーマを見てControllerを作る</td>
<td>社内システムの検索ツールをAIに公開する</td>
</tr>
</tbody>
</table>
<h2>Codex + Boostで実際に頼めること</h2>
<p>今回のようなLaravelプロジェクトでは、Codexに以下のように依頼できます。</p>
<pre><code class="language-text">Laravel BoostのMCPを使って、このLaravel 13アプリにミニチャット機能を作ってください。

要件:
- messagesテーブルを作る
- Messageモデルを作る
- /messages で投稿一覧を表示する
- フォームから投稿できる
- body は required max:1000
- Bladeでシンプルに作る
- 実装前に計画を説明する
- 実装後に php artisan test を実行する
- Laravel Boostの application-info、database-schema、search-docs を使って進める
</code></pre>
<p>また、リアルタイム化なら以下のように頼めます。</p>
<pre><code class="language-text">Laravel BoostのMCPを使って、既存のミニチャット機能をLaravel Reverbでリアルタイム化してください。

要件:
- MessageCreatedイベントを作る
- ShouldBroadcastNowで即時broadcastする
- Echoでmessagesチャンネルを購読する
- 受信したメッセージをDOMに追加する
- 送信者の二重表示を避ける
- npm run buildとphp artisan testを実行する
</code></pre>
<p>ポイントは、単に「作って」と言うのではなく、使ってほしいBoostツールや確認してほしいことも明示することです。</p>
<h2>Codex利用時の注意点</h2>
<p>Codexに作業させるときは、便利な反面、確認も必要です。特に以下の操作は注意して承認した方が良いです。</p>
<ul>
<li><code>sudo</code></li>
<li><code>rm -rf</code></li>
<li><code>chmod -R</code></li>
<li><code>chown -R</code></li>
<li><code>composer update</code></li>
<li><code>npm update</code></li>
<li><code>php artisan migrate:fresh</code></li>
<li><code>DROP TABLE</code></li>
<li><code>TRUNCATE</code></li>
</ul>
<p>一方で、以下のような読み取り・確認系は比較的安全です。</p>
<ul>
<li><code>sed</code></li>
<li><code>cat</code></li>
<li><code>ls</code></li>
<li><code>find</code></li>
<li><code>rg</code></li>
<li><code>php artisan route:list</code></li>
<li><code>php artisan test</code></li>
</ul>
<h2>BoostとAI SDKを両方使う開発イメージ</h2>
<pre><code class="language-text">開発時:
Codex + Laravel Boost
→ AIにLaravelのコードを書いてもらう

アプリ実行時:
Laravel AI SDK
→ LaravelアプリからAIモデルを呼び出す
</code></pre>
<p>Boostは開発中に効きます。AI SDKはアプリが動いているときに効きます。同じAI関連でも、使われるタイミングが違います。</p>
<h2>今回のリアルタイムチャットでの発展例</h2>
<h3>1. AI Botをチャットに参加させる</h3>
<pre><code class="language-text">ユーザー投稿
↓
AI SDKで返信を生成
↓
AIの返信をmessagesテーブルに保存
↓
Reverbで全員に配信
</code></pre>
<h3>2. チャットログを要約する</h3>
<pre><code class="language-text">直近100件のメッセージを取得
↓
AI SDKで要約
↓
summariesテーブルに保存
</code></pre>
<h3>3. 過去ログ検索をAI化する</h3>
<pre><code class="language-text">メッセージ投稿
↓
AI SDKでembedding生成
↓
ベクトルDBや検索用テーブルに保存
↓
質問に近い過去ログを検索
↓
AIが回答
</code></pre>
<h2>AI SDK導入時の注意点</h2>
<ul>
<li>APIキーを絶対にGitに入れない</li>
<li>API利用料金が発生する</li>
<li>ユーザー入力をそのままAIに渡す場合は内容に注意する</li>
<li>AIの出力を信用しすぎない</li>
<li>個人情報や機密情報をAIに送る場合はルールを決める</li>
<li>レスポンスが遅い処理はキュー化を検討する</li>
</ul>
<p>特に、チャットログをAIに送る場合は、個人情報や社内情報が含まれる可能性があります。学習用サンプルでは問題になりにくいですが、実サービスでは設計段階で注意が必要です。</p>
<h2>Laravel 13でAI開発を始めるならどちらから触るべきか</h2>
<p>個人的には、まずLaravel Boostから触るのが良いと思います。理由は、Boostは既存のLaravel開発を便利にするものなので、すぐ効果を感じやすいからです。</p>
<p>おすすめの順番は以下です。</p>
<ol>
<li>Laravel 13プロジェクトを作る</li>
<li>Laravel Boostを入れる</li>
<li>CodexからBoost MCPを使って簡単な機能を作る</li>
<li>テストが通るところまで確認する</li>
<li>Laravel AI SDKを入れてアプリ内AI機能を試す</li>
</ol>
<p>最初からAI SDKで本格的なエージェントを作ろうとすると、APIキー、料金、プロンプト設計、ツール設計、キュー、DB保存などが絡んできます。まずはBoostで「AIにLaravel開発を手伝わせる」体験をしてから、AI SDKに進む方が理解しやすいです。</p>
<h2>まとめ</h2>
<pre><code class="language-text">Laravel Boost
→ CodexなどのAIエージェントにLaravel開発を手伝わせるもの

Laravel AI SDK
→ Laravelアプリ自体にAI機能を組み込むもの
</code></pre>
<p>Codex + Laravel Boostを使うと、AIがLaravelプロジェクトのバージョン、DBスキーマ、ログ、公式ドキュメントを確認しながらコードを書けます。</p>
<p>Laravel AI SDKを使うと、LaravelアプリからOpenAI、Anthropic、Geminiなどを統一的に扱い、AI Bot、要約、画像生成、音声処理、ベクトル検索などを実装できます。</p>
<p>今回のようにLaravel 13でリアルタイムチャットを作った後なら、次の発展としてAI SDKを組み込むのはかなり面白いと思います。まずはBoostで開発体験を良くし、その後AI SDKでアプリ機能を拡張していくのが現実的です。</p>
<h2>参考リンク</h2>
<ul>
<li><a href="https://laravel.com/docs/13.x/releases" target="_blank" rel="noopener">Laravel 13 Release Notes</a></li>
<li><a href="https://laravel.com/docs/13.x/ai-sdk" target="_blank" rel="noopener">Laravel AI SDK</a></li>
<li><a href="https://laravel.com/docs/13.x/boost" target="_blank" rel="noopener">Laravel Boost</a></li>
<li><a href="https://laravel.com/docs/13.x/mcp" target="_blank" rel="noopener">Laravel MCP</a></li>
<li><a href="https://developers.openai.com/codex/mcp" target="_blank" rel="noopener">Codex MCP</a></li>
<li><a href="https://developers.openai.com/codex/auth" target="_blank" rel="noopener">Codex Authentication</a></li>
</ul>The post <a href="https://www.messiahworks.com/archives/33648">Laravel 13のAI SDKとLaravel Boostとは？Codexと組み合わせたAI開発環境の整理</a> first appeared on <a href="https://www.messiahworks.com">メサイア・ワークス</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Laravel 13】ReverbとEchoでリアルタイムチャットを作る手順｜Lightsail + Ubuntu 24.04 + PHP 8.4</title>
		<link>https://www.messiahworks.com/archives/33640</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 21 May 2026 04:53:56 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[laravel]]></category>
		<guid isPermaLink="false">https://www.messiahworks.com/?p=33640</guid>

					<description><![CDATA[<p>Laravel 13でリアルタイムチャットを作ってみました。 最初は「メッセージを投稿して、他のブラウザにも即時反映されるだけなら簡単では？」と思っていましたが、実際にやってみると、Laravel本体だけでなく、Reve <a class="more-link" href="https://www.messiahworks.com/archives/33640">続きを読む <span class="screen-reader-text">  【Laravel 13】ReverbとEchoでリアルタイムチャットを作る手順｜Lightsail + Ubuntu 24.04 + PHP 8.4</span><span class="meta-nav">&#8594;</span></a></p>
The post <a href="https://www.messiahworks.com/archives/33640">【Laravel 13】ReverbとEchoでリアルタイムチャットを作る手順｜Lightsail + Ubuntu 24.04 + PHP 8.4</a> first appeared on <a href="https://www.messiahworks.com">メサイア・ワークス</a>.]]></description>
										<content:encoded><![CDATA[<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33640&amp;linkname=%E3%80%90Laravel%2013%E3%80%91Reverb%E3%81%A8Echo%E3%81%A7%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E3%82%8B%E6%89%8B%E9%A0%86%EF%BD%9CLightsail%20%2B%20Ubuntu%2024.04%20%2B%20PHP%208.4" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33640&amp;linkname=%E3%80%90Laravel%2013%E3%80%91Reverb%E3%81%A8Echo%E3%81%A7%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E3%82%8B%E6%89%8B%E9%A0%86%EF%BD%9CLightsail%20%2B%20Ubuntu%2024.04%20%2B%20PHP%208.4" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33640&amp;linkname=%E3%80%90Laravel%2013%E3%80%91Reverb%E3%81%A8Echo%E3%81%A7%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E3%82%8B%E6%89%8B%E9%A0%86%EF%BD%9CLightsail%20%2B%20Ubuntu%2024.04%20%2B%20PHP%208.4" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33640&#038;title=%E3%80%90Laravel%2013%E3%80%91Reverb%E3%81%A8Echo%E3%81%A7%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E3%82%8B%E6%89%8B%E9%A0%86%EF%BD%9CLightsail%20%2B%20Ubuntu%2024.04%20%2B%20PHP%208.4" data-a2a-url="https://www.messiahworks.com/archives/33640" data-a2a-title="【Laravel 13】ReverbとEchoでリアルタイムチャットを作る手順｜Lightsail + Ubuntu 24.04 + PHP 8.4"></a></p><p>Laravel 13でリアルタイムチャットを作ってみました。</p>
<p>最初は「メッセージを投稿して、他のブラウザにも即時反映されるだけなら簡単では？」と思っていましたが、実際にやってみると、Laravel本体だけでなく、Reverb、Broadcasting、Echo、Vite、WebSocket用ポート、Supervisorなど、意外と多くの部品が関係していました。</p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/05/47c99ce9f7e7b4e8fef909f1c6ed7b84.png"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/47c99ce9f7e7b4e8fef909f1c6ed7b84.png" alt="" width="1024" height="1536" class="alignnone size-full wp-image-33645" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/47c99ce9f7e7b4e8fef909f1c6ed7b84.png 1024w, https://www.messiahworks.com/wp-content/uploads/2026/05/47c99ce9f7e7b4e8fef909f1c6ed7b84-200x300.png 200w, https://www.messiahworks.com/wp-content/uploads/2026/05/47c99ce9f7e7b4e8fef909f1c6ed7b84-683x1024.png 683w, https://www.messiahworks.com/wp-content/uploads/2026/05/47c99ce9f7e7b4e8fef909f1c6ed7b84-100x150.png 100w, https://www.messiahworks.com/wp-content/uploads/2026/05/47c99ce9f7e7b4e8fef909f1c6ed7b84-768x1152.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<h2>完成形</h2>
<p>今回作るのは、最小構成のリアルタイムチャットです。</p>
<p>できることは以下です。</p>
<ul>
<li><code>/messages</code> にアクセスするとメッセージ一覧が表示される</li>
<li>フォームからメッセージを投稿できる</li>
<li>投稿内容はMySQLの <code>messages</code> テーブルに保存される</li>
<li>別ブラウザで開いている画面にも、投稿がリアルタイム反映される</li>
<li>Laravel ReverbをSupervisorで常駐化する</li>
</ul>
<p>逆に、まだ作らないものは以下です。</p>
<ul>
<li>ログイン機能</li>
<li>ユーザー名表示</li>
<li>複数チャットルーム</li>
<li>既読・未読</li>
<li>HTTPS化</li>
<li>投稿削除・編集</li>
</ul>
<p>まずは「Laravelでリアルタイムチャットの中核部分を理解する」ことを目的にします。</p>
<h2>使用環境</h2>
<p>今回の環境です。</p>
<ul>
<li>AWS Lightsail：AWSが提供する、VPS感覚で使えるシンプルなクラウドサーバーサービス。</li>
<li>Ubuntu 24.04 LTS：長期サポート版のLinux OSで、今回のLaravelアプリを動かす土台。</li>
<li>PHP 8.4：Laravel 13を動かすためのサーバーサイド言語実行環境。</li>
<li>MySQL：投稿されたチャットメッセージを保存するデータベース。</li>
<li>nginx：ブラウザからのHTTPアクセスを受けて、Laravelへ処理を渡すWebサーバー。</li>
<li>Composer：Laravel本体やPHPライブラリをインストール・管理するPHP用パッケージ管理ツール。</li>
<li>Node.js 22：ViteやLaravel Echoなど、フロントエンド関連のビルドに使うJavaScript実行環境。</li>
<li>Laravel 13：今回のチャットアプリ本体を作るPHPフレームワーク。</li>
<li>Laravel Reverb：Laravel公式のWebSocketサーバーで、リアルタイム通信を担当する。</li>
<li>Laravel Echo：ブラウザ側でReverbからのリアルタイム通知を受け取るJavaScriptライブラリ。</li>
<li>Vite：CSSやJavaScriptを本番用にまとめるフロントエンドビルドツール。</li>
<li>Supervisor：Reverbなどの常駐プロセスを起動・監視・自動再起動するためのプロセス管理ツール。</li>
</ul>
<p>Laravel 13はPHP 8.3以上が必要です。今回はPHP 8.4を使いました。</p>
<h2>全体の仕組み</h2>
<p>リアルタイムチャットの流れはこうです。</p>
<pre><code class="language-text">ユーザーAがメッセージ投稿
↓
Laravelがバリデーション
↓
messagesテーブルに保存
↓
MessageCreatedイベントをbroadcast
↓
Laravel ReverbがWebSocketで配信
↓
ユーザーBのブラウザでLaravel Echoが受信
↓
JavaScriptで画面にメッセージを追加</code></pre>
<p>普通の投稿フォームなら、DBに保存してリダイレクトすれば終わりです。</p>
<p>リアルタイム化する場合は、DB保存後に「新しいメッセージができた」というイベントをWebSocketで他のブラウザへ通知します。</p>
<h2>1. サーバーを用意する</h2>
<p>Lightsailでは、LAMPブループリントではなく、OS OnlyのUbuntuを選びました。</p>
<p>Laravel 13を使うなら、最初からUbuntuを選んでPHP 8.4を入れる方がきれいです。</p>
<p>Lightsailの作成画面では、以下のようにしました。</p>
<pre><code class="language-text">Platform: Linux/Unix
Blueprint: OS Only
OS: Ubuntu 24.04 LTS
Plan: 2GB RAM以上
Static IP: 割り当てる</code></pre>
<p>SSHユーザーはUbuntuの場合、通常は <code>ubuntu</code> です。</p>
<pre><code class="language-bash">ssh -i &quot;C:\Users\ユーザー名\.ssh\lightsail-key.pem&quot; ubuntu@サーバーの固定IP</code></pre>
<h2>2. Ubuntuを更新する</h2>
<p>まずはOSを更新します。</p>
<pre><code class="language-bash">sudo apt update
sudo apt upgrade -y
sudo reboot</code></pre>
<p>再接続後、タイムゾーンを日本にします。</p>
<pre><code class="language-bash">sudo timedatectl set-timezone Asia/Tokyo
timedatectl</code></pre>
<p>基本ツールも入れます。</p>
<pre><code class="language-bash">sudo apt install -y curl git unzip ca-certificates lsb-release software-properties-common</code></pre>
<h2>3. swapを作る</h2>
<p>2GB RAMのサーバーだと、Composerやnpmでメモリが苦しくなることがあります。</p>
<p>念のため2GBのswapを作りました。</p>
<pre><code class="language-bash">sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo &#x27;/swapfile none swap sw 0 0&#x27; | sudo tee -a /etc/fstab
free -h</code></pre>
<h2>4. nginxとMySQLを入れる</h2>
<pre><code class="language-bash">sudo apt install -y nginx mysql-server
sudo systemctl enable nginx
sudo systemctl enable mysql
sudo systemctl status nginx --no-pager
sudo systemctl status mysql --no-pager</code></pre>
<p><code>active (running)</code> になっていればOKです。</p>
<h2>5. PHP 8.4を入れる</h2>
<p>Ubuntu標準のPHPではなく、PHP 8.4を使うためにPPAを追加します。</p>
<pre><code class="language-bash">sudo add-apt-repository ppa:ondrej/php -y
sudo apt update</code></pre>
<p>Laravelでよく使う拡張もまとめて入れます。</p>
<pre><code class="language-bash">sudo apt install -y php8.4 php8.4-fpm php8.4-cli php8.4-mysql php8.4-mbstring php8.4-xml php8.4-curl php8.4-zip php8.4-bcmath php8.4-intl php8.4-gd php8.4-sqlite3</code></pre>
<p>確認します。</p>
<pre><code class="language-bash">php -v
php-fpm8.4 -v
php -m | grep -i sqlite</code></pre>
<p><code>PHP 8.4.x</code>、<code>pdo_sqlite</code>、<code>sqlite3</code> が表示されればOKです。</p>
<h2>6. Composerを入れる</h2>
<pre><code class="language-bash">cd ~
curl -sS https://getcomposer.org/installer -o composer-setup.php
php composer-setup.php
sudo mv composer.phar /usr/local/bin/composer
composer -V</code></pre>
<h2>7. Node.js 22を入れる</h2>
<p>Ubuntu標準のNode.jsだと古く、Viteでエラーになることがあります。</p>
<p>今回もNode.js 18では以下のようなエラーになりました。</p>
<pre><code class="language-text">Vite requires Node.js version 20.19+ or 22.12+</code></pre>
<p>Node.js 22を入れます。</p>
<pre><code class="language-bash">curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
node -v
npm -v</code></pre>
<h2>8. Laravel用のDBを作る</h2>
<p>MySQLに入ります。</p>
<pre><code class="language-bash">sudo mysql</code></pre>
<p>DBとユーザーを作ります。</p>
<pre><code class="language-sql">CREATE DATABASE laravel13_chat CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

CREATE USER &#x27;laravel_user&#x27;@&#x27;localhost&#x27; IDENTIFIED BY &#x27;ここに強いパスワードを入れる&#x27;;

GRANT ALL PRIVILEGES ON laravel13_chat.* TO &#x27;laravel_user&#x27;@&#x27;localhost&#x27;;

FLUSH PRIVILEGES;

EXIT;</code></pre>
<p>今回は日本語検索での意図しない一致を避けるため、照合順序は <code>utf8mb4_general_ci</code> にしました。</p>
<p><code>utf8mb4_unicode_ci</code> は便利な面もありますが、日本語ではひらがな・カタカナ・濁音・半濁音などをかなり広く同一視することがあり、通常のチャット検索では違和感が出る可能性があります。</p>
<h2>9. Laravel 13プロジェクトを作る</h2>
<pre><code class="language-bash">cd /var/www
sudo chown -R ubuntu:ubuntu /var/www
composer create-project laravel/laravel:^13.0 laravel13-chat
cd /var/www/laravel13-chat
php artisan --version</code></pre>
<p><code>Laravel Framework 13.x</code> と出ればOKです。</p>
<h2>10. .envを設定する</h2>
<p><code>.env</code> を編集します。</p>
<pre><code class="language-bash">nano .env</code></pre>
<p>DB設定を変更します。</p>
<pre><code class="language-env">APP_URL=http://サーバーの固定IP
APP_LOCALE=ja
APP_FALLBACK_LOCALE=ja
APP_FAKER_LOCALE=ja_JP

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel13_chat
DB_USERNAME=laravel_user
DB_PASSWORD=ここにDBパスワードを入れる</code></pre>
<p>マイグレーションを実行します。</p>
<pre><code class="language-bash">php artisan migrate</code></pre>
<h2>11. Viteをビルドする</h2>
<pre><code class="language-bash">npm install
npm run build</code></pre>
<p>LaravelではBladeを使う場合でも、CSSやJavaScriptはViteでビルドされます。</p>
<p><code>resources/js/app.js</code> や <code>resources/css/app.css</code> を変更した場合、本番表示では <code>npm run build</code> が必要です。</p>
<h2>12. nginxでLaravelを公開する</h2>
<p>nginx設定を作ります。</p>
<pre><code class="language-bash">sudo nano /etc/nginx/sites-available/laravel13-chat</code></pre>
<p>以下を貼ります。</p>
<pre><code class="language-nginx">server {
    listen 80;
    listen [::]:80;

    server_name サーバーの固定IP;

    root /var/www/laravel13-chat/public;
    index index.php index.html;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico {
        access_log off;
        log_not_found off;
    }

    location = /robots.txt {
        access_log off;
        log_not_found off;
    }

    error_page 404 /index.php;

    location ~ ^/index\.php(/|$) {
        fastcgi_pass unix:/run/php/php8.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_hide_header X-Powered-By;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}</code></pre>
<p>有効化します。</p>
<pre><code class="language-bash">sudo ln -s /etc/nginx/sites-available/laravel13-chat /etc/nginx/sites-enabled/laravel13-chat
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx</code></pre>
<p>権限も整えます。</p>
<pre><code class="language-bash">cd /var/www/laravel13-chat
sudo chown -R ubuntu:www-data /var/www/laravel13-chat
sudo chmod -R 775 storage bootstrap/cache</code></pre>
<p>ブラウザで確認します。</p>
<pre><code class="language-text">http://サーバーの固定IP</code></pre>
<p>Laravelの初期画面が出れば成功です。</p>
<h2>13. まず普通のメッセージ投稿機能を作る</h2>
<p>ここからアプリ側の実装です。</p>
<p>まず、メッセージ用のModel、Migration、Controller、Request、Factory、Testを作ります。</p>
<pre><code class="language-bash">php artisan make:model Message -mf
php artisan make:controller MessageController
php artisan make:request StoreMessageRequest
php artisan make:test MessagesTest</code></pre>
<h2>14. messagesテーブルを作る</h2>
<p><code>database/migrations/xxxx_xx_xx_create_messages_table.php</code> を編集します。</p>
<pre><code class="language-php">&lt;?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * マイグレーションを実行します。
     */
    public function up(): void
    {
        Schema::create(&#x27;messages&#x27;, function (Blueprint $table) {
            $table-&gt;id();
            $table-&gt;text(&#x27;body&#x27;);
            $table-&gt;timestamps();

            $table-&gt;index(&#x27;created_at&#x27;);
        });
    }

    /**
     * マイグレーションを元に戻します。
     */
    public function down(): void
    {
        Schema::dropIfExists(&#x27;messages&#x27;);
    }
};</code></pre>
<p>マイグレーションを実行します。</p>
<pre><code class="language-bash">php artisan migrate</code></pre>
<h2>15. Messageモデルを作る</h2>
<p><code>app/Models/Message.php</code> です。</p>
<pre><code class="language-php">&lt;?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Message extends Model
{
    /** @use HasFactory&lt;\Database\Factories\MessageFactory&gt; */
    use HasFactory;

    /**
     * 一括代入できる属性です。
     *
     * @var list&lt;string&gt;
     */
    protected $fillable = [
        &#x27;body&#x27;,
    ];
}</code></pre>
<h2>16. バリデーションを作る</h2>
<p><code>app/Http/Requests/StoreMessageRequest.php</code> です。</p>
<pre><code class="language-php">&lt;?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StoreMessageRequest extends FormRequest
{
    /**
     * このリクエストを許可するか判定します。
     */
    public function authorize(): bool
    {
        return true;
    }

    /**
     * バリデーションルールを返します。
     *
     * @return array&lt;string, list&lt;string&gt;|string&gt;
     */
    public function rules(): array
    {
        return [
            &#x27;body&#x27; =&gt; [&#x27;required&#x27;, &#x27;string&#x27;, &#x27;max:1000&#x27;],
        ];
    }
}</code></pre>
<h2>17. Controllerを作る</h2>
<p><code>app/Http/Controllers/MessageController.php</code> です。</p>
<pre><code class="language-php">&lt;?php

namespace App\Http\Controllers;

use App\Http\Requests\StoreMessageRequest;
use App\Models\Message;
use Illuminate\Http\RedirectResponse;
use Illuminate\View\View;

class MessageController extends Controller
{
    /**
     * メッセージ一覧を表示します。
     */
    public function index(): View
    {
        return view(&#x27;messages.index&#x27;, [
            &#x27;messages&#x27; =&gt; Message::query()
                -&gt;latest()
                -&gt;get(),
        ]);
    }

    /**
     * メッセージを保存します。
     */
    public function store(StoreMessageRequest $request): RedirectResponse
    {
        Message::create($request-&gt;validated());

        return redirect()
            -&gt;route(&#x27;messages.index&#x27;)
            -&gt;with(&#x27;status&#x27;, &#x27;メッセージを投稿しました。&#x27;);
    }
}</code></pre>
<h2>18. ルートを追加する</h2>
<p><code>routes/web.php</code> に追加します。</p>
<pre><code class="language-php">&lt;?php

use App\Http\Controllers\MessageController;
use Illuminate\Support\Facades\Route;

Route::get(&#x27;/&#x27;, fn () =&gt; redirect()-&gt;route(&#x27;messages.index&#x27;));

Route::get(&#x27;/messages&#x27;, [MessageController::class, &#x27;index&#x27;])
    -&gt;name(&#x27;messages.index&#x27;);

Route::post(&#x27;/messages&#x27;, [MessageController::class, &#x27;store&#x27;])
    -&gt;name(&#x27;messages.store&#x27;);</code></pre>
<h2>19. Blade画面を作る</h2>
<p><code>resources/views/messages/index.blade.php</code> を作ります。</p>
<pre><code class="language-blade">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ja&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;utf-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
    &lt;meta name=&quot;csrf-token&quot; content=&quot;{{ csrf_token() }}&quot;&gt;

    &lt;title&gt;Messages&lt;/title&gt;

    @vite([&#x27;resources/css/app.css&#x27;, &#x27;resources/js/app.js&#x27;])
&lt;/head&gt;
&lt;body&gt;
    &lt;main class=&quot;mx-auto max-w-3xl p-6&quot;&gt;
        &lt;header class=&quot;mb-6 flex items-center justify-between&quot;&gt;
            &lt;h1 class=&quot;text-2xl font-bold&quot;&gt;Messages&lt;/h1&gt;
            &lt;p class=&quot;text-sm text-gray-500&quot;&gt;{{ $messages-&gt;count() }} total&lt;/p&gt;
        &lt;/header&gt;

        @if (session(&#x27;status&#x27;))
            &lt;div class=&quot;mb-4 rounded border border-green-300 p-3 text-green-700&quot;&gt;
                {{ session(&#x27;status&#x27;) }}
            &lt;/div&gt;
        @endif

        &lt;form method=&quot;POST&quot; action=&quot;{{ route(&#x27;messages.store&#x27;) }}&quot; class=&quot;mb-6 rounded border p-4&quot;&gt;
            @csrf

            &lt;label for=&quot;body&quot; class=&quot;mb-2 block font-semibold&quot;&gt;Body&lt;/label&gt;
            &lt;textarea
                id=&quot;body&quot;
                name=&quot;body&quot;
                rows=&quot;4&quot;
                class=&quot;w-full rounded border p-2&quot;
                required
            &gt;{{ old(&#x27;body&#x27;) }}&lt;/textarea&gt;

            @error(&#x27;body&#x27;)
                &lt;p class=&quot;mt-2 text-sm text-red-600&quot;&gt;{{ $message }}&lt;/p&gt;
            @enderror

            &lt;div class=&quot;mt-3 text-right&quot;&gt;
                &lt;button type=&quot;submit&quot; class=&quot;rounded bg-green-600 px-4 py-2 text-white&quot;&gt;
                    Post
                &lt;/button&gt;
            &lt;/div&gt;
        &lt;/form&gt;

        &lt;section id=&quot;messages&quot; class=&quot;space-y-3&quot;&gt;
            @foreach ($messages as $message)
                &lt;article class=&quot;rounded border p-4&quot; data-message-id=&quot;{{ $message-&gt;id }}&quot;&gt;
                    &lt;p&gt;{{ $message-&gt;body }}&lt;/p&gt;
                    &lt;time class=&quot;mt-2 block text-xs text-gray-500&quot;&gt;
                        {{ $message-&gt;created_at-&gt;format(&#x27;Y-m-d H:i&#x27;) }}
                    &lt;/time&gt;
                &lt;/article&gt;
            @endforeach
        &lt;/section&gt;
    &lt;/main&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>この段階ではまだリアルタイムではありません。</p>
<p>ただし、ここまでで「普通の投稿型チャット」は動きます。</p>
<h2>20. テストを書く</h2>
<p><code>tests/Feature/MessagesTest.php</code> で以下のような内容を確認します。</p>
<ul>
<li><code>/messages</code> が表示できる</li>
<li>メッセージを投稿できる</li>
<li><code>body</code> は必須</li>
<li><code>body</code> は1000文字まで</li>
<li>1000文字を超えるとエラー</li>
</ul>
<p>テストを実行します。</p>
<pre><code class="language-bash">php artisan test</code></pre>
<p>ここまで通れば、投稿型チャットとしては完成です。</p>
<h2>21. Reverbをインストールする</h2>
<p>次にリアルタイム化します。</p>
<pre><code class="language-bash">php artisan install:broadcasting --reverb</code></pre>
<p>途中でNode関連がうまく入らない場合は、手動で入れます。</p>
<pre><code class="language-bash">npm install --save-dev laravel-echo pusher-js</code></pre>
<h2>22. .envにReverb設定を追加する</h2>
<p><code>.env</code> のReverb周辺を設定します。</p>
<pre><code class="language-env">BROADCAST_CONNECTION=reverb

REVERB_APP_ID=任意のID
REVERB_APP_KEY=任意のキー
REVERB_APP_SECRET=任意のシークレット

REVERB_SERVER_HOST=0.0.0.0
REVERB_SERVER_PORT=8080

REVERB_HOST=サーバーの固定IP
REVERB_PORT=8080
REVERB_SCHEME=http

VITE_REVERB_APP_KEY=&quot;${REVERB_APP_KEY}&quot;
VITE_REVERB_HOST=&quot;${REVERB_HOST}&quot;
VITE_REVERB_PORT=&quot;${REVERB_PORT}&quot;
VITE_REVERB_SCHEME=&quot;${REVERB_SCHEME}&quot;</code></pre>
<p>ここで重要なのは、<code>REVERB_HOST</code> を <code>localhost</code> にしないことです。</p>
<p>ブラウザ上の <code>localhost</code> は、Lightsailサーバーではなく、自分のPCを指します。</p>
<p>そのため、外部ブラウザから接続するなら、<code>REVERB_HOST</code> はサーバーの固定IPやドメインにします。</p>
<h2>23. イベントを作る</h2>
<p>新しいメッセージを配信するイベントを作ります。</p>
<pre><code class="language-bash">php artisan make:event MessageCreated</code></pre>
<p><code>app/Events/MessageCreated.php</code> を編集します。</p>
<pre><code class="language-php">&lt;?php

namespace App\Events;

use App\Models\Message;
use Illuminate\Broadcasting\Channel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class MessageCreated implements ShouldBroadcastNow
{
    use Dispatchable;
    use SerializesModels;

    public function __construct(
        public Message $message,
    ) {
    }

    /**
     * イベントを配信するチャンネルを返します。
     */
    public function broadcastOn(): Channel
    {
        return new Channel(&#x27;messages&#x27;);
    }

    /**
     * ブラウザ側で受け取るイベント名を返します。
     */
    public function broadcastAs(): string
    {
        return &#x27;message.created&#x27;;
    }

    /**
     * ブラウザへ送るデータを返します。
     *
     * @return array&lt;string, mixed&gt;
     */
    public function broadcastWith(): array
    {
        return [
            &#x27;id&#x27; =&gt; $this-&gt;message-&gt;id,
            &#x27;body&#x27; =&gt; $this-&gt;message-&gt;body,
            &#x27;created_at&#x27; =&gt; $this-&gt;message-&gt;created_at?-&gt;format(&#x27;Y-m-d H:i&#x27;),
        ];
    }
}</code></pre>
<p>今回は <code>ShouldBroadcastNow</code> を使っています。</p>
<p>そのため、キューを使わず即時配信されます。</p>
<p><code>ShouldBroadcast</code> にする場合は、別途 <code>queue:work</code> が必要です。</p>
<h2>24. 投稿時にイベントをbroadcastする</h2>
<p><code>MessageController</code> の <code>store</code> を変更します。</p>
<pre><code class="language-php">use App\Events\MessageCreated;

public function store(StoreMessageRequest $request): RedirectResponse
{
    $message = Message::create($request-&gt;validated());

    broadcast(new MessageCreated($message))-&gt;toOthers();

    return redirect()
        -&gt;route(&#x27;messages.index&#x27;)
        -&gt;with(&#x27;status&#x27;, &#x27;メッセージを投稿しました。&#x27;);
}</code></pre>
<p><code>toOthers()</code> を使うことで、投稿者自身にはWebSocket通知を返さないようにしています。</p>
<p>これにより、投稿者側で同じメッセージが二重表示されるのを防ぎます。</p>
<h2>25. Echoを初期化する</h2>
<p><code>resources/js/echo.js</code> を作ります。</p>
<pre><code class="language-js">import Echo from &#x27;laravel-echo&#x27;;
import Pusher from &#x27;pusher-js&#x27;;

window.Pusher = Pusher;

window.Echo = new Echo({
    broadcaster: &#x27;reverb&#x27;,
    key: import.meta.env.VITE_REVERB_APP_KEY,
    wsHost: import.meta.env.VITE_REVERB_HOST,
    wsPort: import.meta.env.VITE_REVERB_PORT ?? 80,
    wssPort: import.meta.env.VITE_REVERB_PORT ?? 443,
    forceTLS: (import.meta.env.VITE_REVERB_SCHEME ?? &#x27;https&#x27;) === &#x27;https&#x27;,
    enabledTransports: [&#x27;ws&#x27;, &#x27;wss&#x27;],
});</code></pre>
<h2>26. app.jsでメッセージを受信する</h2>
<p><code>resources/js/app.js</code> でEchoを読み込みます。</p>
<pre><code class="language-js">import &#x27;./bootstrap&#x27;;
import &#x27;./echo&#x27;;

const messages = document.querySelector(&#x27;#messages&#x27;);
const template = document.querySelector(&#x27;#message-template&#x27;);

if (messages &amp;&amp; template &amp;&amp; window.Echo) {
    window.Echo.channel(&#x27;messages&#x27;)
        .listen(&#x27;.message.created&#x27;, (event) =&gt; {
            if (document.querySelector(<code>[data-message-id=&quot;${event.id}&quot;]</code>)) {
                return;
            }

            const clone = template.content.cloneNode(true);
            const article = clone.querySelector(&#x27;[data-message-id]&#x27;);
            const body = clone.querySelector(&#x27;[data-message-body]&#x27;);
            const createdAt = clone.querySelector(&#x27;[data-message-created-at]&#x27;);

            article.dataset.messageId = event.id;
            body.textContent = event.body;
            createdAt.textContent = event.created_at;

            messages.prepend(clone);
        });
}</code></pre>
<h2>27. Bladeにtemplateを追加する</h2>
<p><code>resources/views/messages/index.blade.php</code> にリアルタイム追加用のtemplateを追加します。</p>
<pre><code class="language-blade">&lt;template id=&quot;message-template&quot;&gt;
    &lt;article class=&quot;rounded border p-4&quot; data-message-id=&quot;&quot;&gt;
        &lt;p data-message-body&gt;&lt;/p&gt;
        &lt;time class=&quot;mt-2 block text-xs text-gray-500&quot; data-message-created-at&gt;&lt;/time&gt;
    &lt;/article&gt;
&lt;/template&gt;</code></pre>
<p>既存のメッセージ一覧には <code>data-message-id</code> を付けておきます。</p>
<pre><code class="language-blade">&lt;article class=&quot;rounded border p-4&quot; data-message-id=&quot;{{ $message-&gt;id }}&quot;&gt;
    &lt;p&gt;{{ $message-&gt;body }}&lt;/p&gt;
    &lt;time class=&quot;mt-2 block text-xs text-gray-500&quot;&gt;
        {{ $message-&gt;created_at-&gt;format(&#x27;Y-m-d H:i&#x27;) }}
    &lt;/time&gt;
&lt;/article&gt;</code></pre>
<h2>28. Viteを再ビルドする</h2>
<p><code>.env</code> の <code>VITE_REVERB_*</code> や <code>resources/js/*</code> を変更したら、必ずビルドします。</p>
<pre><code class="language-bash">php artisan config:clear
npm run build</code></pre>
<p>これを忘れると、ブラウザ側JavaScriptが古い設定のままになり、<code>ws://localhost:8080</code> に接続しようとして失敗します。</p>
<h2>29. Lightsailで8080番ポートを開ける</h2>
<p>Reverbは8080番ポートで動かします。</p>
<p>LightsailのNetworkingで、IPv4 Firewallに以下を追加します。</p>
<pre><code class="language-text">Application: Custom
Protocol: TCP
Port: 8080
Source: Any IPv4 address</code></pre>
<p>検証段階では <code>Any IPv4 address</code> で構いません。</p>
<p>本番では、ドメインやHTTPS構成、リバースプロキシを含めて考えた方が良いです。</p>
<h2>30. Reverbを起動する</h2>
<p>まず手動で起動します。</p>
<pre><code class="language-bash">cd /var/www/laravel13-chat
php artisan reverb:start --host=0.0.0.0 --port=8080 --hostname=サーバーの固定IP</code></pre>
<p>この状態でブラウザを2つ開きます。</p>
<pre><code class="language-text">http://サーバーの固定IP/messages</code></pre>
<p>片方で投稿して、もう片方に即時反映されれば成功です。</p>
<h2>31. SupervisorでReverbを常駐化する</h2>
<p>手動起動のままだと、SSHを切るとReverbが止まります。</p>
<p>Supervisorで常駐化します。</p>
<pre><code class="language-bash">sudo apt install -y supervisor
sudo systemctl enable supervisor
sudo systemctl start supervisor</code></pre>
<p>設定ファイルを作ります。</p>
<pre><code class="language-bash">sudo nano /etc/supervisor/conf.d/laravel-reverb.conf</code></pre>
<p>中身は以下です。</p>
<pre><code class="language-ini">[program:laravel-reverb]
process_name=%(program_name)s
command=/usr/bin/php /var/www/laravel13-chat/artisan reverb:start --host=0.0.0.0 --port=8080 --hostname=サーバーの固定IP
directory=/var/www/laravel13-chat
autostart=true
autorestart=true
user=www-data
redirect_stderr=true
stdout_logfile=/var/log/supervisor/laravel-reverb.log
stopwaitsecs=10</code></pre>
<p>Supervisorに読み込ませます。</p>
<pre><code class="language-bash">sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl status</code></pre>
<p><code>laravel-reverb RUNNING</code> と出ればOKです。</p>
<p>ログ確認は以下です。</p>
<pre><code class="language-bash">sudo tail -f /var/log/supervisor/laravel-reverb.log</code></pre>
<h2>32. Reverbを再起動したい場合</h2>
<p>コードや設定を変えた場合は、Reverbを再起動します。</p>
<pre><code class="language-bash">cd /var/www/laravel13-chat
php artisan reverb:restart</code></pre>
<p>またはSupervisorから再起動します。</p>
<pre><code class="language-bash">sudo supervisorctl restart laravel-reverb</code></pre>
<h2>33. よくハマったポイント</h2>
<h3>PHP 8.2ではLaravel 13が厳しい</h3>
<p>Laravel 13を使うならPHP 8.3以上が必要です。</p>
<p>今回はPHP 8.4を入れました。</p>
<h3>Node.js 18ではViteが動かなかった</h3>
<p>Ubuntu標準の <code>nodejs</code> は古いことがあります。</p>
<p>今回はViteがNode.js 20.19以上または22.12以上を要求したため、Node.js 22に入れ替えました。</p>
<h3>localhostはサーバーではなくブラウザ側のPC</h3>
<p>今回一番分かりづらかったのがここです。</p>
<p><code>.env</code> に以下のように書くと、ブラウザ側では自分のPCの <code>localhost</code> を見に行ってしまいます。</p>
<pre><code class="language-env">REVERB_HOST=localhost</code></pre>
<p>外部ブラウザからLightsailのReverbへ接続するなら、固定IPまたはドメインを指定します。</p>
<pre><code class="language-env">REVERB_HOST=サーバーの固定IP</code></pre>
<h3>.envを変えたらnpm run buildが必要</h3>
<p><code>VITE_</code> で始まる環境変数は、フロントエンドのビルドに埋め込まれます。</p>
<p>そのため、<code>.env</code> を変えたら以下が必要です。</p>
<pre><code class="language-bash">php artisan config:clear
npm run build</code></pre>
<h3>8080番ポートを開けないとWebSocket接続できない</h3>
<p>HTTPの80番だけでなく、Reverb用の8080番もLightsailのFirewallで許可する必要があります。</p>
<h2>34. いまの構成で足りないもの</h2>
<p>今回作ったのは、最小構成のリアルタイムチャットです。</p>
<p>実用化するなら、次は以下が必要です。</p>
<ul>
<li>ログイン機能</li>
<li>ユーザー名表示</li>
<li>複数ルーム</li>
<li>HTTPS化</li>
<li><code>APP_DEBUG=false</code></li>
<li>投稿削除・編集</li>
<li>スパム対策</li>
<li>CSRFや認可の確認</li>
<li>Reverbを443番経由で使う構成</li>
<li><code>.env</code> 秘密情報のローテーション</li>
</ul>
<p>特に公開するなら、最低でも以下は必要です。</p>
<pre><code class="language-env">APP_ENV=production
APP_DEBUG=false</code></pre>
<p>また、学習中に <code>.env</code> の中身をどこかに貼った場合は、以下を作り直した方が安全です。</p>
<ul>
<li><code>APP_KEY</code></li>
<li>DBパスワード</li>
<li><code>REVERB_APP_KEY</code></li>
<li><code>REVERB_APP_SECRET</code></li>
</ul>
<h2>まとめ</h2>
<p>Laravel 13でリアルタイムチャットを作るには、単にフォームを作るだけではなく、以下の部品が関係します。</p>
<ul>
<li>LaravelのController / Request / Model / Migration</li>
<li>Blade</li>
<li>MySQL</li>
<li>Broadcasting</li>
<li>Laravel Reverb</li>
<li>Laravel Echo</li>
<li>Vite</li>
<li>WebSocket用ポート</li>
<li>Supervisor</li>
</ul>
<p>最初は部品が多くて大変ですが、一度動くところまで作ると、流れはかなりシンプルです。</p>
<pre><code class="language-text">DBに保存
↓
イベントをbroadcast
↓
Reverbで配信
↓
Echoで受信
↓
画面に追加</code></pre>
<p>この中核が理解できれば、ログイン付きチャットや複数ルーム、既読機能などにも発展させやすくなります。</p>The post <a href="https://www.messiahworks.com/archives/33640">【Laravel 13】ReverbとEchoでリアルタイムチャットを作る手順｜Lightsail + Ubuntu 24.04 + PHP 8.4</a> first appeared on <a href="https://www.messiahworks.com">メサイア・ワークス</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>足立市場の一般開放日(偶数月の第二土曜日)に行ってきた。昔の築地を小さくした感じ。ネギマそば600円＠たけうちを食す。</title>
		<link>https://www.messiahworks.com/archives/33618</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 12 May 2026 04:47:42 +0000</pubDate>
				<category><![CDATA[食べ歩き]]></category>
		<guid isPermaLink="false">https://www.messiahworks.com/?p=33618</guid>

					<description><![CDATA[<p>足立市場の一般開放日(偶数月の第二土曜日)に行ってきた。昔の築地を小さくした感じ。ネギマそば600円＠たけうちを食す。 年に6回しかないし、暑すぎず寒すぎず、雨が降ってない、特に用事もない、このタイミングに行くしかない！ <a class="more-link" href="https://www.messiahworks.com/archives/33618">続きを読む <span class="screen-reader-text">  足立市場の一般開放日(偶数月の第二土曜日)に行ってきた。昔の築地を小さくした感じ。ネギマそば600円＠たけうちを食す。</span><span class="meta-nav">&#8594;</span></a></p>
The post <a href="https://www.messiahworks.com/archives/33618">足立市場の一般開放日(偶数月の第二土曜日)に行ってきた。昔の築地を小さくした感じ。ネギマそば600円＠たけうちを食す。</a> first appeared on <a href="https://www.messiahworks.com">メサイア・ワークス</a>.]]></description>
										<content:encoded><![CDATA[<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33618&amp;linkname=%E8%B6%B3%E7%AB%8B%E5%B8%82%E5%A0%B4%E3%81%AE%E4%B8%80%E8%88%AC%E9%96%8B%E6%94%BE%E6%97%A5%28%E5%81%B6%E6%95%B0%E6%9C%88%E3%81%AE%E7%AC%AC%E4%BA%8C%E5%9C%9F%E6%9B%9C%E6%97%A5%29%E3%81%AB%E8%A1%8C%E3%81%A3%E3%81%A6%E3%81%8D%E3%81%9F%E3%80%82%E6%98%94%E3%81%AE%E7%AF%89%E5%9C%B0%E3%82%92%E5%B0%8F%E3%81%95%E3%81%8F%E3%81%97%E3%81%9F%E6%84%9F%E3%81%98%E3%80%82%E3%83%8D%E3%82%AE%E3%83%9E%E3%81%9D%E3%81%B0600%E5%86%86%EF%BC%A0%E3%81%9F%E3%81%91%E3%81%86%E3%81%A1%E3%82%92%E9%A3%9F%E3%81%99%E3%80%82" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33618&amp;linkname=%E8%B6%B3%E7%AB%8B%E5%B8%82%E5%A0%B4%E3%81%AE%E4%B8%80%E8%88%AC%E9%96%8B%E6%94%BE%E6%97%A5%28%E5%81%B6%E6%95%B0%E6%9C%88%E3%81%AE%E7%AC%AC%E4%BA%8C%E5%9C%9F%E6%9B%9C%E6%97%A5%29%E3%81%AB%E8%A1%8C%E3%81%A3%E3%81%A6%E3%81%8D%E3%81%9F%E3%80%82%E6%98%94%E3%81%AE%E7%AF%89%E5%9C%B0%E3%82%92%E5%B0%8F%E3%81%95%E3%81%8F%E3%81%97%E3%81%9F%E6%84%9F%E3%81%98%E3%80%82%E3%83%8D%E3%82%AE%E3%83%9E%E3%81%9D%E3%81%B0600%E5%86%86%EF%BC%A0%E3%81%9F%E3%81%91%E3%81%86%E3%81%A1%E3%82%92%E9%A3%9F%E3%81%99%E3%80%82" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33618&amp;linkname=%E8%B6%B3%E7%AB%8B%E5%B8%82%E5%A0%B4%E3%81%AE%E4%B8%80%E8%88%AC%E9%96%8B%E6%94%BE%E6%97%A5%28%E5%81%B6%E6%95%B0%E6%9C%88%E3%81%AE%E7%AC%AC%E4%BA%8C%E5%9C%9F%E6%9B%9C%E6%97%A5%29%E3%81%AB%E8%A1%8C%E3%81%A3%E3%81%A6%E3%81%8D%E3%81%9F%E3%80%82%E6%98%94%E3%81%AE%E7%AF%89%E5%9C%B0%E3%82%92%E5%B0%8F%E3%81%95%E3%81%8F%E3%81%97%E3%81%9F%E6%84%9F%E3%81%98%E3%80%82%E3%83%8D%E3%82%AE%E3%83%9E%E3%81%9D%E3%81%B0600%E5%86%86%EF%BC%A0%E3%81%9F%E3%81%91%E3%81%86%E3%81%A1%E3%82%92%E9%A3%9F%E3%81%99%E3%80%82" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33618&#038;title=%E8%B6%B3%E7%AB%8B%E5%B8%82%E5%A0%B4%E3%81%AE%E4%B8%80%E8%88%AC%E9%96%8B%E6%94%BE%E6%97%A5%28%E5%81%B6%E6%95%B0%E6%9C%88%E3%81%AE%E7%AC%AC%E4%BA%8C%E5%9C%9F%E6%9B%9C%E6%97%A5%29%E3%81%AB%E8%A1%8C%E3%81%A3%E3%81%A6%E3%81%8D%E3%81%9F%E3%80%82%E6%98%94%E3%81%AE%E7%AF%89%E5%9C%B0%E3%82%92%E5%B0%8F%E3%81%95%E3%81%8F%E3%81%97%E3%81%9F%E6%84%9F%E3%81%98%E3%80%82%E3%83%8D%E3%82%AE%E3%83%9E%E3%81%9D%E3%81%B0600%E5%86%86%EF%BC%A0%E3%81%9F%E3%81%91%E3%81%86%E3%81%A1%E3%82%92%E9%A3%9F%E3%81%99%E3%80%82" data-a2a-url="https://www.messiahworks.com/archives/33618" data-a2a-title="足立市場の一般開放日(偶数月の第二土曜日)に行ってきた。昔の築地を小さくした感じ。ネギマそば600円＠たけうちを食す。"></a></p><p>足立市場の一般開放日(偶数月の第二土曜日)に行ってきた。昔の築地を小さくした感じ。ネギマそば600円＠たけうちを食す。</p>
<p>年に6回しかないし、暑すぎず寒すぎず、雨が降ってない、特に用事もない、このタイミングに行くしかない！<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/05/1.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/1.jpg" alt="" width="960" height="1280" class="alignnone size-full wp-image-33619" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/1.jpg 960w, https://www.messiahworks.com/wp-content/uploads/2026/05/1-225x300.jpg 225w, https://www.messiahworks.com/wp-content/uploads/2026/05/1-768x1024.jpg 768w, https://www.messiahworks.com/wp-content/uploads/2026/05/1-113x150.jpg 113w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></p>
<p>昔の築地を思い出すな<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.37.08.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.37.08.jpg" alt="" width="1280" height="960" class="alignnone size-full wp-image-33620" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.37.08.jpg 1280w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.37.08-300x225.jpg 300w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.37.08-1024x768.jpg 1024w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.37.08-150x113.jpg 150w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.37.08-768x576.jpg 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></a></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.37.09.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.37.09.jpg" alt="" width="1280" height="960" class="alignnone size-full wp-image-33621" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.37.09.jpg 1280w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.37.09-300x225.jpg 300w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.37.09-1024x768.jpg 1024w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.37.09-150x113.jpg 150w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.37.09-768x576.jpg 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></a></p>
<p>こういう所も、普段は一般開放はしてないの？<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.37.29.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.37.29.jpg" alt="" width="960" height="1280" class="alignnone size-full wp-image-33622" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.37.29.jpg 960w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.37.29-225x300.jpg 225w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.37.29-768x1024.jpg 768w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.37.29-113x150.jpg 113w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></p>
<p>あ～、こんな感じだったな。<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.38.40.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.38.40.jpg" alt="" width="1280" height="960" class="alignnone size-full wp-image-33623" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.38.40.jpg 1280w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.38.40-300x225.jpg 300w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.38.40-1024x768.jpg 1024w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.38.40-150x113.jpg 150w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.38.40-768x576.jpg 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></a></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.39.12.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.39.12.jpg" alt="" width="960" height="1280" class="alignnone size-full wp-image-33624" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.39.12.jpg 960w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.39.12-225x300.jpg 225w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.39.12-768x1024.jpg 768w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.39.12-113x150.jpg 113w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></p>
<p>普段から築地に行けると、あんまり買おうって気分にはならなかった。<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.41.15.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.41.15.jpg" alt="" width="1280" height="960" class="alignnone size-full wp-image-33625" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.41.15.jpg 1280w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.41.15-300x225.jpg 300w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.41.15-1024x768.jpg 1024w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.41.15-150x113.jpg 150w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.41.15-768x576.jpg 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></a></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.42.12.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.42.12.jpg" alt="" width="1280" height="960" class="alignnone size-full wp-image-33626" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.42.12.jpg 1280w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.42.12-300x225.jpg 300w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.42.12-1024x768.jpg 1024w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.42.12-150x113.jpg 150w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.42.12-768x576.jpg 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></a></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.42.14.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.42.14.jpg" alt="" width="1280" height="960" class="alignnone size-full wp-image-33627" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.42.14.jpg 1280w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.42.14-300x225.jpg 300w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.42.14-1024x768.jpg 1024w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.42.14-150x113.jpg 150w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.42.14-768x576.jpg 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></a></p>
<div><strong><a target="_blank" href="https://tabelog.com/tokyo/A1324/A132402/13108684/">たけうち</a></strong><br />
<script src="https://tabelog.com/badge/google_badge?escape=false&#038;rcd=13108684" type="text/javascript" charset="utf-8"></script>
</div>
<p>食堂棟に五軒だけ飲食店がある。<br />
1, たけうち<br />
2, 市場めし とくだ屋<br />
3, しいはし食堂<br />
4, かどのめし屋 海鮮食堂 足立市場店<br />
5, 武寿司<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.47.43.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.47.43.jpg" alt="" width="960" height="1280" class="alignnone size-full wp-image-33628" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.47.43.jpg 960w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.47.43-225x300.jpg 225w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.47.43-768x1024.jpg 768w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.47.43-113x150.jpg 113w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></p>
<p>せっかく市場に来たら、そりゃ海鮮を食べたいから並ぶよね・・・。<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.48.36.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.48.36.jpg" alt="" width="960" height="1280" class="alignnone size-full wp-image-33629" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.48.36.jpg 960w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.48.36-225x300.jpg 225w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.48.36-768x1024.jpg 768w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.48.36-113x150.jpg 113w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></p>
<p>唯一、だれも並んでなかった。<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.49.10.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.49.10.jpg" alt="" width="960" height="1280" class="alignnone size-full wp-image-33630" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.49.10.jpg 960w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.49.10-225x300.jpg 225w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.49.10-768x1024.jpg 768w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.49.10-113x150.jpg 113w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></p>
<p>ネギマそば・うどん発祥って書いてあるけど、そもそもネギマ蕎麦って、初めて聞いた。<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.49.19-rotated.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.49.19-rotated.jpg" alt="" width="1280" height="960" class="alignnone size-full wp-image-33631" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.49.19-rotated.jpg 1280w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.49.19-300x225.jpg 300w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.49.19-1024x768.jpg 1024w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.49.19-150x113.jpg 150w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-10.49.19-768x576.jpg 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></a></p>
<p>ネギマそば600円で安いけど、着丼まで30分！<br />
薄味で量が多い。ネギもマグロも薄いけど、このお値段で文句を言ってはいけないな。<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-11.20.29.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-11.20.29.jpg" alt="" width="960" height="1280" class="alignnone size-full wp-image-33632" srcset="https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-11.20.29.jpg 960w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-11.20.29-225x300.jpg 225w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-11.20.29-768x1024.jpg 768w, https://www.messiahworks.com/wp-content/uploads/2026/05/2026-05-09-11.20.29-113x150.jpg 113w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></p>The post <a href="https://www.messiahworks.com/archives/33618">足立市場の一般開放日(偶数月の第二土曜日)に行ってきた。昔の築地を小さくした感じ。ネギマそば600円＠たけうちを食す。</a> first appeared on <a href="https://www.messiahworks.com">メサイア・ワークス</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>chatgpt imageで韓国旅行ブログを漫画にしてみた。想像以上にスゴイ！</title>
		<link>https://www.messiahworks.com/archives/33602</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 24 Apr 2026 01:55:25 +0000</pubDate>
				<category><![CDATA[chatGPT]]></category>
		<category><![CDATA[コミック]]></category>
		<category><![CDATA[生成AI]]></category>
		<category><![CDATA[電子書籍]]></category>
		<guid isPermaLink="false">https://www.messiahworks.com/?p=33602</guid>

					<description><![CDATA[<p>chatgpt imageで韓国旅行ブログを漫画にしてみた。想像以上にスゴイ！ 韓国の広蔵市場(クァンジャン・シジャン、アメ横＋築地みたいな所)で食べ歩き。生レバ刺し＋犬肉スープ！</p>
The post <a href="https://www.messiahworks.com/archives/33602">chatgpt imageで韓国旅行ブログを漫画にしてみた。想像以上にスゴイ！</a> first appeared on <a href="https://www.messiahworks.com">メサイア・ワークス</a>.]]></description>
										<content:encoded><![CDATA[<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33602&amp;linkname=chatgpt%20image%E3%81%A7%E9%9F%93%E5%9B%BD%E6%97%85%E8%A1%8C%E3%83%96%E3%83%AD%E3%82%B0%E3%82%92%E6%BC%AB%E7%94%BB%E3%81%AB%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F%E3%80%82%E6%83%B3%E5%83%8F%E4%BB%A5%E4%B8%8A%E3%81%AB%E3%82%B9%E3%82%B4%E3%82%A4%EF%BC%81" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33602&amp;linkname=chatgpt%20image%E3%81%A7%E9%9F%93%E5%9B%BD%E6%97%85%E8%A1%8C%E3%83%96%E3%83%AD%E3%82%B0%E3%82%92%E6%BC%AB%E7%94%BB%E3%81%AB%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F%E3%80%82%E6%83%B3%E5%83%8F%E4%BB%A5%E4%B8%8A%E3%81%AB%E3%82%B9%E3%82%B4%E3%82%A4%EF%BC%81" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33602&amp;linkname=chatgpt%20image%E3%81%A7%E9%9F%93%E5%9B%BD%E6%97%85%E8%A1%8C%E3%83%96%E3%83%AD%E3%82%B0%E3%82%92%E6%BC%AB%E7%94%BB%E3%81%AB%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F%E3%80%82%E6%83%B3%E5%83%8F%E4%BB%A5%E4%B8%8A%E3%81%AB%E3%82%B9%E3%82%B4%E3%82%A4%EF%BC%81" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33602&#038;title=chatgpt%20image%E3%81%A7%E9%9F%93%E5%9B%BD%E6%97%85%E8%A1%8C%E3%83%96%E3%83%AD%E3%82%B0%E3%82%92%E6%BC%AB%E7%94%BB%E3%81%AB%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F%E3%80%82%E6%83%B3%E5%83%8F%E4%BB%A5%E4%B8%8A%E3%81%AB%E3%82%B9%E3%82%B4%E3%82%A4%EF%BC%81" data-a2a-url="https://www.messiahworks.com/archives/33602" data-a2a-title="chatgpt imageで韓国旅行ブログを漫画にしてみた。想像以上にスゴイ！"></a></p><p>chatgpt imageで韓国旅行ブログを漫画にしてみた。想像以上にスゴイ！</p>
<blockquote class="wp-embedded-content" data-secret="qiMgKPas2C"><p><a href="https://www.messiahworks.com/archives/33519">韓国の広蔵市場(クァンジャン・シジャン、アメ横＋築地みたいな所)で食べ歩き。生レバ刺し＋犬肉スープ！</a></p></blockquote>
<p><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;韓国の広蔵市場(クァンジャン・シジャン、アメ横＋築地みたいな所)で食べ歩き。生レバ刺し＋犬肉スープ！&#8221; &#8212; メサイア・ワークス" src="https://www.messiahworks.com/archives/33519/embed#?secret=lHdIOmNMZX#?secret=qiMgKPas2C" data-secret="qiMgKPas2C" width="530" height="299" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/04/bc98b3ab210b3e2a4062b9950bdae77e.png"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/04/bc98b3ab210b3e2a4062b9950bdae77e.png" alt="" width="1055" height="1491" class="alignnone size-full wp-image-33603" srcset="https://www.messiahworks.com/wp-content/uploads/2026/04/bc98b3ab210b3e2a4062b9950bdae77e.png 1055w, https://www.messiahworks.com/wp-content/uploads/2026/04/bc98b3ab210b3e2a4062b9950bdae77e-212x300.png 212w, https://www.messiahworks.com/wp-content/uploads/2026/04/bc98b3ab210b3e2a4062b9950bdae77e-725x1024.png 725w, https://www.messiahworks.com/wp-content/uploads/2026/04/bc98b3ab210b3e2a4062b9950bdae77e-106x150.png 106w, https://www.messiahworks.com/wp-content/uploads/2026/04/bc98b3ab210b3e2a4062b9950bdae77e-768x1085.png 768w" sizes="auto, (max-width: 1055px) 100vw, 1055px" /></a></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/04/63b94b01a284a7c8e6f876e1b5409a14.png"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/04/63b94b01a284a7c8e6f876e1b5409a14.png" alt="" width="1055" height="1491" class="alignnone size-full wp-image-33604" srcset="https://www.messiahworks.com/wp-content/uploads/2026/04/63b94b01a284a7c8e6f876e1b5409a14.png 1055w, https://www.messiahworks.com/wp-content/uploads/2026/04/63b94b01a284a7c8e6f876e1b5409a14-212x300.png 212w, https://www.messiahworks.com/wp-content/uploads/2026/04/63b94b01a284a7c8e6f876e1b5409a14-725x1024.png 725w, https://www.messiahworks.com/wp-content/uploads/2026/04/63b94b01a284a7c8e6f876e1b5409a14-106x150.png 106w, https://www.messiahworks.com/wp-content/uploads/2026/04/63b94b01a284a7c8e6f876e1b5409a14-768x1085.png 768w" sizes="auto, (max-width: 1055px) 100vw, 1055px" /></a></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/04/cbaf51ca1e1456d1e400a429fb382e45.png"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/04/cbaf51ca1e1456d1e400a429fb382e45.png" alt="" width="1055" height="1491" class="alignnone size-full wp-image-33605" srcset="https://www.messiahworks.com/wp-content/uploads/2026/04/cbaf51ca1e1456d1e400a429fb382e45.png 1055w, https://www.messiahworks.com/wp-content/uploads/2026/04/cbaf51ca1e1456d1e400a429fb382e45-212x300.png 212w, https://www.messiahworks.com/wp-content/uploads/2026/04/cbaf51ca1e1456d1e400a429fb382e45-725x1024.png 725w, https://www.messiahworks.com/wp-content/uploads/2026/04/cbaf51ca1e1456d1e400a429fb382e45-106x150.png 106w, https://www.messiahworks.com/wp-content/uploads/2026/04/cbaf51ca1e1456d1e400a429fb382e45-768x1085.png 768w" sizes="auto, (max-width: 1055px) 100vw, 1055px" /></a></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/04/2679961f01a308acf114f7fdcc795ede.png"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/04/2679961f01a308acf114f7fdcc795ede.png" alt="" width="1055" height="1491" class="alignnone size-full wp-image-33606" srcset="https://www.messiahworks.com/wp-content/uploads/2026/04/2679961f01a308acf114f7fdcc795ede.png 1055w, https://www.messiahworks.com/wp-content/uploads/2026/04/2679961f01a308acf114f7fdcc795ede-212x300.png 212w, https://www.messiahworks.com/wp-content/uploads/2026/04/2679961f01a308acf114f7fdcc795ede-725x1024.png 725w, https://www.messiahworks.com/wp-content/uploads/2026/04/2679961f01a308acf114f7fdcc795ede-106x150.png 106w, https://www.messiahworks.com/wp-content/uploads/2026/04/2679961f01a308acf114f7fdcc795ede-768x1085.png 768w" sizes="auto, (max-width: 1055px) 100vw, 1055px" /></a></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/04/fec11812b748daa2aed0641e5df27a9f.png"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/04/fec11812b748daa2aed0641e5df27a9f.png" alt="" width="1055" height="1491" class="alignnone size-full wp-image-33607" srcset="https://www.messiahworks.com/wp-content/uploads/2026/04/fec11812b748daa2aed0641e5df27a9f.png 1055w, https://www.messiahworks.com/wp-content/uploads/2026/04/fec11812b748daa2aed0641e5df27a9f-212x300.png 212w, https://www.messiahworks.com/wp-content/uploads/2026/04/fec11812b748daa2aed0641e5df27a9f-725x1024.png 725w, https://www.messiahworks.com/wp-content/uploads/2026/04/fec11812b748daa2aed0641e5df27a9f-106x150.png 106w, https://www.messiahworks.com/wp-content/uploads/2026/04/fec11812b748daa2aed0641e5df27a9f-768x1085.png 768w" sizes="auto, (max-width: 1055px) 100vw, 1055px" /></a></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/04/8336f1cd43e596962ff9d0fa5222b878.png"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/04/8336f1cd43e596962ff9d0fa5222b878.png" alt="" width="1055" height="1491" class="alignnone size-full wp-image-33608" srcset="https://www.messiahworks.com/wp-content/uploads/2026/04/8336f1cd43e596962ff9d0fa5222b878.png 1055w, https://www.messiahworks.com/wp-content/uploads/2026/04/8336f1cd43e596962ff9d0fa5222b878-212x300.png 212w, https://www.messiahworks.com/wp-content/uploads/2026/04/8336f1cd43e596962ff9d0fa5222b878-725x1024.png 725w, https://www.messiahworks.com/wp-content/uploads/2026/04/8336f1cd43e596962ff9d0fa5222b878-106x150.png 106w, https://www.messiahworks.com/wp-content/uploads/2026/04/8336f1cd43e596962ff9d0fa5222b878-768x1085.png 768w" sizes="auto, (max-width: 1055px) 100vw, 1055px" /></a></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/04/92813f532a5600eeb04735592ce55464.png"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/04/92813f532a5600eeb04735592ce55464.png" alt="" width="1055" height="1491" class="alignnone size-full wp-image-33609" srcset="https://www.messiahworks.com/wp-content/uploads/2026/04/92813f532a5600eeb04735592ce55464.png 1055w, https://www.messiahworks.com/wp-content/uploads/2026/04/92813f532a5600eeb04735592ce55464-212x300.png 212w, https://www.messiahworks.com/wp-content/uploads/2026/04/92813f532a5600eeb04735592ce55464-725x1024.png 725w, https://www.messiahworks.com/wp-content/uploads/2026/04/92813f532a5600eeb04735592ce55464-106x150.png 106w, https://www.messiahworks.com/wp-content/uploads/2026/04/92813f532a5600eeb04735592ce55464-768x1085.png 768w" sizes="auto, (max-width: 1055px) 100vw, 1055px" /></a></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/04/fcb3f5dfdd89dd52999276c9df35dc04.png"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/04/fcb3f5dfdd89dd52999276c9df35dc04.png" alt="" width="1055" height="1491" class="alignnone size-full wp-image-33610" srcset="https://www.messiahworks.com/wp-content/uploads/2026/04/fcb3f5dfdd89dd52999276c9df35dc04.png 1055w, https://www.messiahworks.com/wp-content/uploads/2026/04/fcb3f5dfdd89dd52999276c9df35dc04-212x300.png 212w, https://www.messiahworks.com/wp-content/uploads/2026/04/fcb3f5dfdd89dd52999276c9df35dc04-725x1024.png 725w, https://www.messiahworks.com/wp-content/uploads/2026/04/fcb3f5dfdd89dd52999276c9df35dc04-106x150.png 106w, https://www.messiahworks.com/wp-content/uploads/2026/04/fcb3f5dfdd89dd52999276c9df35dc04-768x1085.png 768w" sizes="auto, (max-width: 1055px) 100vw, 1055px" /></a></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/04/22b78407634e7ee861efffd5c58cf1a7.png"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/04/22b78407634e7ee861efffd5c58cf1a7.png" alt="" width="1055" height="1491" class="alignnone size-full wp-image-33611" srcset="https://www.messiahworks.com/wp-content/uploads/2026/04/22b78407634e7ee861efffd5c58cf1a7.png 1055w, https://www.messiahworks.com/wp-content/uploads/2026/04/22b78407634e7ee861efffd5c58cf1a7-212x300.png 212w, https://www.messiahworks.com/wp-content/uploads/2026/04/22b78407634e7ee861efffd5c58cf1a7-725x1024.png 725w, https://www.messiahworks.com/wp-content/uploads/2026/04/22b78407634e7ee861efffd5c58cf1a7-106x150.png 106w, https://www.messiahworks.com/wp-content/uploads/2026/04/22b78407634e7ee861efffd5c58cf1a7-768x1085.png 768w" sizes="auto, (max-width: 1055px) 100vw, 1055px" /></a></p>The post <a href="https://www.messiahworks.com/archives/33602">chatgpt imageで韓国旅行ブログを漫画にしてみた。想像以上にスゴイ！</a> first appeared on <a href="https://www.messiahworks.com">メサイア・ワークス</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ここはオススメ！と言いたかったけどキムチに長い毛が二本絡み合ってて、げんなり…。ポサム定食1200円＠韓国料理 カンガンスルレ東館＠赤坂。ライス・スープ・小皿がお代わり自由！</title>
		<link>https://www.messiahworks.com/archives/33591</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 23 Apr 2026 05:44:54 +0000</pubDate>
				<category><![CDATA[ランチ(赤坂・溜池山王)]]></category>
		<guid isPermaLink="false">https://www.messiahworks.com/?p=33591</guid>

					<description><![CDATA[<p>ここはオススメ！と言いたかったけどキムチに長い毛が二本絡み合ってて、げんなり…。ポサム定食1200円＠韓国料理 カンガンスルレ東館＠赤坂。ライス・スープ・小皿がお代わり自由！ 韓国料理 カンガンスルレ東館 壺から、カット <a class="more-link" href="https://www.messiahworks.com/archives/33591">続きを読む <span class="screen-reader-text">  ここはオススメ！と言いたかったけどキムチに長い毛が二本絡み合ってて、げんなり…。ポサム定食1200円＠韓国料理 カンガンスルレ東館＠赤坂。ライス・スープ・小皿がお代わり自由！</span><span class="meta-nav">&#8594;</span></a></p>
The post <a href="https://www.messiahworks.com/archives/33591">ここはオススメ！と言いたかったけどキムチに長い毛が二本絡み合ってて、げんなり…。ポサム定食1200円＠韓国料理 カンガンスルレ東館＠赤坂。ライス・スープ・小皿がお代わり自由！</a> first appeared on <a href="https://www.messiahworks.com">メサイア・ワークス</a>.]]></description>
										<content:encoded><![CDATA[<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33591&amp;linkname=%E3%81%93%E3%81%93%E3%81%AF%E3%82%AA%E3%82%B9%E3%82%B9%E3%83%A1%EF%BC%81%E3%81%A8%E8%A8%80%E3%81%84%E3%81%9F%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%91%E3%81%A9%E3%82%AD%E3%83%A0%E3%83%81%E3%81%AB%E9%95%B7%E3%81%84%E6%AF%9B%E3%81%8C%E4%BA%8C%E6%9C%AC%E7%B5%A1%E3%81%BF%E5%90%88%E3%81%A3%E3%81%A6%E3%81%A6%E3%80%81%E3%81%92%E3%82%93%E3%81%AA%E3%82%8A%E2%80%A6%E3%80%82%E3%83%9D%E3%82%B5%E3%83%A0%E5%AE%9A%E9%A3%9F1200%E5%86%86%EF%BC%A0%E9%9F%93%E5%9B%BD%E6%96%99%E7%90%86%20%E3%82%AB%E3%83%B3%E3%82%AC%E3%83%B3%E3%82%B9%E3%83%AB%E3%83%AC%E6%9D%B1%E9%A4%A8%EF%BC%A0%E8%B5%A4%E5%9D%82%E3%80%82%E3%83%A9%E3%82%A4%E3%82%B9%E3%83%BB%E3%82%B9%E3%83%BC%E3%83%97%E3%83%BB%E5%B0%8F%E7%9A%BF%E3%81%8C%E3%81%8A%E4%BB%A3%E3%82%8F%E3%82%8A%E8%87%AA%E7%94%B1%EF%BC%81" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33591&amp;linkname=%E3%81%93%E3%81%93%E3%81%AF%E3%82%AA%E3%82%B9%E3%82%B9%E3%83%A1%EF%BC%81%E3%81%A8%E8%A8%80%E3%81%84%E3%81%9F%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%91%E3%81%A9%E3%82%AD%E3%83%A0%E3%83%81%E3%81%AB%E9%95%B7%E3%81%84%E6%AF%9B%E3%81%8C%E4%BA%8C%E6%9C%AC%E7%B5%A1%E3%81%BF%E5%90%88%E3%81%A3%E3%81%A6%E3%81%A6%E3%80%81%E3%81%92%E3%82%93%E3%81%AA%E3%82%8A%E2%80%A6%E3%80%82%E3%83%9D%E3%82%B5%E3%83%A0%E5%AE%9A%E9%A3%9F1200%E5%86%86%EF%BC%A0%E9%9F%93%E5%9B%BD%E6%96%99%E7%90%86%20%E3%82%AB%E3%83%B3%E3%82%AC%E3%83%B3%E3%82%B9%E3%83%AB%E3%83%AC%E6%9D%B1%E9%A4%A8%EF%BC%A0%E8%B5%A4%E5%9D%82%E3%80%82%E3%83%A9%E3%82%A4%E3%82%B9%E3%83%BB%E3%82%B9%E3%83%BC%E3%83%97%E3%83%BB%E5%B0%8F%E7%9A%BF%E3%81%8C%E3%81%8A%E4%BB%A3%E3%82%8F%E3%82%8A%E8%87%AA%E7%94%B1%EF%BC%81" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33591&amp;linkname=%E3%81%93%E3%81%93%E3%81%AF%E3%82%AA%E3%82%B9%E3%82%B9%E3%83%A1%EF%BC%81%E3%81%A8%E8%A8%80%E3%81%84%E3%81%9F%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%91%E3%81%A9%E3%82%AD%E3%83%A0%E3%83%81%E3%81%AB%E9%95%B7%E3%81%84%E6%AF%9B%E3%81%8C%E4%BA%8C%E6%9C%AC%E7%B5%A1%E3%81%BF%E5%90%88%E3%81%A3%E3%81%A6%E3%81%A6%E3%80%81%E3%81%92%E3%82%93%E3%81%AA%E3%82%8A%E2%80%A6%E3%80%82%E3%83%9D%E3%82%B5%E3%83%A0%E5%AE%9A%E9%A3%9F1200%E5%86%86%EF%BC%A0%E9%9F%93%E5%9B%BD%E6%96%99%E7%90%86%20%E3%82%AB%E3%83%B3%E3%82%AC%E3%83%B3%E3%82%B9%E3%83%AB%E3%83%AC%E6%9D%B1%E9%A4%A8%EF%BC%A0%E8%B5%A4%E5%9D%82%E3%80%82%E3%83%A9%E3%82%A4%E3%82%B9%E3%83%BB%E3%82%B9%E3%83%BC%E3%83%97%E3%83%BB%E5%B0%8F%E7%9A%BF%E3%81%8C%E3%81%8A%E4%BB%A3%E3%82%8F%E3%82%8A%E8%87%AA%E7%94%B1%EF%BC%81" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.messiahworks.com%2Farchives%2F33591&#038;title=%E3%81%93%E3%81%93%E3%81%AF%E3%82%AA%E3%82%B9%E3%82%B9%E3%83%A1%EF%BC%81%E3%81%A8%E8%A8%80%E3%81%84%E3%81%9F%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%91%E3%81%A9%E3%82%AD%E3%83%A0%E3%83%81%E3%81%AB%E9%95%B7%E3%81%84%E6%AF%9B%E3%81%8C%E4%BA%8C%E6%9C%AC%E7%B5%A1%E3%81%BF%E5%90%88%E3%81%A3%E3%81%A6%E3%81%A6%E3%80%81%E3%81%92%E3%82%93%E3%81%AA%E3%82%8A%E2%80%A6%E3%80%82%E3%83%9D%E3%82%B5%E3%83%A0%E5%AE%9A%E9%A3%9F1200%E5%86%86%EF%BC%A0%E9%9F%93%E5%9B%BD%E6%96%99%E7%90%86%20%E3%82%AB%E3%83%B3%E3%82%AC%E3%83%B3%E3%82%B9%E3%83%AB%E3%83%AC%E6%9D%B1%E9%A4%A8%EF%BC%A0%E8%B5%A4%E5%9D%82%E3%80%82%E3%83%A9%E3%82%A4%E3%82%B9%E3%83%BB%E3%82%B9%E3%83%BC%E3%83%97%E3%83%BB%E5%B0%8F%E7%9A%BF%E3%81%8C%E3%81%8A%E4%BB%A3%E3%82%8F%E3%82%8A%E8%87%AA%E7%94%B1%EF%BC%81" data-a2a-url="https://www.messiahworks.com/archives/33591" data-a2a-title="ここはオススメ！と言いたかったけどキムチに長い毛が二本絡み合ってて、げんなり…。ポサム定食1200円＠韓国料理 カンガンスルレ東館＠赤坂。ライス・スープ・小皿がお代わり自由！"></a></p><p>ここはオススメ！と言いたかったけどキムチに長い毛が二本絡み合ってて、げんなり…。ポサム定食1200円＠韓国料理 カンガンスルレ東館＠赤坂。ライス・スープ・小皿がお代わり自由！</p>
<div><strong><a target="_blank" href="https://tabelog.com/tokyo/A1308/A130801/13257651/">韓国料理 カンガンスルレ東館</a></strong><br />
<script src="https://tabelog.com/badge/google_badge?escape=false&#038;rcd=13257651" type="text/javascript" charset="utf-8"></script>
</div>
<p>壺から、カットされていない白菜キムチを小皿にとってチョキチョキ<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.19.43.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.19.43.jpg" alt="" width="960" height="1280" class="alignnone size-full wp-image-33593" srcset="https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.19.43.jpg 960w, https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.19.43-225x300.jpg 225w, https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.19.43-768x1024.jpg 768w, https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.19.43-113x150.jpg 113w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></p>
<p>ライス・スープ・小皿がお代わり自由！<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.41.44.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.41.44.jpg" alt="" width="960" height="1280" class="alignnone size-full wp-image-33592" srcset="https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.41.44.jpg 960w, https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.41.44-225x300.jpg 225w, https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.41.44-768x1024.jpg 768w, https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.41.44-113x150.jpg 113w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></p>
<p><a href="https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.30.47.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.30.47.jpg" alt="" width="960" height="1280" class="alignnone size-full wp-image-33597" srcset="https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.30.47.jpg 960w, https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.30.47-225x300.jpg 225w, https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.30.47-768x1024.jpg 768w, https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.30.47-113x150.jpg 113w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></p>
<p>う～ん、キムチがダブってしまった。<br />
ポサム(ゆで豚)のキムチに長い毛が二本絡み合ってて、げんなり…。<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.25.08.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.25.08.jpg" alt="" width="960" height="1280" class="alignnone size-full wp-image-33595" srcset="https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.25.08.jpg 960w, https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.25.08-225x300.jpg 225w, https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.25.08-768x1024.jpg 768w, https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.25.08-113x150.jpg 113w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></p>
<p>無くなったので、呼び出しボタンを押して、全部お代わり！<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.29.58.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.29.58.jpg" alt="" width="960" height="1280" class="alignnone size-full wp-image-33596" srcset="https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.29.58.jpg 960w, https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.29.58-225x300.jpg 225w, https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.29.58-768x1024.jpg 768w, https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.29.58-113x150.jpg 113w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></p>
<p>みごと復活！<br />
二回も食べられると、お腹いっぱい。<br />
<a href="https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.21.42.jpg"><img loading="lazy" decoding="async" src="https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.21.42.jpg" alt="" width="960" height="1280" class="alignnone size-full wp-image-33594" srcset="https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.21.42.jpg 960w, https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.21.42-225x300.jpg 225w, https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.21.42-768x1024.jpg 768w, https://www.messiahworks.com/wp-content/uploads/2026/04/2026-04-23-13.21.42-113x150.jpg 113w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></p>The post <a href="https://www.messiahworks.com/archives/33591">ここはオススメ！と言いたかったけどキムチに長い毛が二本絡み合ってて、げんなり…。ポサム定食1200円＠韓国料理 カンガンスルレ東館＠赤坂。ライス・スープ・小皿がお代わり自由！</a> first appeared on <a href="https://www.messiahworks.com">メサイア・ワークス</a>.]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
