狠狠撸

狠狠撸Share a Scribd company logo
Light Tableで
Clojure入門
ニャンパス 登尾(@tnoborio)
http://bit.ly/hello-clojure2
やること
前回まで: http://bit.ly/hello-clojure1
Light Tableの使い方のおさらい
Ring
ウェブアプリケーション
Light Tableの使い方
Workspace Commands
Workspaceの表示
● Control + SpaceでCommands
● Commandsを出して、“Toggle workspace tree”を選択
→Workspaceが左ペインに表示
Macで、Control+Spaceが動かない場合、システム環境設
定>Spotlight
“Spotlightメニューのキーボードショートカットチェッ
ク”を外す
Light TableでREPL
Commandsから”Instarepl: Open a clojure
instarepl”
● (+ 1 2 3)
● (println “Hello”)
標準出力は、
Commands→“Console: Toggle console”
Leiningen
$ lein -version
Leiningen 2.3.4
(入ってなければ)Leiningenのインストール
前回を参考に http://bit.ly/hello-clojure1
ウェブアプリケーション
テンプレートを使ったプロジェクト作成
lein new compojure webapp
Light Tableから
1. Viewメニュー→Workspaceを表示
2. Commands→”Add folder”で
Workspaceにwebappを追加
ディレクトリ構造
● project.clj
● src/webapp/handler.clj
● resouces/public/
● test/
起動
$ cd webapp
$ lein ring server
ブラウザが立ち上がり、“Hello World”と表示
されればOK
project.clj
(defproject webapp "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:dependencies [[org.clojure/clojure "1.5.1"]
[compojure "1.1.6"]]
:plugins [[lein-ring "0.8.10"]] ← LeiningenのRingプラグイン
:ring {:handler webapp.handler/app}
:profiles
{:dev {:dependencies [[javax.servlet/servlet-api "2.5"]
[ring-mock "0.1.5"]]}})
src/webapp/handler.clj
(ns webapp.handler
(:use compojure.core)
(:require [compojure.handler :as handler]
[compojure.route :as route]))
(defroutes app-routes
(GET "/" [] "Hello World. hogehoge") ← 書き換えて保存しブラウザから確認
(route/resources "/")
(route/not-found "Not Found"))
(def app
(handler/site app-routes))
例) HTMLページを追加
(defroutes app-routes
(GET "/" [] "Hello World. hogehoge")
(GET "/hoge.html" [] "<html><body>hoge</body></html>")
(route/resources "/")
(route/not-found "Not Found"))
例) 画像やcssファイルを置く
?resouces/publicディレクトリのファイルを置くとその
まま表示。
resouces/public/nyampass.jpg
→ http://localhost:3000/nyampass.jpg
handler.cljのここのおかげ
(route/resources "/")
例) GET、POSTの値
(defroutes app-routes
...
(GET "/params" {params :params} (str params))
…)
http://localhost:3000/params?a=hoge&b=1234
→ {:b "1234", :a "hoge"}
例) Redirect
マップとして返す
(GET "/redirect" []
{:status 302
:headers {"Location" "http://www.yahoo.com/"}
:body ""})

More Related Content

Light TableでClojure入門#2