Clojure 夜会 第一回の参加メモ

第一回Clojure 夜会(Evening Party)に参加したのでそのメモ。

私のClojureに関するスペックは以下。

  • Clojure関連のイベントに参加したのは初めて。
  • Clojureには興味はあるけどアプリ開発とかをしたことがあるわけではない。
  • 仕事で使ったことのあるStormというフレームワークのコアがClojureで書かれていたので興味を持った。
  • よく使っている構成管理ツールのPuppetの開発母体であるPuppet LabsがClojureを開発言語にしているので興味を持った。
  • Clojure in Actionを一通り読んだ。

    • なお、この本は0からClojureを学ぶにはなかなか良い本だったように思う。英語はちょっとつらかったけど。
    • 第一版がPDFダウンロードできるっぽい。
  • インフラ中心の仕事が多かったのでアプリ開発自体にあまり詳しくない。JSとかもあまり書いたこと無い。

以下、発表のメモです。

Clojure入門

[発表資料]は公開されていないみたい。

  • 話者は(株)にゃんぱすの登尾さん。Tokyo.cljを主催されている方。
  • baasdayというサービスをやっている。

    • AWSを利用
    • 会員数10万強のサービスでも使われている?

よく聞くClojureの誤解

誤解その1: Lispでしょ。括弧多すぎ。

  • () リスト, [] ベクタ, {} マップ, #{} セット で見れるから普通のLispより見やすい。
  • 括弧多いのは慣れる。

結局、Clojureのコードをエンジニアに見せたら括弧多いと言われたらしく括弧はやや多めなのはまあ仕方ないぽい。

誤解その2: フルスタックなやつなさそう

  • Luminus

    • ウェブアプリケーションフレームワーク
    • (後の発表でもこれを使って数時間程度でシステム作った的な話があった。)

Twitter上では、「シンプルなパーツを組み合わせて簡単にフレームワーク的なコードが書けるから逆に無い」みたいな話も出ていた。

誤解その3: 日本語情報少なすぎ

  • 6冊もある。十分じゃないですか。
  • 英語情報は豊富。

Clojureをはじめるにはどうしたらいいか

  • Leiningen
  • Light Table
  • Emacsならcider

ほか、東京近郊で何かをしようとされているとのこと。

2日ガチ開発合宿で作ったWebアプリケーション2選

発表資料

  • 話者は株式会社テンクー(Xcoo)の青木さんと竹内さん。

  • Clojure Cupという48時間 Webアプリケーション開発コンテストがある。 以下の二つのアプリを作った。

    1. news.async
    2. AstroCats

Clojure Cupの紹介

  • 今年で2回目
  • 48時間でWebアプリケーションを1つ作る
  • 1チーム4人
  • 9/27 0:00 UTC ~ 9/28 24:00 UTCで実施。

news.async

  • 世の中のnewsを自動的に音声合成して流す。
  • the guardian というところからとって実装 text to speach というライブラリがあるらしい。
  • core.asyncがgoライクに使えて便利

Clojureの苦労した点

  • Google Cosure compilerがかってに変数名を変えてJS化するので外部ライブラリを使う場合に問題があった。
  • extern というものを使う必要があった。

AstroCats

  • 猫アクションゲーム
  • WebSocket, compojure/ring

Clojureでよかった点

  • STM (dosync/ref/atom)

    • スレッドセーフな実装が短くかける。
  • REPLでゲームロジックをデバッグ

  • 描画周りの実装がない状態でデバッグ可能。
  • 小さく作って、小さくテスト

(JavaとUTとかと比べて何がうれしい?REPLだとインタラクティブにテストができるか ら?)

Clojureで苦労した点

  • WebSocketのいいライブラリがない。
  • ClojureScriptのREPLが無い。

  • Clojureはプロトタイピングも早い。

  • ライブラリも多いし、JavaJavaScriptから持ってこれる。
  • core.asyncは便利
  • ClojureScriptの開発環境はまだいまいち

Clojureでエクセルスクショをとる

発表資料

  • 話者はKawasimaさん。

  • 世界にエクセルスクショを取るという仕事をしているSIerは3000万人くらいいる。 (らしい)

  • teslogger

    • エクセルスクショを取るための別窓をIE,firefox,chrome向けに立ち上げられる。
    • 長い縦長なスクロールも一枚絵で取れる。

DBのスクショを取る

  • teslogger-db-inspection

    • DBの差分を可視化してスクショを取れる。
    • OracleのDBの変更検知を使ってスクショが起動する。

      • Oracle側の設定変更を伴う状態でテストとして認めてくれない顧客いそう。
    • WebSocketを使っている。

    • html2canvas.jsでスクショ化
  • ulon-colon

    • websocketのラッパ?
    • 異なるプロセス間の通信を楽にするライブラリ。
  • OmというClojureScriptの便利なライブラリがある。

    • Facebookのreact.jsのラッパらしい。

スクショを集める

  • 改ざんの余地を与えずに集める。
  • テストケースごとにエビデンスギャラリーを作る。

スクショに注釈をつける

  • ブラウザ上でそのまま注釈をつけられるようになる。(鋭意開発中)

スクショをエクセルにはる。

  • エクセル方眼紙につけるのがマナー
  • マス目にぴったりのエクセルスクショを出力できる。
  • axebomber-cljは環境定義書とかの自動化にめちゃくちゃ使えそう!

LT1 (タイトル見逃しました)

発表資料の公開はされていないみたい。

  • ログからのアクセスを抽出して攻撃検知とメール通知
  • Luminusだと数十分~数時間で実行可能jarが作れる。慣れてきたら。
  • Selmer, compojure lib-nor ring-server Korma を利用。
  • Intellij + La Clojure で開発。
  • 苦労したところ

    • 立ち上がりに時間がかかる。Java8 -> Scala -> Clojureに触ると楽。
    • Javaと同じ速度にチューニングするのが結構大変。
  • リクルートテクノロジーの人だったみたい。

  • 会社でClojureいきなり使わせてもらえた。

SIer的な具体的なアプリケーション開発の事例で非常に良かった。 途中に出てきたメールをリストから送るコード美しかった。

LT2 女子力のあるsyobochimがClojureはじめてみた

発表資料

  • ショボチムさん
  • Clojure暦3週間
  • 顔文字を関数名にしたらかわいい
  • マルコフ連鎖でそれっぽい文章をつくれるbotclojureで作った
  • Clojureアイドルが誕生した瞬間」by 登尾

女子力ネタはとても面白かったがgithubを見たらコード量もそれなりだったのでclojureの印象とかを深堀して聞いてみたかったかも。

LT3

  • 話者はねこはるさんという方らしい。

  • 3つのライブラリの紹介。

    • unapply: パターンマッチライブラリ
    • cont: 限定継続。 DSLの作成に向いている。
    • clog: 作りたてほやほや。

難しくてよくわからなかったけどすごそうだった。 パターンマッチとか言語の標準仕様のように追加できるマクロ機能は強力。

LT4 REPLライフをもっと快適に

発表資料

  • 話者はえいとす@athos0220さんという方
  • 裏でファイルを書き換えながらリロードしてテストとかしてるとうまくいかずに困ることがある。
  • leiningenのREPLは起動が遅い。
  • リロードがうまく動かない。

    • プロトコルやマルティメソッド、マクロに対する変更が正しく反映されない。
    • 名前空間のロード順の制約がうまくいかないことがある。
    • 通信コネクションの切断・接続やスレッドの停止開始が正しく実行されない。
  • 大事な3ステップ

    • tools.namespaceを使おう。

      • (require .. :reload)の強化版
      • ライブラリのリロード時に前回ロードした変なライブラリとかをオフロードする
    • user.clj

      • tools.namespaceがリロード時に消しちゃうREPLで定義した名前をリセットしちゃう。
      • user.cljに書いておくと自動的に再読み込みするので楽。
      • leiningenの profile :devを使うと開発環境でしか読まないとかできる。
  • コンポーネント単位でシステムを作ろう

    • Componentライブラリ
    • トップスコープに名前を作るとREPLのリロード時にぶっ壊れるのでComponentに入れる。

LT5 CodinGameチュートリアルをライブ

  • 話者は tnoda_ さん。

  • CodinGameとはオンラインジャッジ

  • HackerRank CodinGame 4clojureはClojureでかけるよ

  • whileとかclojureで使ったら負け。そこはスレッディングマクロでしょ。

  • MBA12incが欲しい。

LT6 JavaOneでリッチヒッキーの話を聞いてきた

  • 話者はリクルートテクノロジーの方。名前はメモれず..。
  • リッチヒッキー苦労人。エンタープライズもやっていた。
  • Javaがクラス毎に専用の操作用メソッド用意するのやめて欲しい。
  • データのカプセル化のやりすぎは紐で人形を操作するようなわずらわしさ。シンプルが良い。(このストーリー展開はhadoop conference japan 2013 winterのTreasure Dataのスイスアーミーナイフとナタの対比を思い出した。)
  • 近々リッチヒッキーを呼べるかも!

懇親会

  • おしゃれなポップコーンを私費提供していた人がいた!(東京駅で1時間待ちのポップコーンらしい。)
  • Webアプリなどのフロントエンド側を作っている人が多かった印象。
  • rubyistが海外ではclojureに流れるパターンが多いらしい。

    • だが、日本では赤い言語に流れる人が多いらしい。
  • インフラ屋さんは少なそうだった。

  • はじめてのClojure即売会で著者の登尾さんにサインをもらえた。

はじめてのClojure (I・O BOOKS)

はじめてのClojure (I・O BOOKS)

  • 話者の方々と色々と話せて楽しかった。

色々と抜けや間違い多いと思いますので何かあればご指摘ください。

会場提供されていたリクルートテクノロジー様、運営者の皆様ありがとうございました。