Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ChatGPTを使ってRaspberry Pi Picoの処理系を書いた
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
てきめん tekimen
PRO
May 27, 2026
Programming
13
0
Share
ChatGPTを使ってRaspberry Pi Picoの処理系を書いた
#phpstudy 187th
てきめん tekimen
PRO
May 27, 2026
More Decks by てきめん tekimen
See All by てきめん tekimen
PHP Internals わいわい #3 PIEを使ってみよう
youkidearitai
PRO
0
51
grapheme_strrev関数が採択されました(あと雑感)
youkidearitai
PRO
1
290
Limit of code point for grapheme cluster in programming language side.
youkidearitai
PRO
0
73
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
2
3.4k
PHP 8.5の裏話
youkidearitai
PRO
0
140
CJK and Unicode From a PHP Committer
youkidearitai
PRO
0
310
PHP Internals わいわい #3 mb_*関数を作ってみよう
youkidearitai
PRO
0
160
Windows版php-srcデバッグ方法
youkidearitai
PRO
1
120
PHP Internals わいわい #1 の資料
youkidearitai
PRO
1
1.6k
Other Decks in Programming
See All in Programming
Agentic AI & UI: Arcitecture, HITL, Emerging Standards
manfredsteyer
PRO
0
130
Cloudflare で始める Data Platform
ta93abe
0
210
過去のレビュー知見をSkillsで資産化した話
pkshadeck
PRO
1
2.2k
Stage 3 Decorators でできること / できないこと / TSKaigi 2026
susisu
1
420
TSKaigi 2026 TypeScriptバックエンドのオブザーバビリティ戦略 — Datadog × NestJSの実践
taiseiyamamotoan
1
140
PHPでローカル環境用のSSL/TLS証明書を発行することはできるのか? #phpconkagawa
akase244
0
380
ビジネスモデルから紐解く、AI+型駆動開発
hirokiomote
2
1.1k
[BalkanRuby 2026] Drop your app/services!
palkan
3
640
プロパティの順序で型推論が壊れる!? TypeScript6.0の修正からContext-Sensitivityの仕組みを追う
bicstone
2
850
Migrations : C'est une question d'hygiène !
vinceamstoutz
0
880
oxlintはeslint/typescript-eslintを置き換えられるのか
shomafujita
2
160
2026年のソフトウェア開発を考える(2026/05版) / Software Engineering Scrum Fest Niigata 2026 Edition
twada
PRO
24
14k
Featured
See All Featured
Six Lessons from altMBA
skipperchong
29
4.2k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
300
Ruling the World: When Life Gets Gamed
codingconduct
0
230
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.7k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
Bash Introduction
62gerente
615
210k
What's in a price? How to price your products and services
michaelherold
247
13k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.4k
Unsuck your backbone
ammeep
672
58k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Transcript
ChatGPTを使って Raspberry Pi Picoの 処理系を書いた
自己紹介 てきめん • https://tekitoh-memdhoi.info • https://github.com/youkideari tai • https://phpc.social/@youkide aritai
• https://mstdn.jp/@tekimen オレ
会社をやめた • 会社を辞めた • フリーランスになろうと、PHPの案件を探す – あれっ!?ない・・・ – TypeScriptとGoしかないぞ・・・ –
なくはないが、供給過多(PHPエンジニア多すぎ) – どうやら海外ですら同じっぽい
ここで感じる危機感 • PHPユーザーとしても、そしてコミッターとしても危 機感を感じる – 作っても使われないとか洒落にならない • 多分何かをしなければならない
第186回でもあったそうですね? • PHPが新規案件で選 ばれない • https://www.docswe ll.com/s/halt/ZPRM WE-2026-04-21-phps tudy186#p1 –
こちらを拝見しました。 同じことを思いました。
Nuno Maduro said... Stop everything, I don’t care any of
the feature we talk today. To the website get fix. https://www.youtube.com/watch?v=tgSfRxDAXaw つまり、(PHPFがすべきことは)PHPに新しい機能を追加するのではなく、古臭 いPHP.netを新しくすることを第一にすべきということらしい
ぼくなりの回答 • PHPをマイコンで動かそう! – RP2040やRP2350(Raspberry Pi Pico W2)で動かす – LLM、ChatGPTを使って処理系を書く
– 「とっかかり」のマイコンの操作にPHPを選んでもらう施策 • Raspberry Pi Picoは安いし • Picoで使われてるRP2040の小さいマイコンはたくさんあるし
作っていく • RP2040/2350のPHPの処理系を書いた – https://github.com/youkidearitai/picophp – ChatGPTにほぼほぼ書いてもらった – 段々とコードベースがわかるようにはなった –
RP2040のできることを広げるようにAPIを増やしていく • I2C、SPI、HIDマウス、キーボード…
しくみ • Pico SDKでコンパイル • PHPプログラムを以下のように処理 – 字句解析 – 構文解析
– VMのopcodeに変換:opcodeはC言語製 • この時点でCコンパイラーでコンパイル – .uf2ファイルが出来上がるので、Picoへコピーする • RESETボタンを押しながらUSBに挿せばファイル転送モードになる • MicroPythonでは処理系が中にはいっていて、ROMに.pyをコピーして使う – これの長所はガベージコレクションの実装ができること – 短所は重いこと • picoPHPは.pphpファイルを処理系ごとコンパイルしてコピーして使う – 長所は速いこと、単純なこと – 短所は複数あって、ガベージコレクションがなく、string arenaという概念が発生したの で arena_reset 関数が必要になったこと、エラーを追いかけるのに苦労すること
マイコンの基本 • シリアル通信でマイコンとパソコンとを通信する – デバッグに使ったり、センサーの値を読んだりする – C言語を基本にすると、main関数をループするように作る • ただし、今回のpicoPHPではmain関数は見えないようになってる •
ディスプレイなどのパーツはある – パーツには「データシート」というものがあって、それを読んでいく ことで使い方がわかる • ただし、分かりづらいのでわかったら結構上級者かも
picoPHP コード例 • これは読み取った電圧 をもとにLEDとかの出 力を強めたり弱めたり するコード • while のループ内でマ
イコンを動かす
I2Cとは Vdd SDA SCL Rp μC Master μC Slave Slave
ADC Slave DAC • 一つのmasterと、複数の slaveで成り立つ通信方式 • センサーやモーターなどに使 われる • 一つのslaveにアドレスが振ら れる • 二本の線で通信ができる(電 源とGNDが必要だが)のが利 点 en:user:Cburnett - Own work made with Inkscape, CC 表示-継承 3.0, https:/ /commons.wikimedia.org/w/index.ph p?curid=1472017 による
気温・気圧と湿度センサー • I2Cを使って、気温・気 圧はBMP280と湿度は AHT20を利用、表示は SSD1306 • PHPで気温・気圧・湿 度を画面に出力できた
ハマったこと • 一応エラーは出るんだけど、出すエラーの番号が 行番号ではなくopcodeの番号 – opcodeをテキストに吐き出させて対処 – 後にエラーの行を出力させることにした • エラー処理がめんどい
にらめっこしてたopcodes • opcodeとはスタックマ シン – スタック構造でできてい る • 左に番号がついてて、そ の番号でバグを推測して
た
エラーの行数を出すようにした • 24行目に0除算でエ ラーになるようにしてい て、ちゃんとシリアル上 で24行目を指して落ち た
デモ
picoPHPのデータ型 • Null – 自明なのでスキップ • Bool – 自明なのでスキップ •
Integer • Float • String
integer • 数値型 – 32bit型 • 2^31-1から-2^31までをサポート
float • 内部もfloat • 小数の表現 – 内部もfloatで、doubleではないのでちょっと厄介かも
string • 文字列 – $value[1]とインデックスを指定すると、該当する文字 のintが返ってくる • I2Cなどの通信を行うのに適している • 本来のstringと違う、ほとんどint(uint_8)の配列
改善したいこと • var_dump関数の実装 • エラー時のデバッグ情報の追加 – 今だとopcodeの情報しか出ないので – 出すようにした。難しかったのはrequireがあったときに行を戻ったりす ること
PHPらしく、簡単にかけるようにしたい…! ひとつひとつ、機能を増やしていって違和感ないようにしてます
やってみたいこと • picoPHPをTinyGo-Keebとコラボしてみたい – キーボード操作ができるので、TinyGoで実装しているもの をpicoPHPで実装したい – コミュニティの協力を得たい – 自分で作ったものが盛り上がるとこう…嬉しくない?
– というわけでパーツを買って試してみる • というかなんかするかも? • https://github.com/tinygo-keeb/workshop/blob/main/build guide.md
まとめ • ChatGPTで処理系をかけるようになってた • PHPは風前の灯ってわけじゃないけど、ちょっとつら い感 – ただ、そのおかげでpicoPHPを作ったし、楽しい • PHPのコミッターとして頑張っていきたい
Raspberry Pi Picoを買おう! • PHPであそぼう! • もっと電子工作をPHPに!