圏論入門 - 関係性を読み解く技術
- Digital500 JPY










2026 年4 月12 日の日経新聞朝刊に掲載された記事を読んだことが、本書を書き 始めるきっかけでした。記事の中で「圏論」という言葉に触れ、最初は数学の専門的な話として遠いものに感じました。しかし調べていくうちに、圏論は単なる抽象数学ではなく、日常やエンジニアリングに共通する「構造を見るための考え方」として捉えられるのではないかと思うようになりました。 たとえば、駅と移動、料理の工程、申請手続き、買い物の流れといった日常の題材 には、対象があり、変換があり、それらがつながって一つの流れを作るという共通した骨組みがあります。一方で、ソフトウェアのデータ処理、API 設計、型と関数、電子工作、センサー処理、ハードウェアとソフトウェアの連携にも、同じような構造が見られます。 本書では、圏論を厳密な数学として体系的に解説することよりも、日常の事例とエ ンジニアリングの事例を行き来しながら、「別々に見えるものの中に共通する構造を見つける」ことを目指しました。圏論をすでに知っている人のためというより、筆者自身のように、何かの記事や話題をきっかけに圏論へ興味を持った人が、最初の入口として読める内容を意識しました。 本書は、圏論を基礎概念から順に積み上げ、日常の事例、抽象概念、ソフトウェア、ハードウェア、設計レビュー、高次概念へと段階的に視野を広げる構成です。初読では第1 部から順に読むと流れをつかみやすくなります。一方で、興味に応じてソフトウェア実装編やハードウェア/組み込み編から読み始めても構いません。抽象概念は、前半の事例へ戻りながら読むと理解しやすくなります。
目次
はじめに 1 読み進め方. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 免責事項. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 第1 章 モノ中心の見方から関係中心の見方へ 10 1.1 モノを並べるだけでは分からない. . . . . . . . . . . . . . . . . . 10 1.2 関係を見ると流れが見える. . . . . . . . . . . . . . . . . . . . . 11 1.3 日常と技術に共通する骨組み. . . . . . . . . . . . . . . . . . . . 12 1.4 圏論は何をしてくれるのか. . . . . . . . . . . . . . . . . . . . . 13 1.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 第2 章 対象 15 2.1 対象とは何か. . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.2 対象は物ではなく状態でもよい. . . . . . . . . . . . . . . . . . . 16 2.3 同じ現実にも複数の切り取り方がある. . . . . . . . . . . . . . . 17 2.4 対象をどう切り出すかが見方を決める. . . . . . . . . . . . . . . 18 2.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 第3 章 矢印と合成 19 3.1 矢印は向きのある変換である. . . . . . . . . . . . . . . . . . . . 19 3.2 途中をまとめて一つにする. . . . . . . . . . . . . . . . . . . . . 20 3.3 手順の連鎖もソフトウェアも同じように見られる. . . . . . . . . . 20 3.4 合成可能であることの意味. . . . . . . . . . . . . . . . . . . . . 21 3.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 第4 章 恒等射 23 4.1 「変えない」という矢印. . . . . . . . . . . . . . . . . . . . . . 23 4.2 そのまま通す構造は日常にも技術にもある. . . . . . . . . . . . . 24 4.3 なぜ恒等射が必要なのか. . . . . . . . . . . . . . . . . . . . . . 25 4.4 4.5 変えないことも構造の一部である. . . . . . . . . . . . . . . . . . まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 26 第5 章 圏 27 5.1 圏を構成する四つの要素. . . . . . . . . . . . . . . . . . . . . . 27 5.2 小さな世界としての圏. . . . . . . . . . . . . . . . . . . . . . . . 28 5.3 料理を小さな圏として見る. . . . . . . . . . . . . . . . . . . . . 29 5.4 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 第6 章 駅・路線・乗り換え 31 6.1 駅を対象、移動を矢印として見る. . . . . . . . . . . . . . . . . . 31 6.2 乗り換えは合成として見られる. . . . . . . . . . . . . . . . . . . 33 6.3 複数経路と到達可能性. . . . . . . . . . . . . . . . . . . . . . . . 33 6.4 路線図を構造として読む. . . . . . . . . . . . . . . . . . . . . . 35 6.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 第7 章 料理とレシピ 37 7.1 食材ではなく状態を見る. . . . . . . . . . . . . . . . . . . . . . 37 7.2 調理工程は矢印である. . . . . . . . . . . . . . . . . . . . . . . . 39 7.3 レシピは合成された流れである. . . . . . . . . . . . . . . . . . . 39 7.4 部分レシピの再利用を考える. . . . . . . . . . . . . . . . . . . . 40 7.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 第8 章 買い物・配送・受け取り 43 8.1 買い物を状態遷移として見る. . . . . . . . . . . . . . . . . . . . 43 8.2 決済・配送・受け取りの連鎖. . . . . . . . . . . . . . . . . . . . 45 8.3 裏側の複数サービスをどう見るか. . . . . . . . . . . . . . . . . . 45 8.4 利用者体験と内部構造の違い. . . . . . . . . . . . . . . . . . . . 46 8.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 第9 章 手続きと状態遷移 48 9.1 申請から承認までを対象と矢印で見る. . . . . . . . . . . . . . . 48 9.2 差し戻しと例外経路をどう扱うか. . . . . . . . . . . . . . . . . . 50 9.3 手続きが分かりにくい理由. . . . . . . . . . . . . . . . . . . . . 50 9.4 状態遷移として整理する利点. . . . . . . . . . . . . . . . . . . . 51 9.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 第10 章 SNS・旅行計画と情報の流れ 53 10.1 投稿・返信・引用・共有の構造. . . . . . . . . . . . . . . . . . . 53 10.2 フォロー関係と情報変換は何が違うか. . . . . . . . . . . . . . . 54 10.3 旅行計画を経路の合成として見る. . . . . . . . . . . . . . . . . . 56 10.4 地図とナビは何を保っているのか. . . . . . . . . . . . . . . . . . 57 10.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 第11 章 関手 58 11.1 関手の基本イメージ. . . . . . . . . . . . . . . . . . . . . . . . . 58 11.2 構造を保つとはどういうことか. . . . . . . . . . . . . . . . . . . 60 11.3 日常の写し替えとして考える. . . . . . . . . . . . . . . . . . . . 61 11.4 技術の中の関手的な見方. . . . . . . . . . . . . . . . . . . . . . 62 11.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 第12 章 自然変換 63 12.1 二つの写し替え方を比べる. . . . . . . . . . . . . . . . . . . . . 63 12.2 対応が一貫しているとは何か. . . . . . . . . . . . . . . . . . . . 64 12.3 UI の違いを自然変換で眺める. . . . . . . . . . . . . . . . . . . 65 12.4 自然さという言葉の意味. . . . . . . . . . . . . . . . . . . . . . 66 12.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 第13 章 積と余積 68 13.1 「両方持つ」とは何か. . . . . . . . . . . . . . . . . . . . . . . . 68 13.2 「どちらかを選ぶ」とは何か. . . . . . . . . . . . . . . . . . . . 69 13.3 日常の選択と組み合わせ. . . . . . . . . . . . . . . . . . . . . . 70 13.4 型設計に現れる積と余積. . . . . . . . . . . . . . . . . . . . . . 71 13.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 第14 章 極限と余極限 72 14.1 情報を突き合わせて一つにまとめる. . . . . . . . . . . . . . . . . 72 14.2 複数の要素を新しいまとまりにする. . . . . . . . . . . . . . . . . 73 14.3 極限と余極限の雰囲気. . . . . . . . . . . . . . . . . . . . . . . . 73 14.4 深追いせずに感覚だけつかむ. . . . . . . . . . . . . . . . . . . . 74 14.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 第15 章 モノイド・半群・圏 76 15.1 一点圏としてのモノイド. . . . . . . . . . . . . . . . . . . . . . 76 15.2 演算のつながりとして見る. . . . . . . . . . . . . . . . . . . . . 77 15.3 合成の世界との共通点. . . . . . . . . . . . . . . . . . . . . . . . 78 15.4 15.5 圏論の広がりを感じる. . . . . . . . . . . . . . . . . . . . . . . . まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 78 第16 章 入力・変換・出力 79 16.1 多くのプログラムに共通する骨格. . . . . . . . . . . . . . . . . . 79 16.2 処理をつなぐと全体像が見える. . . . . . . . . . . . . . . . . . . 81 16.3 部品としての変換を考える. . . . . . . . . . . . . . . . . . . . . 82 16.4 流れとしてプログラムを読む. . . . . . . . . . . . . . . . . . . . 82 16.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 第17 章 型と関数 84 17.1 型を対象、関数を矢印として見る. . . . . . . . . . . . . . . . . . 84 17.2 合成可能性は型が決める. . . . . . . . . . . . . . . . . . . . . . 85 17.3 型の違いは境界の違いでもある. . . . . . . . . . . . . . . . . . . 86 17.4 プログラムを圏として眺める入口. . . . . . . . . . . . . . . . . . 86 17.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 第18 章 データ処理パイプライン 88 18.1 生データから出力までの流れ. . . . . . . . . . . . . . . . . . . . 88 18.2 フィルタ、変換、集計、整形をどうつなぐか. . . . . . . . . . . . 89 18.3 合成しやすいパイプライン設計. . . . . . . . . . . . . . . . . . . 90 18.4 パイプラインの壊れ方を見る. . . . . . . . . . . . . . . . . . . . 90 18.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 第19 章 文脈を持つ処理 92 19.1 箱の形を保ったまま中身を変える. . . . . . . . . . . . . . . . . . 92 19.2 成功と失敗を持つ処理. . . . . . . . . . . . . . . . . . . . . . . . 93 19.3 後で値が来る処理. . . . . . . . . . . . . . . . . . . . . . . . . . 94 19.4 文脈を保ったまま合成する考え方. . . . . . . . . . . . . . . . . . 94 19.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 第20 章 API・データベース・レイヤ設計 95 20.1 API 内部の変換の連鎖. . . . . . . . . . . . . . . . . . . . . . . 95 20.2 テーブルは一覧ではなく関係構造で見る. . . . . . . . . . . . . . 96 20.3 レイヤ構造と依存方向. . . . . . . . . . . . . . . . . . . . . . . . 97 20.4 設計を合成可能性で評価する. . . . . . . . . . . . . . . . . . . . 98 20.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 第21 章 部品と接続 100 21.1 部品一覧より接続ネットワークを見る. . . . . . . . . . . . . . . 100 21.2 何が入力で何が出力か. . . . . . . . . . . . . . . . . . . . . . . . 101 21.3 接続構造として回路を読む. . . . . . . . . . . . . . . . . . . . . 102 21.4 関係中心で眺める電子工作. . . . . . . . . . . . . . . . . . . . . 102 21.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 第22 章 実配線と抽象構造 104 22.1 ブレッドボードの配線をどう読むか. . . . . . . . . . . . . . . . . 104 22.2 実配線と抽象図の対応. . . . . . . . . . . . . . . . . . . . . . . . 105 22.3 配線を「流れ」として理解する. . . . . . . . . . . . . . . . . . . 106 22.4 図式化で分かりやすくする. . . . . . . . . . . . . . . . . . . . . 106 22.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 第23 章 センサー処理とデータロガー 107 23.1 物理量から表示・保存までの流れ. . . . . . . . . . . . . . . . . . 107 23.2 センサー値はどこでデータになるのか. . . . . . . . . . . . . . . 108 23.3 補正、判定、保存はどうつながるか. . . . . . . . . . . . . . . . . 109 23.4 多層の変換連鎖として見る. . . . . . . . . . . . . . . . . . . . . 109 23.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 第24 章 論理回路・状態機械・組み込み処理列 111 24.1 論理ゲートを変換として見る. . . . . . . . . . . . . . . . . . . . 111 24.2 小さな変換の合成としての加算器. . . . . . . . . . . . . . . . . . 112 24.3 LED 制御の状態遷移. . . . . . . . . . . . . . . . . . . . . . . . 113 24.4 組み込みソフトウェアの処理列. . . . . . . . . . . . . . . . . . . 113 24.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 第25 章 ハードとソフトをまたぐ多層変換 115 25.1 物理世界からアプリケーションまで. . . . . . . . . . . . . . . . . 115 25.2 各層は何を保ち、何を変えるのか. . . . . . . . . . . . . . . . . . 116 25.3 境界をまたぐときに起きること. . . . . . . . . . . . . . . . . . . 116 25.4 システム全体を貫く変換の連鎖. . . . . . . . . . . . . . . . . . . 117 25.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 第26 章 設計図の種類と関係構造 118 26.1 データフロー図は何を見せるか. . . . . . . . . . . . . . . . . . . 118 26.2 シーケンス図は何を見せるか. . . . . . . . . . . . . . . . . . . . 119 26.3 ブロック図は何を見せるか. . . . . . . . . . . . . . . . . . . . . 119 26.4 設計図はどれも関係構造を表している. . . . . . . . . . . . . . . 120 26.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 第27 章 つなぎやすい設計と壊れた変換 121 27.1 つなぎやすいインタフェースとは何か. . . . . . . . . . . . . . . 121 27.2 正しい変換と壊れた変換. . . . . . . . . . . . . . . . . . . . . . 122 27.3 どこで意味が失われるのか. . . . . . . . . . . . . . . . . . . . . 123 27.4 設計レビューで何を見るべきか. . . . . . . . . . . . . . . . . . . 123 27.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 第28 章 複雑さを整理する 125 28.1 複雑な接続はなぜ見えにくいのか. . . . . . . . . . . . . . . . . . 125 28.2 サブシステムに分けると何が変わるか. . . . . . . . . . . . . . . 126 28.3 階層化と抽象化の効用. . . . . . . . . . . . . . . . . . . . . . . . 126 28.4 複雑さを構造として扱う. . . . . . . . . . . . . . . . . . . . . . 127 28.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 第29 章 図で考える技術者のための圏論 128 29.1 テキスト仕様だけでは見えないもの. . . . . . . . . . . . . . . . . 128 29.2 図式にすると何が一目で分かるか. . . . . . . . . . . . . . . . . . 129 29.3 可換や整合性を図で確認する. . . . . . . . . . . . . . . . . . . . 129 29.4 技術者にとって圏論が役立つ場面. . . . . . . . . . . . . . . . . . 130 29.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 第30 章 可換図式 131 30.1 異なる経路でも結果が一致するとは何か. . . . . . . . . . . . . . 131 30.2 図で一致を見る利点. . . . . . . . . . . . . . . . . . . . . . . . . 132 30.3 設計や変換確認とのつながり. . . . . . . . . . . . . . . . . . . . 133 30.4 可換図式の基本形. . . . . . . . . . . . . . . . . . . . . . . . . . 133 30.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 第31 章 普遍性 134 31.1 最も自然なものを選ぶという感覚. . . . . . . . . . . . . . . . . . 134 31.2 余計なものに依らないとは何か. . . . . . . . . . . . . . . . . . . 135 31.3 なぜ圏論で重要なのか. . . . . . . . . . . . . . . . . . . . . . . . 135 31.4 普遍性を直感で受け取る. . . . . . . . . . . . . . . . . . . . . . 136 31.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 第32 章 随伴 137 32.1 「作る側」と「忘れる側」. . . . . . . . . . . . . . . . . . . . . 137 32.2 左右対称ではない対応関係. . . . . . . . . . . . . . . . . . . . . 138 32.3 具体例で感じる随伴の入口. . . . . . . . . . . . . . . . . . . . . 139 32.4 深入りする前に押さえたいこと. . . . . . . . . . . . . . . . . . . 139 32.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 第33 章 圏論で見えるようになるもの 141 33.1 別々に見えたものの共通構造. . . . . . . . . . . . . . . . . . . . 141 33.2 設計や実装で役立つ視点. . . . . . . . . . . . . . . . . . . . . . 142 33.3 日常と技術をまたいで考える力. . . . . . . . . . . . . . . . . . . 142 33.4 これから先の学び方. . . . . . . . . . . . . . . . . . . . . . . . . 143 33.5 まとめ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 第34 章 おわりに 144 著者紹介 145









