「はじめてのClojure」出版記念!Light Tableを使ってClojureに触れてみよう!【第2回】

827 views

Published on

ーーーーーーーーーーーーーーーーーーーーーーー
schoo WEB-campusは「WEBに誕生した、学校の新しいカタチ」。
WEB生放送の授業を無料で配信しています。
▼こちらから授業に参加すると、先生への質問や、ユーザーとのチャット、資料の拡大表示等が可能です。
http://schoo.jp/class/1002/room

ーーーーーーーーーーーーーーーーーーーーーーー

Published in: Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
827
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

「はじめてのClojure」出版記念!Light Tableを使ってClojureに触れてみよう!【第2回】

  1. 1. 「はじめてのClojure」 出版記念 Light Tableを使って Clojureに触れてみよう!#2 ニャンパス株式会社 登尾(@tnoborio)
  2. 2. http://bit.ly/hajiclo2 前回資料 http://bit.ly/hajiclo
  3. 3. 自己紹介 登尾 徳誠(のぼりお とくせい) ・ニャンパス株式会社起業 ・自社サービス: baasday ・レイクタウン北自治会広報委員長 ・Flying Saucerのバイト
  4. 4. 前提 ● Leiningenのインストール ● Light Tableのインストール
  5. 5. やること ● Light TableとLeiningenのおさらい ● Luminusを使ったプロジェクト作成 ● ウェブアプリケーションのさわり ● データベースへの接続とモデルの操作
  6. 6. みなさん、 Clojureは好きに なりましたか?
  7. 7. イケてる4つの理由 1) 動的関数型言語 2) マクロ! 3) JVM上で動作する 4) Javaのライブラリが使える
  8. 8. Light Tableの使い方(おさらい) Workspace Commands
  9. 9. Workspaceの表示(おさらい) ● Control + SpaceでCommands ● Commandsを出して、 “Toggle workspace tree”を選択 →Workspaceが左ペインに表示
  10. 10. Light TableでREPL(おさらい) Commandsから”Instarepl: Open a clojure instarepl” ● (+ 1 2 3) ● (println “Hello Clojure”)
  11. 11. Leiningenが入っているかの確認 ターミナルを立ちあげ、 $ lein version “Leiningen 2.4.2 on Java 1.8.0_05”のようなメッ セージが出ればOK
  12. 12. Luminus Clojure用軽量の ウェブアプリケーションフレームワーク
  13. 13. H2 ● Javaで書かれたデータベースエンジン ● SQL、JDBC APIサポート ● ディスクベースとインメモリベース
  14. 14. プロジェクト作成 ● lein new <プロジェクト名> ● lein new <テンプレート> <プロジェクト名> 今回はLuminusテンプレートを使うので、 lein new luminus webapp2 +h2 +h2は、H2を利用するためのオプション
  15. 15. 起動 $ cd webapp2 $ lein ring server
  16. 16. Light Tableから接続 1. Viewメニュー→Workspaceを表示 2. Commands→”Add folder”で Workspaceに先ほど作成したwebapp2を 選択する
  17. 17. ディレクトリ構造 ● project.clj ● src/webapp2/handler.clj ● resouces/public/ ● test/
  18. 18. project.clj Light Table経由でnREPLへ接続する準備 Before) :dependencies ... [com.taoensso/tower "2.0.2"] [lib-noir "0.8.4"]]
  19. 19. project.clj Light Table経由でnREPLへ接続する準備 After) :dependencies ... [com.taoensso/tower "2.0.2"] [lib-noir "0.8.4"] [lein-light-nrepl "0.0.18"]]
  20. 20. project.clj Light Table経由でnREPLへ接続する準備 Before) :repl-options {:init-ns webapp2.repl}
  21. 21. project.clj Light Table経由でnREPLへ接続する準備 After) :repl-options {:init-ns webapp2.repl :nrepl-middleware [lighttable.nrepl.handler/lighttable-ops]}
  22. 22. REPLの起動とポートの確認 ※lein ring serverを立ちあげっぱなしなの で、Ctrl-Cで止めて、 $ lein repl nREPL server started on port 57092 on host 127.0.0.1 - nrepl://127.0.0.1: 57092
  23. 23. Light Tableからの接続 Commands ▶ Add Connection ▶ Clojure (remote nREPL) localhost:57092(さっきのポート番号) “connect”で接続!
  24. 24. Light Tableでの評価の方法 Command + Enter: ブロックの評価 Command + Shift + Enter: ファイルの評価 選択した状態で、Command + Shift + Enter: 選択 した部分のみの評価 ライブモード Commands ▶ Instarepl: Make current editor an instarepl
  25. 25. サーバーの立ち上げ REPL上で > (start-server)
  26. 26. src/web/routes/home.clj (defroutes home-routes (GET "/" [] (home-page)) (GET "/about" [] (about-page))) /aboutsと変えて、 http://localhost:3000/abouts にアクセスしてみよう。
  27. 27. テンプレートのさわり Selmer (use 'selmer.parser) (render "Hello {{name}}!" {:name "Taro"}) =>"Hello Taro!" (render-file "hello.html" {:name "Taro"})
  28. 28. テンプレートのさわり Luminusでのファイル構成 ● src/webapp2/routes/layout.clj ○ parser/render-fileでテンプレートHTMLの呼 び出し ● resources/templates ○ home.html ○ about.html
  29. 29. データベース作成 REPLから、 > (use 'webapp2.db.schema) > (create-tables) データベースファイルが出来たかの確認 ・Worspaceからwebapp2/resouces/publicを選択 し”Refresh folder” ・site.db.mv.dbファイルができていればOK
  30. 30. テーブルの作成 (src/webapp2/db/schema.clj) (defn create-users-table [] (sql/db-do-commands db-spec (sql/create-table-ddl :users [:id "varchar(20) PRIMARY KEY"] [:first_name "varchar(30)"] [:last_name "varchar(30)"] [:email "varchar(30)"] [:admin :boolean] [:last_login :time] [:is_active :boolean] [:pass "varchar(100)"])))
  31. 31. 基本的なデータ操作 (src/webapp2/db/core.clj) 1. usersテーブルの実体を定義 (defentity users) 2. INSERT (insert users (values user)) 3. SELECT (select users (where {:id id} (limit 1)) →レコードのベクタ 4. UPDATE (update users (set-fields {:first_name first-name :last_name last-name :email email}) (where {:id id})))
  32. 32. リレーション (declare users address email ) (defentity address) (defentity email (belongs-to users) (defentity users (has-one address) ;; users.id = address.users_id (has-many email) ;; users.id = email.users_id (sql-only (select users (with address))) ▶ SELECT "USERS".*, "ADDRESS".* FROM "USERS" LEFT JOIN "ADDRESS" ON "ADDRESS"."USERS_ID" = "USERS"."ID"
  33. 33. 結合 (sql-only (union (queries (subselect users (where {:id 1})) (subselect users (where {:id 2})) (subselect users (where {:id 3}))))) ▶ (SELECT "USERS".* FROM "USERS" WHERE ("USERS"."ID" = ?)) UNION (SELECT "USERS".* FROM "USERS" WHERE ("USERS"."ID" = ?)) UNION (SELECT "USERS".* FROM "USERS" WHERE ("USERS"."ID" = ?))
  34. 34. 宿題 ● 今回作成したwebapp2プロジェクトのコードを読 み解いてみる ● usersテーブルの作成を参考に、独自のテーブ ルを作成し、テーブル操作してみる
  35. 35. 出版記念イベントのお知らせ ・8/9 熊本 Kumamoto Programming Freaks(KPF) http://atnd.org/events/52823 ・札幌、名古屋、大阪は開催済み
  36. 36. Tokyo.clj Clojure交流会、東京イベント。9月予定。
  37. 37. 質問タイム!!!
  38. 38. ご意見ご感想 工学社 @kohgaku 登尾 @tnoborio

×