【公開版】Clojureでandroid開発@geekbar
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 2,356 views

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

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

Statistics

Views

Total Views
2,356
Views on SlideShare
2,354
Embed Views
2

Actions

Likes
2
Downloads
2
Comments
0

2 Embeds 2

https://twitter.com 1
https://si0.twimg.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • 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用フレームワークなどが現れる(後述)誰も気づいてないっぽいがどうなのか
  • leiningenleiningen - clojureプロジェクト管理ツールhttps://github.com/technomancy/leiningen#readmeJavaな人は、「AntとMavenと他色々便利なものがセットになったよ的なもの」ぐらいの認識でおkbashスクリプトをwgetして実行するだけで簡単導入!clojureそのものもインストールしてくれるので、とってもお手軽
  • nekohttps://github.com/alexander-yakushev/nekoandroidアプリをclojureで開発するために便利なフレームワークベースはsattvikさん、今はalexander-yakushevさんのforkが開発進行中
  • lein-droidhttps://github.com/alexander-yakushev/lein-droidleiningenのプラグイン的なものプロジェクトの作成、ビルド、インストール、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