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のベーグルも提供しました。
オプト本社にて関数型言語 Lightning Talks 開場しました。ベーグル🥯をデプロイしてお待ちしています!#FunFunFunctional pic.twitter.com/8NK5Q8nwrt
— オプトテクノロジーズ (@OptTechnologies) May 27, 2019
以下では8名のご登壇者によるLTを簡単にご紹介しましょう。
LT
1: BuckleScript - OCamlで作るフロントエンド
@cedretaberさんによるBuckleScriptについての概要紹介でした。
BuckleScriptはOCamlからJavaScriptへのコンパイラです。
OCamlの強力な言語機能とエコシステムを活かしつつJavaScriptとの相互運用性もよく考慮されているようで、OCaml使いには特にフロントエンド開発で魅力的なAltJSかもしれません。
発表の中では静的型付けの関数型言語の文脈で登場するGADT (generalized algebraic data type; 一般化代数的データ型)という発展的な専門用語も飛び出し、会場内にざわつきも見られました😅
初心者向け…だと…? #funfunfunctional
— チェシャ猫 (@y_taka_23) May 27, 2019
GADT特に説明なく行くのに初心者向けとは...?? #FunFunFunctional
— ころ (@koropicot) May 27, 2019
「みなさんGADT使ったことあると思うんですけど」
— てくのたのしー (@techno_tanoC) May 27, 2019
早速初心者を倒しにかかってる
#FunFunFunctional
2: PlayFrameworkでFuture[Either[A,B]]どうするのか問題
@SatooooooooooooさんによるScalaについての実践的な話題のLTでした。
非同期処理の Future
と2種類の型をとりうる Either
とが組み合わさった Future[Either[A, B]]
のような、ネストしたモナディックな型(cf. モナド(monad))をどのように扱うか、というScalaやHaskellなどの言語では定番の問題です。
一般的にはモナドトランスフォーマー(monad transformer; モナド変換子)というものを利用できる局面で、今回の例ではScalazやCatsといった純粋関数型プログラミングを支援するライブラリが提供しているモナドトランスフォーマー EitherT
が役に立ちますね(これまた最終的には発展的な話題でした😅)。
モナドトランス(ry #FunFunFunctional
— てくのたのしー (@techno_tanoC) 2019年5月27日
モナドトランスフォーマー使えそうなシチュエーション!!
— まっつー (@mattsu6666) 2019年5月27日
EitherT!!#FunFunFunctional
モナドトランスフォーマーかと思ったらモナドトランスフォーマーだった #FunFunFunctional
— ころ (@koropicot) 2019年5月27日
3: ClojurianからみたElixir
私@lagenorhynque (a.k.a. カマイルカ)はClojureとよく似ている点を中心にElixirを紹介する発表をしました。
ClojureはJava VM (JVM)、ElixirはErlang VMで動作する動的型付けの関数型言語です。
Elixirは言語設計にClojureの影響も見られ、いくつか共通した特徴を備えていますが、データ指向(data-oriented)なプログラミングスタイル、プロトコル(protocol)によるポリモーフィズム、マクロ(macro)によるメタプログラミングについて簡単に解説しました。
カマサンの発表がElixir入門とみせかけたClojure入門だった
— あやぴー (@_ayato_p) 2019年5月27日
#funfunfunctional
また、ClojureとElixirの入門時にオススメな本や記事、ドキュメントなどもいくつか紹介しました(技術書典6で出した『3つのLisp 3つの世界』という同人誌の宣伝も)。
👀 #FunFunFunctional / 3つのLisp 3つの世界 https://t.co/2TiiH7E8mB
— ザネリ (@so_zaneli) 2019年5月27日
https://t.co/bbilyeHywq
— (Kazuki Sugiyama) كازوكي (@mwtndmik) 2019年5月27日
#FunFunFunctional
4: Clojureをはじめてみて発生した変化
@kbaba1001さんによるClojureを学び始めてから体験したことについてのお話でした。
Clojureを始めるきっかけとなったのは友人が読んでいた『Land of Lisp』で、その本の表紙で有名な「Lispエイリアン」のグッズを自作するまでになったとのこと。
Lisperたちの愛すべきマスコット・Lispエイリアン、可愛い(?)ですよね!
Land of Lisp のジャケ買い…!LISPエイリアン可愛いもんね。 #FunFunFunctional
— ザネリ (@so_zaneli) 2019年5月27日
プログラミングを勉強し始めた知り合いが「Land of Lisp」を読み始めた
— (Kazuki Sugiyama) كازوكي (@mwtndmik) May 27, 2019
_人人人人人人人人人人人人人_
> 表紙がかわいかったから <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
#FunFunFunctional
技術書典5で『Clojure製Webフレームワーク Duct入門』というClojureのマイクロフレームワークDuctについての入門的な同人誌を書かれ、開発にClojureを利用していることで知られるCircleCI社の求人に応募されるなど、興味深い体験談が聞けました。
Clojureをすると就活有利! #funfunfunctional
— あやぴー (@_ayato_p) May 27, 2019
Clojure、始める以外の選択肢はないですね!(?)
5: Scalaで始める競技プログラミング
Hayato_KokubuさんによるScalaでの競技プログラミング入門的なLTでした。
ちなみにScalaはClojureと同じくJVMで動作する関数型言語ですが、Clojureとは異なりオブジェクト指向プログラミングと関数型プログラミングの両方のアプローチを統合するように設計された言語ですね(今では知名度も高いと思いますが念のため)。
競技プログラミングが初めてという方向けに、AtCoder Beginner Contest 121の実際の問題に対するScalaでの取り組み方の一例が丁寧に解説されていました。
『Scalaで始める競技プログラミング』(Hayato_Kokubu氏)
— Siena. (@n_siena) May 27, 2019
「\初心者向けのと聞いていたので……ご了承ください/
.oO(初心者向けLT会なのに初心者向けと断わりたくなる初心者のレベル……
#FunFunFunctional
初心者向けの説明がちゃんとあって素晴らしい #Scalaで競技プログラミング #FunFunFunctional
— Yoshihiro503 (@yoshihiro503) May 27, 2019
発表でのアルゴリズム名の誤りに、会場内の強い方々がざわつく場面も😅
@強い人達 #FunFunFunctional pic.twitter.com/tSnALrDr45
— てくのたのしー (@techno_tanoC) May 27, 2019
6: ScalaエンジニアがElmで初めてのフロントエンド入門
@mattsu6666さんによるScalaと対比しながらElmを紹介する発表でした。
ElmはOCamlなどのML系言語やHaskellの影響を受けた純粋関数型言語で、JavaScriptにコンパイルされるAltJSでもあります。
強力な型システムによりコンパイル時に様々な問題が検出されるため「実行時エラーが一切発生しない言語」と形容されるようです。
elmのコンパイラはママのように優しい#FunFunFunctional
— ぴくすふぁんく (@pxfnc) May 27, 2019
elmのエラーメッセージにバブみを感じる人達もいる #FunFunFunctional
— てくのたのしー (@techno_tanoC) May 27, 2019
Scalaも設計にML系言語の影響が見られるようですが、ScalaとElmを対比するというのは結構珍しい印象があります。
「カリー化(currying)は常識」な方も来場者には多かったかもしれません😅
カリー化って常識なんですかね #funfunfunctional
— d.yoshimitsu (@dyoshimitsu) May 27, 2019
「Curry 化は常識」#funfunfunctional
— チェシャ猫 (@y_taka_23) May 27, 2019
7: elmで実践的に始める関数型プログラミング
当初登壇を予定されていた@ababupdownbaさんに代わり、@dyoshimitsuさんによるElmの布教とプロダクト導入の過程についてのお話でした。
ピンチヒッターやります。
— d.yoshimitsu (@dyoshimitsu) 2019年5月27日
同僚にはメンタルがどうかしてると言われました☺️#FunFunFunctional https://t.co/WGqh8uVhQ0
あくまで代役としての登壇なので質問もマサカリも@ababupdownbaさんへとのこと😅
代打なのでマサカリもプロキシされる #FunFunFunctional
— jooohn (@jooohn1234) 2019年5月27日
Elmを始めてみての同僚の声は極めて率直なものだったようですが、なぜか絶妙な胡散臭さがありましたね😅
同僚の声www宗教味がある…#FunFunFunctional
— ババ (@kbaba1001) 2019年5月27日
同僚の声のやらせ感w #FunFunFunctional
— (Kazuki Sugiyama) كازوكي (@mwtndmik) 2019年5月27日
結構ガチンコの声を載せてます
— ABAB↑↓BA (@ababupdownba) 2019年5月27日
#FunFunFunctional
8: GHCJS Miso による Haskell + Firebase 10 分間クッキング
@y_taka_23 (a.k.a. チェシャ猫)さんによるGHCJSフレームワークMisoでのフロントエンド開発についての発表でした。
チェシャ猫さんといえば猫耳ですね😅
— わたろ (@wat_aro) 2019年5月27日
おなじみネコミミの人きた。今日はGHCJSの話 #FunFunFunctional
— Yoshihiro503 (@yoshihiro503) 2019年5月27日
GHCJSはHaskellからJavaScriptへのコンパイラです(ちなみにGHC (Glasgow Haskell Compiler)はHaskellのデファクトスタンダードなコンパイラ)。
Misoは(少し以前の)The Elm Architecture (TEA)をGHCJSで実現したものということができるようです。
Misoという名前はフロントエンドとサーバサイドを同一の言語で開発するという意味での"isomorphic"に掛けているようですが、ロゴは味噌ラーメン(?)の絵文字🍜でしょうか。
LTの途中からHaskell/GHCJSによるフロントエンド開発のライブコーディングが始まり、かなり貴重な場となりました🉐
HaskellのWebフロントエンドのライブコーディングとかいう奇跡のLT#FunFunFunctional
— ぴくすふぁんく (@pxfnc) 2019年5月27日
まとめ
Fun Fun Functional初のイベントは発表のレベルが全体的にやや高めで、「初心者向け」とは何だったのかと心配になるところも多少ありましたが、関数型言語経験に幅のある多くの来場者の方々に楽しんでいただけたようです。
入門的/基本的な話題から時には高度な話題まで気軽に遠慮なく発表していただけるように、今後は登壇者の方にあらかじめ聞き手の想定レベル(初級・中級・上級など)を明示していただくことを検討しています。
次は7月下旬頃の開催を予定していますので、今回のイベントに参加された方はもちろん、この記事で初めて存在を知ったという方も、次回の参加/登壇をお待ちしています。
関数型言語初心者から熟練者まで言語を超えて楽しめる関数型プログラミングコミュニティを一緒に作りましょう!
Opt Technologiesでは、エンジニアを随時募集しています(Scala, Clojureなどの関数型言語を活用してプロダクトを開発したいという方も大歓迎です!)。エントリーはこちらから。