【公開版】Clojureでandroid開発@geekbar

11

Click here to load reader

description

2012/10/22 名古屋Geekbarで発表したスライドを、公開用に修正したものです。

Transcript of 【公開版】Clojureでandroid開発@geekbar

Page 1: 【公開版】Clojureでandroid開発@geekbar

clojureでAndroid

@Geekbar

2012/10/22(2012/10/26 公開用に修正)

櫻井 雄大(@Y_Sakurai)

Page 2: 【公開版】Clojureでandroid開発@geekbar

なんでまたclojure?

Android開発やることになった

↓Javaは面倒だ

↓最近、関数型というのがトレンドらしい

↓せっかくだから、俺は新しい言語を学ぶぜ!

↓Androidで動く関数型言語はいねぇがー!

↓せいかい:clojure

Page 3: 【公開版】Clojureでandroid開発@geekbar

そもそもclojureてなんやねん

(以下、大体書籍のパクリ引用および勝手な解釈)

・Lisp リローデッド

(ほぼLisp。数ある方言の一つぐらいのノリ)

・関数型だけど若干ゆるふわ

(ある程度手続きを踏めば、副作用を許す)

・JVMで動く

・末尾再帰などの最適化は苦手

(スタックオーバーフローとかあるので、再帰は慎重に)

・オンメモリトランザクションとか並行処理的なアレ

・Javaを許容する

(必要があれば、いつでもJavaのクラス/オブジェクトに"容易に"アクセスできる)

・REPL(Read-Eval-Print-Loop)が便利

その場で書いて即実行!

Page 4: 【公開版】Clojureでandroid開発@geekbar

clojure on Android 情報

~2008年ごろ?

android-swank-clojureのスライドがTakumi KINJO氏により公開される

http://kinjo.github.com/ojag-clojure/#slide1githubにコードが公開され、動作事例やemacsでの開発環境構築手順がWeb上に出回る

~2010年ごろ

なんかgithubのandroid-swank-clojureリポジトリが消される。他の情報も途絶える

~2011年から現在

ひっそりとclojure用フレームワークなどが現れる(後述)

誰も気づいてないっぽいがどうなのか

Page 5: 【公開版】Clojureでandroid開発@geekbar

leiningen

leiningen - clojureプロジェクト管理ツールhttps://github.com/technomancy/leiningen#readme

Javaな人は、

「AntとMavenと他色々便利なものがセットになったよ的なもの」ぐらいの認識でおkbashスクリプトをwgetして実行するだけで簡単導入!clojureそのものもインストールしてくれるので、とってもお手軽

Page 6: 【公開版】Clojureでandroid開発@geekbar

neko

https://github.com/alexander-yakushev/neko

androidアプリをclojureで開発するために便利なフレームワーク

ベースはsattvikさん、今はalexander-yakushevさんのforkが開発進行中

Page 7: 【公開版】Clojureでandroid開発@geekbar

lein-droid

https://github.com/alexander-yakushev/lein-droid

leiningenのプラグイン的なもの

プロジェクトの作成、ビルド、インストール、REPLの起動まで一手に担う頑張り屋

debugビルドで、自動的にREPLサーバをアプリに組み込む→REPLで直接起動中のアプリをいじれる!

Page 8: 【公開版】Clojureでandroid開発@geekbar

実際に試してみた

実際に接続してUIを直接書き換える例:#--- サンプルプロジェクトの作成(neko-sampleディレクトリにパッケージ名com.example.nekosampleでプロジェクトを作成)

$ lein new neko-sample com.example.nekosample

#--- ビルド,apk作成,インストール,実行,localhost:9999を接続済実機orエミュ:9999にフォワード

$ cd neko-sample && lein do droid build, droid apk, droid deploy

#--- アプリが立ち上がったら、replを接続先指定して接続

$ lein repl :connect localhost:9999(起動メッセージ省略)user=> (ns com.example.nekosample.main (:use [neko.activity] [neko.threading] [neko.ui] [neko.application] [neko.find-view]))

com.example.sampleapp.main=> (on-ui (set-content-view! a (make-ui [:linear-layout {} [:text-view {:text "Hello from REPL!"}]]))) ; ビューを新規作成して置換する

Page 9: 【公開版】Clojureでandroid開発@geekbar

clojureでのAndroid開発雑感

・replが使えるなんといっても、repl(Read-Eval-Print-Loop)が凶悪に便利。

エミュ/実機上でコード書いてEval>動作確認取ってからプログラムファイルに書き出す、という流れが素晴らしい。新時代の開発フローの幕開けや!

・leiningenが使えるclojureのプロジェクト管理ツールのleiningenが良い。

jarライブラリの依存関係もproject.cljに1行追記するだけ。

・記述量が少ない延々と身のないimplementsを書く苦痛から開放される。関数型言語+コンパイラ性能のおかげでウッカリミスもかなり少ない。

Page 10: 【公開版】Clojureでandroid開発@geekbar

clojureでのAndroid開発雑感

・Lisp文法のとっつきにくさ実際学習してみるとそれほど難しくないのだが、知らない人にとっては暗号レベル。LISPを使ったことある人なら話は別。

・アプリのブートが遅い軽く2~30秒ぐらいかかる。回避策というか、通常のJavaで起動画面を出すことで、ユーザの不安を解消するのは必要だと思う。

・ノウハウがないclojureがいつのまにか1.4.0で、既存の日本語文献にあるような解説はアテにならない。contrib消えてるし...

今のところ唯一のclojure用Androidフレームワークであるnekoも、若いしコミュニティも小さく、ドキュメントもAPIレベルでの記載しかない。「使い方知りたかったらソース見ろや」という漢らしいスタイル。日本語文献とかほぼ0。ちょっと怖い。

Page 11: 【公開版】Clojureでandroid開発@geekbar

see also...

● clojarshttps://clojars.org/https://github.com/ato/clojars-webclojure向けライブラリが登録されているリポジトリ。サイトそのものがclojureで記述されており、ソースコードも公開されているので、clojureでWebアプリ開発をしたい人にもオススメ。

ちなみに、leiningenを使ってclojarsにオレオレライブラリを簡単に公開できるよ!こんな感じ↓

https://clojars.org/show-reflect

● プログラミングclojurehttp://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0Clojure-Stuart-Halloway/dp/4274067890/ref=sr_1_1?ie=UTF8&qid=1351190794&sr=8-1現状、(多分)唯一のclojure日本語書籍。内容はver1.1あたりがベースなので、一部のコードは(contribライブラリ移転等の影響で)動作しない。その辺も含めて、勉強がてら自分で試行錯誤してみると楽しい。ちなみにcontribの詳細は以下参照のこと。

http://dev.clojure.org/display/design/Where+Did+Clojure.Contrib+Go