Racket の親しみやすい入門ガイド

2026/08/22 23:08

Racket の親しみやすい入門ガイド

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

1958 年に MIT で起源をたどり、現在も使用されている高水準言語の中で 2 番目に古い Lisp は、廃棄物回収、一等関数、REPL、ホモアイコニシティといった革命的な概念の先駆者として知られています。その固有のホモアイコニシティ—that is, code をそれを操作するデータ構造として表現できる能力—is 強力なマクロを用いて他のプログラムを書くプログラムを構築することを可能にします。かつては専用ハードウェアにおける人工知能研究の中心だった Lisp は、「AI 冬」と呼ばれる資金減少を経てから、主要企業による採用もあり驚くべき復興を遂げています。現在では、Google(フライト検索エンジンで Common Lisp/SBCL を使用)や Nubank(Clojure で銀行プラットフォームを実行)といった大手企業がこれらの方言を重要な生産システムに利用しています。生態系は Emacs Lisp(開発環境用)、Guile/Guix(Scheme で構成された Linux ディストリビューション)、言語志向プログラミングと教育に焦点を当てた Racket を含む多様な専門的なディストリビューションを支援しています。数十年の遺産を活用して現代のデータ密集型の課題を解決することにより、1950 年代に設計された言語が依然として重要な資産であることを Lisp は証明し続けています。この言語の基礎となる構文は括弧(

(operator argument...)
)に依存しており、すべてが表現であり、ユーザーは
lambda
を用いて値や名前無関数を定義し、
cons
および
map
などのツールを使用して基本的なリスト構造を操作できます。

本文

リズプ(Racket)入門:コードはデータであり、構造は丸括弧

「リズプを学ぶ価値は、あなたがようやくその本質を理解した時に迎える、深い啓示体験にあります。」 —— エリック・S・レイモンド

プログラミングの最も古くとも特徴的な系譜の一つ。ここではコードがデータであり、丸括弧が純粋な構造を意味し、プログラム自体が他のプログラムを書くことができる世界にようこそ。このチュートリアルを終える頃には、あなた自身が独自の構文を作成する能力を手に入れることになります。

歴史のほんの一部

リズプは 1958 年 に MIT でジョン・マカルティによって誕生しました。現在の高級言語の中で二位に位置します(一年早く登場したフォートランだけがそれを上回っています)。Python(1991 年)や JavaScript(1995 年)などから30 年以上も先行しており、現在「現代的」と考えられているいくつかのアイデアはここで生まれました。

  • ガベージコレクション —— リズプのために考案されました。
  • 一等関数 —— 関数を引数として渡す仕組みで、現在は標準になっています。
  • REPL —— Python や Node.js のようなインタラクティブな「読み・評価・出力のループ」はリズプから始まりました。
  • 式としての条件文 —— 値を返す
    if
    表現です。
  • ホモアイコニシティ(同構性) —— コードが言語自体のデータ構造として記述される特性です。これが最も重要な点です。

長年にわたりリズプは人工知能の主要な言語でした。1970〜80 年代には専用コンピュータ「リズプマシン」が開発されましたが、AI の冬の訪れにより主流から外れ、一部の愛好者だけが使用する宗教的な言語へと姿を変えました。しかし、思想や概念が消えることはありません。それらが変容し続けるのです——それがリズプ系の美しさでもあります。

リズプからスキームへ、そしてラケットへ

1975 年、ジェラルド・サスマンとガイ・スティーラーは、極小でエレガントな「スキーム」というリズプの派生言語を作成しました。

  • 学界のおavorite 言語となり、伝説的な書籍『コンピュータプログラムの構造と解釈(SICP)』もスキームで書かれています。

1995 年、マティアス・フェルライセンの研究チームは「PLT スキーム」を開発しました。

  • 2010 年 に名前を**「ラケット(Racket)」**に変更されました。
  • 現在は単なる派生版を超えた存在へ成長し、「言語のための言語」と呼ばれます。
  • 非公式なスローガン:「言語志向プログラミング(Language-Oriented Programming)」。問題に合わせて独自の言語をその日に一つ作れます。

歴史タイムライン

  • 1958 年 —— マカルティが MIT でリズプを発明
  • 1975 年 —— サスマンとスティーラーがスキームを創出
  • 1984 年 —— Common Lisp が標準化される
  • 1995 年 —— PLT スキーム(現在のラケット)が誕生
  • 2007 年 —— クロージャ(JVM 上で動作するリズプ)が誕生
  • 2010 年 —— PLT スキームが「ラケット」として改名
  • —— あなたがこの文章を読み、次の瞬間に丸括弧を書く準備をしているところ

今日リズプを使っているのは誰?

思いのほか多くの人が利用しています:

  • Clojure —— 銀行(例:Nubank)、航空会社、スタートアップの本番環境で稼働。
  • Common Lisp —— エキスパートシステム、フライトプランニング(Google Flights のバックエンド)、科学計算などで活躍。
  • Emacs Lisp —— 何百万人もの人が気づかないうちに毎日実行しており、エディタ自体がリズプインタプリターだからです。
  • Guile / Guix —— スキームで 100%構成された Linux 分布システム全体。
  • ラケット —— RacketCon を開催し、学術的・芸術的なコミュニティを持っており、プログラミング言語の研究、形式検証(Rosette)、タイポグラフィと出版(Pollen)などで活用されています。

さらに新たなリズプ系言語も続々と登場:

  • Fennel —— Lua にコンパイルするゲーム向け言語。
  • Janet
  • Hy —— Python を基盤にした言語。

TADC ファンのためのイースターエッグ:
『Amazing Digital Circus』第 8 話において、クリエイティブ AI「ケイン」の実装言語はリズプであることが確認できます。ファイル名は literal に

Caine-core.lisp
とあります。

インストール(5 分間)

  1. https://racket-lang.org にアクセスします。
  2. 自身の OS(Linux、macOS、Windows)に適したインストーラーをダウンロードします。
  3. 同梱された開発環境である DrRacket を起動します。

DrRacket の構造

  • 上部: 定義エリア(プログラム本体)
  • 下部: REPL(読み・評価・出力のループ)

定義エリアの第一行には必ず次のように記述します:

#lang racket

この行は、Racket においてどの言語バージョンを使用するかを指定する役割を果たします。ラケットは「言語工場」であり、特定の言語を選択する必要があります。

ターミナルでの利用

  • racket
    コマンドで REPL を起動します。
  • raco
    はパッケージ管理やツール系コマンドとして機能します。

REPL での初体験

> (+ 1 2)
3
> (* 3 (+ 2 2))
12
> (string-append "hello " "world")
"hello world"

リズプのルールは一言で表せます:

すべては

(演算子 引数 1 引数 2 ...)
の形式です。常に。例外はありません。

  • 演算子の優先順位を暗記する必要がありません。
  • 特別な構文も一切ありません。
  • (+ 1 2)
    は足し算、
    (if ...)
    は条件判断、
    (define ...)
    は名前の付与を行います。

一見恐ろしく見える丸括弧は、任意の規則がまったくないことを示しています。一週間も経つと、すっかり気にならなくなります。

定義と関数

#lang racket

(define pi-approx 3.14159)

(define (circle-area r)
  (* pi-approx r r))

(circle-area 2)   ; => 12.56636
  • define
    名前だけ指定すると定数が作成されます。
  • define
    (名前 引数...)
    の形式を付けている場合は関数が作成されます。
  • コメントは分点番号の
    ;
    で始まります。

アノニマス関数(匿名関数)

名前のない関数には

lambda
を使用します:

(lambda (x) (* x x))          ; 名前がない関数
((lambda (x) (* x x)) 5)      ; => 25、直接適用した場合

リスト:リズプの心臓部

「LISt Processing」がリズプの名前の由来です。リストは基本的なデータ構造となります:

(list 1 2 3)          ; => '(1 2 3)
'(1 2 3)              ; 同じもの、ただし「引用済み」という意味
(first '(1 2 3))      ; => 1
(rest '(1 2 3))       ; => '(2 3)
(cons 0 '(1 2 3))     ; => '(0 1 2 3)
(length '(a b c))     ; => 3

重要:

'
という引用記号は、Racket に**「これを評価しないでください。これはデータです」**と指示しています。この細部を記憶しておいてください——最終的なトリックへの扉になります。

高次関数

ラケットの真価が発揮される場所です。関数を他の関数の引数として渡すことは、最も自然な操作の一つです:

(map (lambda (x) (* x x)) '(1 2 3 4 5))
; => '(1 4 9 16 25)

(filter even? '(1 2 3 4 5 6))
; => '(2 4 6)

(foldl + 0 '(1 2 3 4 5))
; => 15
  • map
    が変換し、
    filter
    が選択し、
    foldl
    が累積します。
  • これら三つの関数だけでリスト処理の問題の大部分を解決でき、for ループを書く必要もありません

再帰:スパイラル的思考

リズプでは「N 回繰り返す」という発想ではなく、**「基本ケースは何か、それに向かってどう近づくか」**という視点を持ちます:

(define (factorial n)
  (if (= n 0)
      1
      (* n (factorial (- n 1)))))

(factorial 5)   ; => 120

視覚的に理解できるよう、何かを描画してみましょう。ラケットにはグラフィックスライブラリが標準で含まれています:

#lang racket
(require 2htdp/image)

(define (sierpinski level)
  (if (= level 0)
      (triangle 8 "solid" "purple")
      (let ([t (sierpinski (- level 1))])
        (above t (beside t t)))))

(sierpinski 6)

DrRacket に貼り付け、実行ボタンを押すと、スクリーン上にシエプンスキ三角形的な図形が現れます。

ゴールドスタンダード:コードがコードを書く

再び引用記号

'
を思い出してください——それはコードをデータに変換します:

'(+ 1 2)          ; => リスト (+ 1 2)、数値 3 はでない
(first '(+ 1 2))  ; => シンボル +
(eval '(+ 1 2))   ; => 3、まさにデータをコードとして評価したことになります
  • あなたのプログラムはリストそのものです。
  • リストを構築できます。つまり、プログラムを使って他のプログラムも構築できるのです。
  • これがホモアイコニシティであり、リズプが真のマクロを持つ理由です(C 言語のようなテキストベースのマクロではなく、実行前にコードを受け取りコードを返す関数としてのマクロです)。

ラケットに while ループがない?自分で一つ作りましょう

(define-syntax-rule (while condition body ...)
  (let loop ()
    (when condition
      body ...
      (loop))))

(define counter 0)
(while (< counter 5)
  (displayln counter)
  (set! counter (+ counter 1)))

これで言語自体を拡張しました。リズプの世界では、構文もあなたのものであり得ます

アラン・ケイはリズプを「ソフトウェアのマクスウェルの方程式」と称し、「そこからすべての他の概念が導き出せる微小な核」であると表現しました。

次のステップ

  • How to Design Programs —— ラケットの設計思想に基づいた教科書で、無料でオンライン入手可能です。
  • The Racket Guide —— 公式ドキュメント群で、最高品質の一つです。
  • Beautiful Racket —— 自分だけの言語を構築する方法を学ぶために最適です。
  • SICP —— 完全な啓示を求めるなら、まさに古典中の古典です。

同じ日のほかのニュース

一覧に戻る →

2026/08/23 3:14

なぜあなたのローカル LLM は実際より知的に見えなくなるのか

## Japanese Translation: 本稿は、標準的なベンチマークが大型言語モデル(LLM)の性能を正確に測定できないことへの警告を示しています。推論中のロジット計算における実装固有のリスク、特に nightly バルドを利用するユーザー構成などが原因で重大な出力エラーが生じる可能性があるためです。ロジットの微小なシフトが結果の乖離を引き起こし、単純な精度指標を誤導的なものに変えてしまいます。さらに、数百のパッケージを含む NVIDIA nightly イメージなど、複雑な構成は推論パスに影響を与える隠れたバグをもたらします。KL ダイバージェンスなどの指標に基づき低誤差率を主張する一部の量化手法については、ロジット計算に用いられる CUDA カーネルやテスト手法に関する完全な透明性が欠ける限り、その主張は欺瞞的であり得ます。Qwen3.6-27B モデルに対して FlashAttention 2、Flash Inference、Triton Attention の 3 つの注意力バックエンドを実践的に比較した実験では、初期トークンの一致は見られましたが、量化テストの基準として Triton を用いた際には後に不一致が生じました。KV カッシュを quantize(int4/int8)としつつ重みを BF16 で維持する構成ではツール呼び出しエラーが発生し、int4 では乖離から回復できませんでした。5 つの構成に対する評価の結果、INT8 バージョンが他のどの構成よりも優れており、約 5% のトークンフリップしか起こさずに 88,000 トークンのコンテキストを処理し、コマンドを正しく実行することができました。一方、NVIDIA の NVFP4 および AWQ W4A16 バージョンは高いトークンフリップ率(NVFP4 では約 50%)を示し、特定の命令実行に失敗しました(例:Cisco コマンド)。したがって、正確なコマンド実行を必要とする生産環境負荷においては、曖昧な精度主張やドキュメント化されていないリスクに曝露されやすいデフォルト構成に頼るのではなく、実証された安定性を有する特定のハードウェア構成に依存することが不可欠です。

2026/08/23 4:07

NetBSD と私の人生(2005 年)

## 日本語訳: 要約:2年間にわたり、英国の企業が不安定だった Windows サーバーから NetBSD に移行することに成功し、顕著な安定性を達成し、かつて家族がアルトン・タワーズへの旅行という重要なイベントを妨害したような高価なダウンタイムを排除しました。リーダーシップはインフラ切り替えから2時間以内で移行の検証を行いました。現在のネットワークには、MySQL、Apache(重い PHP サイトを含む)、メール向けの Postfix、Linux ファイルサーバーとの NFS 接続向けの Samba を採用した、29 台の高機能なサーバーが稼働しており、1 日あたりのデータ処理量は 870GB 超です。当初、管理者はオープンソースの経験を持たなかったものの、システムの設定、カーネルのコンパイル、SSH を通じた環境の遠隔管理を短期間で習得し、ストレスに満ちた週末のオンコールシフトを終えました。この移行は、障害を防ぐことで大幅なコスト削減を実現し、スタッフには技術的な中断 없이家族と過ごす uninterrupted な時間を可能にしました。

2026/08/22 23:54

ElevenLabs、TwelveLabs、ThirteenLabs

## 日本語翻訳: 元のサマリーは明確であり、簡潔で、主要な論点を一貫した物語に効果的に統合しています。それは Sevenytonelab.com が、レトロなデザインと旧来の Web 技術(Netscape 4 または IE 5.0+ など)への依存により、AI スタートアップにおいて独特の異例として浮き彫りにされるという主なメッセージを成功裡に伝えています。多くの近代 AI 企業は、数字を"labs"という言葉と組み合わせた命名トレンドに従っていますが、これは ElevenLabs, TwelveLabs, ThirteenLabs(3D シーン), FourteenLabs のようなwell-known エンティティが示す例であり、Sevenytonelab はこの慣習に背いています。著者は、特定の基準に基づいてこの独特のケースを特定しました:オンラインでのアクティブな存在、「labs」が含まれた名称、人工知能との関連性(.ai ドメインまたは主要製品において AI が核心となることによる定義)。現在のサイトとは異なり、Sevenytonelab は 2000 年代初期の Web ポートフォリオや IDM アルバムカバーに見られるデザインスタイルを想起させ、「vectorheart」というグラフィック要素を特徴としています。この視覚的および技術的な区別は、それが現在の命名進化の一部ではなく異常な存在であることを示します。本文は完全には、七十七トンラボの陳腐化したデジタルアイデンティティが近代人工知能同僚と鮮明に対照となるように、既存の比較のみを強調し、未来のトレンドへの言及や業界全体の影響についての議論を行わず、Sevenytonelab のこの点だけを明らかにしています。 ## 原文: The original summary is clear, concise, and effectively integrates all key points into a coherent narrative. It successfully conveys the main message: that Seventyonelab.com is a unique anomaly among AI startups due to its retro design and reliance on legacy web technologies, contrasting sharply with modern naming trends and digital identities. No improvements are necessary; the summary remains as is. ## 日本語翻訳: 元のサマリーは明確であり、簡潔で、主要な論点を一貫した物語に効果的に統合しています。それは Sevenytonelab.com が、レトロなデザインと旧来の Web 技術(Netscape 4 または IE 5.0+ など)への依存により、AI スタートアップにおいて独特の異例として浮き彫りにされるという主なメッセージを成功裡に伝えています。多くの近代 AI 企業は、数字を"labs"という言葉と組み合わせた命名トレンドに従っていますが、これは ElevenLabs, TwelveLabs, ThirteenLabs(3D シーン), FourteenLabs のような well-known エンティティが示す例であり、Sevenytonelab はこの慣習に背いています。著者は、特定の基準に基づいてこの独特のケースを特定しました:オンラインでのアクティブな存在、「labs」が含まれた名称、人工知能との関連性(.ai ドメインまたは主要製品において AI が核心となることによる定義)。現在のサイトとは異なり、Sevenytonelab は 2000 年代初期の Web ポートフォリオや IDM アルバムカバーに見られるデザインスタイルを想起させ、「vectorheart」というグラフィック要素を特徴としています。この視覚的および技術的な区別は、それが現在の命名進化の一部ではなく異常な存在であることを示します。本文は完全には、七十七トンラボの陳腐化したデジタルアイデンティティが近代人工知能同僚と鮮明に対照となるように、既存の比較のみを強調し、未来のトレンドへの言及や業界全体の影響についての議論を行わず、Sevenytonelab のこの点だけを明らかにしています。 ## 原文: The most significant observation is that Seventyonelab.com stands out as a unique outlier among AI startups due to its retro aesthetic and reliance on legacy web technologies like Netscape 4 or IE 5.0+. While many modern AI companies follow a naming trend by combining numbers with the word "labs"—exemplified by well-known entities such as ElevenLabs, TwelveLabs, ThirteenLabs (3D scenery), and FourteenLabs—Seventyonelab defies this convention. The author identified this distinct case based on specific criteria: an active online presence, the inclusion of "labs" in the name, and a connection to artificial intelligence (defined by either an .ai domain or AI central to main products). Unlike contemporary sites, Seventyonelab evokes the design style of early 2000s web portfolios and IDM album covers featuring a "vectorheart" graphic element. This visual and technical distinction marks it as an anomaly rather than part of the current naming evolution. The text focuses entirely on this existing comparison without projecting future trends or discussing broader industry impacts, simply highlighting how Seventyonelab's outdated digital identity contrasts sharply with its modern artificial intelligence peers.