Opt Technologies Magazine

オプトテクノロジーズ 公式Webマガジン

イベントレポート「Fun Fun Functional (1) 関数型言語初心者向けLightning Talks!!」

alt

5/27(月)に弊社で開催された関数型言語初心者向けLT大会の模様をレポートします。

あいさつ

"Clojurian"(Clojure使い)のlagénorhynque (a.k.a. カマイルカ🐬)です。

以前にClojureをプロダクト開発に導入した経緯について記事を書いたことがありましたが、その後もバックエンドにClojureやScalaなどを利用したWebシステム開発に携わっています(cf. 日本で Clojure/ClojureScript を利用している会社一覧)。

今回は、5/27(月)に弊社で開催された関数型言語初心者向けLT大会の模様をレポートします。

「Fun Fun Functional」とは

2018年まで様々な技術系イベントを開催してきた「市ヶ谷Geek★Night」の後継として新たにOpt Technologiesとして始まった4種類のイベント企画のうち、関数型プログラミング(functional programming)関数型言語(functional language)に関連したテーマに特化したものです。

関数型言語の初心者から熟練者まで、関数型プログラミングの世界を楽しく学び、知見を共有するための場を提供していきます。

Fun Fun Functional (1) 関数型言語初心者向けLightning Talks!!

Fun Fun Functionalとして初めてとなる今回は関数型言語 初心者向け LT会を開催しました。

BuckleScript/OCaml, Scala, Elixir, Clojure, Elm, GHCJS/Haskellと幅広い言語や技術についての発表が集まり、入門的な紹介から応用例や発展的な話題まで関数型言語についての多岐にわたる内容が一度に聞ける盛りだくさんの会となりました。

イベント中のTwitterハッシュタグ #FunFunFunctional のツイートはTogetterにもまとめています。

ちなみに軽食としてBAGEL & BAGELのベーグルも提供しました。

以下では8名のご登壇者によるLTを簡単にご紹介しましょう。

LT

1: BuckleScript - OCamlで作るフロントエンド

@cedretaberさんによるBuckleScriptについての概要紹介でした。

BuckleScriptはOCamlからJavaScriptへのコンパイラです。

OCamlの強力な言語機能とエコシステムを活かしつつJavaScriptとの相互運用性もよく考慮されているようで、OCaml使いには特にフロントエンド開発で魅力的なAltJSかもしれません。

発表の中では静的型付けの関数型言語の文脈で登場するGADT (generalized algebraic data type; 一般化代数的データ型)という発展的な専門用語も飛び出し、会場内にざわつきも見られました😅

2: PlayFrameworkでFuture[Either[A,B]]どうするのか問題

@SatooooooooooooさんによるScalaについての実践的な話題のLTでした。

非同期処理の Future と2種類の型をとりうる Either とが組み合わさった Future[Either[A, B]] のような、ネストしたモナディックな型(cf. モナド(monad))をどのように扱うか、というScalaやHaskellなどの言語では定番の問題です。

一般的にはモナドトランスフォーマー(monad transformer; モナド変換子)というものを利用できる局面で、今回の例ではScalazCatsといった純粋関数型プログラミングを支援するライブラリが提供しているモナドトランスフォーマー EitherT が役に立ちますね(これまた最終的には発展的な話題でした😅)。

3: ClojurianからみたElixir

@lagenorhynque (a.k.a. カマイルカ)はClojureとよく似ている点を中心にElixirを紹介する発表をしました。

ClojureはJava VM (JVM)、ElixirはErlang VMで動作する動的型付けの関数型言語です。

Elixirは言語設計にClojureの影響も見られ、いくつか共通した特徴を備えていますが、データ指向(data-oriented)なプログラミングスタイル、プロトコル(protocol)によるポリモーフィズム、マクロ(macro)によるメタプログラミングについて簡単に解説しました。

また、ClojureとElixirの入門時にオススメな本や記事、ドキュメントなどもいくつか紹介しました(技術書典6で出した『3つのLisp 3つの世界』という同人誌の宣伝も)。

4: Clojureをはじめてみて発生した変化

@kbaba1001さんによるClojureを学び始めてから体験したことについてのお話でした。

Clojureを始めるきっかけとなったのは友人が読んでいた『Land of Lisp』で、その本の表紙で有名な「Lispエイリアン」のグッズを自作するまでになったとのこと。

Lisperたちの愛すべきマスコット・Lispエイリアン、可愛い(?)ですよね!

Lisp alien

技術書典5『Clojure製Webフレームワーク Duct入門』というClojureのマイクロフレームワークDuctについての入門的な同人誌を書かれ、開発にClojureを利用していることで知られるCircleCI社の求人に応募されるなど、興味深い体験談が聞けました。

Clojure、始める以外の選択肢はないですね!(?)

5: Scalaで始める競技プログラミング

Hayato_KokubuさんによるScalaでの競技プログラミング入門的なLTでした。

ちなみにScalaはClojureと同じくJVMで動作する関数型言語ですが、Clojureとは異なりオブジェクト指向プログラミングと関数型プログラミングの両方のアプローチを統合するように設計された言語ですね(今では知名度も高いと思いますが念のため)。

競技プログラミングが初めてという方向けに、AtCoder Beginner Contest 121の実際の問題に対するScalaでの取り組み方の一例が丁寧に解説されていました。

発表でのアルゴリズム名の誤りに、会場内の強い方々がざわつく場面も😅

6: ScalaエンジニアがElmで初めてのフロントエンド入門

@mattsu6666さんによるScalaと対比しながらElmを紹介する発表でした。

ElmはOCamlなどのML系言語やHaskellの影響を受けた純粋関数型言語で、JavaScriptにコンパイルされるAltJSでもあります。

強力な型システムによりコンパイル時に様々な問題が検出されるため「実行時エラーが一切発生しない言語」と形容されるようです。

Scalaも設計にML系言語の影響が見られるようですが、ScalaとElmを対比するというのは結構珍しい印象があります。

カリー化(currying)は常識」な方も来場者には多かったかもしれません😅

7: elmで実践的に始める関数型プログラミング

当初登壇を予定されていた@ababupdownbaさんに代わり、@dyoshimitsuさんによるElmの布教とプロダクト導入の過程についてのお話でした。

あくまで代役としての登壇なので質問もマサカリも@ababupdownbaさんへとのこと😅

Elmを始めてみての同僚の声は極めて率直なものだったようですが、なぜか絶妙な胡散臭さがありましたね😅

8: GHCJS Miso による Haskell + Firebase 10 分間クッキング

@y_taka_23 (a.k.a. チェシャ猫)さんによるGHCJSフレームワークMisoでのフロントエンド開発についての発表でした。

チェシャ猫さんといえば猫耳ですね😅

GHCJSはHaskellからJavaScriptへのコンパイラです(ちなみにGHC (Glasgow Haskell Compiler)はHaskellのデファクトスタンダードなコンパイラ)。

Misoは(少し以前の)The Elm Architecture (TEA)をGHCJSで実現したものということができるようです。

Misoという名前はフロントエンドとサーバサイドを同一の言語で開発するという意味での"isomorphic"に掛けているようですが、ロゴは味噌ラーメン(?)の絵文字🍜でしょうか。

LTの途中からHaskell/GHCJSによるフロントエンド開発のライブコーディングが始まり、かなり貴重な場となりました🉐

まとめ

Fun Fun Functional初のイベントは発表のレベルが全体的にやや高めで、「初心者向け」とは何だったのかと心配になるところも多少ありましたが、関数型言語経験に幅のある多くの来場者の方々に楽しんでいただけたようです。

入門的/基本的な話題から時には高度な話題まで気軽に遠慮なく発表していただけるように、今後は登壇者の方にあらかじめ聞き手の想定レベル(初級・中級・上級など)を明示していただくことを検討しています。

次は7月下旬頃の開催を予定していますので、今回のイベントに参加された方はもちろん、この記事で初めて存在を知ったという方も、次回の参加/登壇をお待ちしています。

関数型言語初心者から熟練者まで言語を超えて楽しめる関数型プログラミングコミュニティを一緒に作りましょう!


Opt Technologiesでは、エンジニアを随時募集しています(Scala, Clojureなどの関数型言語を活用してプロダクトを開発したいという方も大歓迎です!)。エントリーはこちらから。