【公開版】Clojureでandroid開発@geekbar
Click here to load reader
-
Upload
yuta-sakurai -
Category
Technology
-
view
2.137 -
download
2
description
Transcript of 【公開版】Clojureでandroid開発@geekbar
clojureでAndroid
@Geekbar
2012/10/22(2012/10/26 公開用に修正)
櫻井 雄大(@Y_Sakurai)
なんでまたclojure?
Android開発やることになった
↓Javaは面倒だ
↓最近、関数型というのがトレンドらしい
↓せっかくだから、俺は新しい言語を学ぶぜ!
↓Androidで動く関数型言語はいねぇがー!
↓せいかい:clojure
そもそもclojureてなんやねん
(以下、大体書籍のパクリ引用および勝手な解釈)
・Lisp リローデッド
(ほぼLisp。数ある方言の一つぐらいのノリ)
・関数型だけど若干ゆるふわ
(ある程度手続きを踏めば、副作用を許す)
・JVMで動く
・末尾再帰などの最適化は苦手
(スタックオーバーフローとかあるので、再帰は慎重に)
・オンメモリトランザクションとか並行処理的なアレ
・Javaを許容する
(必要があれば、いつでもJavaのクラス/オブジェクトに"容易に"アクセスできる)
・REPL(Read-Eval-Print-Loop)が便利
その場で書いて即実行!
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用フレームワークなどが現れる(後述)
誰も気づいてないっぽいがどうなのか
leiningen
leiningen - clojureプロジェクト管理ツールhttps://github.com/technomancy/leiningen#readme
Javaな人は、
「AntとMavenと他色々便利なものがセットになったよ的なもの」ぐらいの認識でおkbashスクリプトをwgetして実行するだけで簡単導入!clojureそのものもインストールしてくれるので、とってもお手軽
neko
https://github.com/alexander-yakushev/neko
androidアプリをclojureで開発するために便利なフレームワーク
ベースはsattvikさん、今はalexander-yakushevさんのforkが開発進行中
lein-droid
https://github.com/alexander-yakushev/lein-droid
leiningenのプラグイン的なもの
プロジェクトの作成、ビルド、インストール、REPLの起動まで一手に担う頑張り屋
debugビルドで、自動的にREPLサーバをアプリに組み込む→REPLで直接起動中のアプリをいじれる!
実際に試してみた
実際に接続して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!"}]]))) ; ビューを新規作成して置換する
clojureでのAndroid開発雑感
・replが使えるなんといっても、repl(Read-Eval-Print-Loop)が凶悪に便利。
エミュ/実機上でコード書いてEval>動作確認取ってからプログラムファイルに書き出す、という流れが素晴らしい。新時代の開発フローの幕開けや!
・leiningenが使えるclojureのプロジェクト管理ツールのleiningenが良い。
jarライブラリの依存関係もproject.cljに1行追記するだけ。
・記述量が少ない延々と身のないimplementsを書く苦痛から開放される。関数型言語+コンパイラ性能のおかげでウッカリミスもかなり少ない。
clojureでのAndroid開発雑感
・Lisp文法のとっつきにくさ実際学習してみるとそれほど難しくないのだが、知らない人にとっては暗号レベル。LISPを使ったことある人なら話は別。
・アプリのブートが遅い軽く2~30秒ぐらいかかる。回避策というか、通常のJavaで起動画面を出すことで、ユーザの不安を解消するのは必要だと思う。
・ノウハウがないclojureがいつのまにか1.4.0で、既存の日本語文献にあるような解説はアテにならない。contrib消えてるし...
今のところ唯一のclojure用Androidフレームワークであるnekoも、若いしコミュニティも小さく、ドキュメントもAPIレベルでの記載しかない。「使い方知りたかったらソース見ろや」という漢らしいスタイル。日本語文献とかほぼ0。ちょっと怖い。
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