READ REPORT

『構文解析のしくみ』はどんな本か。著者・水島宏太さんの紹介記事から、学び方と買う前に要る前提知識を読む

2026年10月2日

家事と子育てのスキマで経営する3方よしAI共創コンサルタントの田中啓之、ひろくんです。今回は、水島宏太さんのZenn記事「『構文解析のしくみ』が出版されました」を紹介するね。

GitHub Actionsの設定ファイルでは、if: の行の ${{ }} を、普段は省略できます。ところが、式が ! で始まる時だけは、省略できません。たった1文字で、書き方の約束が変わるんです。この例を載せたのが、水島宏太さんのZenn記事「『構文解析のしくみ』が出版されました」(2026年9月30日公開)です。この記事は、著者の紹介記事から、本の学び方と、扱う範囲を読むレポートです。私が読んだのはZennの記事と出版社の書籍ページまでで、本そのものは読んでいません。読者の一歩は、最後の章に1つだけ置きました。目安は10分です。

3行でわかるポイント

  1. 水島さんは2007年頃、口頭試問で「終わった分野」と言われた構文解析を続けました。記事では、現実の文法が広がったことが追い風だったと見ています。
  2. GitHub Actionsの設定ファイルは、YAML・式・シェルの3種類が1ファイルに重なります。if: では普段省略できる ${{ }} が、式が ! で始まる時だけ省略できません。
  3. 本は、理論の前に小さな構文解析器を手で書いて動かす順番です。宣伝記事の中で、扱わないことも先に書いています。買う前の一歩は、サンプルコードで前提を確かめることです。
01

「終わった分野」と言われた構文解析を、水島宏太さんは続けた。追い風は、現実の文法の広がりだったという

終わったと言われた分野が、文法の広がりで続いた流れの図解

水島宏太さん「『構文解析のしくみ』が出版されました(出版にあたって宣伝と裏話)」(Zenn)(口頭試問の場面)

「水島君、博士後期で構文解析という終わった分野をするということだけど、何がしたいのかな」(かなりマイルドバージョンに改変)

2007年頃、水島さんは博士後期課程に進む時の口頭試問で、引用の一言を言われました。

構文解析って、プログラミング言語のような人が決めた文法を読み解いて、構造を取り出す技術のことです。記事によると、当時は「終わった問題」と見る人が多くいたそうです。解析器を作る道具がすでに数多くあり、理論と実用の中間の「ほどよい」アルゴリズムもあったから、と水島さんは振り返っています。

一方で水島さん自身は、博士後期に進むなら、そのくらいのツッコミに最低限の防御ができないといけない面もあったと思う、と書いています。

その後、ANTLRのALL(*)が出て、LL(k)のボトルネックはほぼ解消されました。PEGは、Python 3.9の構文解析器に正式採用されました。水島さんが大学院の頃に取り組んだカット演算子も、知らない内にPythonへ取り込まれていたそうです。

では、なぜ終わらなかったのか。水島さんは、しょうもない話として、「終わらせたくない」人々が地味に生き残っていたからだと書きます。そのうえで、追い風があったとするなら、現実の文法が文脈自由言語(BNFで表せる範囲とほぼ同じ)に収まらない所まで広がったことが大きい、と踏んでいます。

Rubyのヒアドキュメント、Pythonのインデント、Cのtypedef。書きやすさのために便利な表記を足していくと、文法ははみ出していく、という話です。

02

GitHub Actionsの設定ファイルは、1つのファイルにYAML・式・シェルの3種類の書き方が重なっている

1つの設定ファイルにYAML・式・シェルの3層が重なる図解

水島宏太さん「『構文解析のしくみ』が出版されました(出版にあたって宣伝と裏話)」(Zenn)(GitHub Actionsの例の説明)

YAMLの値の中に ${{ }} で囲まれた式言語があって、run: の中身はシェルのコマンドなので、1つのファイルに3種類の構文が重なっています。

水島さんの記事には、GitHub Actions(作業を自動で動かす仕組み)の設定ファイルの例が出てきます。

jobs:
  release:
    if: ${{ !cancelled() && startsWith(github.ref, 'refs/tags/v') }}
    runs-on: ubuntu-latest
    env:
      CHANNEL: ${{ case(contains(github.ref_name, '-rc'), 'preview', 'stable') }}
    steps:
      - run: echo "Releasing ${{ github.ref_name }} to ${{ env.CHANNEL }}"

引用のとおり、jobs: や runs-on: はYAMLという設定の書き方です。if: や env: の ${{ }} の中は、条件や値を計算する式の言語。steps の run: の中は、シェルのコマンドです。1枚のファイルで、言語が3種類。

水島さんは、これを言語を作る人だけの話ではない、と書いています。GitHub ActionsやKubernetesのように、YAMLやJSONの上にDSL(特定の用途のための小さな言語)を載せるのは、今ではごく普通のやり方です。ただ、既存のデータ形式の枠に収めようとすると、文法にはどうしても無理が出る、と。

水島さんの見立ては、はっきりしています。言語としてはシンプルなのに、YAMLで書くために凄く面倒くさい文法になっていることは間違いない。じゃあ、ワークフローのための読み書きしやすい(AI可読も含む)文法を自分で考えようとすると、構文解析の知識が要ります。

水島さんは、この例を、構文解析を学ぶ理由の1つとして出しています。面倒な文法をがまんして使う側から、読み書きしやすい文法を自分で考える側へ。そのために要るのが構文解析の知識、という話です。

03

if: の行では、普段は省略できる ${{ }} が、式が「!」で始まる時だけ省略できない

if:の行で普段は省略できるが、先頭が感嘆符の時だけ省略できない対比の図解

水島宏太さん「『構文解析のしくみ』が出版されました(出版にあたって宣伝と裏話)」(Zenn)(if: の書き方の説明)

if: はもともと式として評価されるので ${{ }} を省略できるのですが、この例のように式が ! で始まるときだけは省略できません。YAMLでは ! が予約語だからです。

さっきの例に戻ります。if: の行は、もともと式として評価されるので、普段なら ${{ }} を省略できます。ところが、式が ! で始まる時だけは省略できません。理由は、YAMLで ! が予約語だから、と水島さんは書いています。

ルールは「省略できる」。ただし、先頭が ! の時は除く。

例の if: の行を見直すと、${{ !cancelled() && … }} と、式が ! で始まっています。書いた人の目には、普通の条件に見えます。でも、この1文字のために、${{ }} で囲む書き方が必要になります。

読む側の規則は、読む側の中で決まっています。書く側が、自分の見た目の感覚で省略しても、読む側は同じようには読んでくれません。

これが、水島さんの例から私が読み取った中心です。設定ファイルの見た目は、人が読み書きしやすいように作られています。その見た目の下には、機械が読むための規則があります。

04

具象構文は「言語のUI」。JavaScriptでは、return の後の改行1つで意味が変わる

人の目に見える形と機械が読む規則が別にあることの図解

水島宏太さん「『構文解析のしくみ』が出版されました(出版にあたって宣伝と裏話)」(Zenn)(構文解析を一冊にした理由)

私たちが毎日読み書きしているのは抽象構文木ではなく具象構文で、具象構文は言語のUIのようなものです。

水島さんは、私たちが毎日読み書きしているのは、抽象構文木(機械が内部で持つ木の形)ではなく、具象構文だと言います。具象構文は、人が直接読み書きする表記のこと。水島さんの言い方では「言語のUI」です。

見た目と読まれ方が別になる例が、記事によると本の序章にも、JavaScriptで出てきます。

return
a + b;

return の次の行に a + b; を書くと、return; a + b; と解釈されて、関数は undefined を返す、と水島さんは書いています。人の目には「a + b を返す」と読めるのに、機械は return の行で文が終わったと読むんです。

改行1つで、意味が変わる。人の目では同じに見えて、読む側の規則では別のものになります。

機械は、書いた人の頭の中の意図までは読んでくれません。決まった規則で読むだけです。

ここまでの例は、どれも同じ形をしています。人の目に見える形と、機械が読む規則が、別の所にある。水島さんが構文解析を一冊にしたのは、この「別の所」を、手で確かめられるようにするためなんです。

05

『構文解析のしくみ』は、理論の前に手で動かす。電卓と、わざと壊した文法から学ぶ

電卓を書き、わざと壊し、考えてから理論に進む流れの図解

水島宏太さん「『構文解析のしくみ』が出版されました(出版にあたって宣伝と裏話)」(Zenn)(本の作り方の説明)

自分で書いた再帰下降の構文解析器が括弧を正しく処理するのを見たほうが早い、というのが私の持論です。

水島さんの本は、理論から入りません。記事には、これは絶対にそうしようと決めていた、とあります。

先に小さな構文解析器を手で書いて、動かして、なぜ動くのかを考える。そのあとで理論に入る順番です。

理由も書かれています。オートマトンの状態遷移図を眺めているだけでは、括弧の対応がなぜ数えられるのかは腑に落ちない。FIRST/FOLLOW集合を眺めても、構文解析の直観は身につかない、と。

第1章の題材は、電卓です。水島さんが初めて書いた構文解析器らしきものも、高校三年生の時に作った電卓でした。(1 + 2) * (3 + 4) と入れると21と出るだけのもの。抽象構文木も知らないまま、括弧の対応や演算子の優先順位を自力で切り抜けていた、と記事にあります。

面白いのは、わざと壊した版も見せるところです!本来、1+2*3 は7になります。ところが文法の階層を逆にすると、(1+2)*3、つまり9として解析されてしまう。壊れた版と並べると、なぜその順番で書くのかが分かる、という作りです。

私はここで、自分が「腑に落ちた」日のことを思い出しました。AI時代不登校サミットで、人前で教えた日です。

壇上で伝えたのは、「ワクワク夢中に遊び探究が大事」という、ずっと大事にしてきた考えでした。教えながら、私は気づきました。人に教えることをメタに捉えることで、自分が学べる、と。

新しい知識が増えたわけではありません。すでに見えていた景色の、解像度が上がったんです。

AI氣道『教える前に「わかってから」を待たなくていい理由|AI時代不登校サミットで気づいたこと』より

「知識としては同じでも、腑に落ち方がまったく違うんです。」

知っているつもりだったことが、人に話して初めて実感になった、という気づきを、『教える前に「わかってから」を待たなくていい理由|AI時代不登校サミットで気づいたこと』で書いています。

振り返りで、教える前の私に足りなかったものは何かと問われました。答えは、知識でも情報でもありませんでした。足りなかったのは、その知識を自分の言葉で人に差し出す、という一回の行為でした。

水島さんの「眺めているだけでは腑に落ちない」と、私の「知っているつもりだったことが、差し出して初めて腑に落ちた」。きっかけは別です。水島さんは手で動かすこと、私は人に話すこと。でも、知っているだけでは足りなくて、一回の行為が分かれ目になる、という点が重なりました。

06

宣伝記事なのに、本が扱わないことを先に書いている

本が扱う範囲と扱わない範囲を先に書く対比の図解

水島宏太さん「『構文解析のしくみ』が出版されました(出版にあたって宣伝と裏話)」(Zenn)(「この本で扱っていないこと」の節)

自然言語の構文解析は扱っていません。対象はプログラミング言語やデータ形式のような、人間が設計した厳密な文法を持つテキストです。

水島さんの記事は、本の宣伝記事です。それなのに、終わり近くに「この本で扱っていないこと」という節があって、「ここもちゃんと書いておきます。」と始まります。

扱わないのは、自然言語の構文解析。意味解析や型検査、最適化、コード生成といった、構文解析より後ろの工程。構文解析器の速度を突き詰める話も、していません。コードは速さより、読んで分かることを優先したそうです。

宣伝の中で、向かない所を先に書く。この姿勢を読んで、私には思い出す言葉がありました。

私には、使いたくない言葉があります。「誰でも簡単に」「今すぐ」。AIは魔法じゃない。使いこなすには縦に掘る努力が必要なのに、それを隠して売りつける姿勢が許せないんです。

その言葉に近い文章を、私の名前で書こうとしたのが、価値観を伝えないまま使っていた頃のAIでした。

AI氣道『AIに「魂」を宿す方法──12日で803記事を支えた、たった3枚のテキストファイル』より

「AIが私のブログに「簡単に稼げます!」と書いた。私が一番使いたくない言葉を、私の名前で発信しようとしていた。背筋が凍った。」

価値観を伝えずにAIを使っていた頃の失敗は、『AIに「魂」を宿す方法──12日で803記事を支えた、たった3枚のテキストファイル』で書いています。

そのあと、AI憲法を作り、NGワードを書き出しました。

許せない理由は、原体験にあります。私には、3万円で買った情報商材に騙された原体験があります。見た目は豪華で、中身はスカスカ。「凄そうな雰囲気」に騙されました。

自分も、中身の薄い商品を売って、クレームをもらった側でもあります。だから、期待値コントロールと、内容をしっかり作ることが、私の信念になりました。

買う側で騙され、売る側で失敗した私の目には、宣伝記事の中で範囲外を先に書くことは、期待値コントロールの1つの形に見えます。私は、対象外まで書いてくれる紹介のほうを、信頼したいと思いました。

07

本を手に取る前に、読む順番と前提を、サンプルコードで確かめる

サンプルコードを開き、4つを探して○×を付け、前提を判断する流れの図解

水島宏太さん「『構文解析のしくみ』が出版されました(出版にあたって宣伝と裏話)」(Zenn)(章の難易度の説明)

すぐに使える知識がほしい方は、第1章→第2章→第5章→第6章の順に読んでもらってもかまいません。

『構文解析のしくみ』がどんな本か、まず情報を整理します。出版社の書籍ページによると、『構文解析のしくみ 電卓から言語処理系まで自分で書く』は水島宏太さんの著書。発行はZEN大学出版会、発売はKADOKAWAで、B5変型・212ページ、定価は3,300円です。ISBNは978-4-04-901207-1。

章の難易度は、水島さんの表では、第1章(算術式)が★、第2章(JSON)が★★、第3章(文脈自由文法)が★★★、第4章(構文解析アルゴリズム)が★★★★、第5章(構文解析器生成系)が★★、第6章(現実の構文解析)が★★です。第4章は、水島さん自身が「正直いちばん重い」と書いています。

前提は、記事によると、クラスとメソッドが読めて、条件分岐と繰り返しが追えること。サンプルコードは主にJavaで、Java 21が基準です。コンパイラや形式言語理論の知識はいらない、とあります。普段使っている言語に読み替えてもらって大丈夫なように、素直な書き方に揃えた、とも書かれています。

推測: プログラムを読んだことがない方には、前提が重い本かもしれません。

だからこそ、買う前に、前提が自分に合うかを確かめたいところです!記事には、サンプルコードが公開されているページが載っています。

私は、無料の学習教材を実機で動かして紹介した時にも、同じ不安を書きました。

AI氣道『「Cloudflareの学習教材」をkomiyammaさんが無料公開。動かせる章を全部実測したら、詰まる場所が4つ見えた』より

「「本当に今も動くのか」「どこで詰まるのか」が、読む前には分かりません。」

読む前には分からない、という不安は、『「Cloudflareの学習教材」をkomiyammaさんが無料公開。動かせる章を全部実測したら、詰まる場所が4つ見えた』で書いています。

記事の終わりで水島さんは、本の誤りの連絡先を案内したうえで、感想やフィードバックはブログなどで自由に書いてください、と書いています。この記事も、その感想の1つです。

サンプルコードで前提を確かめる(目安10分) SimpleJsonParser.java(第2章のフォルダにあるファイル。この記事を書いた2026年10月2日に、GitHub上で存在を確かめました)を開きます。クラス・メソッド・条件分岐(if)・繰り返し(while)を1つずつ探して、意味が追えたものに○、追えなかったものに×を書きます。4つ書けたら完了です。これは私からの提案で、4つの印で本が読めるかが決まるわけではありません。×が多ければ、前提が重いかもしれない、と受け取ってください。

FAQ

よくある質問

Q. 構文解析とは何ですか?

A. 水島さんの記事では、プログラミング言語やデータ形式のような、人間が設計した厳密な文法を持つテキストを読み解いて、構造を取り出す技術として扱われています。本が扱うのは、抽象構文木を組み立てるところまでです。

Q. 『構文解析のしくみ』は、どんな人向けの本ですか?

A. 記事によると、クラスとメソッドが読めて、条件分岐と繰り返しが追えれば十分で、コンパイラや形式言語理論の知識はいりません。サンプルコードは主にJavaで、Java 21が基準です。Java 25でも動くとあります。

Q. GitHub Actionsの if: で ${{ }} を省略できないのは、どんな時ですか?

A. 水島さんの記事によると、if: はもともと式として評価されるので、普段は ${{ }} を省略できます。ただし、式が ! で始まる時だけは省略できません。YAMLで ! が予約語だからです。

Q. Javaが読めなくても、この本は読めますか?

A. 記事には、普段使っている言語に読み替えてもらって大丈夫なように、素直な書き方に揃えたとあります。ただし、読めるかどうかは私には確かめられていません。買う前に、サンプルコードのページで、自分が前提を満たすかを見てみてください。

Q. 電子書籍はありますか?

A. 水島さんの記事には、電子書籍についてはご要望が多く、できるだけ早く出せるよう進めているものの、いつになるかは確約できないとのことでした、と書かれています(2026年9月30日時点)。

MATOME

まとめ:設計の見た目の下に、読む側の規則がある

著者の紹介記事から受け取ったことを、順に書きます。どんな本かを、順に見てきました。終わったと言われた分野を、水島さんは続けたこと。設定ファイルは1枚に複数の書き方が重なり、見た目の下には機械の規則があること。本は、先に手で動かす順番で、扱わないことも先に書いていること。

私は、手で動かして腑に落ちる順番を、人に差し出して腑に落ちた自分の気づきと重ね、範囲外を先に書く姿勢を、期待値コントロールの信念と重ねて読みました。

読者の一歩は、サンプルコードで前提を確かめることだけです。目安は10分です。

この記事で読んだのは、Zennの記事と、出版社の書籍ページまでです。本は読んでいません。

COLUMN

宣伝記事に、「自慢」と「毎月の報告できなかった月」が書いてあった

書き手の手触りが出ている行を、虫眼鏡で確かめるひろくん

水島さんの記事を読んでいて、手が止まった所が2つあります。

1つ目は、「ちょっとした自慢」という一節。自分が大学院の頃に取り組んだカット演算子が、知らない内にPythonへ取り込まれていて、「去年くらい(?)にそれを知ってちょっと誇らしくなったのでした」と、疑問符つきで書かれています。

2つ目は、本が出るまで6年かかったという話。企画を持ちかけたのが2020年頃で、毎月の定例ミーティングで進捗を報告できない月もあった、と書かれています。そのあとに、「根気強く待っていただいたおかげで、こうしてめでたく発刊となりました」と続きます。

どちらも、本の中身とは直接関係がありません。それでも私は、この2か所があるから、この記事を宣伝だけではなく、書き手の記録としても読めました。

宣伝記事は、本を買ってもらうための文章です。その中に、誇らしかった話と、報告できなかった月の話の両方が入っていました。どちらも、水島さんの記事に書かれていることです。うまくいった話だけが並んでいたら、私はこの記事を、書き手の記録としては読まなかったと思います。

私が記事や本を選ぶ時の、小さな目安にしたいと思ったのは、うまくいかなかった月や、ちょっとした自慢のように、書き手の手触りが出ている行があるかどうかです。

私が自分のAIに任せて試してきた日々は、分身AIと歩んだ100日の全まとめに残しています。

分身AIのことをもっと知るなら、分身AI.comもチェックしてね!

REF

参考リンク

今回紹介した記事

著者水島宏太さん(Zennアカウント kmizu)
媒体Zenn
公開日2026年9月30日
元URLhttps://zenn.dev/kmizu/articles/2026-09-parser-book

無料プレゼント

Aiport(Claude Code AIエージェント実践会)

Claude CodeでAI秘書+分身AI+AIカンパニーが無料で作れるキット&解説動画をプレゼント!

▶ 無料で入会してキットを受け取る

AI生成コンテンツについて

この記事はAIツール(Claude Code)を活用して制作しています。構成・文章生成にAIを使用し、最終的な内容の確認・編集・公開判断はひろくん(田中啓之)本人が行っています。「分身AIひろくん」(bunshin-ai.com)とは別のコンテンツです。

この記事が気に入ったら、シェアをお願いします

この記事で学んだことを誰かに教えて恩送りして学びを深めよう!

XLINEはてブ

関連記事