【ITニュース解説】Building a programming language that reads like English: lessons from PlainLang
2025年09月05日に「Reddit /r/programming」が公開したITニュース「Building a programming language that reads like English: lessons from PlainLang」について初心者にもわかりやすいように丁寧に解説しています。
ITニュース概要
自然な会話のようにプログラミングできる言語「PlainLang」が開発された。記号ではなく「set the greeting to "Hello World"」のように英文でコードを記述する。代名詞「it」で前の結果を参照でき、人間らしいエラー表示も特徴。柔軟な英文を解析する技術や代名詞実現の工夫は興味深い。
ITニュース解説
プログラミング言語は通常、特定の記号や厳格な文法ルールに従って記述される。しかし、より人間が理解しやすい、自然な会話に近い形でプログラムを書けるようにしようという新しい試みが「PlainLang」という実験的な言語で進められている。この言語の目的は、プログラミングをもっと身近で直感的なものにすることにある。例えば、「set the greeting to "Hello World"」や「show on screen the greeting」のように、まるで誰かに話しかけるかのように、完全な文章を使ってコードを書くことができるのがPlainLangの大きな特徴だ。これは、これまでプログラミングにつきものだった記号や句読点の多さ、厳格な構文ルールといった障壁を低くし、プログラミング初心者でもすぐに内容を理解し、書くことへのハードルを下げることを目指している。
このような自然言語に近いプログラミングを可能にするためには、いくつかの技術的な課題を乗り越える必要があった。その一つが「緩い英語の解析」だ。通常のプログラミング言語では、コンピュータがコードを正確に理解するために、非常に厳密な文法が求められる。コードをコンピュータが実行できる形に変換するプログラムを「パーサー」と呼ぶが、このパーサーは通常、あいまいさのない決められたパターンを期待する。しかしPlainLangでは、「the」や「a」、「then」といった単語が文中にあってもなくても意味が変わらないような、人間が使う自然言語特有の柔軟性を許容する。例えば、「set greeting to "Hello World"」でも「set the greeting to "Hello World"」でも同じ意味として解釈する必要がある。このため、PlainLangのパーサーは、プログラムの構造を正確に捉えながらも、余分な単語や省略された単語があっても柔軟に対応できる特別な設計が求められた。開発者は、柔軟性を高めるために「再帰下降パーサー」という解析手法を調整し、この課題を解決しようと試みた。これは、コンピュータが人間の言葉のニュアンスを理解するような、高度な処理だと言える。
次に、「代名詞のサポート」もユニークな挑戦の一つだ。PlainLangでは、直前に計算された結果を「it」という代名詞で参照できる。例えば、「add 5 to total. show it on screen.」と書けば、「totalに5を足す」という処理を行った後、その「足した結果」を「it」という代名詞で受け取り、画面に表示するという流れになる。これは人間同士の会話ではごく自然なことだが、コンピュータプログラムで実現するのは実はかなり複雑だ。プログラムが実行される過程で、現在の状態や直前の結果を記憶し、それを次の命令で参照できるようにする必要がある。この「プログラム実行時の状態」を管理する部分を「ランタイム」と呼ぶが、このランタイムが文脈を理解し、代名詞「it」が何を参照しているのかを正確に判断する仕組みを実装するのは、使う側から見ればシンプルだが、内部的な設計と実装には細心の注意と工夫が必要だった。これにより、より人間らしい思考の流れでプログラミングできるようになる。
さらに、プログラミング初心者がつまずきやすい点として、エラーメッセージの分かりにくさがある。従来のプログラミング言語では、エラーが発生すると、専門的な用語が羅列された「スタックトレース」と呼ばれる情報が表示されることが多く、初心者がその意味を理解するのは難しい。PlainLangでは、エラーが起きた際に、まるで人間が説明してくれるかのように、平易な言葉で何が問題なのかを教えてくれる「人間らしいエラーメッセージ」の表示を目指している。例えば、「add 5 to score」と書いたときに、まだ「score」という変数が設定されていない場合、単にエラーコードを表示するのではなく、「エラー:'score'という変数はまだ設定されていません。まず値を設定してください。」といった具合に、具体的な解決策につながるメッセージを表示しようと努めている。このような、英語のような自然なコードに対して、分かりやすく役立つ診断メッセージを作成することは、開発者にとって慎重な配慮と工夫を要する作業だったが、これによりプログラミング学習の初期段階でのフラストレーションを大幅に軽減できる可能性がある。
PlainLangはまだ開発が始まったばかりの実験的な言語だが、すでに基本的なプログラミング要素をサポートしている。具体的には、値や情報を一時的に保存する「変数」、足し算や引き算などの「算術演算」、特定の条件に応じて処理を変える「条件分岐」、同じ処理を繰り返す「ループ」といった機能が利用できる。さらに、コードを一行ずつ入力してすぐに結果を確認できる「対話型REPL(Read-Eval-Print Loop)」という機能も備わっており、これはプログラミング学習や試行錯誤に非常に役立つ。
開発者は、このような「人間が読める」言語を開発する中で、「自然な構文」(人間が理解しやすい書き方)と「厳密な意味論」(コンピュータが正確に理解できる意味)の間でどのようなトレードオフ(一方を追求するともう一方が犠牲になる関係)があったのか、他の開発者からの意見にも関心を示している。これは、プログラミング言語設計における永遠の課題とも言えるテーマだ。
PlainLangはオープンソースとして公開されており、MITライセンスの下で誰でもコードを見て、利用し、改善に貢献することができる。このプロジェクトは、プログラミングの未来において、より人間中心で直感的なアプローチがどのように発展していくかを示す興味深い事例となるだろう。プログラミングの敷居を下げ、より多くの人が創造的な活動に参加できる可能性を秘めている点で、大きな注目に値する。