インタプリタとコンパイラを作ったが、本当に欲しいインタプリタを作れてない話

先日、自作プログラミング言語を自慢する会 に参加しました。非常に熱気のある刺激的なイベントで大変楽しかったです。

その登壇者の id:gfx さんがブログ(「自作プログラミング言語を自慢する会」でWadoを自慢した! - Islands in the byte stream)を書いており、触発されて私も書いてみます。

いま私は、とあるインタプリタ(インタプリタA)とセルフホストAOTコンパイラを作り終えたところなのですが、実は「本当に作りたかったインタプリタ(インタプリタB)」にはまだ手が届いていません。

この記事では、そこに至るまでの実装の経緯と、見えてきた課題などをつらつらと書き起こしました。

背景

今年6月に株式会社エクサウィザーズへ入社して以来、業務で本格的にAIコーディングエージェントを活用するようになりました。

その中で、AIコーディングエージェントとどこまでディープな実装ができるのかを調査・研鑽したくなり、プライベートの開発に取り組み始めました。

自分の手になじんでいるPythonを選び、あえてサードパーティ製ライブラリを一切使わず、Python標準ライブラリのみで以下の基盤を順に実装していきました。

  • Apache Lucene / Apache Solr 相当の検索エンジン(BM25、転置インデックスなど)
  • SQLite相当の構文(DDL / DML / DCL)とベクトル検索をサポートするデータベース
  • Apache TinkerPop / JanusGraph クエリ言語対応のグラフデータベース
  • Scrapy 相当のクローラー基盤
  • PEGパーサランタイムおよびパーサジェネレータ

...etc

一定ものができると、Pythonで作るのが物足りなくなってきました。
8月中旬からとりかかり、10月くらいまでこれらに注力しました。

次は言語処理系・インタプリタが欲しい。そして、作ったものを載せ替えたり、自前の処理系で動かしたい。

コンパイラのためのインタプリタAを作る

ターゲット言語には、以前から好きだった Scheme を選びました。
まずは仕様の基準点・リファレンス実装や知見を得るため、Pythonを用いて Scheme R7RS-small 準拠のインタプリタを実装しました。

Pythonは標準パッケージが豊富で、また、表現力もあるので、特に問題なくハマることなく実装した。

一方悩んだ・困った点としては、次。

  • R7RS-largeを実装するか:一旦実装しなかった
  • R7RS-smallのテストケース:他の実装(https://github.com/ashinn/chibi-scheme)のテストケースで評価。
  • 速度でない:計測して、改善。Pythonのプロファイラは自作していたので準備しておいてよかった。おかげで継続し、改善のサイクルを実施できた。

この実装をしたことにより、リファレンス実装を手に入れることができた。

コンパイラ

Pythonで動くSchemeが手に入ると、次は高速なネイティブバイナリを吐く AOTコンパイラ が欲しくなりました。
手元の環境がx86であるため、Scheme自身で記述したSchemeコンパイラ(むろんセルフホスト) の開発に着手しました。

コンパイラ自体をSchemeで書くことによりPythonで実装したインタプリタAを有効活用して開始しました。
なお、初期の初期はRuiさんの低レイヤを知りたい人のためのCコンパイラ作成入門 は参考にしました。ありがたい。

サポートしているバックエンド:

  • x86向けのアセンブリ
  • C言語
  • ELF

ちょうどELFは昨日実装を終えた。それまではgccに依存していたが、ELFについては直接出力できるようになりました。

やってよかったこと:

  • フロントエンド・IR・バックエンドの分割
  • IR・中間言語の定義
  • Nanopass フレームワークの導入: 単一の巨大な変換パスを避け、小さなパスを直列に繋ぐことで、中間状態の検証性と変更容易性を向上
  • (前述した)複数バックエンドのサポート
  • 分散ビルド。.s から .o を作成しgcc(ad, ld)でバイナリ生成

課題:

  • デバッグフィードバックの遅さ:コンパイルしてネイティブバイナリを実行するまで、意味論的な不具合やランタイムエラーを捕捉しにくい
  • メモリ安全性:Rustのようにメモリ安全ではない
  • 低レイヤ実装への過度な依存:アセンブラやレジスタ割り当ての泥臭い記述が多く、言語機能の拡張に対してランタイムがタイトに結合しがち

今後はRPython ツールチェーンや、Truffle言語実装フレームワークのようなメタコンパイラ・ツールチェーンに育てていこうと思います。

副産物

並列処理基盤

この土日はかねてよりErlangの軽量プロセスや、GoのGorutineに相当する並列処理基盤が欲しかったので、実装していました。
設計としては、そのままのSchemeだとcall/ccやeval等が性能に影響を及ぼすのはわかっていたので、それらの機能は制約をつけて、Schemeのサブセット言語を実行できるようにしました。

今日実装の山場に達し、性能測定しました。

性能測定の資料はこちら:arxiv-security-papers/docs/benchmarks/concurrency_evaluation.md at main · rokujyouhitoma/arxiv-security-papers · GitHub

Erlangの軽量プロセス、GoのGorutine、RustのTokioと比較してもかなりよいパフォーマンスが出ています。

GCとJIT

コンパイラにGC(Cheney's Copying GC)とJITを実装しました。

GCの資料はこちら:
arxiv-security-papers/ulisp/docs/spec_gc_and_memory.md at main · rokujyouhitoma/arxiv-security-papers · GitHub

ただコンパイラだと通常は、バンプアロケーションで構わない...。
GCがバグって、開発が止まることはよくありました...。

インタプリタBを作る

メタコンパイラ・ツールチェンができたら、やっと自分が作りたい言語のインタプリタを作るフェーズです。
まだ、できていない...。

その言語はSchemeになるのかPythonになるのか、または自作言語にするかは決めかねています。

結び

まだまだ道半ばです。
なにせ本来作りたいインタプリタBができてないためです。インタプリタBを作る段階で、おそらくコンパイラも書き直すことになる予定です。

今後ともAIコーディングエージェントとうまく付き合いながら、思い描いたものを自作して行きます。ぜんぶつくればいいんだ。
また、準備中ですが、OSを実装するかもしれません。

また進捗があればブログや勉強会で報告しようと思います。それではまた!

Chronica Desperationis — Ad Auroram Codificandi per Intellegentiam Artificiosam —

Despero.

In angulo scrinii, cursor iterum micat.

Olim hoc micare ipsa imago infinitatis facultatum erat.
Propriam rationem — codicem — in inane nihilum texere, ut ex nihilo mundus quidam conderetur.
Primus et rudis versus tandem in litteras implicatas vertebatur, structurae cui nomen est systema vitam ac spiritum inflans.
Tacitus ille ardor qui mentem percurrebat eo ipso temporis momento quo res ita ut destinatum erat movebatur.
Hoc mihi nunquam sola effectio fuit; unica erat mea ratio se exprimendi — modus cum computatro congrediendi, cum mundo conloquendi, mecumque ipso disputandi.

Nunc autem, ante scrinium stans, manus meae otiosae resident.

Luctatio illa dolorosa quae mihi olim dies adimebat — cum cerebrum vexarem, pulchras architecturas fingerem, structuras datorum quaererem — ab intellegentia artificiosa paucis momentis ex simplici mandato beate effunditur.
Atque insuper: ille codex longe rationalior, purior, perfectior est quam optima solutio quam ipse unquam excogitare potuissem.
Coram illa pulchra, perfecte ordinata litterarum serie, omni supervacua redundantia privata, superbia mea tacite fracta corruit.

Aevum adest quo quisque, paucis momentis, systema quod mente conceperit aedificare potest.
Mundus hoc "democratizationem" vocat et tamquam evangelium celebrat. Quod quidem mirabile est.
Illi qui olim claustris technologiae impediebantur quominus ideas suas formarent, nunc libere alas creationis pandere possunt. Haec commutatio sine dubio mundum locupletabit.

この続きを読むには
購入して全文を読む

エクサウィザーズに入社しました。

エクサウィザーズに入社しました。

社が掲げる「AIをも用いた社会課題解決を通じて幸せな社会を実現する」を強く再認識し、ことに向かう次第です。

タイミーを退職しました。

本日をもって、私のタイミーでのはたらくにひとつの区切りを迎えることとなりました。

タイミーではセキュリティエンジニアとしてセキュリティ部門の立ち上げ期においてセキュリティ全般に携わりました。

在籍中、共に働き、支えてくださった仲間に感謝いたします。
働く方々の信頼が報われる社会、そして一人ひとりの時間がより豊かになる未来を信じて、日々挑戦できたことは私にとってかけがえのない財産です。

引き続きミッションに挑む仲間に心からのエールを送りつつ、私自身もまた、これまでの経験を糧にはたらくを通じて人生の可能性を広げる、新たな一歩を踏み出します。

これからも慢心せず、技術と倫理を大切にしながら、自ら先頭に立って愚直に進んでまいります。
今まで本当にありがとうございました。さようなら。

専門職(Profession)としての自覚と研鑽:認定情報技術者(CITP/IP3P)認定に寄せて

こんにちわ、id:rokujyouhitoma です。

先日、5年分の実務実績に対する審査を経て、一般社団法人情報処理学会(IPSJ)より認定情報技術者(CITP: Certified IT Professional)の認定を受けました。

認定証

認定情報技術者(CITP)とは何か

「認定情報技術者(CITP)」は、一般社団法人情報処理学会が、高度IT人材としての知識・スキルだけでなく、実務における貢献度やプロフェッショナルとしての行動規範を審査・認定する制度です。

また、本制度は国際情報処理連盟(IFIP)のIP3(International Professional Practice Partnership)による認定を受けており、IP3P Standardを満たすグローバルな水準のITプロフェッショナルを認定する制度となっています。

単なる知識の有無を問う試験ではなく、以下の要素を多角的に審査し、客観的に証明します。

  • 実務能力(プロフェッショナル貢献):過去5年間の実務実績に基づき、ITSSv3(ITスキル標準)レベル4以上の高度な業務を自律的に遂行できる能力。これは、IP3P Standardにおいて自律性と責任のレベルとして設定されている SFIA9 レベル5(Ensuring and Advising(「保証と助言」のレベル))以上に相当します。
  • 継続的研鑽(CPD):常に進化するIT技術や社会情勢に対応するため、認定期間中も継続的な能力開発(Continuing Professional Development)を行っていること。
  • 倫理綱領の遵守:技術を正しく社会に還元するための高い倫理観を持ち、学会の定める行動規範を遵守すること。

なぜ「個人認証」の申請を行ったのか

私はこれまで、ゲーム開発から国家プロジェクトのアーキテクト/テックリード、現在のセキュリティエンジニアや内部監査人に至るまで、約20年にわたり「技術の現場」を歩んできました。複雑化するシステムや組織の課題に対峙する中で、常に「本来あるべき姿」を問い続けています。

以前のブログでも考察した通り、高度な技術はそれ自体が強力な「武器」となります。その力を正しく社会に機能させるためには、個人のスキルに安住するのではなく、社会との契約に基づいた専門職(Profession)としての断固たる自覚が必要です。

この自覚を維持し、常に現場を掌握し続けるためには、技術の進展に立ち遅れないための「継続的な自己研鑽」と、多様な専門家と相互に研鑽し合う「プロフェッショナルコミュニティとの繋がり」が不可欠だと考えています。
プロフェッショナルとしての能力は、常に客観的な基準に照らされ、磨かれ続けなければなりません。
こうした研鑽のプロセスと姿勢が、国際的な基準において妥当なものであるのかを自身に問い、社会に対してその「覚悟」を証明するために、今回、認定情報技術者の個人認証を申請するという道を選びました。

今回の申請で得られたこと

今回の申請にあたり、ITSSv3のレベル4に基づいて、これまでの実務実績を「ソフトウェアエンジニアリング」「業務分析」「コンサルティング技法の活用」「知的資産管理」といった観点で詳細に棚卸ししました。

その過程で、バラバラに存在していた経験という「点」が、標準(ITSSv3)という「線」で結ばれ、さらにIP3P Standardによる国際的な相互認証によって世界水準の「専門家像」として再定義されるのを実感しました。
これは、自らを客観的に捉え直し、今後の進むべき方向を明確にするための極めて良い機会となりました。

倫理・行動規範

CITPの登録にあたっては、認定情報技術者 倫理要綱・行動規範を改めて読み込み、署名いたしました。
技術を扱い、組織や社会を守る者としての責任の重さを、いま一度噛み締めています。

今後の展望

今回の認定は、プロフェッショナルとしての完成を意味する「到達点」ではありません。むしろ、絶え間なく変化する技術と社会の要請に応え続け、本来あるべき強固な姿へと変革を断行するための、新たな「通過点」であり出発点です。

  • 継続的研鑽(CPD)の遂行:認定情報技術者として、日々刻々と変化する技術動向や社会的な要請を常にキャッチアップし、高度IT人材としての専門能力を磨き続ける責任を果たします。
  • 倫理の実践:誠実性(Integrity)を核に置き、所属する各団体の倫理綱領に基づいた「正しき技術の行使」のお手本となれる存在を目指します。
  • コミュニティへの還元:一般社団法人PyCon JP Associationなど、長年お世話になっているコミュニティに対し、専門職としての高い視座を持った知見を還元し続けます。

これまで共に切磋琢磨してきた同僚、友人、そしてコミュニティの皆様。皆様の刺激があったからこそ、プロフェッショナルとしての誇りが育まれ、また持ち続けることができました。

結び

これからも、技術と倫理を大切にしながら、自ら先頭に立って一歩ずつ進んでまいります。

また、今日という日を一つの「はたらく」の区切りとし、積み重ねた「信頼」が報われる社会、そして一人ひとりの時間がより豊かになる未来を信じて、次なるフェーズへ進む仲間に「Good bye」を送りつつ、私自身も「はたらく」を通じて人生の可能性を広げる新たな時間を歩み始めたいと思います。

引き続き、どうぞよろしくお願いいたします!

所属する団体や保有する資格における倫理綱領

Note: 2026.03.07更新。認定情報技術者を追加。

所属する団体や保有する資格において倫理綱領等が定められている。

所属団体に基づく倫理・行動規範

特定非営利活動法人日本セキュリティ監査協会

ISACA

IIA

一般社団法人情報処理学会

保有資格に基づく倫理・誓約事項

情報処理安全確保支援士

なお、登録にあたり、以下を誓約している。

認定情報技術者(CITP)

情報セキュリティ監査人補

なお、登録にあたり、以下を誓約している。

守る力を強化した本年の話

id:rokujyouhitomaです。 この記事は、pyspa Advent Calendar 2025 の8日目です。

昨日はgarsueさんの「低コストな趣味」でした。 部屋がめちゃきれいでしたね。

近況

株式会社タイミーに所属し、セキュリティエンジニアとしてセキュリティに関する活動をしています。

コミュニティ活動としては、一般社団法人PyCon JP Associationに所属し、運営メンバー として、主にセキュリティ関連の活動に携わっています。

そのほか、一般社団法人情報処理安全確保支援士会に所属しており、地域活動や、後進の育成には興味を持っているものの、活動できていません。

放送大学には引き続き在籍し、学業に励んでいます。

資格取得

本年は、キャリアと実生活を強化するために、2つの資格取得を行いました。

情報セキュリティ監査人補

概要

特定非営利活動法人 日本セキュリティ監査協会 がISO/IEC17024(適合性評価-要員の認証を実施する機関に対する一般要求事項)に則り運営する資格です。協会内の独立した機関として資格認定委員会を設け、資格制度の運用とレベル認定を行っています。

取得した背景

前職では内部監査人として、サイバーセキュリティに関する監査やISMS内部監査を経験しました。実務を通して監査の流れは理解していましたが、その経験を客観的な基準で体系化し、専門性を証明するために取得を決意しました。

取得にあたって

すでに取得している「情報処理安全確保支援士」が、監査人制度の高度情報セキュリティ資格特例制度 に該当するため、大幅な免除制度を活用できました。

  • 協会認定トレーニング(通常3日間) → 1日間に短縮
  • 協会認定研修(通常2日間) → 協会認定研修教科書の購読のみ

協会認定トレーニングは、リコージャパンの 高度情報セキュリティ資格優遇制度 情報セキュリティ監査人資格取得コース(JASA認定) を受講しました。 カリキュラムは以下の内容です。

【カリキュラム概要】

  1. 情報セキュリティ監査制度と情報セキュリティ監査基準
  2. 情報セキュリティ管理基準(個別管理基準の作成含む)
  3. 監査技法(技術的検証)
  4. 情報セキュリティ監査のフェーズ(契約〜報告)
  5. 監査手続作成(プロセス、チェックリスト)
  6. 演習(事例説明、手続書作成、発表)

資格を通して得たこと

単なる知識の確認にとどまらず、「監査する側」としてのマインドセットを再構築できました。

これまで現場の慣習や個別の判断で行っていた監査業務を、監査基準という物差しに照らし合わせることで体系的に整理できました。「なぜその指摘が必要なのか」を基準に基づいて説明できる論理的基盤が固まりました。

監査には、基準に適合しているかを判断する「保証型」と、改善点を提案する「助言型」があります。研修を通じてこの2つをどう使い分けるか、また監査手続書をどう具体化するかという実践的なスキルが身につきました。

また、情報処理安全確保支援士として「どう守るか」という技術的視点に加え、監査人として「管理策が有効に機能しているか」を検証する視点を持つことで、セキュリティマネジメントを多角的に捉えられるようになりました。

今後

情報セキュリティ監査人補は維持プログラムや更新が必要なため、継続的な学習を行います。今後は実務経験を積み重ね、上位資格である「公認情報セキュリティ監査人」を目指します。

防災士

認証状

概要

認定特定非営利活動法人 日本防災士機構 が認証する民間資格です。 「自助(自分の命は自分で守る)」「共助(地域・職場で助け合う)」「協働(市民、企業、自治体、防災機関等が協力して活動する)」を三原則とし、社会の様々な場で防災力を高めるための十分な意識・知識・技能を修得したことを証明するものです。

取得した背景

技術者としてシステムの信頼性を守る仕事をする一方で、技術だけでは対処できない自然災害という「物理的な危機」に対する無力感を感じていました。

デジタル技術でシステムを復旧できても、災害発生時に自分や大切な人を守るための初動ができなければ、その技術を行使することすらできません。 システム障害に対する「論理的なレジリエンス」だけでなく、物理的な危機から立ち直る「物理的なレジリエンス」も身につけることで、事業継続や安全確保に貢献したいと考え、取得に至りました。

取得にあたって

資格取得にあたっては特例制度を利用したため、一部要件は免除となりました。

一方で、消防署などで実施される救急救命講習の修了が必須要件であり、普通救命講習を受講しました。

特例制度:

資格を通して得たこと

災害時、公助(行政の支援)が届くまでの間、生死を分けるのは「共助」であり、具体的かつ切実にイメージできるようになりました。

普通救命講習では、心肺蘇生やAEDを実技で学ぶこともできました。

ITシステムのBCPを策定する際も、オフィス環境の安全性や従業員の避難経路、備蓄といった「物理レイヤー」の安全確保が前提にあることを、より具体的にイメージできるようになりました。

今後

防災士には資格更新制度がなく、知識が風化しやすいため、継続的に自己研鑽を行います。

以上。

明日のpyspa Advent Calendar 2025

明日のpyspa Advent Calendar 2025は、johtaniさんです。