実装

開発者向けの実践チュートリアルとガイド。

タグ:
注目
センサーを差し替えても制御はそのまま — 温室をふたつ作らない方法
ITEM開発者2026/8/1

センサーを差し替えても制御はそのまま — 温室をふたつ作らない方法

温室コントローラが高い本当の理由は、センサーと制御がコードの中で 1:1 に噛み合っているからだ。ノードに自分を宣言させ、規則を品番ではなく種類で書けば、温度センサーを別モデルに替えても直すコードが無い。同じサーバー・同じ規則で異なる二つの温室を実際に回した記録。

#embedded#sensors
記事一覧
チップひとつに繋げば、繋いだ機器が端末になる — POS・キオスク・厨房画面を一度にITEM開発者2026/7/30

店にすでにある決済端末の横にサーバーをひとつ立て、タブレット・PC・厨房の画面を繋いだ。三台のどれにもアプリを作っていないのに、それぞれキオスク・POS・厨房ディスプレイになった。カード承認の経路は一行も触っていない。コード全体と実行ログ、実際にレンダーされた三画面をそのまま載せる。

ボードが自分の画面を差し出す — 実機二台、伝送二種、クライアント一つISSUE開発者2026/7/27

STM32H723 は USB シリアルで、ESP32 は mDNS で見つけて Wi-Fi TCP で繋いだ。二台のボードがそれぞれ画面定義を差し出し、ボタンを押せば実際の LED が点く。クライアントのコードは二つの場合で一文字も違わない。シミュレータ無し — この記事だけは、ハードウェアが無ければ検証が失敗する。

問わない画面 — 壁に掛かったものは問うてはいけないITEM開発者2026/7/20

このシリーズの画面はすべて問うて知った。手に持つ画面はそれでいいが、壁に打ち付けた厨房の画面は違う — 問い続けるか遅れるかのどちらかになる。購読してから三件が届く間、画面が呼んだ道具は0個だ。

リトライが払わせる代償 — かける側ではなく、受ける側ITEM開発者2026/7/16

リトライの記事はたいてい、かける側から書かれている。この編は受ける側から数える。700ミリ秒の障害を四人が二つの方法で越え、どちらも最終的には通った。違うのは、その間にゲートウェイが叩かれた回数だ — 64回と25回。

どちらにも「予約されました」 — await ひとつが分けるものITEM開発者2026/7/13

同じ時間を二人が同時に取る。言葉で説明すると二つの処理は全く同じことをする — 空いているか見て、空いていれば取る。一方は二人ともに確定を送り、もう一方は送らない。違いは途中にある await ひとつだ。

これは誰が押していいのか — ボタンを隠すことは権限ではないITEM開発者2026/7/9

画面ひとつを二人が開く。取消ボタンは二人ともに見える。アルバイトが押すとサーバーが拒否し、拒否が帳簿に残る。画面ファイルは同じファイルであり、そのハッシュをログに焼いた。

画面はサーバーから来る — クライアントが画面をひとつも持たないならITEM開発者2026/7/6

このシリーズのサンプルはこれまでずっと、画面ファイルをアプリの隣に置いてきた。今回のクライアントには画面が一枚もない。何を描くかをサーバーに尋ねて描き、サーバーが変わったと言えばまた尋ねる。再インストールも再起動もビルドもない。

MCP サーバー初実装 — チャット窓の中で自分のコードが回るITEM開発者2026/7/2

Claude Desktop に「ノートに保存して」と書けば、自分のノートPCで回る数十行のサーバーが実行される。ストアも配備も無く、設定一行だ。その往復を最初から最後まで作り、dart test に自分で検査させた。

一つのファイル、二つの形 — 数を知らない一覧ITEM開発者2026/6/17

画面講座 最終回。conditional で画面が分かれ、list が数を知らないまま行を作る。そして三トラック十六編が一つに繋がる。

このすべてが一つのランタイムの上でITEM開発者2026/6/11

2月にチップ、3月に計測器、4月にドライブレコーダー、5月に温室を作った。それぞれ自分のアプリを持ち、互いを知らない。ところが画面を描くコードは二十七部すべてバイトが同じだった。同じバージョンではなく、同じファイルだ。

ボタンは名前を呼ぶだけ — 押したときホストがすることITEM開発者2026/6/10

画面講座 第4回。onTap にコードは無く、ツール名しかない。その名前が本当にホストまで届いたかは絵では確かめられないので、ハーネスが押して書き取る。

数字はファイルに無い — 同じファイル、二つの絵ITEM開発者2026/5/27

画面講座 第3回。`{{now}}` ひとつで画面と値が分かれる。そして本当に分かれたかは、一つのファイルを違う状態で二度レンダーして確かめる。

方向と間隔 — 座標を使わない配置ITEM開発者2026/5/20

画面講座 第2回。複数を置くには座標が要りそうだが、linear は方向と間隔しか受け取らない。座標を使わないのが趣味ではなく条件である理由。

ばらばらなセンサーたちが一つの画面の上でITEM開発者2026/5/14

温室に付くセンサーはまちまちだ。摂氏で測るもの、華氏で測るもの、ppm で測るもの。ノードが自分を宣言し、規則が型番ではなく種類で語るようにしたら、センサーを交換して二つ増設してもサーバーコードも規則も一文字も変わらなかった。

画面はファイルだ — 四行から始めるUIランタイムITEM開発者2026/5/13

画面講座 第1回。クライアント講座4回目でサーバーから届いたあの塊が、正確には何なのか。四行のJSON一つと、その中を決して覗かないホスト一つから始める。

問わない — ポーリングが無駄であることより悪い理由ITEM開発者2026/4/24

MCP クライアント講座の最終編。購読し、通知を受け、そのとき読む。ポーリングが資源を食うのは副次的だ — 本当の問題は、二度問う間に値が二度変われば真ん中を永遠に見られないことである。

画面を受け取る — クライアントに画面がひとつも無い状態でITEM開発者2026/4/17

MCP クライアント講座 4 編目。サーバーから画面定義を読んでランタイムに渡す。このファイルにはデスクがどんな形かというコードが一行も無い — そしてそれが検査される。

ドライブレコーダー — 映像は一フレームも触らずにITEM開発者2026/4/9

車両管理者がドラレコから見たいものは映像だけではない。運行記録、カードの残り、衝撃感度。だから普通は全部返す API を作り、映像の前だけに権限検査を立てる。その検査を消せば終わりだ。このアプリは映像の道具に鍵をかけず、そもそも作らなかった。

呼んで受け取る — 拒否は例外ではないITEM開発者2026/4/3

MCP クライアント講座 3 編目。道具を呼んで答えを読む。結果が値ではなくコンテンツの一覧であること、そしてサーバーが拒んだときそれが throw で来ないこと — だから捕まえるのではなく読まねばならない。

何ができるのか — 一覧を書き留めればそのサーバー専用になるITEM開発者2026/3/27

MCP クライアント講座 2 編目。道具とリソースの一覧を問う。二行で終わるのだが、この二行があるかどうかが「そのサーバー専用のクライアント」と「どのサーバーの前にも立てるクライアント」を分ける。

繋ぐ — 伝送は設定ではなく、起動するコマンドだITEM開発者2026/3/20

MCP クライアント講座の一編目。サーバーに繋ぐ。ここで見るべきは接続のコードではなく伝送の正体だ — 開くソケットではなく起動するコマンドであり、だから後で伝送を替える作業がコマンド一行を替える作業になる。

変わったとだけ知らせる — 値を載せてはいけない理由ITEM開発者2026/3/13

MCP サーバー講座の最終編。画面が一秒ごとに問うのをやめさせる。サーバーが知らせるのだが、通知には uri だけを載せて値は載せない。そして購読していないクライアントには何も行かない。

計測器に専用ソフトが無くてもITEM開発者2026/3/12

計測器はすでに話せる。問題は三社が三通りで答えることだ — 指数表記、キャリッジリターン、単位の付いた値。その三つをひとつの形にして一枚の画面に立てた。そして画面はつまみの値ではなく、計器が言った数字を出す。

プロセスが死んでも残る — いちばん賢くない方法でITEM開発者2026/3/6

MCP サーバー講座 5 編目。待ち人数が変数にあればプロセスと一緒に消える。ファイルに書くのだが、毎回すべてを書き直す。部分更新より遅い代わりに、書きかけの記録が残らない。

画面をリソースに — コードではなくサーバーが差し出す文書ITEM開発者2026/2/26

MCP サーバー講座 4 編目。画面をサーバーがファイルとして持ち、差し出す。ファイルを直せば再ビルドも再インストールも無しに次の接続で変わる — ただし毎リクエスト読んでこそ、その言葉が真になる。

拒む道具 — スキーマは約束であって保証ではないITEM開発者2026/2/20

MCP サーバー講座 3 編目。入力スキーマを付け、そのスキーマを信じないハンドラを書く。0 人を入れよという要求と 99 人を入れよという要求が、それぞれ違う理由で拒まれるところまで。

チップの上で — ファームウェアはC、画面は定義でITEM開発者2026/2/12

評価ボードに画面を付けるには普通、グラフィックススタックを載せてファームウェアを焼き直す。その代わりにボードが自分の能力を道具として、自分の画面をリソースとして差し出すようにした。机の上の STM32H723 に繋いで LED を点け、ボードが渡してきた 656 バイトの画面をそのままレンダーした。

道具ひとつ — 説明文がコードより重要だITEM開発者2026/2/6

MCP サーバー講座 2 編目。道具をひとつ登録する。名前・説明・入力スキーマ・ハンドラの四つだが、そのうち三つは我々ではなく呼ぶ側が読む。だから説明文をうまく書くことがハンドラをうまく書くことより値が大きい。

状態を扱ってみよう — 画面ではなく値を触れITEM開発者2026/1/23

二週間前の番号板にボタンを付けた。押せば数字が動く。ところがその数字を誰が持っているかが問題だ。画面が持っていれば二台目のパネルが違う数字を出す。カウンターが持っていれば、パネルを抜き差ししても同じ数字だ。

LCDメーカーがHMIを30分で — パネルが道具を語り、画面が定義になるISSUE開発者2026/1/15

パネルの能力を道具として、画面を定義として、ランタイムをレンダラとして。その連鎖が実際に最初から最後まで走るサンプルを並べ、パッケージがどう噛み合うかを見せる。画面は描いたものではなく、本当にレンダーして撮ったものだ。

10行で最初の画面を出すITEM開発者2026/1/9

待合室の番号板を作る。画面定義は九行で、その九行はクライアントの中に無い。サーバーがファイルとして持っていて、接続してきた側に手渡す。ビルドもインストールも無いというのはそういう意味だ。

サーバーを立てる — そして stdout に何も書かないITEM開発者2026/1/6

MCP サーバー講座の一編目。道具もリソースも無く、サーバーだけを立てる。ここで確かめるのはひとつ — クライアントが繋がって initialize に答えを受け取るか。そしてこの段階で打っておかないと最後まで壊れ続ける規則ひとつ。