これはなに?
2026/07/11-12で開催された関数型まつり2026の参加レポートです。
私について
どの程度の前提知識がある人間の感想かわかると、次回参加する方の参考になるかなと思うので書いておきます。
(私はツヨツヨエンジニアではないですが、とても楽しめました)
- 関数型プログラミング歴: Haskell 9ヶ月(ほぼ、AtCoderのみで最近入茶)
- 理学部出身だが、大学で圏論や関連する数学理論の勉強はしたことがない
- プログラミングは大学3年生から独学はじめて、2022年に修士卒で入社
雰囲気など
とにかくメンツが強くて濃かったです。
(自分の場合)普通に生きていると、関数型言語の話をしている人にSNS上以外でほとんどあうことはないです。
しかし、関数型まつりに参加すると程よくふるいにかけられたツワモノたちのいる空間に放り込まれます。
(一言でいうとハンター試験会場のようです)
- 聞いたことのない関数型言語で開発している人がそのへんにいる
- Haskell競プロをやっている方に何人も遭遇する (AtCoderの場合1万人の参加者の中に10〜20人くらい)
- みんなNix Flakeを使っているし、知らん機能の話をしている
- 関数型言語で論文を書いている人がいたりする
- みんながHaskellを知っている前提で話をしている(Haskellという単語を2日間で4桁近く聞いたと思う)
つまり、サイコー!!ってこと!
参加者も数百人いて、セッション会場では立ち見が発生することも多々あり、すごい盛り上がりを見せていました。
セッションの感想
- 参加したすべてのセッションについて記載していません(あまりに雰囲気しかわからなかったセッションについては何も語れないため)
- セッションの解釈や感想が見当違いの可能性があります。
- 資料や発表を自分が消化仕切る前ににこの記事を書いているので、感想があっさりしていると感じたらすみません。
聴いたセッション(1日目)
-
なぜ関数型プログラミングで「型」と「証明」が語られるのか
- カーリーハワード対応をちゃんと勉強したいと思った。
- ラムダ計算から全ては始まり、型システムと関数型言語はそれぞれ進化しているの初めて知った。
-
本物のプログラマーは unsafe と型システムを使う 〜拡張可能レコードを作って学ぶ黒魔術入門〜
- Haskellのサンプルコードに新機能とかわかりにくい部分の解説あるのありがたすぎる...
- 最初に安全な実装をしてテストや形式証明などの検証ループを作り、その後プログラマがunsafeを選択してパフォーマンスを得るというのが良さそう
- プログラマーが性能のために責任を引き受けるという考え方がかっこいい
- 黒魔術はとてもむずかしそう
-
弱い世界から分解するデータ型の概念
- ラムダ計算のように機能を省いていくとより美しい世界が待っているのがわかった。
- Strong Functional Programmingという概念が面白い
- 計算がかならず正常に停止する制約
-
Haskellと圏論:パフォーマンス改善からKan拡張へ
- kan拡張を使うと効率化できるという話。
- 圏論とHaskellとkan拡張が圏であるというジョーク(?)がおもしろかった。
- 数学や理論の難しいところはわからなかったが、なんか最適化されそうなことが体感できてうれしい
聴いたセッション(2日目)
-
- 代数的データ型の延長くらいの気持ちでいったが、無事撃沈
- エフェクトシステムについてきちんと学んだほうが良さそう
- kokaという関数型言語があるらしい
-
Haskell/Servantを通してWebミドルウェアを捉え直す
- 認証をかませたリクエストハンドラは、認証成功時のみ呼ばれるを型で主張したい
- Haskellの型システムを使えばいろいろできるのでネタ以外にHaskellでサーバーサイドを書く利点があるんだなと思って関心した。
-
モナドっていうほど関数型プログラミング関係なさそうだよな
- モナドの概念をわかりやすく教えてくれる発表だった
- 使わなくてすむならモナドつかわない
- 純粋な関数だけでできないことを安全に拡張するのがモナド
-
- 証明駆動開発がTDDに似ている
- 最初に簡単な実装をして正しいことを証明する
- その後、高速化した実装をつくり前の実装と同じものであることを証明する
-
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
- 操作的ではアルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル なく、意味的にfoldを見ると演算子で畳み込むことで意味を失わずに情報を圧縮できる。この視点でアルゴリズムを見るとおもしろそう。
- リスト -> 和: このリストが持つ合計値だけ保存している
- リスト -> 累積和: あるindexまでの合計値だけ保存している。左の区間を要約、代表する値
- 要約同士の合成は逆元で表現する ex: 点4から点7の間にある値の総和は引き算で求められる。
- リスト -> セグ木: セグ木があんまわかってないが、圧縮率は低め。その分途中の値を逆元なしでとりだせる。
- アルゴリズムに限らず、あらゆるものがfoldに見えてきて面白い。
全体を通して
よく、プログラミングは手段であるのでプログラミングするだけじゃだめで価値を届けないとだめみたいな話があると思います。
自分は正直に言うと、価値を届けるよりもプログラミング言語やIT技術が動くしくみがわかることによって、自分の見える世界が拡張されることが一番楽しいと感じており、自分がプログラミングをする目的はここにあります。
今回、関数型言語を愛するたくさんの人たちと交流したり、たくさんのすばらしいセッションを聞かせていただき、内容をすべて理解できたわけではないのですが、より関数型言語にコミットすればより楽しい世界を自分が見ることができるという確信を得ることができました。
AIがそれなりにコードを書く時代であっても、関数型言語に人間としてコミットすることで、理解する喜びをAIが奪うことはできないなとヒシヒシと感じることができました。
今年はスタッフとしての参加でしたが、微力ながら関数型まつりの運営に携われたことを光栄に思っております。
来年はもっとスタッフとしても頑張りたいです。
P.S https://coffee.wonder-soft.com/ さんのメロンソーダとコーヒーが美味しかったのでそのうち遊びに行きたいです。ごちそうさまでした。