2026年7月1日水曜日

COB(Chip-On-Board)マイクロコントローラ

# 概要(Executive Summary)

街角で売られる低価格なキーチェーン型ブロックゲーム機は、基板上にワイヤボンディングした半導体ダイをエポキシ封止したCOB(Chip-On-Board)マイクロコントローラを搭載し、内部にあらかじめマスクROM(或いはOTPメモリ)で格納したゲームプログラムを持つ。これらのチップは一般に4ビット(8051系に類似)または8ビット相当の独自アーキテクチャで、低速(内部RC発振で数MHz以下)に動作する。メモリ構成は数KB級のプログラムROMと数十~百数十バイトのデータRAM(例:Holtek社HTG13J0でROM 8KB・RAM 80Byte、Aplus社APU429でROM 8KB・RAM 96~192Byte)程度、I/Oピンは十数本(ボタン入力・LCDドライバ線など)です。LCDドライバは数百セグメント(例:40×8=320セグメント、8×42=336セグメント)を制御でき、1音ブザー制御や低電力モード機能を内蔵します。電源は一般に1.5V単三電池×2(3V)やLR44ボタン電池×2(3V)などで、基板・筐体はFR-4や薄型樹脂で低コストに製造されます。製造プロセスでは、設計済みチップ(例:Holtek、Megawin等が設計)がファウンドリでダイ製造され、COB工場でダイ接着・ワイヤボンディング・エポキシ封止が行われる。その後、基板実装工場(PCBアセンブリ)でプリント基板や部品実装を経て、最終的に玩具OEM/ODMメーカーで筐体組立・検査されます。最終製品は中国の輸出商社・問屋を経由し、東南アジア・アフリカ・東欧など世界各地の雑貨店や露店、ECで販売されます(図参照)。大量発注時には1台あたり約0.80USD程度まで単価が下がる例が報告されており、個々の部品原価はLCDモジュール約0.05–0.15USD、COB IC約0.03–0.10USD、ブザー約0.01–0.05USD、PCB+実装費約0.05–0.15USD程度と推定されます(以下表参照)。なお、実際の仕様・コストは設計会社・モデルや部品選択により大きく変動する可能性があります。


## 代表的な仕様(例) 


| 項目                 | 仕様(典型例)                                                               |

|--------------------|---------------------------------------------------------------------------|

| CPUコア            | 4ビットRISC系(8051互換的)または8ビットカスタム(Holtek, Megawin 等) |

| 動作クロック        | 内部RC発振器、約0.5~1MHz 程度                                         |

| プログラムROM      | 数~十数KB(マスクROM、例: 8KB)                         |

| データRAM          | 数十~百数十バイト(例: 80B~192B)                    |

| I/Oポート          | 約10~20本(ボタン・リセット・共通/セグメントLCDライン等)                              |

| LCDドライバ        | 数百セグメント対応(例: 40×8=320セグメント、8×42=336セグメント)|

| ブザー/音源        | 内蔵(単音ビープ音, PWM出力など)                                            |

| 電源               | 3V(1.5V単三×2またはLR44×2)                                     |

| 外部メモリ         | なし(全データ・プログラム内蔵)                                              |

| パッケージ・実装    | 基板上へのダイ直付けCOB(ワイヤボンディング+黒色エポキシ封止)        |

| 基板構造           | 片面または両面プリント基板(低コストFR-4、ガラスエポキシ等)                          |

| その他            | キーマトリクススキャン機能, 省電力HALT/WAKE機能等                                |


## 製造・組立プロセス

COBチップの製造は、まず半導体設計会社(例:Holtek、Megawinなど)が特定用途向けにマスクROMプログラムを組み込んだマイクロコントローラを設計し、ファウンドリ(半導体工場)でシリコンウェーハに製造します。その後、完成したダイは基板に接着され、細線(ワイヤボンディング)で基板配線と接続されます。最後に黒色エポキシで封止してチップを保護するCOBパッケージ形態となります。これによりICパッケージコストを下げ、サイズも最小化します。基板は簡易な片面または両面のプリント基板が用いられ、表面実装や挿入実装で抵抗やコンデンサ、ブザーなどを実装します。製品組立では、前述COB搭載基板に液晶モジュール(ガラス板に印刷されたセグメント)やスピーカ・ボタン電池ホルダを組み込み、プラスチック外装に固定します。製造段階では動作テストが行われ、EEPROMではなくマスクROMを用いる場合は出荷前にテスト治具で正常動作を確認して出荷します(レトロゲーム系は常に同じプログラムであることが多い)。なお、一部情報筋ではダイ内部にEPROM風の領域が見られたとの報告もあり、設計によっては一度だけ書き込み可能なメモリが使われることも示唆されています。


## サプライチェーンフロー(商流)


```mermaid

flowchart LR

    A[チップ設計・開発\n(例:Holtek, Megawin 等)] --> B[ファウンドリ\n(半導体製造)]

    B --> C[COB組立工場\n(ダイ接着・ワイヤボンディング・封止)]

    C --> D[PCB実装工場\n(基板製造・部品実装)]

    D --> E[OEM/ODMメーカー\n(ゲーム機組立・品質検査)]

    E --> F[卸売・輸出業者]

    F --> G[小売店・露店・ECサイト]

```


上図のように、まず半導体開発会社がチップを設計し、ファウンドリでダイを製造します。ダイはCOB組立工場へ送られ、基板上に搭載・封止されます。その後、PCB実装工場で他部品と共に実装し、OEM/ODMメーカーで筐体組立・検査が行われます。完成品は中国の卸売・輸出業者に渡り、東南アジア・アフリカ・欧州などの雑貨店や露店、オンラインマーケットを通じて販売されます。主要メーカー例としては、広東省の深圳・東莞・汕頭周辺に複数のOEM/ODM企業が存在し、総合玩具メーカーが完成品を企画・輸出します。注文数は一般的に数千~数万単位(高額なモデルで数十万台)となり、大ロット時に単価が下がります。


## コスト推定と部品構成

大量生産時の製品単価は約0.80USD前後まで下がるとされ、以下は主要構成要素の概算コスト例です(1台あたり)。実際の数値は発注数量・部品調達条件により変動します。


| 部品・項目       | 概算コスト (1台あたり)        |

|----------------|--------------------------|

| COBマイクロコントローラIC  | 約0.03–0.10 USD            |

| LCDモジュール    | 約0.05–0.15 USD            |

| ブザー(圧電素子) | 約0.01–0.05 USD            |

| PCB基板 (材料+製造)  | 約0.03–0.10 USD            |

| 実装・検査費    | 約0.05–0.15 USD            |

| **合計BOM**       | **約0.17–0.55 USD (参考)** |


たとえば、グローバルソースに掲載のモデルでは、5000~9999個で0.85USD、20000個以上で0.80USDといった価格設定がなされており、数万台のロットでは上記BOM合計+梱包・物流費+利ざやで約0.8USD前後と推定されます。少量(10~30台程度)注文では1台約0.7~1.6USDと幅があり、その差は発注量や最終外装材質、検査・送料条件によるものです。また、二次電池(LR44など)は上表に含まず、1台あたり数セント程度のコスト増となります。以上の数値は目安であり、実際にはデザインやパッケージ、ボリュームにより大きく変動する点に注意してください。


**不確実性:** 上記はあくまで典型的な例示であり、OEMによって内部チップや部品選定が異なるため仕様・コストにはばらつきがあります。特にCPUコア、LCDサイズ、ゲーム数、筐体形状などが異なるモデルも多く、それぞれ個別に異なるチップが使われる可能性があります(例:別メーカー製チップや新規設計のマスクROMなど)。また、市場の部品価格や為替変動によりコスト構成比も変わり得る点に留意が必要です。


## 参考文献・資料

- COBパッケージの概要と用途  

- Holtek HTG13J0マイクロコントローラデータシート  

- Aplus APU429マイクロコントローラデータシート  

- Brick Gameハード解析(8051系MCU類似性指摘)  

- 量産玩具コンソールの部品仕様例(Globalsources掲載)  

- 中国系仕入れサイト掲載価格例  


各資料を参照しつつ、上記情報を総合・推定してまとめました。各数値・仕様は公開情報・テアダウン報告等から抽出した典型例であり、実際の製品はこれと異なる場合があります。 

2026年6月29日月曜日

「gridpcm」構想について

 本稿は、gridshaderのセル評価モデルを音響生成へ拡張する「gridpcm」構想について、その技術的基盤を整理する。実装の中心にはWeb Audio APIを置き、AudioContext、ScriptProcessorNodeまたはAudioWorkletを用いて、ブラウザ上でリアルタイムPCMサンプルを逐次生成する。各サンプルは、サンプリング周波数に基づく時刻 t = n / sampleRate から計算され、サイン波、矩形波、ノコギリ波、ノイズなどの基本波形はJavaScript関数として定義される。gridshaderにおけるピクセル座標 fragCoord に相当するものとして、gridpcmでは時間インデックス、レーン番号、セル位置を用い、各セルは oscillator、gain、envelope、gate、filter、bitcrush、delay、mix などの処理単位として振る舞う。これにより、音響処理は固定された波形再生ではなく、格子状に配置された関数評価の連鎖として記述される。また、複数レーンの出力を加算合成することで、簡易的なトラックミキサーとして機能し、PCM的な低解像度感、量子化ノイズ、波形の粗さも表現資源となる。本構想は、DAWの代替ではなく、音を「データ列」「関数」「視覚的グリッド」の交点で味わうための、ブラウザベースの実験的音響環境である。


関連キーワード:

Web Audio API、AudioContext、AudioWorklet、ScriptProcessorNode、PCMサンプル生成、sampleRate、時間インデックス、サイン波生成、矩形波、ノコギリ波、ホワイトノイズ、オシレーター、ゲイン制御、エンベロープ、ゲート処理、フィルター、ディレイ、ビットクラッシュ、量子化、レーンミキシング、加算合成、リアルタイム音響合成、JavaScript DSP、ブラウザ音源、gridshader、gridpcm、音のシェーダー、味わうインターフェース

娯楽における「粘性」

 本稿は、娯楽における「粘性」を、味わう行為を成立させる時間的・記憶的条件として位置づける。ギャンブルやガチャに代表される射幸性は、未来の偶然によって現在の行為を駆動するが、その継続性は必ずしも経験の蓄積に基づかない。これに対し、RPG、トリロジー、育成ゲーム、対人ゲームに見られる粘性は、過去の選択、記憶、未練、関係性が現在の解釈と行動に残留する性質である。すなわち、粘性とは単なる中毒性や反復性ではなく、経験が揮発せず、次の体験を変形させる力である。さらに、対人ゲームでは履歴が読み合いを生み、読み合いが戦略性へと発展する。ここでは偶然だけでなく、他者の意図、癖、記憶、因縁がゲーム性を厚くする。したがって、ゲーム性の発展は、射幸性から粘性へ、さらに戦略性・社会性へと移行する過程として捉えられる。「味わう」とは、この粘性を受け入れ、経験の残留を価値として読む態度である。

関連キーワード:粘性、味わう、射幸性、継続性、揮発性、ゲーム性、RPG、トリロジー、記憶、蓄積、履歴、未練、戦略性、対人性、読み合い、社会性、中毒性、反復、経験の残留、コ

入札額の上昇に伴いCPCが上昇し、同時にCVRが低下する現象

 入札額の上昇に伴いCPCが上昇し、同時にCVRが低下する現象は、広告オークションにおける限界クリックの質的劣化として定式化できる。入札額 (b) を高めることは、より多くの広告機会への参加を可能にし、クリック量 (Q(b)) を増加させる一方で、競争強度の高い面への露出により (CPC'(b)>0) をもたらす。さらに、追加的に獲得されるクリック集合 (\Delta S) の平均CVRが既存集合 (S(b)) の平均CVRを下回る場合、全体の平均CVRは低下する。このとき (CVR_{\Delta}<CVR_{average}) が成立し、(dCVR/db<0) と表現される。したがって、CPAは (CPA(b)=CPC(b)/CVR(b)) として、分子の上昇と分母の低下を同時に受ける。これは単なる運用失敗ではなく、市場拡張に伴う「濃い需要」から「薄い需要」への遷移であり、広告成果を平均値ではなく限界値として味わうための基本モデルである。


関連キーワード:
限界クリック、平均CVR、限界CVR、CPC上昇、CPA悪化、広告オークション、入札額、需要の希薄化、クリック品質、コンバージョン確率、限界効用、逓減効果、広告配信最適化、探索拡張、入札弾力性、ROAS、獲得効率、トラフィック品質、平均と限界の乖離。

2026年6月28日日曜日

本稿は、Cloudflare Durable Objectsを、単なるサーバーレス実行基盤ではなく

 本稿は、Cloudflare Durable Objectsを、単なるサーバーレス実行基盤ではなく、「状態を持つ対象物」がネットワーク上に宿るための分散的存在論として捉え直す試みである。Durable Objectは、一意なID、内部状態、永続ストレージ、外部からのメッセージ処理を備え、Actorモデルに近い振る舞いを示す。この構造は、ROSにおけるノード、トピック、サービス、アクションの関係と親和性が高い。すなわち、ひとつの回路、ひとつの部屋、ひとつの編集空間が、それぞれ固有の状態を持つ「小さなノード」として立ち上がる。

「味わう」とは、この技術を効率や性能のみで評価するのではなく、対象が名前を持ち、状態を記憶し、他者との相互作用を通じて変化する過程を経験的に読む態度である。回路シミュレータを例にすれば、スイッチ操作、電圧変化、参加者の同期、履歴の保存は、単なるデータ処理ではなく、対象物が時間的厚みを獲得する過程である。Durable Objectsは、Web上における小規模な機械的主体の生成を可能にし、ROS的分散ノード観をクラウド環境へ拡張する基盤として位置づけられる。

関連キーワード
Durable Objects、Cloudflare Workers、Actorモデル、ROS、分散ノード、状態管理、WebSocket、サーバーレス、回路シミュレータ、味わう、対象の状態性、ネットワーク存在論、インタラクティブシステム、エッジコンピューティング

Caddyは、Webサーバにおける証明書管理の煩雑さを設計段階から吸収

 Caddyは、Webサーバにおける証明書管理の煩雑さを設計段階から吸収した、現代的なHTTPサーバである。従来、Web公開においてHTTPS化は、サーバ設定、ACMEクライアント、証明書更新、再読み込み処理などを個別に組み合わせる運用課題であった。CaddyはこれらをAutomatic HTTPSとして統合し、ドメイン名を設定するだけで証明書の取得、更新、HTTPからHTTPSへの誘導を自律的に処理する。この特徴により、Caddyは単なるリクエスト処理装置ではなく、公開環境の安全性を継続的に維持する運用基盤として機能する。とりわけリバースプロキシ用途では、短いCaddyfileによってアプリケーションを安全に外部公開できる点が重要である。Caddyを味わうとは、Webサーバを「配信する機械」としてではなく、「証明書の面倒を見る管理者」として理解することである。

関連キーワード:Caddy、Automatic HTTPS、TLS証明書、ACME、Let’s Encrypt、ZeroSSL、Caddyfile、reverse_proxy、HTTPS by default、リバースプロキシ、証明書更新、HTTP/3、Go製Webサーバ、運用自動化、Web公開基盤

Zodを味わう TypeScriptの型を、実行時に連れてくる

 Zodは、TypeScriptにおける静的型の限界を、実行時検証という形式で補完するスキーマ定義ライブラリである。TypeScriptの型情報はコンパイル後のJavaScriptには残らず、外部API、フォーム入力、環境変数、JSONなどの不確実な値に対しては、実行時の検査機構が別途必要となる。Zodはこの断絶に対し、値を検証するスキーマをコードとして記述し、その同一記述からTypeScriptの型を推論するという方法を提示する。すなわち、Zodにおけるスキーマは、単なる注釈ではなく、入力を受理・拒否・変換する実行可能な型装置である。

この点においてZodは、型安全性を開発時の静的保証に閉じ込めず、実行時のデータ境界へと拡張する役割を持つ。特にWeb API、フロントエンドフォーム、設定ファイル、サーバーサイド処理、LLMツール定義など、外部世界とプログラムが接触する領域で有効である。Zodを味わうとは、TypeScriptの型が本来消え去る場所に、検査可能な構造として型の輪郭を再召喚する営みを観察することである。

関連キーワード:TypeScript、実行時検証、スキーマ、型推論、バリデーション、parse、safeParse、JSON Schema、API入力、フォーム検証、型安全性、外部入力、境界防衛

pnpmを味わう――node_modulesを疑ったパッケージマネージャ

 pnpmは、JavaScript開発における依存関係管理を、単なる高速化や省容量化の問題としてではなく、node_modulesという慣習的構造への批判として再構成したパッケージマネージャである。npm以後の開発環境では、依存パッケージは各プロジェクト内に重複して展開され、巨大で不透明なnode_modulesを形成してきた。pnpmはこの前提を疑い、パッケージの実体を共有ストアに集約し、プロジェクト側にはリンクによって必要な構造だけを提示する。これにより、ディスク使用量の削減やインストール速度の向上だけでなく、直接依存と間接依存の境界を明確化し、偶然参照できてしまう幽霊依存を抑制する。すなわちpnpmは、依存関係を「存在するもの」ではなく「参照されるべきもの」として再定義する実践である。その意義は、node_modulesを不可避の混沌として受け入れるのではなく、パッケージ管理の構造・可視性・再現性を問い直した点にある。

関連キーワード:pnpm、node_modules、依存関係管理、content-addressable store、シンボリックリンク、ハードリンク、幽霊依存、monorepo、npm、yarn、再現可能ビルド、JavaScriptエコシステム

味わう四季報

 四季報は、企業の業績、財務、株価、事業内容、将来見通しを圧縮的に収録した情報媒体であり、通常は投資判断のための実用的資料として読まれる。しかし「味わう四季報」は、この読解行為を単なる数値比較や銘柄選別に限定せず、企業活動を社会的・文化的テキストとして受容する態度を指す。売上高、利益率、自己資本比率、成長性といった指標は、味の濃淡、苦味、熟成、余韻といった感覚的比喩を通じて再解釈される。これにより、定量情報と定性情報のあいだにある断絶は緩和され、企業の変化や産業構造の推移をより直観的かつ多層的に把握することが可能となる。したがって本概念は、四季報を即時的な売買判断の道具から、経済、産業、企業、人間の営みを季節的変化として読む批評的メディアへと拡張する試みである。

関連キーワード

四季報、企業分析、情報読解、味覚的比喩、投資リテラシー、財務情報、定量分析、定性分析、経済文化論、メディア論、身体性、批評的読解、データ解釈、ナラティブ、季節性、企業物語、産業構造

ソフトウェア開発におけるポストモーテム

 概要:

本稿では、ソフトウェア開発におけるポストモーテムを単なる障害報告書や再発防止文書としてではなく、「味わう仕様書」の一形態として再解釈することを提案する。従来のポストモーテムは、障害の原因究明と対策立案を目的としてきたが、その過程には技術的制約、組織的意思決定、暗黙知、そして当時の技術文化が豊富に記録されている。本研究では、Atlassian型のポストモーテム形式に着目し、「何が起きたか」「何がうまくいったか」「何を学んだか」という記述を、失敗から知識を抽出するための物語的構造として位置づける。これにより、EJBからSpringへの移行、クラウド障害、オープンソースプロジェクトの設計変更などを、単なる歴史資料ではなく、制約と選択の痕跡を味わうための知識資産として扱えるようになる。ポストモーテムを味わうことは、過去の失敗を追体験し、当時の技術者が直面した問題空間を理解し、将来の設計判断に活用するための「失敗学的読書」と位置付けられる。本稿は、ポストモーテムを技術史・組織学習・知識継承のための新しいアーカイブとして捉える視点を提示する。

関連キーワード:
ポストモーテム、味わう仕様書、失敗学、インシデント管理、技術史、暗黙知、組織学習、ソフトウェアアーキテクチャ、制約指向設計、ナレッジマネジメント、ブレームレス文化、技術的負債、アーカイブ学、ソフトウェア工学、ケーススタディ

📂UMLツール umletino uxfファイルフォーマット

 

スタンドアロンのUmletのウェブ版

モデルの作成からUMLモデルとコードの高度なラウンドトリップエンジニアリングまで、多種多様なツールがあらゆる種類のUMLモデリングをサポートしています。しかし、そのようなツールは特定のライフサイクル・フェーズをサポートすることを目的としているが、異種環境、UML教育、初期のライフサイクル・フェーズ、またはアジャイル・プロセスで生じる基本的な要件、つまり、手間のかからないツールのデプロイ、高速なモデル・スケッチのサポート、柔軟なグラフィックのエクスポート機能を満たしていないことが多い。これらの基本的な問題に特に対処するために設計された、自由に利用できるモデリングツールUMLetを紹介する。UMLetは、様々な開発環境に簡単にデプロイできるフライウェイトJavaアプリケーションであり、直感的でポップアップのないユーザーインターフェースを特徴としながら、一般的な高品質パブリッシングフォーマットへの出力を提供する。このように、ツールUMLetは、特にアジャイル環境やライフサイクルの初期段階において、UMLを教え、UMLスケッチを作成し共有するための効果的な方法を提供します。UMLetのユーザーインターフェースは、直感的で探索的なモデリングをサポートし、そのアーキテクチャは、異種環境での配布と展開をコスト効率よく行う。

https://scholar.google.com/scholar?hl=en&q=A+flyweight+uml+modelling+tool+for+software+development+in+heterogeneous+environments

UMLet は、シンプルなユーザー・インターフェースを備えたフリーのオープンソース UML ツールです。UML 図の高速な描画、プレーンテキストからのシーケンス図やアクティビティ図の作成、eps、pdf、jpg、svg、クリップボードへの図のエクスポート、Eclipse を使用した図の共有、新規のカスタム UML 要素の作成などが可能です。UMLetは、スタンドアロンでも、Eclipseのプラグインとしても、Windows、OS X、Linux上で動作します。

UMLetは、UMLスケッチを素早く作成することを目的としたUMLツールです。UML要素は、ポップアップダイアログの代わりに、テキスト入力と小さなマークダウン方言を使って修正されます。この核となるアイデアは論文で説明されています。
様々な要素の機能についての学習は、サンプルパレットからプロトタイプ的に使用することでサポートされます。このように、ユーザーはUMLetを自分のモデリングのニーズに合わせて簡単にカスタマイズすることができます。
UMLetでは、独自のカスタムUML要素を作成することもできます。要素の外観は、数行のJavaコードを変更することにより、実行時に変更することができます。UMLetから離れることなく、ユーザーはダイアグラムに新しい要素タイプを作成し、追加することができます。これらのカスタム要素の概要については、ここやこのペーパーで説明します。
UMLet では、クラス図、ユースケース図、シーケンス図、状態図、配置図、アクティビティ図など、さまざまな種類の UML 図をサポートしています。
最後に、UMLetをJavaScriptのWebアプリに、そして後にVS Codeの拡張機能に移植することについては、ここで説明します。また、ツイートでの簡単な歴史は、昔の日々を思い起こさせます。

https://www.umlet.com/

要素のカスタマイズもできる

また、UMLetでは、ユーザーが独自のカスタムUML要素を作成することも可能です。要素の外観は、数行のJavaコードを変更することにより、実行時に変更することができます。UMLetから離れることなく、ユーザーは自分のダイアグラムに新しい要素タイプを作成したり追加したりすることができます。

ユーザーは、いくつかのグローバル変数(文字列のベクトル「textlines」、整数値のピクセル数「textheight()」など)とメソッド(printLeft(...)、drawRect(...)、allowResize(..)など)にアクセスして、共通のプリミティブの描画を容易にすることができます。

Custom UML Elements www.umlet.com
かんたん UML入門[改訂2版] amzn.to
3,093 (2021年05月03日 16:16時点 詳しくはこちら)
Amazon.co.jpで購入する

UML eXchange Format(UXF)とは、コンピューティングにおいて、ソフトウェアモデリング言語の標準であるUML(Unified Modeling Language)のためのXMLベースのモデル交換フォーマットである[1]。UXFは1998年に記述された構造化フォーマットであり、UMLモデルのエンコード、公開、アクセス、交換を目的としている[1]。

UXF - Wikipedia en.wikipedia.org
GitHub - ixan29/UML_TO_CPP: this is a c++ source code generator using uml diagrams created in a uxf file this is a c++ source code generator using uml diagrams create github.com
Build software better, together GitHub is where people build software. More than 83 million p github.com

UML(Unified Modeling Language)は、オブジェクト指向モデルの文書化に不可欠な概念や記法をほとんど備えているため、ソフトウェア工学の分野で広く受け入れられている。しかし、UMLにはそのモデル情報を意図的に記述し、交換するための明示的なフォーマットが存在しない。本論文では、UMLのモデル交換を取り上げ、UMLの高い相互運用性を実現するための取り組みを紹介する。我々は、XML(Extensible Markup Language)をベースにしたUXF(UML eXchange Format)と呼ばれる交換フォーマットを開発した。

https://link.springer.com/chapter/10.1007/978-3-540-48480-6_7

https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.19.474&rep=rep1&type=pdf

もっとモダンなフォーマットがあるようだ、その名もXMI

Canonical XMI Tools Download Canonical XMI Tools for free. UML model and diagram sourceforge.net

最近では、XML Metadata InterchangeやOMGのDiagram Definition標準などがこれにあたります。

このプロジェクトは、.uxf / UML eXchange Format ファイルをレンダリングするための Web Components カスタム要素の実装を提供します。
現在、不安定なアルファ版ソフトウェアとみなされており、大きく書き直される可能性があります(もちろん、セマンティックバージョニングに従います)。

https://github.com/kettek/uxf-canvas

UXFは、ソフトウェア開発者やデータ設計者の生活を容易にするために設計されています。csv、ini、json、toml、yamlの各フォーマットと直接競合しています。UXFの主な利点は、カスタム(ユーザー定義)型をサポートすることです。これにより、よりコンパクトで読みやすく、パースしやすいデータを作成することができます。また、文脈によっては、sqliteやxmlに代わる便利な選択肢となる可能性もあります。

https://github.com/mark-summerfield/uxf

2026年6月27日土曜日

Unix V7に収録されたtar(1)マニュアルを対象

 本稿は、Unix V7に収録されたtar(1)マニュアルを対象に、技術文書を単なる操作説明ではなく、歴史的・文化的テクストとして「味わう」ための読解方法を検討する。tarは本来、磁気テープ上にファイル群を保存・復元するための道具であり、そのmanページには、現代のファイルアーカイブ観とは異なる媒体感覚、コマンド設計、制約条件が凝縮されている。また、.TH、.SH、.TPなどのroffマクロは、文書そのものが組版可能なデータとして管理されていたUnix文化を示している。本研究では、この読みにくさを欠陥ではなく、時代のインターフェースとして捉え、JavaScriptによる簡易ビューア化を通じて、古典的仕様書の再読可能性を探る。仕様書を読む行為は、機能理解にとどまらず、道具・媒体・記述形式の関係を追体験する実践である。

関連キーワード:
味わう仕様書、Unix V7、tar、man page、roff、troff、nroff、技術文書史、ソフトウェア考古学、磁気テープ、アーカイブ形式、コマンド設計、JavaScriptビューア、仕様書読解、メディア考古学

Microsoft Clarity の Google Ads 連携

 

エグゼクティブサマリー

Microsoft Clarity の Google Ads 連携は、キャンペーンの UTM タグ付けに全面的に依存しています。実務上、Clarity は各 Google Ads キャンペーンに utm_sourceutm_medium、そして一意の utm_campaign 値が含まれていることを期待しており、それによってセッションを正しいキャンペーンに紐づけます。これらの UTM パラメータが欠落している、重複している、または不一致の場合、Clarity は Google Ads 側の指標、つまりインプレッション、CTR、CPC などは取り込めても、そのキャンペーンのセッション数を 0 と表示することがあります。これは上記スクリーンショットや報告されているエラーメッセージと一致します。要するに、Clarity の「利用可能なデータがありません」という警告は、Clarity がそのキャンペーンの UTM 値でタグ付けされたセッションを見つけられなかったことを意味します。

今回の調査では、各キャンペーンの Final URL suffix に、一意で大文字小文字を区別する utm_campaign タグを設定する必要があることが分かりました。たとえば、あるガイドでは「各キャンペーンは Final URL suffix に一意の UTM campaign 値を持つべき」と明示的に警告しています。Clarity が認識するのは標準的な UTM パラメータ、すなわち utm_sourceutm_mediumutm_campaign のみであり、GA4 専用の utm_id や追加のタグは使用しません。

この問題の最も可能性が高い原因は、UTM タグ設定の不備です。たとえば、設定レベルが間違っている、複数キャンペーンで同一タグを使っている、大文字小文字が一致していない、などです。また、URL リダイレクトによってクエリパラメータが削除されている可能性もあります。

以下では、可能性の高い仮説、問題を切り分けるための簡潔な A/B テスト計画、具体的な URL 例、修正手順、ロールバック戦略、そして無駄な作業を避けるためのチェックリストを示します。さらに、utm_campaign の選択肢、つまり {campaignid}、キャンペーン名、カスタムパラメータを使う場合の比較表も提示します。すべての主張は、Microsoft のドキュメントおよび専門家・コミュニティ情報に基づいています。

Clarity 公式要件

Clarity のドキュメントでは、Google Ads キャンペーンには UTM パラメータが必要であり、各キャンペーンの utm_campaign 値は一意でなければならないと明確に説明されています。Clarity の「Getting started」ガイドには、次のように書かれています。

「キャンペーンに UTM パラメータが設定されていることを確認してください。各キャンペーンが一意の UTM campaign パラメータ値を使用していることを確認してください。これにより、Clarity データと正確に紐づけられます。」

同様に、Clarity の Campaign Insights ドキュメントでは、セッションをキャンペーンにマッピングするには、utm_sourceutm_campaign などの正確な UTM タグ付けが必要であると説明されています。言い換えると、Clarity は、セッションの URL にそのキャンペーンと一致する正しい UTM 値が含まれている場合にのみ、そのセッションをキャンペーンに割り当てます。これらがない場合、Clarity はキャンペーンのセッションを報告できません。これは、広告ダッシュボードでセッション数が 0 と表示されているスクリーンショットの状況と一致します。

Clarity の UI もこの仕様を反映しています。セッションをフィルタリングする際、Traffic フィルタでは SourceMediumCampaign を選択できます。これはそれぞれ utm_sourceutm_mediumutm_campaign に対応しています。設計上、Clarity はそれ以外の UTM パラメータを無視します。たとえば、Clarity のフィルタには utm_contentutm_term、GA4 固有の utm_id に対応する項目はありません。あるブログでの検証では、Clarity はキャンペーン ID 値を保持する utm_id によるフィルタリングをサポートしておらず、Source、Medium、Campaign、Channel のフィルタのみを提供していることが確認されています。

要するに、Clarity の広告連携で重要なのは utm_sourceutm_mediumutm_campaign のみです。

図:Clarity の「Traffic」フィルタ画面では、Source、Medium、Campaign、Channel のみが表示されます。これらはいずれも UTM パラメータから派生する項目です。utm_term や GA4 の utm_id のような他の UTM は表示されません。

Google Ads のトラッキング / ValueTrack パラメータ

Google Ads では、UTM パラメータは通常、トラッキングテンプレートまたは Final URL suffix を使って追加されます。Final URL suffix フィールドは、キャンペーン、広告グループ、広告などのレベルで設定でき、ランディングページ URL の末尾にクエリパラメータを追加します。Google Ads ヘルプでは、Final URL suffix フィールドは、ランディングページ URL の末尾に追加されるパラメータを入力する欄であると説明されています。

Clarity 連携では、Google の有料検索からの流入であることを示すために、utm_source=googleutm_medium=cpc を含める必要があります。さらに、キャンペーンを識別するための utm_campaign が必要です。

ValueTrack には、Google Ads の数値キャンペーン ID を挿入する {campaignid} というプレースホルダーがあります。たとえば、Final URL suffix を次のように設定した場合、

utm_source=google&utm_medium=cpc&utm_campaign={campaignid}

クリック後の URL は次のようになります。

...?utm_source=google&utm_medium=cpc&utm_campaign=23842524195

ここで 23842524195 はそのキャンペーンの ID です。この方法では、各キャンペーンの ID が異なるため、utm_campaign の値は一意になります。

ただし、Google Ads には組み込みの {campaignname} パラメータはありません。そのため、URL にキャンペーン名のテキストを入れたい場合は、手動で入力するか、カスタムパラメータを使う必要があります。たとえば、キャンペーンレベルで _campaignname のようなカスタムパラメータを定義し、utm_campaign={_campaignname} と設定することができます。この柔軟性により、utm_campaign フィールドには、キャンペーン名、コード、その他の識別子を入れることができます。

どの方法を使う場合でも、重要なのは、Clarity が実際に見るランディングページ URL に次のようなパラメータが含まれていることです。

?utm_source=google&utm_medium=cpc&utm_campaign=VALUE

並列トラッキングを使用している場合でも、Google は Final URL suffix のパラメータを付与するため、最終的に遷移する URL は次のようになります。

https://example.com/page?utm_source=google&utm_medium=cpc&utm_campaign=...

図:Google Ads の「Campaign URL options」では、Settings タブ内の Final URL suffix に UTM タグを入力します。例:

utm_source=google&utm_medium=cpc&utm_campaign=MyCampaignName

Google Ads 側の重要ポイントは次のとおりです。

  • {campaignid} プレースホルダーは数値のキャンペーン ID を返します。

  • ネイティブの {campaignname} は存在しないため、実際のキャンペーン名を使いたい場合は手入力またはカスタム値が必要です。

  • UTM タグはアカウント、キャンペーン、広告グループ、キーワードレベルで設定できます。ただし、Clarity はキャンペーンレベルでデータを紐づけるため、各キャンペーンの設定で行うのが最も安全です。

  • アカウントレベルだけで設定すると、すべてのキャンペーンに同じ utm_campaign が付いてしまい、Clarity の「一意であること」という要件に反します。

  • どの方式を使う場合でも、実際の最終 URL をプレビューし、UTM クエリ文字列が意図どおりに付いていることを確認してください。

コミュニティ上の解決策とテスト事例

複数の専門家やユーザー報告も、公式ガイダンスと同じ方向を示しており、よくある落とし穴を明らかにしています。

{campaignid} とキャンペーン名

Ilya Bykov 氏の LinkedIn 投稿では、多くの人が UTM を付け忘れていると指摘され、次のような例が示されています。

?utm_source=google&utm_medium=cpc&utm_campaign={campaignid}&utm_term={keyword}

また、必要に応じて {campaignid} を静的な名前に置き換えることもできると説明されています。要するに、上記のような UTM 設定が推奨されています。

手順付きガイド

「Playhouse Digital」のブログでは、キャンペーンレベルで UTM を追加するよう明示的に説明されています。

「Campaign URL tracking options にこれを追加する必要があります。Final URL suffix は utm_source=google&utm_medium=cpc&utm_campaign=キャンペーン名を手入力 とします。大文字小文字は区別されます。」

これは、各キャンペーンをどのように設定するかを具体的に示しています。この著者も、Clarity が使うのは Source、Medium、Campaign の UTM のみであると説明しています。

キャンペーン名とキャンペーン ID

別の専門ブログ「Man with Many Caps」では、次のように説明されています。

「Clarity は UTM campaign パラメータを使ってセッションをキャンペーンに一致させます。各キャンペーンは Final URL suffix に一意の UTM campaign 値を持つ必要があります。複数のキャンペーンが同じ UTM campaign 値を共有していたり、UTM トラッキングなしでキャンペーンが実行されていたりすると、Clarity 上でデータがまとめられてしまい、キャンペーン単位の粒度が失われます。」

これは、Clarity が照合に使うのは utm_campaign の中身であり、それが必ずしも ID である必要はないことを強調しています。そのため、キャンペーン名または一意のカスタムラベルを使うのが実務上のベストプラクティスであることを示唆しています。

Clarity での UTM フィルタリング

第三者による分析では、Clarity は utm_sourceutm_mediumutm_campaign のみでフィルタリングし、utm_id やその他の GA4 タグを無視することが分かっています。つまり、GA4 の utm_id、これは内部的なキャンペーンキーを保持するものですが、Clarity には関係ありません。

あるテストでは、セッション中に utm_source が変わっても 1 セッションとしてカウントされましたが、Clarity のフィルタでは最後に見た値に紐づけられることが確認されています。

症状報告

Microsoft Q&A や GitHub では、今回と同じような症状が報告されています。つまり、広告のインプレッションは表示されるが、セッション数が 0 のままで、Clarity が UTM タグ不足を警告するケースです。

GitHub の Issue #787 では、ユーザーは UTM を設定済みだと主張しているにもかかわらず、セッションが 0 のままでした。これは、大文字小文字の違いや suffix の欠落など、微妙な不一致でも紐づけが壊れる可能性を示しています。この Issue は解決策なしでクローズされていますが、少なくとも Clarity 側では、この種の問題を「UTM タグが正しくない」と認識することが分かります。

まとめると、コミュニティ上の共通見解は、Final URL suffix を使ってキャンペーンレベルで明示的な UTM パラメータを追加し、各キャンペーンの utm_campaign を一意にすることです。多くの場合、キャンペーン名または一意のコードを使います。以下では、これらのアプローチを直接テストする方法を示します。

可能性の高い原因、根本原因の仮説

公式ガイダンスとユーザー報告に基づくと、「セッションデータがない」問題の最も可能性が高い原因は次のとおりです。

1. UTM パラメータの欠落または誤り

キャンペーンのクリックに必要な UTM が含まれていないケースです。たとえば、Final URL suffix が設定されていない、または UTM を含まないトラッキングテンプレートだけが設定されている場合、Clarity はその訪問をタグなしの Direct 流入として扱う可能性があります。公式ドキュメントも正確な UTM タグが必要であると説明しており、連携エラーメッセージでも UTM が正しく設定されていないと示されています。

つまり、utm_source=googleutm_campaign が存在しない、または形式が不正な場合、Clarity はセッションを広告にマッピングできません。これは最も可能性が高い原因です。

2. 一意でない、または共有された utm_campaign

複数のキャンペーンが同じ utm_campaign 値を使っている場合です。たとえば、すべてのキャンペーンに同じ静的キャンペーン名を設定している、あるいはアカウントレベルの UTM を全キャンペーンに適用している場合などです。この場合、Clarity はデータをまとめてしまうか、誤って割り当てる可能性があります。

公式ドキュメントでは、各キャンペーンが独自の UTM 値を持つ必要があると明確に述べられています。この要件に反している場合、Clarity はセッションを無視する、あるいは誤ったキャンペーンに割り当てる可能性があります。実務上、2 つのキャンペーンが同じタグを持っていると、合算されたセッションがどちらか一方に出るか、集計エラー的に失われる可能性があります。

3. 大文字小文字や書式の不一致

Clarity の utm_campaign 照合は、大文字小文字を区別するように見えます。Playhouse のガイドでは、キャンペーン名は大文字小文字を区別すると明示されています。たとえば、SummerSalesummersale は別物として扱われる可能性があります。

また、UTM にスペースや特殊文字が含まれていて URL エンコードされていない場合、クエリ文字列が壊れることがあります。大文字小文字の不一致やエンコードの問題によって、Clarity がキャンペーンを認識できないという仮説が成り立ちます。

4. Final URL suffix とトラッキングテンプレートの混同

Google Ads では、UTM を追加する方法が複数あります。アカウント、キャンペーン、広告レベルなどです。そのため、意図しないレベルに UTM が設定されている可能性があります。

たとえば、アカウントレベルの suffix だけを使うと、すべてのキャンペーンに同じ UTM 文字列が付いてしまいます。これは先ほどの「一意でない utm_campaign」問題につながります。

また、{lpurl} を含むトラッキングテンプレートを使っているが、Final URL suffix に UTM が含まれていない場合、実際のランディングページ URL には UTM が付かない可能性があります。UTM は、実際にクリック後に表示される最終 URL に含まれている必要があります。広告の Final URL に UTM がなければ、トラッキングテンプレート上で何かを設定していても、Clarity はそれを見ることができません。

5. リダイレクトまたはタグの問題

ランディングページ URL がすぐに別ドメインや別パスへリダイレクトし、その際にクエリパラメータが削除されている場合、Clarity のスクリプトが動作する最終ページでは UTM クエリ文字列が見えません。

同様に、Clarity のトラッキングコードがランディングページで発火していない場合、そもそもセッションは記録されません。録画一覧のスクリーンショットから、サイト上の他のセッションは記録されているようなので、全体的な未設置の可能性は低いですが、特定の広告やページではあり得ます。

6. タイムゾーンまたは反映遅延

Clarity ダッシュボードはローカルタイムゾーンを使い、Google Ads は広告アカウントのタイムゾーンを使うため、一時的なズレが生じる可能性があります。ただし、数日経てば通常は解消されるはずです。多くの報告でも、遅延はせいぜい 1〜2 日程度とされています。少なくとも一部の日付で UTM が正しいにもかかわらず、すべてのキャンペーンでセッションが 0 である場合、この原因だけで説明するのは難しいです。

7. Clarity のバグまたは連携の制限

最後の可能性として、未知のバグや機能制限があります。たとえば、Performance Max キャンペーンがまだ広告ダッシュボードに表示されないという報告もあります。ただし、すべてのキャンペーンで一貫してセッション 0 となっており、かつ UTM 要件に関する明示的なエラーメッセージが出ている場合、設定ミスの可能性がはるかに高いです。

可能性の順位としては、1〜3、つまり UTM の欠落、誤り、重複、大文字小文字の問題が最有力です。4〜5 も URL 構成や配信経路に関係するため、十分にあり得ます。6〜7 は可能性は低いものの、完全には除外できません。

テスト計画:最小限の A/B キャンペーンテスト

目的:
キャンペーン ID、キャンペーン名、その他の値のうち、どの utm_campaign 方式なら Clarity がセッションを記録できるかを検証します。

同じランディングページを指す 2 つの Google Ads キャンペーン、Test A と Test B を作成し、utm_campaign の値だけを変えます。Clarity のセッション表示を比較することで、どの UTM 設定が機能するかを確認できます。

セットアップ

  • 1 つのランディングページ URL を選びます。例:

https://www.example.com/landing-page

このページに Clarity のトラッキングコードが設置されていることを確認します。

  • Google Ads で、設定が同一の 2 つの新規キャンペーン A と B を作成します。キーワード、予算、広告などは可能な限り同じにし、同程度のトラフィックが得られるようにします。

  • Campaign A では、以下を設定します。

Google Ads の Settings > Campaign URL options > Final URL suffix に次を入力します。

utm_source=google&utm_medium=cpc&utm_campaign={campaignid}

これは ValueTrack の {campaignid} を使うため、クリックごとに utm_campaign=[数値ID] が付きます。その他の UTM は上記のとおり、source は google、medium は cpc とします。

  • Campaign B では、他の設定をすべて同じにしたうえで、Final URL suffix だけを次のように設定します。

utm_source=google&utm_medium=cpc&utm_campaign=TestNameB

TestNameB は一意の名前にします。たとえば実際のキャンペーン名と完全一致させます。これは静的なキャンペーン識別子を使う方式です。

両方のキャンペーンを有効化して実行します。別々のキャンペーンを作りたくない場合は、既存キャンペーンを複製し、コピー側の Final URL suffix だけを変更しても構いません。

広告クリック時の挙動

Campaign A の広告をクリックすると、結果の URL は次のようになります。

https://www.example.com/landing-page?utm_source=google&utm_medium=cpc&utm_campaign=1234567890

ここで 1234567890 は Campaign A の ID です。

Campaign B の広告をクリックすると、URL は次のようになります。

https://www.example.com/landing-page?utm_source=google&utm_medium=cpc&utm_campaign=TestNameB

実施期間

両方のキャンペーンを同時に短期間、たとえば 3〜7 日間実行し、データを収集します。各キャンペーンで少なくとも数クリックは得られるようにします。

観察項目

十分なトラフィックが得られたら、Clarity の Advertising Dashboard を確認します。特に各キャンペーンの Sessions 列を見ます。テスト期間を含む日付範囲でフィルタする必要があるかもしれません。

成功条件

Campaign B、つまり utm_campaign=TestNameB を使ったキャンペーンで Clarity のセッション数が 0 より大きければ、Clarity が TestNameB のセッションを認識したことになります。

Campaign A、つまり {campaignid} を使ったキャンペーンについては、セッションが表示されれば数値 ID 方式も機能していることになります。もし Campaign B はセッションが出るが Campaign A は 0 のままであれば、Clarity がテキストのキャンペーン名を必要としていたことが確認できます。

失敗条件

どちらのキャンペーンも数日後にセッションを表示しない場合、かつ他のキャンペーンではセッションが見えている場合は、コード設置やリダイレクトなど、よりシステム的な問題が疑われます。

両方のキャンペーンでセッションが表示される場合は、UTM 自体が問題ではなかったか、Clarity が両方の方式を受け入れていることになります。

必要に応じて、UTM なしのコントロールキャンペーンを 3 つ目として用意してもよいです。その場合、Clarity では 0 セッションになるのが期待されます。これにより、タグなしクリックがカウントされないことを検証できます。

flowchart LR
    Start[Test: Setup two identical campaigns A and B]
    Start --> SetUp[Set Final URL suffix for each campaign:<br>- Campaign A: utm_campaign={campaignid}<br>- Campaign B: utm_campaign=UniqueName]
    SetUp --> RunAds[Run campaigns for several days]
    RunAds --> CollectData[Collect click data in Clarity]
    CollectData --> CheckA{Sessions in Clarity?}
    CheckA -->|Campaign A|  CheckB{Campaign B Sessions?}
    CheckB --> ResultA[Campaign A sessions<br>- If >0: {campaignid} works<br>- If 0: {campaignid} fails] 
    CheckB --> ResultB[Campaign B sessions<br>- If >0: UniqueName works<br>- If 0: UniqueName fails]
    ResultA --> Analysis[Analyze results to identify cause]
    ResultB --> Analysis

根本原因の仮説、優先順位付き

1. UTM タグ設定の問題、最有力

Google Ads キャンペーンに、キャンペーンレベルで正しく整形された UTM タグがない可能性です。Final URL suffix が設定されていない、または不正に設定されている可能性があります。これはエラーメッセージおよび Microsoft のドキュメントと一致します。

すべてのキャンペーンでセッションが 0 になっているため、共通の設定問題である可能性が高いです。

2. 重複した、または一意でない UTM campaign 値

キャンペーンが同じ utm_campaign を持っている可能性があります。たとえば、アカウントレベルの suffix がすべてのキャンペーンに継承されている、あるいは同じタグを複数キャンペーンにコピーしている場合です。

これは「一意の値」という要件に反し、Clarity がデータを落とす、またはまとめてしまう原因になります。Man with Many Caps のブログでも、1 つの UTM を複数キャンペーンで共有すると、キャンペーン単位の粒度が失われると警告されています。

3. 大文字小文字または書式の不一致

UTM 値は存在しているが、大文字小文字が異なっている、またはタイプミスを含んでいる可能性です。たとえば、Promo2025promo2025 は一致しません。Playhouse のガイドでは、キャンペーン名は大文字小文字を区別すると明示されています。余分なスペースや ? の欠落もクエリを壊す可能性があります。

4. トラッキング設定の階層が間違っている

UTM が意図しない階層に設定されている可能性があります。たとえば、Final URL suffix ではなくトラッキングテンプレートに追加されていたり、アカウントレベルのみに設定されていたりするケースです。その場合、実際にクリックされた最終 URL に UTM が付かない可能性があります。

Playhouse のブログでは、キャンペーンごとに Campaign > Tracking Options > Final URL suffix に設定することを強調しています。トラッキングテンプレートと Final URL suffix のどちらかが欠けていたり、噛み合っていなかったりすると、クリック時にタグが付かない可能性があります。

5. ランディングページのリダイレクトで UTM が削除されている

ランディングページが即座に別 URL へリダイレクトし、その過程でクエリパラメータが消えている場合、Clarity は UTM を見ることができません。同じ最終 URL が他のキャンペーンで機能しているなら可能性は低いですが、キャンペーンごとに微妙に違う URL を使っている場合や、正規化リダイレクトがある場合はあり得ます。

6. スクリプト設置またはフィルタリングの問題

Clarity スクリプトがランディングページに存在しない、または広告ブロッカーや CSP によってブロックされている場合、セッションは記録されません。録画リストのスクリーンショットでは他のセッションが見えているため、全体的な未設置の可能性は低いですが、確認する価値はあります。

7. 連携遅延またはバグ

Microsoft はデータが 1〜3 日程度で表示されることを示唆していますが、さらに時間がかかったユーザーもいます。キャンペーンが新しい、またはトラフィックが少ない場合、単にダッシュボードがまだ更新されていない可能性があります。また、Performance Max キャンペーンが表示されないなど、限定的なバグの可能性もあります。ただし、複数日・複数キャンペーンにわたって 0 が続く場合、優先順位は低いです。

修正手順とロールバック計画

テストの結果、UTM 関連が原因と確認された場合は、次の修正を推奨します。

キャンペーンレベルの UTM を追加または修正する

Google Ads で対象キャンペーンの設定を開きます。

Settings > Campaign URL options > Final URL suffix

ここに、Clarity が必要とする UTM パラメータを正確に入力します。

例:

utm_source=google&utm_medium=cpc&utm_campaign=MyCampaignName

MyCampaignName は、そのキャンペーン固有の名前に置き換えます。スペースや特殊文字は避け、大文字小文字も統一します。必要であれば、名前の代わりに {campaignid} を使うこともできます。これは一意の数値 ID を自動生成します。各キャンペーンに対して保存・適用します。

一貫性を確認する

すべてのアクティブキャンペーンに、utm_sourceutm_mediumutm_campaign が含まれていることを確認します。Clarity は過去の欠落分をさかのぼって補完しません。すべてのアクティブキャンペーンで、今後のクリックに UTM が付くようにします。

URL の挙動を確認する

Google Ads のプレビューまたは実クリックで、ランディングページ URL に新しい UTM が含まれていることを確認します。また、リダイレクトがある場合でも、最終 URL まで UTM クエリ文字列が保持されていることを確認します。

処理時間を待つ

Clarity が新しいタグ付きセッションを収集・処理するまで、少なくとも 24〜48 時間待ちます。実務上、Clarity ではキャンペーンセッションが 1〜2 日以内に更新されることが多いです。

Clarity ダッシュボードを再確認する

一定時間が経過したら、Clarity の Advertising dashboard を再確認し、以前は 0 だったキャンペーンにセッション数が表示されるか見ます。既知の UTM を持つテストキャンペーンと比較してください。

ロールバック計画

変更後にセッションが表示されない、または予期しない問題が起きた場合は、Google Ads の Final URL suffix を元の値に戻す、またはクリアします。正しい UTM を追加すること自体は通常リスクが低く、他のデータを壊すことはあまりありません。

予期しない問題がある場合は、Clarity 側で Google Ads 連携を一時的に無効にし、URL を修正した後で再度有効化することもできます。

注意:
変更前には、以前の Final URL suffix をメモする、またはスクリーンショットを保存しておくと、正確に元へ戻せます。実務上、UTM の設定ミスは致命的ではなく、最悪でも分かりにくいキャンペーン名でデータが表示される程度です。特定できればすぐ修正できます。

無駄な作業を避けるためのチェックリスト

大がかりなトラブルシュートに入る前に、次の項目を確認してください。

UTM の存在

各 Google Ads キャンペーンが必要な UTM を送信しているか確認します。Google の広告プレビュー、または実クリックで、ランディングページ URL に次が含まれているか見ます。

utm_source=google&utm_medium=cpc&utm_campaign=...

含まれていない場合は、そこで作業を止めます。UTM が存在しない限り、それ以上 Clarity 側を直しても効果はありません。

キャンペーンタグの一意性

2 つ以上のキャンペーンが同じ utm_campaign 値を共有していないことを確認します。アカウントレベルの Final URL suffix を使っていたり、キャンペーン間でタグをコピーしていたりする場合は、各キャンペーンの値を別々にします。キャンペーン名または ID を使うのが一般的です。

Clarity 連携設定

Clarity で正しい Google Ads アカウントが接続されていることを確認します。Clarity の Setup 画面で、Google Ads が Connected になっている必要があります。まだ Get Started の表示なら、まずアカウントを接続します。

時間とタイムゾーン

Clarity で正しい日付範囲を見ていることを確認します。Clarity はローカルタイムゾーンを使います。キャンペーンを開始した直後、または停止直後だと、セッションがないように見えることがあります。UTM を修正した後は、結論を出す前に 24〜48 時間待ちます。

リダイレクトとピクセル

Clarity が見るランディングページ URL が最終 URL であることを確認します。サーバーリダイレクトによってクエリパラメータが削除されていないか見ます。また、Clarity のトラッキングスクリプトがそのページに存在し、発火していることを、ブラウザ開発者ツールやネットワークログで確認します。スクリプトが読み込まれなければ、UTM が完璧でもセッションは記録されません。

フィルタ条件

Clarity 側で、誤ってセッションを除外するフィルタやセグメントを設定していないか確認します。たとえば、別の Source / Medium でフィルタしている可能性があります。最初は、日付範囲だけをテスト期間に合わせ、All sessions の状態で見るのが安全です。

安定したキャンペーン名を使う

utm_campaign ではスペースや記号を避けます。短く明確な名前、または ID を使います。Clarity は大文字小文字を区別する可能性があるため、一貫性を保ってください。

バックアップ計画

テストや変更がデータを乱す可能性があると感じる場合は、現在の設定をメモするか、2 つ目のテストキャンペーンを作ります。ただし、一般的に UTM の更新は低リスクです。不安がある場合は、Clarity の Google Ads 連携を一時的に無効化し、URL を修正してから再度有効化できます。

このチェックリストに従うことで、真の原因、つまり UTM 設定に集中でき、無駄な作業を減らせます。

UTM campaign の選択肢比較

utm_campaign の値Clarity での結果注記
{campaignid}、数値 ID各キャンペーンが異なる ID を持つため一意になります。Clarity はセッションを記録し、対応するキャンペーンに紐づける可能性があります。ただし、Clarity UI では Google Ads から取得した実際のキャンペーン名で表示される場合があります。ID を使うこと自体に害はなく、「一意の値」という要件を満たします。ただし、一部のガイドでは読みやすさのために実際の名前を使うことが推奨されています。Google Ads の ValueTrack パラメータとして公式にサポートされています。{campaignid} を使う場合でも、値が一意であるため Clarity は正しくセッションを紐づけるはずです。ただし、Microsoft の公式ドキュメントではどの形式を使うべきか明示されていないため、どちらでも機能する可能性があります。実務上は読みやすさのため、名前を好む人もいます。
キャンペーン名、静的文字列各キャンペーンに手動で一意の値を設定すれば機能します。文字列が期待するキャンペーン名と完全一致し、大文字小文字も一致していれば、Clarity はそのキャンペーンにセッションを表示します。多くのガイドで推奨される方法です。キャンペーンの実際の名前を UTM に使います。大文字小文字に注意してください。スペースや特殊文字がある場合は、URL エンコードするか避ける必要があります。常に WinterSale2026 のような安定した表記を使い、winterSale2026 のように揺れないようにします。
カスタムパラメータ値静的文字列と同じように動作します。たとえば utm_campaign={_campName} と設定すると、定義した値が使われます。Clarity はその値をキャンペーン識別子として扱います。Google Ads で _campName のようなアンダースコア付きカスタムパラメータを定義し、その値をキャンペーン名またはコードにできます。そのうえで suffix に utm_campaign={_campName} を設定します。結果は名前を直接使う場合と実質的に同じです。名前管理を分けたい場合や一貫性を保ちたい場合に便利です。

いずれの場合も、Clarity にとって重要なのは、UTM 値がキャンペーン間で異なり、ダッシュボードが期待する値と正確に一致することです。{campaignid} は一意性を保証でき、手入力も不要です。一方、キャンペーン名やカスタムパラメータは人間に読みやすいラベルを提供します。テスト後、正しくセッション数が出る方式を採用すれば問題ありません。

前提条件

この分析では、Clarity の比較的新しいバージョン、つまり 2024 年以降のバージョンを使っており、Google Ads 連携自体は機能している、つまりアカウントが正しくリンクされていることを前提としています。また、サイトのランディングページがリダイレクト時にクエリパラメータを削除していないことも前提としています。

これらの条件が異なる場合、たとえば古いベータ版の広告ダッシュボードを使っている、またはサーバーが UTM を削除している場合、挙動は変わる可能性があります。上記のガイダンスは、2026 年半ば時点の Microsoft 公開ドキュメントと一般的な利用状況に基づいています。カスタムタグ管理やマルチドメイン構成を使っている場合は、クロスドメイントラッキングなど追加の手順が必要になる可能性があります。

庶民宇宙船地球号

 本稿は、「庶民宇宙船地球号」という比喩を通じて、地球環境問題を抽象的な危機論ではなく、日常生活者が味わいながら理解できる定量的制約の体系として再記述する試みである。地球は約82億人を乗せた閉鎖系の船であり、表面積約5.1億km²を単純に分有すれば、1人あたり約6.2ヘクタールにすぎない。しかもその多くは海洋、氷床、砂漠、山岳であり、実際に生活・耕作・居住に使える領域はさらに限定される。太陽からの入力は地球上端で約1,360W/m²だが、これは全乗員で共有される唯一の日常的な外部補給である。一方、大気、水、土壌、鉱物、化石燃料は船内在庫または循環装置として扱われる。淡水利用の大半は農業に向かい、食料生産は水、耕地、肥料、土壌の制約に依存する。また、CO₂排出、過剰窒素、生物多様性の損失などは、船外投棄できない廃棄物問題として再解釈できる。近年の地球システム論では、複数のプラネタリー・バウンダリーがすでに安全域を超えているとされる。したがって本稿の目的は、地球全体の総量ではなく、1人あたりの空気、水、食料、エネルギー、廃棄物処理能力、災害耐性を基準に、持続可能性を生活者の実感へ翻訳することにある。「庶民宇宙船地球号」とは、地球規模の制約を、専門家の管理対象から日々の暮らしの読解対象へ移すための思考装置である。

関連キーワード:宇宙船地球号、庶民性、閉鎖系、82億人、1人あたり資源、太陽エネルギー、生命維持装置、プラネタリー・バウンダリー、淡水制約、食料安全保障、CO₂排出、窒素循環、生物多様性、廃棄物循環、気候変動、地球システム、環境倫理、生活者視点、持続可能性、味わう解説

BracmatJSを味わう ― 記号処理系のもう一つの進化

 

概要

BracmatJSは、記号処理言語BracmatをJavaScript環境上で利用可能にした実装であり、現代のWeb技術の文脈から失われつつある「書換え系プログラミング」の思想を再発見するための貴重な対象である。BracmatはLispやPrologと同じく記号を中心に据えるが、関数適用や論理推論よりも、木構造そのものの変形とパターンマッチを言語の中心に置く点に特徴がある。

BracmatJSを味わう際に重要なのは、その機能や文法を学ぶこと以上に、「データとプログラムの境界が曖昧である」という思想を体験することである。括弧で表現された構造は、単なる配列でも構文木でもなく、文・項・規則・プログラムを同時に表現する。これは現代のJSONやAST、さらには知識グラフやシンボリックAIへと連なる思想の源流の一つと見ることができる。

また、BracmatJSはブラウザ上で動作するため、記号変換、推論、DSLの構築、自然言語の半構造化処理などを対話的に試すことができる。その体験は、効率的なプログラミング技法の習得というよりも、コンピュータを「計算機」ではなく「記号変換機械」として再認識する行為に近い。

したがってBracmatJSは、LispやPrologとは異なるもう一つの記号処理の系譜を現代に伝える小さな化石であり、現在の構文変換系技術やDSL設計を味わうための知的な入口として位置付けられる。


関連キーワード

  • 記号処理(Symbolic Processing)
  • 項書換え系(Term Rewriting System)
  • パターンマッチング
  • 木構造処理(Tree Manipulation)
  • DSL(Domain Specific Language)
  • Lisp
  • Prolog
  • SNOBOL
  • AST(Abstract Syntax Tree)
  • シンボリックAI
  • 構文変換
  • メタプログラミング
  • 書換え規則
  • データとコードの同型性(Homoiconicity)
  • JavaScript実装
  • ブラウザプログラミング
  • 知識表現
  • 記号計算
  • 宣言的プログラミング
  • 言語処理系の歴史

ゲームおよび玩具における「制約」と「粘性」の関係

 本稿は、ゲームおよび玩具における「制約」と「粘性」の関係を、初代『ドラゴンクエスト』、たまごっち、印象派的表現を横断して考察する。制約とは、機能・表現・操作・保存形式に課される限定であり、単なる不足ではなく、受け手の補完行為を誘発する設計条件である。初代『ドラゴンクエスト』における復活の呪文は、セーブ機能の代替であると同時に、ゲーム状態を紙・記憶・会話へ転写する媒体であった。また、たまごっちは小型液晶、限定操作、現実時間、死や成長といった制約を通じて、保存を単なる記録ではなく関係の継続へ変換した。さらにアルバムのような補助記録は、機能保存ではなく想起媒体として作用し、過去の体験を断片的に再起動する。これらに共通する粘性とは、体験がプレイ中の快楽に留まらず、身体・記憶・生活時間・社会的関係へ残留する性質である。一方、ガチャに代表される射幸性は、記憶を期待値や交換価値へ変換するが、批評眼や確率的思考を生む社会性も持つ。以上より、ゲーム性は自由度や情報量ではなく、制約がいかに補完・想起・関係性を生成するかによって再定義される。


関連キーワード:
制約粘性、保存の粘性、想起媒体、機能保存、復活の呪文、たまごっち、印象派、補完の美学、射幸心、確率的社会性、ゲーム性、記憶の転写、プレイヤー補完、意味増幅、生活時間、関係の継続。

YAML の初期史

 本稿は、YAML の初期史を「味わう仕様書」の観点から再読する。YAML は2001年、Clark Evans により提案され、Oren Ben-Kiki、Ingy döt Net とともに設計された。発端には、XML を簡略化しようとした SML-DEV メーリングリストの議論、Ingy による Perl の Data::Denter/プレーンテキスト・シリアライゼーションの実践がある。2001年12月の作業草案では、YAML はまだ Yet Another Markup Language として記述されていたが、のちに YAML Ain’t Markup Language へと再解釈され、文書マークアップではなくデータシリアライゼーション言語であることを強調するようになった。2003年には Ruby が YAML フレームワークを標準配布に含め、2004年に YAML 1.0、2005年に YAML 1.1、2009年に JSON 互換性を重視した YAML 1.2 が公開される。ここには、XML 批判、Perl/Python/Ruby 文化、設定ファイル美学、そして人間が読める構造保存への欲望が交差している。

関連キーワード:Clark Evans、Oren Ben-Kiki、Ingy döt Net、SML-DEV、yaml-core、Data::Denter、Perl、Ruby、XML、JSON、YAML 1.0、YAML 1.1、YAML 1.2、データシリアライゼーション、仕様美学、味わう仕様書

JVMとWebAssembly(Wasm)の差は

 JVMとWebAssembly(Wasm)の差は、単なる実行方式の違いではなく、プログラム世界の奥行きの違いとして捉えられる。JVMはクラス、オブジェクト、メソッド、フィールド、例外、GCを仕様内部に持ち、データと振る舞いをひとつの存在として結合する。たとえば Enemy はHPや座標を持つだけでなく、damage() という行為を備えた立体的な対象である。enemy.damage(10) という呼び出しには、対象、状態、振る舞い、生存期間が厚みを持って含まれる。一方、Wasmはこの立体をC言語的な平面へ押し広げる。敵はオブジェクトではなく、enemy_hp[i]enemy_x[i]enemy_y[i] といった線形メモリ上の配列へ分解され、関数は番地を読み書きする。Wasmが理解するのは、関数、数値、load/store、分岐、import/exportであり、敵という存在感はコンパイラや設計者の側に残される。したがってJVMはオブジェクトの彫刻を保存する仮想機械であり、Wasmはメモリ上の地図を安全に運搬する仮想CPUである。


関連キーワード
JVM、WebAssembly、オブジェクトモデル、線形メモリ、C言語、立体性、平面性、クラス、メソッド、フィールド、load/store、framebuffer、仮想CPU、バイトコードVM、mino5stack

PostgreSQLとMySQLの差異は

 PostgreSQLとMySQLの差異は、単なる機能比較に還元されず、出自・ライセンス・共同体倫理の差として把握されるべきである。PostgreSQLはUC BerkeleyのPOSTGRES研究に由来し、BSD/MIT的な寛容ライセンスを背景に、標準SQL、拡張性、型体系、堅牢性を重視する「公共財としてのデータベース」文化を形成してきた。ここではDBは単なる保存装置ではなく、知識表現と設計思想の器として味わわれる。一方MySQLは、LAMP、PHP、WordPress、レンタルサーバー文化と結びつき、Webアプリケーションを迅速に成立させる実用的基盤として普及した。GPLと商用ライセンス、のちのOracle管理という経緯は、商用OSSとしての性格を強めている。したがってPostgreSQLは「研究・UNIX・BSD・職人性」、MySQLは「Web・実用・普及・商用性」という異なる感触を持つ。CTRの差は、この語が呼び出す技術的ファンダム、すなわち読者がどの文化圏に自己を置くかの差として解釈できる。

関連キーワード:PostgreSQL License、BSDライセンス文化、UC Berkeley、POSTGRES、SQL標準、拡張性、JSONB、PostGIS、MySQL AB、GPL、デュアルライセンス、LAMP、WordPress、Oracle、OSSコミュニティ、技術ファンダム、DB文化史

モールス信号以後の通信史におけるBaudot方式

 本稿は、モールス信号以後の通信史におけるBaudot方式を、単なる文字符号ではなく、時間・身体・機械同期を統合する通信プロトコルとして捉え直す。モールスが短点・長点・間隔を人間の聴覚的リズムとして運用したのに対し、Baudotは五単位のオン/オフ信号を、同期分配器による時間スロットへ配置した。ここでは通信線は単なる導線ではなく、複数の操作者と印字機構が共有する拍の場となる。五鍵入力、信号保持、回転分配、受信側印字という一連の操作は、後のシリアル通信、時分割多重、バッファリング、端末プロトコルの原型を含んでいる。したがってBaudotは、モールスの「叩く通信」からITA2以後の「流す通信」へ移行する中間形態であり、人間の拍が機械のクロックへ翻訳される瞬間を示す技術文化的装置である。本研究は、この移行を「味わう」ことで、通信プロトコルを効率の体系ではなく、リズム、待機、同期、印字の感覚的編成として読解する。

関連キーワード:
Baudot、ITA1、ITA2、モールス信号、印刷電信、テレタイプ、時分割多重、同期通信、五単位符号、分配器、紙テープ、Murray code、Telex、UART、通信プロトコル、技術文化史、メディア考古学、味わう仕様書

ECS(Entity Component System)は、ゲーム開発における継承階層の破綻から生まれた実務的アーキテクチャである。

 ECS(Entity Component System)は、ゲーム開発における継承階層の破綻から生まれた実務的アーキテクチャである。初期の問題意識は、主人公、敵、弾、アイテム、状態異常、AI、描画、物理といった性質をクラス継承で分類すると、例外的な存在や複合的な役割を持つ対象を扱いにくくなる点にあった。ECSはこの問題に対し、Entityを固有ID、Componentを性質や状態を表すデータ、Systemをそれらへ作用する処理として分離する。ここで重要なのは、ゲーム内の対象が「何者であるか」ではなく、「いま何を持っているか」によって振る舞いが決まることである。したがってECSの出自は、まず集合論的形式化やキャッシュ効率の理論ではなく、composition over inheritanceを徹底するゲーム実務の知恵にある。後にUnity DOTS、Bevy、FlecsなどのArchetype ECSでは、この設計がデータ指向、並行処理、形式的意味論へ発展した。ECSは、オブジェクトの本質を固定せず、部品の組み合わせとして一時的な役割を発生させる方法論である。

関連キーワード
ECS、Entity Component System、Entity System、Adam Martin、Scott Bilas、Dungeon Siege、MMOG、Composition over Inheritance、Component-Based Architecture、GameObject、Unity、Unity DOTS、Entity as ID、Component as Data、System as Behavior、継承階層の破綻、データと処理の分離、Archetype ECS、Bevy、Flecs、EnTT、Data-Oriented Design。

ボイジャーの通信仕様

 ボイジャーの通信仕様は、深宇宙における情報伝達を、速度ではなく持続性と復号可能性の観点から設計した技術体系である。地上からの指令はS-bandによる極低速のアップリンクとして送られ、探査機からの応答は主にX-bandのダウンリンクとしてDeep Space Networkの巨大アンテナ群に受信される。この通信は、単なる電波の送受信ではなく、搬送波、サブキャリア、Manchester符号、biphase変調、畳み込み符号などを重ねることで、微弱化した信号を意味あるデータへと回復する手続きである。モールス信号が接点の開閉を時間幅として読む技術であったなら、ボイジャー通信は宇宙的距離によって希薄化した電波を、符号化と誤り訂正によって再び読める状態へ戻す技術である。I2Cのような近距離同期バスとは異なり、ここでは遅延、雑音、電力制約、アンテナ利得、地球側設備までが通信仕様の一部となる。したがってボイジャー通信は、機械間通信であると同時に、人類の記憶を極小のビット列として太陽圏外から延命させる、メディア考古学的な情報保存装置として味わうことができる。


関連キーワード:ボイジャー、深宇宙通信、Deep Space Network、DSN、S-band、X-band、アップリンク、ダウンリンク、テレメトリ、Manchester符号、biphase変調、畳み込み符号、搬送波、サブキャリア、誤り訂正、低ビットレート、信号減衰、アンテナ利得、モールス信号、I2C、非同期通信、宇宙機通信、情報保存、メディア考古学、味わう仕様書。

🍬CindyJS入門 インタラクティブな(数学的な)コンテンツ シンディjsと数学シンデレラ CindyJS シェーダーも関連ある

 

CindyJS は、ウェブ上でインタラクティブな(数学的な)コンテンツを作るためのフレームワークです。

Cinderellaと互換性があり、CindyScriptのインタープリタと、構造を記述するのに使える幾何学的な操作のセットを提供します。これらのコンポーネントは、特に幾何学や数学だけでなく、他の様々な分野からの様々なコンセプトを簡単に視覚化します。

画像
画像
画像
CyndyGL
画像
画像


画像


CindyJS には CindyScript という学びやすいスクリプト言語があり、様々なスマートアプレットに利用できます。

でたDSL

あなたは、ペンとナプキンしか持っていない、騒々しいパブに座っているときに、他の数学者に何かを説明したことがありますか?CindyScriptはそのナプキンに相当するプログラミングです。言い換えれば、CindyScriptは、大雑把で、時には非公式で、それでも完全で、最も理解しやすい方法で表現できるように設計されています。

でた小粋な比喩

シェーダーにも精通

CindyJS は、数学的な知識を持つハイレベルなユーザーに、シェーダー言語を学ぶことなく GPU のシェーダー言語へのアクセスを提供します。

ここでは、CindyJSでレンダリングされた複素数の位相差のGPUレンダリングの例を見てください。任意の複素関数を入力したり、あらかじめ定義された関数を選んだりして、その複素位相のポートレートを見ることができます。

シンデレラやcindy.jsというライブラリは座標計算に複素平面を使っていると、聞いたことがあります

 おっしゃる通り、CinderellaやそのJavaScript版であるCindyJSは、座標計算に複素数を活用しています。


CinderellaとCindyJSにおける複素数の利用

複素数による座標表現:

統一的な座標系: 複素数を用いることで、平面上の点やベクトルを一貫して表現できます。

計算の簡略化: 複素数の演算(加減乗除)を利用して、回転や拡大縮小などの幾何学的変換を簡潔に実装できます。

動的幾何学ソフトウェア:

リアルタイム操作: ユーザーが図形を直接操作し、その結果を即座に視覚化できます。

複雑な数学的概念の可視化: フラクタルや複素関数など、高度な数学的対象を直感的に描画できます。


複素数を用いる利点

  1. 幾何学的変換の容易さ:

回転の表現: 複素数の乗算を用いることで、回転変換を簡単に実装できます。

スケーリングと回転の組み合わせ: 複素数の絶対値と偏角を調整することで、拡大縮小と回転を同時に行えます。

  1. フラクタルの描画:

マンデルブロ集合やジュリア集合: 複素平面上の各点に対して反復計算を行い、その結果を色としてマッピングします。

高精度な計算: 複素数を直接扱うことで、計算精度が向上し、詳細なフラクタルパターンを描画できます。

  1. 複素関数の可視化:

リーマン面の描画: 複素関数の値を色相や明度、高さなどに対応付けて視覚化します。

モアレパターンや干渉縞の生成: 複素数を用いた波動干渉などの物理現象をシミュレーションできます。


タートルグラフィックとの関連性

複素平面モードの導入:

座標計算の簡略化: タートルグラフィックでも複素数を用いることで、座標変換や幾何学的操作が容易になります。

コードの可読性向上: 複素数を直接扱うことで、アルゴリズムがシンプルになり、プログラムの理解が深まります。

フラクタルの描画:

マンデルブロ集合の効率的な描画: 複素数を直接扱うことで、計算と描画の両方が効率化されます。

教育的価値の向上: 複素数の概念を視覚的に理解するためのツールとして活用できます。


CinderellaとCindyJSの特徴

高い拡張性:

スクリプト言語の搭載: 独自のスクリプト言語(CindyScript)により、複雑な計算やアニメーションを実装可能です。

プラグインやライブラリの利用: 追加機能を簡単に組み込むことができます。

Webブラウザでの実行:

クロスプラットフォーム対応: CindyJSはブラウザ上で動作するため、OSに依存せずに利用できます。

インタラクティブなコンテンツの作成: Webページ上で動的な数学的コンテンツを提供できます。


まとめ

CinderellaやCindyJSが座標計算に複素数を使用しているのは、複素数が平面上の点や変換を効率的かつ統一的に表現できるためです。これにより、複雑な数学的図形やフラクタルを直感的に描画・操作することが可能になります。タートルグラフィックでも複素平面モードを導入することで、同様の利点を得られ、マンデルブロ集合などの描画がより簡単かつ効率的になります。


補足

学習・教育への応用:

数学教育の強力なツール: 生徒が自分で操作しながら数学的概念を学べるため、理解が深まります。

プログラミング教育: 数学とプログラミングの融合により、論理的思考力を養えます。

コミュニティとリソース:

豊富なドキュメントとサンプル: オンラインで多くの資料が公開されており、学習や実装の参考になります。

活発なユーザーコミュニティ: 質問や情報交換が活発に行われており、サポートを受けやすい環境です。

ぜひ、CinderellaやCindyJSを活用して、複素数を用いた座標計算やフラクタルの描画に挑戦してみてください。