Clojure Workshop in Tokyo

../../../_images/DSC00712.JPG

@kawasima さんのセッション「キメる Clojure 」中の様子 @サイボウズ株式会社様の BAR

2015/12/12(Sat) Clojure ワークショップを開催しました!!たぶんこんな規模で初心者を主なターゲットにした Clojure のイベントは日本では初めてだと思います。

【参加者募集】 Clojure ワークショップ(仮)

Clojure ワークショップでした! / togetter

この記事では企画から開催までの苦労話と開催してみて感じたことなどを書きました。

企画するまでの経緯

何故、今 Clojure のワークショップだったのか

いきなり海外の話をしますが、海外では Clojure/conj に代表されるように多くのカンファレンスが開催されたり、本が数多く出版されるなどアメリカやヨーロッパ圏で Clojure はかなりホットな言語になっています。他方、日本はといえば以前にも言及したように 2010,2011 年以降あまり盛り上がっているようには見えない状況が続いています。 とはいえ僕自身は Clojure を書く仕事をしているし、現状英語の技術書を読む少しの苦労を除けば何不自由なく Clojure を書けているので、日本のコミュニティが今ひとつ盛り上がっていないというのは実は僕にとって深刻な問題ではなかったりします。 しかし、今年の 6 月頃 Clojurians の日本チャンネルで @athos0220 さんと @fhanreich さんのしていた会話を見たとき、僕の中で「日本の Clojure コミュニティをそういうコミュニティにしたい」という気持ちが生まれました。 どういうことかというと海外の人たちはブログで Clojure の良さを挙げるときに、「コミュニティのよさ」をあげているのですね。それを @athos0220 さんは羨ましいと言っていたわけですが、僕も確かにそういう良いコミュニティがあればいいなと思いました。 また海外では女性やトランスを始めとする色々なマイノリティをコミュニティに取り込むために色々と努力をされているそうで、マイノリティな方のカンファレンスへの参加も増えているとのこと(例えば ClojureBridge や Opportunity Grant プログラム、 CoC など)。そういった背景があり僕の中にそういうコミュニティを日本でも作りたいなって思うようになりました。

話は少し飛んで、夏頃になると僕もまぁそれなりに Clojure を書けるようになってきていて、 Web アプリを書くくらいは出来るようになってきていたし、ライブラリのコードを読んだりすることも出来る程度には Clojure が書けるようになっていました。この頃、幾つかの勉強会で LT をするようになっていたんですが、 Clojure をもっと広めたり(コミュニティを大きく)するためには、もっと初心者を引き上げるようなワークショップなどが必要なんじゃないかと思うようになってきました。 そんなときに @tnoda_ さんがこんなことを呟いてました。

これに @kara_d さんや

@athos0220 さんが反応していました。

それら一連の流れを見て関東(東京)でやるなら少なくともふたりに手伝ってもらえるだろうから案外いけるんじゃないかなと思った僕は次のように血迷ったことを呟いてました。

僕としても日本に上に述べたようなコミュニティを作って行きたかったし、ワークショップをやったりすればもう少し Clojure やる人が増えるんじゃないかなって思ったので渡りに舟というかいい機会だと思ったのですが、まぁこの発言をしたせいでまさか自分が主催をやることになるなんて思ってはなかったですよね。

こういった背景やきっかけがあり、 2015/12/12(Sat) の Clojure ワークショップを開催しようということになりました。

企画して開催するまで

開催する宣言と協力者集め

これをやらないと話にならないので血迷った発言をした数日後 8/29 には clojure-ja のメーリングリストや Slack の日本チャンネルに企画に協力してくれる方を募集している旨を投げていました。

これで数名の協力者を得る事が出来ました(ワークショップやりたいですね、と話していた @tnoda_ さん、 @kara_d さん、 @athos0220 さんは半ば強制的に巻き込みましたが快く手伝って頂けたので大変助かりました)。 また、企画に関する話は主として Gitter を使って行っていました。一度だけどうしても集まらないと話がまとまらなそうだったので、そのときだけ集まりましたがそれ以外は基本的に Gitter と GitHub を使って企画を進めていきました。

行動規範を掲げた

これはどうしても入れておきたかったものです。最初に書いたように色々なマイノリティを受け入れていく土壌を持ったコミュニティにしたいという気持ちがあったので、これは掲げておくべきだろうと思いました。 過去にハラスメント発言などで問題になったコミュニティがあったのを知っていたというのもありますが、海外の Clojure に関するカンファレンスでもしっかりとアンチハラスメントポリシーを掲げているのでそれに倣って、出来る限り参加する全ての人が嫌な想いをしないコミュニティにしたいという僕の想いでした。

会場決め

会場に関しては弊社の CTO に相談したら [1] サイボウズ株式会社様の新しいオフィスが使えるかもしれないというので CTO に頼んで調整してもらいました。

[1]そういえばワークショップ当日は弊社 CTO も楽しみにしていたのですが、残念ながら体調不良により来ること出来ませんでした。

色んなイベントとどうしても日程が被る

当初、ワークショップを 11 月に行おうと考えていました。ですが、 11 月の始めは東京 Node 学園祭があったり、 11 月終わりの方も JJUG CCC Fall があったりして開催するのが躊躇われました。 結局 12 月にするしかなく調整したのですが、それでも結局 RubyKaigi や DevLOVE と被ってしまいました。 本当は色んな言語の人に参加してもらいたかったので、どの言語の大きなイベントとも被らないようにしたかったのですがやっぱりこの時期に開催しようとするとどうしても何かしらと被ってしまうなぁと実感しました( RubyKaigi の方は多分早くからアナウンスしてたと思うんですけど、完全に失念してしまっていました)。

何を参加者に提供したかったのか

僕自身 Clojure 歴が浅く、始めたばかりの頃は色んなところでハマった経験をまだ鮮明に思い出せるので、僕が始めたばかりの頃にあったら良かったのにというような内容を提供したいという考えが僕の中にはありました。 なのでやっぱり中心となったのは REPL 駆動開発的な色々や Web アプリを開発する方法でした。

Clojure で開発をするときに必須なのはやはり REPL です。 例えば Web アプリケーション開発では REPL の中でサーバーを起動/停止したり、開発用 DB のマイグレーションを行ったり、色々なことに普段から使います(使うことが出来る/選択肢として REPL からというのがある)。 ですが、これに関して言及している日本語記事は少なく、ほとんどが ring-server プラグインを使って開発するというあまり面白くはないものでした(僕が実際に開発を始める前何も知らなかった頃、色々なことを真に受けて ring-server プラグインでいちいち再起動したりしないとコードが読み込まれないことがあったりと結構ストレスだったのを覚えています :user プロファイルに cider-nrepl を入れると起動が遅くなるのは周知の事実ですが、そんな状態で ring-server プラグインで再起動したりすると Rails の方がマシではという気持ちがとても強くなります)。 なので僕としては REPL の良さや使い方を伝えるというのは絶対に外したくありませんでした。

ちなみにワークショップのモデルとして最初参考にしようと思ったのは、 TDDBC や RailsGirls でした。ですが、最終的にはあまりそのへんを意識しないというか踏襲しないようにしました。理由は幾つかあったのですが、 Clojure などの関数型言語に興味があるけどハードルが高くて自力で学習することが出来ないというような人に、開発環境の構築の手伝いをしたり使い方を教えてあとは自由に手を動かしてもらうという方向性の方がいいのではないかという結論になったので、じゃあそこに今回のワークショップの重きを置こうと考えました。

資料作るのは大変

一番苦労したのはここかもしれないです。今回方向性として単純に「 Web アプリを開発出来るようにする」というのがゴールではなかったので、じゃあ自由に手を動かしてもらうときの参考になるドキュメントがあったほうがいいよね、という話になってそういうドキュメントを用意することになりました。また参加者全員を初心者として一緒くたに扱うのではなく、参加者のレベルに合わせたものを用意したいということになったのでそれぞれの参加者に向けたドキュメントを書いたり、雛形アプリの開発をすることになりました。

最終的に TODO の Web アプリとハノイの塔とぷよぷよの連鎖部分を実装したものを雛形として用意し、 0 から作りたくはないけど既に動く Clojure のコードを触ってそれを拡張したりしてみたいという人たちにはそれを触ってもらうことにして、チートシートとして簡単な Clojure の色々を説明したドキュメントを書いて用意しました。

チートシートに関して当初は ClojureBridge のドキュメントを翻訳したらいいんじゃないかなんて思っていたんですが、想定読者がプログラミング未経験者であったり、書かれていないところも多くあまり参考にならなかったのでほとんどの項目がオリジナルです。このへんは直前まで追加したりして協力してくれた人たちにはご迷惑をおかけしました。

参加者が集まらない不安

一時期は 40 名の募集に対して 20 名くらいの登録しかなかったので、これ 20 人しかこなかったら寂しいよなぁと思っていました。色々と JJUG で LT したりと普段やらないような露出の仕方をして頑張ってみたんですが、なかなか思うように増えなくてどうしたらいいのか悩んでいたのはいい思い出です(最終的には開催する週で一気に増えたんですが、それまでが長かったです)。

開催してみて

../../../_images/P_20151212_191255.jpg

ドクターペッパーの似合うペンギン店長

幾つかの課題は残ったものの最高のワークショップでした

開催前日までに最終的なワークショップの登録者が 39 名となっていたものの、東京の勉強会ドタキャン率を鑑みれば最悪 20 名程しか来ないのではという不安が開催直前まで拭いきれませんでした。ですが、開催時刻になると席がほとんど埋まっていたので本当に嬉しかったです。

朝早くから TA として登録された方達も集まってくれ、どうしてもやりたかった始める前のお互いの自己紹介なども出来ていいスタートが出来たのかなと。 @kawasima さんのセッションも好評でやっぱり実際のコード例が出てくるとうんうんと頷ける内容が多く Clojure を知っている人でも楽しめる内容だったと思います。

午後からのワークショップでは思いの外初心者が多く、急遽 FizzBuzz の例を実際に前の方で実演しながら参加者の人にも手を動かしてもらうようにしたりしました(入れててよかった IntelliJ IDEA )。またワークショップ中色んな人が積極的に TA を捕まえて質問している風景が見られたので良かったなと。

懇親会では皆さん盛り上がっていたようですし、誰とも話してないよという人はいなかったように見えるので良かったかなと思います。僕も全員とゆっくり話すことは出来なかったのですが、色々と声をかけて頂いたり色んな話が出来てよかったなと思っています。

帰りながら Twitter 見てると「参加して良かった」という声も幾つか見られて、開催して良かったなと思いました。勿論、面白くなかったとかもうちょっとココをこうして欲しかったとか色々な不満を抱えて帰った方もいたとは思うんですが、次回はそういう点を改善してまた開催することが出来たらいいなと思っています。

なんか色々とやってきてこの数カ月凄い長かったのにやってみると実際には本当に一瞬で終わってしまうし、こうやって感想書いててもこんなに何もなかったけという気持ちになりますね。

残った課題

全体的に楽しかったし最高だったと思ってはいますが、やっぱり幾つか反省すべき点や改善出来る点があったので次回以降の課題として以下に書いておきます。

会場の事前確認不足

完全に僕のミスなんですが、よく考えたら電源と延長コードがあるかなどの事前確認をしていなかったので、ちょっと参加者の人数の割に電源が全然足らないという自体になってしまいました。急いで幾つか延長コードをサイボウズの方に探してきてもらったりしました(それでも多少足りなかったと思う)。

もう少し FizzBuzz の実演で丁寧な説明が出来れば良かった

急遽やることにしたので準備不足も勿論あり、 Cursive で説明しているので LightTable ユーザーなどを置いていってしまったかもしれないというのと、いきなり REPL に接続するという話から入ったのは良くなかったかもしれないなと思いました。 Clojure のコード説明についてもやっぱりもうちょっと綺麗に説明したかったなと(あとで Twitter 見て @athos0220 さんの呟きを見て反省した…)。

4Clojure や Clojure Koans のやり方を前で説明してもよかったのでは…

FizzBuzz の実演も急遽やったので、尻切れトンボみたいになってしまって良くなかったしちゃんと誘導しないといけなかったよなと後悔。

エディタと IDE をフルサポートするの難しい

当たり前ですが、厳しいですね。せめて Cursive と LightTable くらいは僕がちゃんとカバーして臨むべきでした。

流石に用意しておいた雛形アプリにバグあったのは良くなかった

もうちょっと確認すればよかったと反省中。

最後に

../../../_images/P_20151212_191313.jpg

クリスマス仕様の公園とキリンさん

ワークショップのために用意した資料など

今回のワークショップで使った諸々は公開しています。

japan-clojurians/curriculum

もう少し使い勝手のいいように修正を加えていったりドキュメントを綺麗に整備していくつもりです。今回のようなワークショップをやる場合に活用して頂けると嬉しいです。また今回のようにワークショップをやりたいとか、こういうワークショップあったら参加したいとかそういう話があれば声をかけて頂けると僕に出来る範囲で協力させて頂きたいと思います。関西でもこういうワークショップやりたいという声があるようなので、来年あたり何処かでやれたらいいですね。

またワークショップで Clojure に興味を持った方は、以下から Clojurians の Slack に登録出来ます( japan チャンネルに日本人が沢山います)。

Join clojurians on Slack

ちなみに今回ワークショップに何かしらの都合でこれなかった方は以下の Doorkeeper で作ってあるグループのメンバーになって頂けると次回以降開催の際にメールにて通知させて頂きます :)

Japan Clojurians

それと 1 月半ばくらいに Clojure 座談会やろうと思っているのでそちらも合わせてよろしくお願いします(希望者がいれば僕が Clojure での Web アプリの作り方を 0 から説明しようと思ってます)。

Tamachi.clj

有り難うございました!

最後になりますが企画段階から関わって頂いた方、 TA として参加して頂いた方、同日に別の場所で話す予定があったにも関わらずセッションを快く引き受けてくれた @kawasima さん、休日にも関わらずお手伝いしていただいたサイボウズの方、それに懇親会の裏方をしてくれた弊社スタッフ、なにより参加してくれた沢山の方がいてくれたお陰で無事に開催して終えることができました、本当に有り難うございました m(__)m

また次回何か開催したりするときは手伝っていただくことになると思いますがよろしくお願いします!