AI・機械学習

AIが書いた言語「LOOM」がWebAssemblyまで対応!正直さを貫いた実験的プログラミング言語の全貌

「AIに書かせたコードって、本当に信頼できるの?」そんな疑問、持ったことありませんか?

今、海外の開発者コミュニティでひとつの実験的プログラミング言語が注目を集めています。その名も LOOM(ループ)。AIによって設計・実装された言語でありながら、WebAssemblyレベルまで「正直さ(honesty)」を徹底したという、かなり尖ったコンセプトが話題になっているんですよね。

この記事では、LOOMの概要・特徴・コードの雰囲気・他言語との比較まで、初心者でもわかるように丁寧に解説していきます。

🧵 LOOMってどんな言語?

programming language design
programming language design / Photo by Leonid Altman via Pexels

LOOMは「アイデア段階」を完全に脱した、実用レベルの実験的プログラミング言語です。現時点でできていることをまとめるとこんな感じです。

  • ✅ 独自の構文(syntax)を持つ
  • 静的チェッカーによる型・整合性の検査
  • インタープリターで直接実行可能
  • Python・JavaScript・WebAssemblyへのコンパイル対応
  • エフェクト・ケイパビリティ・リソース・トラストシステムを搭載
  • ✅ ブラウザで動くPlaygroundあり
  • CLI(コマンドラインツール)も完備
  • ✅ 自己検証チェック 378/378 全パス(CITADEL)

コミット番号 92a5742 時点で、ドキュメント整合性チェックも PASS。「言うだけ言って動かない」系のプロジェクトではないことが数字からも伝わってきます。

🔍 「正直さをWebAssemblyまで貫く」ってどういうこと?

LOOMの最大の特徴は、エフェクトシステム(effect system)トラストシステム(trust system)の導入です。

イメージとしては、こんな感じです。

「この関数はネットワークにアクセスします」「この処理はファイルを書き換えます」という副作用をコードレベルで明示・追跡する仕組み

つまり、処理の「裏でこっそり何かしている」が原則できない設計になっているわけです。これが高レベルの言語構文だけでなく、WebAssemblyのバイナリレベルまで一貫しているという点が「honest all the way down(底まで正直)」という表現に込められています。

一般的なプログラミング言語では、関数の中に副作用が隠れていることがよくあります。たとえばPythonで関数を呼び出しても、その中でファイルを読み書きしているのか、ネットワーク通信しているのかは、ドキュメントを読まないとわかりません。LOOMはそれを言語仕様レベルで解決しようとしているのが大きなポイントです。

💻 LOOMのコードはどんな見た目?

まだ公式の詳細仕様は発展途上ですが、エフェクトシステムを持つ言語の雰囲気をPythonで疑似的に表現するとこんなイメージです。

# LOOMのエフェクトシステムをPythonで疑似表現するとこんな感じ

# 「副作用あり」を明示するデコレータ風のアプローチ
def with_effect(*effects):
    def decorator(fn):
        fn.__effects__ = effects
        return fn
    return decorator

@with_effect('network', 'logging')
def fetch_user_data(user_id):
    # ネットワークアクセスとログ出力を行うことが宣言されている
    import urllib.request
    print(f'Fetching user: {user_id}')
    # ... 実際の通信処理 ...
    return {'id': user_id, 'name': 'Alice'}

@with_effect('file_write')
def save_result(data, path):
    # ファイル書き込みを行うことが宣言されている
    with open(path, 'w') as f:
        f.write(str(data))

# 副作用なし(純粋な計算のみ)
def calculate_score(data):
    return len(data) * 10

# 関数の副作用情報を確認できる
print(fetch_user_data.__effects__)   # ('network', 'logging')
print(save_result.__effects__)       # ('file_write',)
print(hasattr(calculate_score, '__effects__'))  # False(副作用なし)

Pythonではあくまで「デコレータでメモしておく」だけで、コンパイラが強制するわけではありません。しかしLOOMでは言語仕様として強制されるのが違いです。副作用を宣言せずにファイルアクセスやネットワーク通信を行おうとすると、コンパイルエラーになります。

🔐 トラストシステム・ケイパビリティとは?


LOOMが搭載しているもうひとつのユニークな機能がトラストシステムケイパビリティシステムです。

ケイパビリティシステムとは、「権限を持っているオブジェクトだけが特定の操作を実行できる」という設計思想です。たとえばこんなイメージです。

# ケイパビリティシステムのPython疑似表現

class Capability:
    """特定の操作を許可するための「権限証明書」"""
    def __init__(self, name):
        self.name = name

class FileWriteCapability(Capability):
    def __init__(self, allowed_path):
        super().__init__('file_write')
        self.allowed_path = allowed_path

class NetworkCapability(Capability):
    def __init__(self, allowed_domains):
        super().__init__('network')
        self.allowed_domains = allowed_domains

def save_data(data, path, cap: FileWriteCapability):
    """FileWriteCapabilityを持っていないと呼び出せない"""
    if cap.allowed_path not in path:
        raise PermissionError(f'このパスへの書き込み権限がありません: {path}')
    with open(path, 'w') as f:
        f.write(str(data))

def fetch_data(url, cap: NetworkCapability):
    """NetworkCapabilityを持っていないと呼び出せない"""
    domain = url.split('/')[2]
    if domain not in cap.allowed_domains:
        raise PermissionError(f'このドメインへのアクセス権限がありません: {domain}')
    # 実際の通信処理...
    return {'status': 'ok'}

# 使う側は明示的に「権限」を渡す必要がある
file_cap = FileWriteCapability(allowed_path='/tmp/')
net_cap = NetworkCapability(allowed_domains=['api.example.com'])

save_data({'user': 'Alice'}, '/tmp/result.txt', file_cap)  # OK
# save_data({'user': 'Alice'}, '/etc/passwd', file_cap)   # PermissionError!

LOOMではこういった「権限の明示的な受け渡し」が言語レベルで組み込まれているため、悪意あるライブラリが裏でこっそりデータを送信するようなことを言語仕様として防ぐことができます。

🆚 他の言語と何が違うの?

エフェクトシステムは既存の言語にも存在します。代表的なのはHaskellのIOモナドや、Rustの所有権システムです。LOOMが特徴的なのは以下の点です。

特徴 Haskell Rust LOOM
エフェクト追跡 ✅(IOモナド) △(unsafe境界) ✅(専用システム)
ケイパビリティ
WebAssembly出力 △(非公式)
AIによる設計
初学者向け構文 ❌(難しい) △(やや難しい) 🔄(開発中)

LOOMの面白いところは、「AIが設計した」という点を隠さず、むしろそれを強みとして活かそうとしている点です。AIは人間が見落としがちな一貫性の欠如を指摘するのが得意なため、設計の矛盾が少ないとも言われています。

🧪 自己検証(CITADEL)とは?

LOOMが独自に持つ検証システムが CITADEL です。これは378のテストケースから構成された自己整合性チェックの仕組みで、現在のところ378/378すべてをパスしています。

一般的なプロジェクトのテストは「動作確認」が中心ですが、CITADELは「言語の仕様と実装が矛盾していないか」を検証するためのものです。ドキュメントに書かれていること、コンパイラの挙動、実行結果がすべて一致しているかをチェックしています。

「正直さ」をコンセプトにする言語が、自分自身の実装でも「正直かどうか」を検証している——このコンセプトの一貫性がコミュニティから評価されている理由のひとつです。

🌐 WebAssembly対応の意義

WebAssembly(Wasm)とは、ブラウザ上で高速に動作するバイナリ形式のプログラム実行環境です。LOOMがWasm出力に対応していることには、大きな意味があります。

  • 🌐 ブラウザ上でLOOMプログラムが動く
  • 🔒 エフェクト制約がブラウザ上でも保証される
  • 🚀 セキュリティが重視されるWebアプリに応用できる可能性がある

たとえば、サードパーティのWasmプラグインをアプリに組み込む場合、そのプラグインが「何をするか」をLOOMのエフェクトシステムで事前に保証できれば、安全性が格段に上がります。これは将来的にサプライチェーン攻撃(依存ライブラリへの悪意ある改ざん)の対策になるとも期待されています。

🤔 LOOMの現状と今後の課題

LOOMは非常に面白いコンセプトを持つ言語ですが、正直なところ課題もあります。

  • 📝 構文の仕様がまだ発展途上——公式ドキュメントは整備中
  • 👥 コミュニティがまだ小さい——情報源が限られる
  • 📦 エコシステムがない——ライブラリや実用ツールはこれから
  • 🎓 学習コストが高め——エフェクトシステムの概念自体が難しい

とはいえ、「アイデアだけで実装なし」という段階ははるかに超えており、Playground・CLI・複数ターゲットへのコンパイルが揃っている点は評価できます。

📝 まとめ


LOOMについて整理すると、こうなります。

  • 🧵 AIが設計・実装した実験的プログラミング言語
  • 🔍 エフェクトシステムで副作用を言語レベルで明示・追跡
  • 🔐 ケイパビリティ・トラストシステムでセキュリティを強化
  • 🌐 Python・JavaScript・WebAssemblyへのコンパイルに対応
  • 🧪 378/378の自己検証テストをパス
  • ⚠️ まだ発展途上・実用段階ではない

「AIが書いたコードは信頼できるか?」という問いに対して、LOOMは「信頼できるかどうかを言語仕様で確認できるようにしよう」というアプローチで答えようとしています。

まだ実用段階ではありませんが、プログラミング言語設計の未来を考える上で非常に示唆に富んだプロジェクトです。エフェクトシステムやケイパビリティの概念は、すでにRustやHaskellなど主要言語にも影響を与えており、LOOMはそれをより徹底・整理しようとする試みとも言えます。

プログラミング言語に興味がある方、セキュリティを意識したコード設計に興味がある方は、ぜひLOOMのPlaygroundを触ってみてください。「こういう言語の方向性もあるんだ」という新しい視点が得られるはずです。

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

もしも

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

電子工作とプログラミングを同時に学べる

Amazonで見る

実践Claude Code入門―現場で活用するためのAIコーディングの思考法

もしも

実践Claude Code入門―現場で活用するためのAIコーディングの思考法

AIコーディングの現場活用法を学ぶ一冊

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です