<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>AI コンピュータ on 向叔の手帳</title>
        <link>https://ttf248.life/ja/categories/ai-%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF/</link>
        <description>Recent content in AI コンピュータ on 向叔の手帳</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ja</language>
        <lastBuildDate>Fri, 14 Aug 2026 20:09:19 +0800</lastBuildDate><atom:link href="https://ttf248.life/ja/categories/ai-%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>GPT-5.6の値下げ後、国内外の最新大規模モデルAPIは実際にはいくら価格差があるのか</title>
        <link>https://ttf248.life/ja/p/gpt-5-6-api-pricing-comparison/</link>
        <pubDate>Fri, 31 Jul 2026 10:23:33 +0800</pubDate>
        
        <guid>https://ttf248.life/ja/p/gpt-5-6-api-pricing-comparison/</guid>
        <description>&lt;p&gt;前バージョンの問題は計算ではなく、サンプルの選定にありました。「代表的な SKU」を選んだ一方で、ユーザーが求めていたのは「各メーカーの最新モデル」でした。古い ERNIE 5.0、GLM-5、Kimi K2.6、MiniMax M2.7 を「最新価格」という表に載せると、その後のパーセンテージは比較可能性を失います。&lt;/p&gt;
&lt;p&gt;今回は一つのルールだけを採用する。各社から、現時点で最新かつ API 経由で公開利用可能な自社開発のテキストモデルを一つだけ採用するというものである。OpenAI は、展開するものであり圧縮するものではない例外である。GPT-5.6 世代には Sol、Terra、Luna の 3 段階があり、3 つすべてが API で利用可能であるため、Terra だけで OpenAI 全体を代表するわけにはいかない。&lt;/p&gt;
&lt;p&gt;まず、今回の「ChatGPTの値下げ」で実際に何が下がったのかを明確にしておく。OpenAIは7月30日にGPT-5.6 Terraの標準API価格を$2.50 / $15 から $2 / $12 に、Lunaを$1 / $6 から $0.20 / $1.20 に改定した。Solは据え置きである。ここで対象となっているのはAPIの従量課金価格であり、ChatGPT/Codexのサブスクリプション月額料金が割引されるわけではない。&lt;a class=&#34;link&#34; href=&#34;https://openai.com/index/advancing-the-price-performance-frontier-with-gpt-5-6/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;発表&lt;/a&gt;でも、サブスクリプション価格とプランの割当予算は据え置きであり、各プロダクトにおけるTerraとLunaのクレジット消費量が少なくなるだけだと明記されている。&lt;/p&gt;
&lt;h2 id=&#34;最新モデルだけの価格表&#34;&gt;最新モデルだけの価格表
&lt;/h2&gt;&lt;p&gt;合成価格 = キャッシュされていない入力トークン 100万件 + 出力トークン 100万件。Terraの $2 + $12 = $14 を 100% とする。人民元の表示価格は $1 = ¥6.7939 の固定レートで換算したものであり、並べ替えのみを目的としています。キャッシュ、Batch/Flex/Fast、ツール呼び出し、税金、法人契約価格は含まれていません。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style=&#34;text-align: right&#34;&gt;順位&lt;/th&gt;
					&lt;th&gt;ベンダー&lt;/th&gt;
					&lt;th&gt;現在公開されている最新の API モデル&lt;/th&gt;
					&lt;th&gt;標準価格（入力 / 出力、100万トークンあたり）&lt;/th&gt;
					&lt;th style=&#34;text-align: right&#34;&gt;合成価格（米ドル換算）&lt;/th&gt;
					&lt;th style=&#34;text-align: right&#34;&gt;Terra 比&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;1&lt;/td&gt;
					&lt;td&gt;Anthropic&lt;/td&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.anthropic.com/news/claude-fable-5-mythos-5&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Claude Fable 5&lt;/a&gt;（2026-06-09）&lt;/td&gt;
					&lt;td&gt;$10 / $50&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;$60.00&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;428.6%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;2&lt;/td&gt;
					&lt;td&gt;OpenAI&lt;/td&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://openai.com/index/gpt-5-6/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GPT-5.6 Sol&lt;/a&gt;（2026-07-09）&lt;/td&gt;
					&lt;td&gt;$5 / $30&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;$35.00&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;250.0%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;3&lt;/td&gt;
					&lt;td&gt;Moonshot AI（月之暗面）&lt;/td&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://platform.kimi.ai/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Kimi K3&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;$3 / $15&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;$18.00&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;128.6%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;4&lt;/td&gt;
					&lt;td&gt;OpenAI&lt;/td&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://developers.openai.com/api/docs/models/gpt-5.6-terra&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GPT-5.6 Terra&lt;/a&gt;（基準）&lt;/td&gt;
					&lt;td&gt;$2 / $12&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;$14.00&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;100.0%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;5&lt;/td&gt;
					&lt;td&gt;Google&lt;/td&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://ai.google.dev/gemini-api/docs/models/gemini-3.6-flash&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Gemini 3.6 Flash&lt;/a&gt;（2026-07-21 GA）&lt;/td&gt;
					&lt;td&gt;$1.5 / $7.5&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;$9.00&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;64.3%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;6&lt;/td&gt;
					&lt;td&gt;xAI&lt;/td&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://x.ai/news/grok-4-5&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Grok 4.5&lt;/a&gt;（2026-07-16）&lt;/td&gt;
					&lt;td&gt;$2 / $6&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;$8.00&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;57.1%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;7&lt;/td&gt;
					&lt;td&gt;Aliyun（阿里云）&lt;/td&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://help.aliyun.com/zh/model-studio/model-pricing&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Qwen3.7-Max&lt;/a&gt;（2026-06-08 安定スナップショット）&lt;/td&gt;
					&lt;td&gt;¥12 / ¥36&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;$7.07&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;50.5%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;8&lt;/td&gt;
					&lt;td&gt;Volcengine（火山引擎）&lt;/td&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.volcengine.com/product/doubao/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Doubao-Seed-Evolving&lt;/a&gt;（ローリング更新 SKU）&lt;/td&gt;
					&lt;td&gt;¥6 / ¥30&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;$5.30&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;37.9%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;9&lt;/td&gt;
					&lt;td&gt;Baidu（百度）&lt;/td&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://ernie.baidu.com/blog/posts/ernie-5.1-0508-release/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ERNIE 5.1&lt;/a&gt;（入力 ≤32K）&lt;/td&gt;
					&lt;td&gt;¥4 / ¥18&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;$3.24&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;23.1%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;10&lt;/td&gt;
					&lt;td&gt;MiniMax&lt;/td&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://platform.minimaxi.com/docs/guides/pricing-paygo&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;MiniMax-M3&lt;/a&gt;（入力 ≤512K）&lt;/td&gt;
					&lt;td&gt;¥2.1 / ¥8.4&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;$1.55&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;11.0%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;11&lt;/td&gt;
					&lt;td&gt;OpenAI&lt;/td&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://openai.com/index/advancing-the-price-performance-frontier-with-gpt-5-6/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GPT-5.6 Luna&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;$0.20 / $1.20&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;$1.40&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;10.0%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;12&lt;/td&gt;
					&lt;td&gt;DeepSeek&lt;/td&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://api-docs.deepseek.com/quick_start/pricing/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;DeepSeek-V4-Pro&lt;/a&gt;（現在公開中のプレビューフラグシップ）&lt;/td&gt;
					&lt;td&gt;$0.435 / $0.87&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;$1.31&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;9.3%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;13&lt;/td&gt;
					&lt;td&gt;Tencent（腾讯）&lt;/td&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://cloud.tencent.com/document/product/1823/130051&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Hy3&lt;/a&gt;（広州リージョン）&lt;/td&gt;
					&lt;td&gt;¥1 / ¥4&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;$0.74&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;5.3%&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;表内の「最新」には、やや整然としていない2つの形態があります。Doubao-Seed-Evolving は同じモデル ID によるローリングアップデートで、通常のバージョン番号のような固定されたリリース日はありません。DeepSeek-V4-Pro は現在公開されている API フラッグシップのプレビューシリーズです。これらは、後続のモデルに置き換えられた歴史的な SKU を使用するよりも、この表の基準によりよく適合しています。&lt;/p&gt;
&lt;details&gt;&lt;summary&gt;API は存在するが、価格のランキングには参加していない最新のモデル&lt;/summary&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;ベンダー&lt;/th&gt;
					&lt;th&gt;最新の公開 API モデル&lt;/th&gt;
					&lt;th&gt;なぜ割合を計算しないのか&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Zhipu（智譜）&lt;/td&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.bigmodel.cn/cn/guide/start/model-overview&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GLM-5.2&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;公式に最新のフラッグシップであり API 対応と確認されているが、公開クロール可能な公式ページにトークン単位の価格が掲載されていないため、GLM-5.1 の旧価格をそのまま流用することはできない。&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Cohere&lt;/td&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.cohere.com/docs/command-a-plus&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Command A+&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;trial および production key には使用量上限付きの無料枠があり、本番デプロイは Model Vault 経由となるため、主表と横並びで比較できるトークン単位の公式価格が存在しない。&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Mistral&lt;/td&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://mistral.ai/fr/news/leanstral-1-5/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Leanstral 1.5&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;無料 API エンドポイントが提供されているが、Lean 4 形式的検証専用となっており、汎用タスク向けの本番 API に対する $0 価格ではないため、この汎用タスクのコスト表には掲載できない。&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/details&gt;
&lt;p&gt;これは漏れではなく、「最新のものだけを見る」と実際に直面する状況です。新製品の中には、最初に試用枠を提供するものもあれば、法人チャネル経由でのみ取引されるものもあり、公開資料にはトークンごとの価格ではなくモデルの説明だけが掲載されているものもあります。前世代の価格を使って表を埋めてしまうと、一見 complete に見えますが、実際的问题是「一時的に比較できない」から「誤った数値」に問題を書き換えてしまうことになります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The translation contains one sentence in Chinese (&amp;ldquo;但实际的问题是「一時的に比較できない」から「誤った数値」に問題を書き換えてしまうことになります&amp;rdquo;). I left it in the original Chinese because it appeared to be an editing artifact in the source text. If you&amp;rsquo;d like me to translate that sentence into Japanese as well, here is the corrected full translation:&lt;/p&gt;
&lt;p&gt;これは漏れではなく、「最新のものだけを見る」と実際に直面する状況です。新製品の中には、最初に試用枠を提供するものもあれば、法人チャネル経由でのみ取引されるものもあり、公開資料にはトークンごとの価格ではなくモデルの説明だけが掲載されているものもあります。前世代の価格を使って表を埋めてしまうと、一見 complete に見えますが、実際には問題を「一時的に比較できない」状態から「誤った数値」に書き換えてしまうことになります。&lt;/p&gt;
&lt;h2 id=&#34;この価格改定は-openai-自社の3つの階層において何を意味するか&#34;&gt;この価格改定は OpenAI 自社の3つの階層において何を意味するか
&lt;/h2&gt;&lt;p&gt;Sol の合成価は Terra の 2.5 倍（50% 高い）；Terra が中間に位置し；Luna は Terra の 10% です。したがって、今回の Terra と Luna の値下げは「フラッグシップモデル全体が安くなった」というわけではなく、OpenAI が中低コスト帯のモデル間の距離をさらに広げつつ、Sol の高価格帯を維持しているのです。&lt;/p&gt;
&lt;p&gt;OpenAIが挙げた理由は推論効率の向上である。モデル、推論システム、そしてツールとコンテキストを接続するエージェント層がすべて最適化されていると説明している。発表によれば、本番カーネルの最適化によりエンドツーエンドのサービスコストが20％削減され、実験ではトークン生成効率が15％以上向上したとされる。これはベンダー側からの開示であり、値下げ余地が存在する理由を説明するものではあるが、外部監査に耐える完全なコスト表ではない。低廉な価格設定が主に大量のAPIワークロードの獲得を目指したものかどうかは、価格体系に対する分析に過ぎず、公式な動機として扱うことはできない。&lt;/p&gt;
&lt;h2 id=&#34;この表は選定の代替にはならない&#34;&gt;この表は選定の代替にはならない
&lt;/h2&gt;&lt;p&gt;価格は高いものから安いものへと並べていますが、それはタスクが良いものから悪いものへと並んでいるということではありません。長いコンテキストは段階的な価格設定を引き起こし、キャッシュヒット、推論トークン、ツール呼び出し、再試行回数、地域および企業契約もすべて実際の請求額を変えます。表中の「1M 入力 + 1M 出力」は、購入前の統一的な選別基準に過ぎません。&lt;/p&gt;
&lt;p&gt;実際に選ぶときは、10〜20個の実タスクでテストするほうが信頼できます。まず成功率、レイテンシ、人手によるやり直し率を確認し、それから入力、出力、推論トークン、キャッシュヒット、そして総コストを記録します。最後に比較すべきは「タスク1件あたりの成功コスト」であり、この表に並んでいる単独の単価ではありません。&lt;/p&gt;
&lt;h2 id=&#34;参考資料&#34;&gt;参考資料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://openai.com/index/gpt-5-6/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenAI：GPT-5.6 のリリースと3 ティア API 価格設定&lt;/a&gt;、2026-07-09 発表、アクセス日：2026-07-31。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://openai.com/index/advancing-the-price-performance-frontier-with-gpt-5-6/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenAI：GPT-5.6 価格性能に関する発表&lt;/a&gt;、2026-07-30 発表、アクセス日：2026-07-31。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://developers.openai.com/api/docs/models/gpt-5.6-terra&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenAI API：GPT-5.6 Terra モデルページ&lt;/a&gt;、アクセス日：2026-07-31。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.anthropic.com/news/claude-fable-5-mythos-5&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Anthropic：Claude Fable 5&lt;/a&gt;、アクセス日：2026-07-31。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://ai.google.dev/gemini-api/docs/changelog&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Google：Gemini API 変更履歴&lt;/a&gt;および&lt;a class=&#34;link&#34; href=&#34;https://ai.google.dev/gemini-api/docs/pricing&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;モデル価格&lt;/a&gt;、アクセス日：2026-07-31。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://x.ai/news/grok-4-5&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;xAI：Grok 4.5&lt;/a&gt;および&lt;a class=&#34;link&#34; href=&#34;https://docs.x.ai/developers/pricing&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;価格説明&lt;/a&gt;、アクセス日：2026-07-31。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://help.aliyun.com/zh/model-studio/model-pricing&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Alibaba Cloud Bailian：モデル価格&lt;/a&gt;、アクセス日：2026-07-31。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://api-docs.deepseek.com/news/news260424/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;DeepSeek：V4 リリース&lt;/a&gt;および&lt;a class=&#34;link&#34; href=&#34;https://api-docs.deepseek.com/quick_start/pricing/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;価格説明&lt;/a&gt;、アクセス日：2026-07-31。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.bigmodel.cn/cn/update/new-releases&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Zhipu AI：最新モデルリリース&lt;/a&gt;および&lt;a class=&#34;link&#34; href=&#34;https://docs.bigmodel.cn/cn/guide/start/model-overview&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;モデル概要&lt;/a&gt;、アクセス日：2026-07-31。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.volcengine.com/product/doubao/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Volcano Engine：Doubao 大規模モデルと価格&lt;/a&gt;、アクセス日：2026-07-31。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://cloud.tencent.com/document/product/1823/130051&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Tencent Cloud：Hy3 モデル一覧&lt;/a&gt;および&lt;a class=&#34;link&#34; href=&#34;https://cloud.tencent.com/document/product/1823/130055&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;価格&lt;/a&gt;、アクセス日：2026-07-31。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://ernie.baidu.com/blog/posts/ernie-5.1-0508-release/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Baidu：ERNIE 5.1 リリース&lt;/a&gt;および&lt;a class=&#34;link&#34; href=&#34;https://cloud.baidu.com/doc/qianfan/s/wmh4sv6ya&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Qianfan モデルサービス価格&lt;/a&gt;、アクセス日：2026-07-31。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://platform.kimi.ai/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Moonshot AI：Kimi オープンプラットフォーム&lt;/a&gt;、アクセス日：2026-07-31。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://platform.minimaxi.com/docs/guides/pricing-paygo&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;MiniMax：従量課金価格&lt;/a&gt;、アクセス日：2026-07-31。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.cohere.com/docs/command-a-plus&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Cohere：Command A+&lt;/a&gt;、アクセス日：2026-07-31。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://mistral.ai/fr/news/leanstral-1-5/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Mistral：Leanstral 1.5&lt;/a&gt;、アクセス日：2026-07-31。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.boc.cn/cn/common/whpj.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Bank of China：為替公示レート&lt;/a&gt;、2026-07-24 の米ドル現金売りレートを採用、アクセス日：2026-07-31。&lt;/li&gt;
&lt;/ul&gt;
&lt;details class=&#34;article-notes&#34;&gt;
    &lt;summary&gt;写作附记&lt;/summary&gt;
    &lt;div class=&#34;article-notes__content&#34;&gt;
        &lt;h3 id=&#34;執筆メモ&#34;&gt;執筆メモ
&lt;/h3&gt;&lt;p&gt;本文は 2026-07-31 の公開 API 価格表スナップショットであり、調達、投資、または製品選定のアドバイスを構成するものではない。検証済みのベンダーのみを含み、世界中のすべての API プロバイダーを網羅するものではない。モデルの能力、トークナイザー、コンテキスト、キャッシュ、推論トークン、ツール課金、地域、法人契約などによって異なるため、表内のパーセンテージは同等の性能や実際のタスクコストのランキングとみなすことはできない。&lt;/p&gt;
&lt;h3 id=&#34;元のプロンプト&#34;&gt;元のプロンプト
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;ChatGPT シリーズのモデルが価格改定を発表しました。関連情報を整理し、なぜ値下げするのか？各社の大規模モデルメーカーの API 価格（国内・国外）をまとめ、表に整理します。ChatGPT 5.6 terra を基準として、各社の価格比較のパーセンテージを計算し、高いものから安いものへと並べ替えます。&lt;/p&gt;
&lt;p&gt;整理された表の情報は完全ではありません。ChatGPT 自社の他のモデルが列举されておらず、各社の大手メーカーのモデルも最新リリースのものではありません。必要なのは各社の最新モデルの価格だけです。&lt;/p&gt;
&lt;/blockquote&gt;

    &lt;/div&gt;
&lt;/details&gt;</description>
        </item>
        <item>
        <title>C&#43;&#43; シングルトン：1行の static が提供する初期化保証</title>
        <link>https://ttf248.life/ja/p/cpp-singleton-static-initialization/</link>
        <pubDate>Fri, 24 Jul 2026 23:32:22 +0800</pubDate>
        
        <guid>https://ttf248.life/ja/p/cpp-singleton-static-initialization/</guid>
        <description>&lt;p&gt;多くの C++ シングルトン実装は、最終的に次のような形に縮小されます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Instance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// C++11 は関数内 static オブジェクトのスレッドセーフな初期化を保証する。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;instance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;instance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;オブジェクトを関数の中に隠しておき、参照を使って取り出しているように見えます。本当にお伝えしたいのはシングルトンパターンそのものというより、このコードが C++ のストレージ期間、スコープ、参照、遅延初期化、そして C++11 でようやく整った並行性に関するセマンティクスに同時に触れているという点です。&lt;/p&gt;
&lt;p&gt;まず呼び名を一つ訂正します：文脈で触れられている「C98」は「C++98」のことを指しているはずです。厳密にC言語について言うなら、C98というバージョンは存在しません。さらに重要なのは、C言語にはC++にあるクラス、参照、メンバ関数がないため、&lt;code&gt;T&amp;amp;&lt;/code&gt; という構文はそもそもCのコードではないということです。&lt;/p&gt;
&lt;h2 id=&#34;二つの-static-は同じものではない&#34;&gt;二つの &lt;code&gt;static&lt;/code&gt; は同じものではない
&lt;/h2&gt;&lt;p&gt;完全なシングルトンクラスは通常次のように書かれます：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Singleton&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Singleton&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Instance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Singleton&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;instance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;instance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;Singleton&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Singleton&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;Singleton&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;operator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Singleton&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;Singleton&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Singleton&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;外側の &lt;code&gt;static&lt;/code&gt; はクラスメンバー関数の宣言に現れ、&lt;code&gt;Instance&lt;/code&gt; が静的メンバー関数であることを示しています。これは &lt;code&gt;this&lt;/code&gt; ポインターを持たず、&lt;code&gt;Singleton::Instance()&lt;/code&gt; で直接呼び出すことができます。&lt;/p&gt;
&lt;p&gt;内側の &lt;code&gt;static&lt;/code&gt; が修飾しているのは、関数本体の中にある局所変数 &lt;code&gt;instance&lt;/code&gt; です。この変数は依然としてその関数本体内でのみ見えますが、記憶域期間（ストレージ期間）は「関数が呼ばれるたびに新しく作られる」という自動的記憶域期間ではなく、静的記憶域期間となります。つまり、プログラムの実行中ずっと同じオブジェクトが保持され続けます。初期化のタイミングは、関数が呼ばれるたびに新しく構築し直されるのではなく、制御の流れが初めてこの宣言を通過したときです。&lt;/p&gt;
&lt;p&gt;したがって、ここでの「シングルトン」は、いくつかの条件が重なり合うことから生じています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;instance&lt;/code&gt; という名前は &lt;code&gt;Instance&lt;/code&gt; 関数内に限定されているため、外部から直接同じ名前の別のオブジェクトを取得することはできません。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;static&lt;/code&gt; により、複数回の呼び出しにわたって同じオブジェクトが保持されます。&lt;/li&gt;
&lt;li&gt;コンストラクタは private であり、外部で勝手に &lt;code&gt;Singleton s&lt;/code&gt; と書くことはできません。&lt;/li&gt;
&lt;li&gt;コピーコンストラクタとコピー代入演算子を削除し、コピーによって2つ目のオブジェクトが作られるのを防ぎます。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Singleton&amp;amp;&lt;/code&gt; を返すことで、同じオブジェクトの参照を呼び出し側に渡し、コピーは返しません。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最後の 2 つは C++11 の書き方です。C++98 には &lt;code&gt;= delete&lt;/code&gt; も &lt;code&gt;= default&lt;/code&gt; も存在しないため、コピーコンストラクタ、代入演算子、コンストラクタを &lt;code&gt;private&lt;/code&gt; 領域で宣言するだけで定義しないという方法を取るしかありません。&lt;/p&gt;
&lt;h2 id=&#34;t-とは実際には何をするのか&#34;&gt;&lt;code&gt;T&amp;amp;&lt;/code&gt; とは実際には何をするのか
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;T&amp;amp;&lt;/code&gt; は右から左へ読むと「型が &lt;code&gt;T&lt;/code&gt; であるものへの参照」となります。したがって：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Instance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Instance&lt;/code&gt; が返すのは &lt;code&gt;T&lt;/code&gt; オブジェクトの参照であり、&lt;code&gt;T&lt;/code&gt; オブジェクトそのものではないことを示します。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;instance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ここで返されるのは、静的オブジェクトを指すローカル名 &lt;code&gt;instance&lt;/code&gt; の値です。その生存期間はプログラム全体の実行期間をカバーしているため、関数の返後も参照は有効です。もしそれが通常のローカル変数であったなら、このように参照を返すとダングリング参照になってしまいます。&lt;/p&gt;
&lt;p&gt;参照返しにはもう2つの直接的な効果があります。呼び出し側は元のオブジェクトを取得し、それを変更できます。同時に、余分なオブジェクトのコピーは発生しません。読み取りのみを許可したい場合は、インターフェースを &lt;code&gt;const T&amp;amp;&lt;/code&gt; として記述することができますが、これによって &lt;code&gt;T&lt;/code&gt; 内部の他の共有状態が自動的に並行処理に対して安全になるわけではありません。&lt;/p&gt;
&lt;h2 id=&#34;初めての呼び出し時コンパイラは実際に何を解決するのか&#34;&gt;初めての呼び出し時、コンパイラは実際に何を解決するのか
&lt;/h2&gt;&lt;p&gt;呼び出しプロセスを3つのシナリオに分けるのが最も分かりやすい。&lt;/p&gt;
&lt;p&gt;最初の呼び出し時に、制御フローは次へ進みます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;instance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;オブジェクトがまだ初期化されていない場合は、&lt;code&gt;T&lt;/code&gt; のデフォルトコンストラクタを呼び出します。構築が完了したら &lt;code&gt;return instance&lt;/code&gt; を実行します。&lt;/p&gt;
&lt;p&gt;再度呼び出された時点では、&lt;code&gt;instance&lt;/code&gt; はすでに初期化済みのため、コンストラクタは再実行されず、コードは同じオブジェクトを直接返します。&lt;/p&gt;
&lt;p&gt;2 つのスレッドが初めて同時に呼び出したときに問題が発生します。どちらもオブジェクトが「まだ初期化されていない」と同時に判定する可能性があります。追加の同期がなければ、二重に構築されたり、あるスレッドが半分だけ構築されたオブジェクトを読み取ったり、初期化フラグがオブジェクトの内容より先に別のスレッドから見えるといったことが起こり得ます。&lt;/p&gt;
&lt;p&gt;実装では通常、ローカルの static のためにガード状態を1つ隠しておきます。下記はあくまで理解を助けるための擬似コードであり、標準で要求されている実際の ABI ではありません。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;guard_is_complete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;lock_guard_for_this_static&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;guard_is_complete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;construct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;instance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;mark_guard_complete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;unlock_guard_for_this_static&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;instance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;要点は &lt;code&gt;guard&lt;/code&gt; という名前の変数があるかどうかではなく、「チェック、構築、完了フラグの設定」という一連の処理全体が、実装側で標準準拠の同期機構によって保護されなければならないという点である。初期化が完了するまで、競合するスレッドは待機しなければならず、初期化が完了して初めて、それらのスレッドはそのオブジェクトを取得できる。&lt;/p&gt;
&lt;h2 id=&#34;c98-がスレッドセーフにできない理由&#34;&gt;C++98 がスレッドセーフにできない理由
&lt;/h2&gt;&lt;p&gt;ここで誤解されやすい点があります。C++98 ではこのコードを書けなかったわけではありません。ローカル &lt;code&gt;static&lt;/code&gt; の構文と「一度だけ初期化される」という順序意味論は、すでに C++98 の時点で存在していました。&lt;/p&gt;
&lt;p&gt;違いは、C++98 がシングルスレッドの抽象機械における実行のみを記述しており、C++11 のように標準化されたマルチスレッド実行、データ競合、メモリの可視性に関する規則を持たない点である。2 つのスレッドが同時に宣言を初めて通過する際に、一方のスレッドが初期化を完了し、他のスレッドが待機しなければならないことを保証していない。&lt;/p&gt;
&lt;p&gt;したがって、C++98 におけるこのコードについては次のように言うのが正確です。シングルスレッドでは遅延初期化シングルトンを実現できます。マルチスレッドでの安全性は、コンパイラ、ランタイムライブラリ、プラットフォームの実装に依存し、C++98 標準自体から保証を導くことはできません。&lt;/p&gt;
&lt;p&gt;次のような C++98 版は、特に「ポインターの再割り当てを判定する」という理由だけで安全にするべきではありません。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;instance&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;instance&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;instance&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;instance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;2 つのスレッドが同時に &lt;code&gt;instance == 0&lt;/code&gt; を通過し、それぞれが &lt;code&gt;T&lt;/code&gt; を 2 つ生成する可能性があります。「先にチェック、ロックし、ロック内で再チェック」というダブルチェック構造を追加したとしても、C++98 には、ポインタを公開する際に、別スレッドが常に正しい順序で完全なオブジェクトを確実に参照できることを保証する十分なメモリモデルがありません。&lt;code&gt;volatile&lt;/code&gt; はスレッド同期ツールではなく、この問題を修正することもできません。&lt;/p&gt;
&lt;p&gt;C++98 プロジェクトでこの保証が本当に必要になる場合、たとえば POSIX の one-time initialization、Windows の同期プリミティブ、当時利用可能だったスレッドライブラリなど、標準外のプラットフォームやライブラリに同期処理を委ねるしかなかった。または、すべてのアクセスを 1 つのミューテックス経由にするしかなかった。これは「外部の同期で保証を補う」ことであって、C++98 のこの &lt;code&gt;static&lt;/code&gt; 行自体が保証を提供しているわけではない。&lt;/p&gt;
&lt;h2 id=&#34;c11-が変えるのはセマンティクスでありこの行の構文ではない&#34;&gt;C++11 が変えるのはセマンティクスであり、この行の構文ではない
&lt;/h2&gt;&lt;p&gt;C++11 の重要な変化は、以下のものを発明したことではありません：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;instance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この声明はずっと前から書けた。C++11 は並行初期化ルールを正式に言語標準に組み込んだ。関数ローカルで静的記憶期間を持つ変数は、制御フローが初めて宣言を通過する際に動的初期化が行われる。複数のスレッドが並行して進入し、変数が初期化中の場合、他の実行はその初期化の完了を待つべきである。&lt;/p&gt;
&lt;p&gt;これがコメントにある「thread-safe initialization」の正確な意味です。保証されるのは初期化段階で、&lt;code&gt;T&lt;/code&gt; のコンストラクタが一度だけ成功して実行され、競合するスレッドが未完成の構築中のオブジェクトをまたいで使用することはないということです。&lt;/p&gt;
&lt;p&gt;下記の業務コードが本質的に安全であることを保証するものではありません。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Singleton&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Instance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// 複数スレッドが同じオブジェクトを変更する場合、データ競合が発生する可能性がある
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;append&lt;/code&gt; が共有コンテナを変更する場合でも、&lt;code&gt;T&lt;/code&gt; 内部でミューテックスやアトミック変数などの適切な並行設計を引き続き使用する必要があります。シングルトンは「オブジェクトがいつ、どのように一度だけ構築されるか」という問題を解決するだけであり、「オブジェクト内部の各操作が並行してどのように実行されるか」という問題を解決するものではありません。&lt;/p&gt;
&lt;h2 id=&#34;c11-にはまだいくつかの境界がある&#34;&gt;C++11 にはまだいくつかの境界がある
&lt;/h2&gt;&lt;p&gt;まず、&lt;code&gt;static T instance;&lt;/code&gt; は &lt;code&gt;T&lt;/code&gt; がデフォルト構築可能であり、コンストラクタとデストラクタがここでアクセス可能である必要があります。コンストラクタが例外を投げた場合、その初期化は完了したとは見なされません。次回の制御フローが宣言に到達したとき、半完成状態のままではなく、初期化が再試行されます。&lt;/p&gt;
&lt;p&gt;第二に、初期化関数は同じローカル static の初期化プロセスに再帰的に再入することはできない。例えば &lt;code&gt;T&lt;/code&gt; のコンストラクタが &lt;code&gt;Instance()&lt;/code&gt; を再度呼び出した場合、規格で明確に禁止されている再帰的な初期化シナリオに入ることになり、それを通常のリエントラントとして扱ってはならない。&lt;/p&gt;
&lt;p&gt;第三に、もし &lt;code&gt;instance&lt;/code&gt; が実際に構築されれば、プログラムの終了段階でデストラクタが実行される。この特性は、通常 &lt;code&gt;new&lt;/code&gt; を手書きで書いて意図的にリークするより健全だが、他のグローバルオブジェクトのデストラクト順序に依存する可能性もある。シングルトンのコンストラクタでは、別のファイルにまたがるグローバル状態にこっそり依存しないほうがよい。&lt;/p&gt;
&lt;p&gt;最後に、シングルトンの「グローバルに一意」というのは、主に言語レベルでの一つのオブジェクトを指します。動的ライブラリ、プラグイン、または異なるランタイム境界をまたぐ場合、本当にプロセス全体で唯一かどうかは、リンクや読み込みの境界に依存します。クラス名だけで、すべてのモジュールが同じインスタンスを共有していると決めつけることはできません。&lt;/p&gt;
&lt;h2 id=&#34;最後にこの区別を覚えておきましょう&#34;&gt;最後に：この区別を覚えておきましょう
&lt;/h2&gt;&lt;p&gt;C++98 と C++11 のどちらでもローカル static シングルトンを記述することができますが、「一度だけ初期化され、他のスレッドはそれを待機する」という並行初期化の保証が標準化されるのは C++11 からです。&lt;/p&gt;
&lt;p&gt;したがって、このコードを目にしたときは、3つの層でチェックするのが最善である。&lt;code&gt;static&lt;/code&gt; によってオブジェクトの寿命が長くなり、関数スコープによって入り口が狭くなり、C++11の言語規則によって、移植性を保証された上での初めての並行初期化が可能になる。オブジェクトの構築が完了した後、その内部のデータを複数のスレッドが同時に変更できるかどうかについては、それは別の問題である。&lt;/p&gt;
&lt;h2 id=&#34;参考資料&#34;&gt;参考資料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://timsong-cpp.github.io/cppwp/n3337/stmt.dcl&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;C++11 作業草案 N3337:6.7 宣言文&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://eel.is/c&amp;#43;&amp;#43;draft/stmt.dcl&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;現行 C++ 作業草案:[stmt.dcl]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1875.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;WG21 N1875:C++ Threads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/cpp/build/reference/zc-threadsafeinit-thread-safe-local-static-initialization?view=msvc-170&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Microsoft:/Zc:threadSafeInit(スレッドセーフなローカル static 初期化)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;details class=&#34;article-notes&#34;&gt;
    &lt;summary&gt;写作附记&lt;/summary&gt;
    &lt;div class=&#34;article-notes__content&#34;&gt;
        &lt;h3 id=&#34;オリジナルプロンプト&#34;&gt;オリジナルプロンプト
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;$blog-writer C++ シングルトンについて、詳しく解説してほしい。この原理、および構文レベルでどのようにサポートされているのか、&lt;code&gt;static T &amp;amp;Instance() { // C++11 guarantees thread-safe initialization of function-local static objects. static T instance; return instance; }&lt;/code&gt; について、なぜ C98 ではこのようにすることができないのか、なぜ C11 ではこのようにすることができるのかを説明してほしい。&lt;/p&gt;
&lt;/blockquote&gt;
    &lt;/div&gt;
&lt;/details&gt;</description>
        </item>
        
    </channel>
</rss>
