はじめに
九州産業大学大学院 M2 の Shunta です!2026年07月11日(土)〜12日(日)に東京都中野区で開催された 関数型まつり 2026 に福岡から参加しました。
参加したきっかけ
学部生の頃はもちろん、院生になってからもカンファレンスへ行くのは社会人になってからでいいよねと薄々思っていました。ところが、2026年6月20日(土)にサポーターズの 技育祭 が九州で開催され、それに参加したことがきっかけで、やっぱり学生のうちにカンファレンスへ行こう!という気持ちになりました。というのも、技育祭で「ここに来るだけでも凄いことだよ」、「挑戦していてえらい」、「行動が大事!」といった前向きな言葉を聞いてハッとさせられたからでした。
ということで、とりあえず適当に見つけたカンファレンスに参加するのも良いのだけど、せっかくなら興味のあるカンファレンスに参加してみたいなぁ。そういえば、趣味は競技プログラミングをすることで、大学院ではグラフ理論を対象としたアルゴリズムの研究をしているので、アルゴリズムに関する話題が聞けると嬉しいなぁ。
上記を踏まえて検索した結果、「関数型まつり」の存在を知りました。B2 の頃に関数型言語の 1 つである Haskell を少しだけ勉強したこともあって相性が良さそうだと感じ、このカンファレンスに参加することにしました。
感想
本節では参加したセッションやコンテンツの一部を抜粋し、それについての感想を簡潔に述べます。なお、順序は参加した順です。
Day 1(2026年07月11日)
FP 入門ハンズオン & 交流ラウンジ (1) featuring Haskell [ GitHub ]
Haskell でハンズオン課題に取り組むコンテンツでした。Dev Container が用意されていて親切だと思いました。50 分間と限られた時間内に Chapter 1 と Chapter 2 の全てに取り組むことが出来て良かったです。テストケースが用意されていたので競技プログラミングをする感覚で楽しむことができました。具体的には主に以下の実装を行いました。
- フィボナッチ数列
- ソート判定
- カリー化
- アンカリー化
- compose
型は壁、Rust でもバグを直すな、表現できなくせよ [ スライド ]
普段は Python を使っているのでほとんど型を意識したことがなく、本セッションを聞くまでは、型の役割はデータの種類を表現する程度のものだと思っていました。特にデータの種類が同じで集合の大きさがあまり変わらないようなものは同一の型で表す認識でした。そのため、状態ごとに型を分けるという話を聞いたときは目から鱗が落ちました。状態ごとに型を分けるのはどういうことかというと、例えば、同じメールアドレスであっても、「未認証のメールアドレス」を表す型と、「認証済みのメールアドレス」を表す型をそれぞれ用意し、状態ごとに型を分けようということです。そうすると、バグの温床を解消しやすくなります。
Lean で学ぼう等式推論(証明もあるよ!) [ スライド ]
Lean 言語などの定理証明支援系の存在は知っていましたが、とても難しそうだと思い込んでいて手をつけていませんでした。そういうこともあって、どのような感じで証明していくのか非常に楽しみにしていました。発表中のデモでは、例えば $-(-x \times y) = x \times y$ を証明する際に左辺に対して等式を適用して式変形することにより右辺に持っていく形の証明を Lean 言語で記述していて、証明の雰囲気が掴みやすかったです。Lean 言語では定義が正しいことを保証しないので、ある難問 $\mathcal{P}$ が Lean 言語で証明できても、$\mathcal{P}$ の定義が正しくない場合(別の簡単な問題の定義になっているなど)があり、このときは問題 $\mathcal{P}$ を解いたことにはならないので定義には注意が必要だそうです。発表を聞くだけではなく、実際に手を動かしてみたくなったので帰宅後に Lean 言語の環境構築を行い、偶数と奇数の和は奇数であることの証明を書いて遊んでみました。もう少し複雑な証明にも挑戦してみたいので近いうちに 入門書 を読んでみようかな。

Haskell と圏論:パフォーマンス改善から Kan 拡張へ [ スライド ]
圏論と Haskell の対応関係が面白かったです。Haskell をある程度書いている人が圏論へ入門するときに参考となりそうです。
| 圏論 | Haskell |
|---|---|
| 対象 | 型 |
| 射 | 関数 |
| Functor | Functor |
| 自然変換 | 多相関数 |
| モナド | Monad |
処理のパフォーマンスを改善するのに利用できる Yoneda や Codensity が紹介されていましたが、こういったものが用意されていることは知らなかったです。今後、fmap の合成に関する処理のパフォーマンスを改善する場面に遭遇することはあり得そうなので Yoneda くらいは使ってみたいですね。扱っている内容が難しいのにも関わらず、理解しやすい図や具体例があって分かりやすかったです。
Day 2(2026年07月12日)
Elixir の GenServer でアクタープログラミングしてみよう 〜Pub/Sub 使って広域分散環境でマイグレーションも出来るよ〜
これまでに競技プログラミングで Elixir のコードを少しだけ書いたことがあるので、本セッションを聞いてみました。パターンマッチは数多くの言語で使えますが、Elixir の場合はバイナリデータに対するパターンマッチも行えることを初めて知りました。実行中のプロセスをその状態を維持したまま異なる環境で再開できる「プロセスマイグレーション」も初めて知りましたが、これはすごいですね。こういうのは例えば、メンテナンスのためにサービスを一時停止しようとする際に役立ちそうです。発表中のデモも面白く、プロセスマイグレーションを体感するために、光センサをトリガーとして(部屋などが暗くなったら)L チカの動作を他のボードへ飛ばすデモでした。
モナドっていうほど関数型プログラミング関係なさそうだよな [ スライド ]
モナドは勉強したことがないので気になりました。とはいえ、個人的に気になるのはモナドそのものの仕組みよりモナドの役割の方です。本セッションはモナドの役割の方にフォーカスしており、満足度の高い内容でした。モナドの役割は主に「純粋関数の制限をある程度緩和すること」だそうです。確かに Haskell では入出力の処理を書く際に IO モナドを使います。IO モナドしか知らなかったのですが、他にも State モナドや Either モナドなどがあるみたいですね。スライドの p.44 にある最後の一文は素敵だと思いました。
関数型プログラミングとは純粋な関数を諦めるプログラミングだ
入門ラムダ計算 with λ-1 グランプリ! [ GitHub ]
計算理論を学ぶ際に、計算モデルとしてチューリングマシンを題材にして勉強したことはありましたが、ラムダ計算を題材にして勉強したことはなかったため、こちらについても勉強してみたいと思いました。内容もそうですが、スライドの作り方や発表の仕方も上手く、こういう感じで発表するスタイルもあるんだと学びになりました。発表中に、記事 の紹介がありました。この記事では、チャーチ数やリスト、条件分岐を Python の lambda 式を使ってどう実装するのかについて書かれており、実際に手を動かしてみると面白いです。
証明駆動競技プログラミング: セグメント木ライブラリの検証 [ スライド ]
テスト駆動開発 (TDD) だと無限のパターンを検証できないので、証明駆動開発でそれを解決しようという内容でした。セグメント木を題材にしていますが、その実装を変えるたびに証明の修正も必要となるため、本質的な部分と実装部分の 2 つに関心を分けて証明する工夫がなされていました。こういう考え方は証明に限らずどこでも有用な感じがしますね。
アルゴリズムは何を圧縮しているのか: Haskell から育った「圧縮代数」というメンタルモデル [ スライド ] [ おまけ(参考用)]
アルゴリズムがやっていることを操作的に読むのではなく、意味的に読む視点を持つと面白いよという内容でした。Haskell はその視点を身につけるきっかけとなる言語の 1 つだそうです。世の中にはグラフ理論などのアルゴリズムに関する未解決問題がたくさんありますが、そういった問題に対してアルゴリズムを設計する上で圧縮代数を活かせると嬉しいという気持ちが個人的にはあります。話を聞いていて思ったのは、発表者が AtCoder で青色に到達したように、圧縮代数を通じてアルゴリズムの本質的な部分を理解することにより、例えば競技プログラミングの問題をどう解いていくか、どのようなアルゴリズムを使うと良いかといったことを短時間で行えるようになるのが圧縮代数の魅力の 1 つだと思いました。ひょっとしたら、日頃の「振り返り」という行為は圧縮代数に近いのかもしれませんね。
やっておいて良かった事前準備
カンファレンスの内容とは無関係ですが、やっておいて良かった事前準備について述べようと思います。まだカンファレンスに行ったことのない方にとって参考になれば幸いです。
1. 参加して得たいものの言語化
参加する目的を事前に言語化しておくことで、どのような発表を聞くか、スライドやブースのどこに注目するかといったことに繋がり、本題に集中しやすくなると思います。
2. 聴講するセッションを選ぶ
タイムテーブルが公開されたら、聴講したいセッションを事前に選んでおくことで、セッション間のわずかな時間を有効活用できるのでおすすめです。
3. 基礎知識の勉強
どの発表も内容が一切分からないという悲しい事態は避けたいので、基礎知識が不足していると感じているのであれば、少しでも良いので勉強しておくと良いと思います。例えば私の場合、今回は Haskell の基礎知識があると嬉しいと思ったのと、Haskell を学んだのは随分前だったので、『 すごい Haskell たのしく学ぼう! 』を第 7 章まで読みました(基礎知識の勉強が目的なので全部を読む必要はありません)。
