Submit Search
Upload
ClojureでElectronアプリを作ろう
•
16 likes
•
5,339 views
Kazuhiro Hara
Follow
ClojureでElectronアプリを作るために欠かせない(かもしれない)descjopの紹介と、実装周りのいろいろ、あとClojure自体の紹介など
Read less
Read more
Internet
Report
Share
Report
Share
1 of 39
Download now
Download to read offline
Recommended
高速!Clojure Web 開発入門
高速!Clojure Web 開発入門
Kazuki Tsutsumi
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Kazuhiro Hara
入門ClojureScript
入門ClojureScript
sohta
Om Next ~React.jsを超えて
Om Next ~React.jsを超えて
Kazuki Tsutsumi
Cryogenでサイトつくろーじぇん
Cryogenでサイトつくろーじぇん
Kazuhiro Hara
React系(別言語含む)の サーバーサイドレンダリング について考えよう
React系(別言語含む)の サーバーサイドレンダリング について考えよう
Kazuhiro Hara
React VR ことはじめ
React VR ことはじめ
Kazuhiro Hara
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basic
Takuma Watabiki
Recommended
高速!Clojure Web 開発入門
高速!Clojure Web 開発入門
Kazuki Tsutsumi
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Kazuhiro Hara
入門ClojureScript
入門ClojureScript
sohta
Om Next ~React.jsを超えて
Om Next ~React.jsを超えて
Kazuki Tsutsumi
Cryogenでサイトつくろーじぇん
Cryogenでサイトつくろーじぇん
Kazuhiro Hara
React系(別言語含む)の サーバーサイドレンダリング について考えよう
React系(別言語含む)の サーバーサイドレンダリング について考えよう
Kazuhiro Hara
React VR ことはじめ
React VR ことはじめ
Kazuhiro Hara
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basic
Takuma Watabiki
(IDEユーザのための) ClojureのEmacs開発環境について
(IDEユーザのための) ClojureのEmacs開発環境について
Kazuhiro Hara
OSS Product feat. Gradle
OSS Product feat. Gradle
Yasuharu Nakano
Gradleどうでしょう
Gradleどうでしょう
Takuma Watabiki
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
shigeki_ohtsu
Gws 20141024 gradle_intro
Gws 20141024 gradle_intro
Nobuhiro Sue
Gradle入門
Gradle入門
orekyuu
Android アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステム
Yu Nobuoka
今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう
Hayashi Yuichi
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
Yuta Matsumura
Vue.js with Go
Vue.js with Go
Kazuhiro Kubota
Groovyの紹介20130323
Groovyの紹介20130323
Yasuharu Hayami
Spring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswers
Takuma Watabiki
ひとりアドベントカレンダーのご紹介
ひとりアドベントカレンダーのご紹介
Kazuhiro Hara
フロント開発をがんばるためにGulpとGruntに入門してみた
フロント開発をがんばるためにGulpとGruntに入門してみた
Shou Takenaka
Gws 20130315 gradle_handson
Gws 20130315 gradle_handson
Nobuhiro Sue
Gws 20120521 gradle
Gws 20120521 gradle
Nobuhiro Sue
Groovy base gradle_20130309
Groovy base gradle_20130309
Nobuhiro Sue
Jenkins と groovy
Jenkins と groovy
Kohsuke Kawaguchi
Github codespaces すごく良い。もうこれで 十分なんじゃという話
Github codespaces すごく良い。もうこれで 十分なんじゃという話
xiidec
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
Issei Hiraoka
Inside frogc in Dart
Inside frogc in Dart
Goro Fuji
明日から使えるgradle
明日から使えるgradle
kimukou_26 Kimukou
More Related Content
What's hot
(IDEユーザのための) ClojureのEmacs開発環境について
(IDEユーザのための) ClojureのEmacs開発環境について
Kazuhiro Hara
OSS Product feat. Gradle
OSS Product feat. Gradle
Yasuharu Nakano
Gradleどうでしょう
Gradleどうでしょう
Takuma Watabiki
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
shigeki_ohtsu
Gws 20141024 gradle_intro
Gws 20141024 gradle_intro
Nobuhiro Sue
Gradle入門
Gradle入門
orekyuu
Android アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステム
Yu Nobuoka
今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう
Hayashi Yuichi
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
Yuta Matsumura
Vue.js with Go
Vue.js with Go
Kazuhiro Kubota
Groovyの紹介20130323
Groovyの紹介20130323
Yasuharu Hayami
Spring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswers
Takuma Watabiki
ひとりアドベントカレンダーのご紹介
ひとりアドベントカレンダーのご紹介
Kazuhiro Hara
フロント開発をがんばるためにGulpとGruntに入門してみた
フロント開発をがんばるためにGulpとGruntに入門してみた
Shou Takenaka
Gws 20130315 gradle_handson
Gws 20130315 gradle_handson
Nobuhiro Sue
Gws 20120521 gradle
Gws 20120521 gradle
Nobuhiro Sue
Groovy base gradle_20130309
Groovy base gradle_20130309
Nobuhiro Sue
Jenkins と groovy
Jenkins と groovy
Kohsuke Kawaguchi
Github codespaces すごく良い。もうこれで 十分なんじゃという話
Github codespaces すごく良い。もうこれで 十分なんじゃという話
xiidec
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
Issei Hiraoka
What's hot
(20)
(IDEユーザのための) ClojureのEmacs開発環境について
(IDEユーザのための) ClojureのEmacs開発環境について
OSS Product feat. Gradle
OSS Product feat. Gradle
Gradleどうでしょう
Gradleどうでしょう
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
Gws 20141024 gradle_intro
Gws 20141024 gradle_intro
Gradle入門
Gradle入門
Android アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステム
今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
Vue.js with Go
Vue.js with Go
Groovyの紹介20130323
Groovyの紹介20130323
Spring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswers
ひとりアドベントカレンダーのご紹介
ひとりアドベントカレンダーのご紹介
フロント開発をがんばるためにGulpとGruntに入門してみた
フロント開発をがんばるためにGulpとGruntに入門してみた
Gws 20130315 gradle_handson
Gws 20130315 gradle_handson
Gws 20120521 gradle
Gws 20120521 gradle
Groovy base gradle_20130309
Groovy base gradle_20130309
Jenkins と groovy
Jenkins と groovy
Github codespaces すごく良い。もうこれで 十分なんじゃという話
Github codespaces すごく良い。もうこれで 十分なんじゃという話
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
Similar to ClojureでElectronアプリを作ろう
Inside frogc in Dart
Inside frogc in Dart
Goro Fuji
明日から使えるgradle
明日から使えるgradle
kimukou_26 Kimukou
OpenCLに触れてみよう
OpenCLに触れてみよう
You&I
Driverについて
Driverについて
幸雄 村上
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
NTT DATA Technology & Innovation
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
papamitra
React Native GUIDE
React Native GUIDE
dcubeio
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都 Flex & Google App Engine for Java & ...
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都 Flex & Google App Engine for Java & ...
Sadao Tokuyama
OpenGLプログラミング
OpenGLプログラミング
幸雄 村上
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
SwaggerとAPIのデザイン
SwaggerとAPIのデザイン
Kazuhiro Hara
Scalaで実装するGC
Scalaで実装するGC
NISHIMOTO Keisuke
Dockerを活用したリクルートグループ開発基盤の構築
Dockerを活用したリクルートグループ開発基盤の構築
Recruit Technologies
C#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + Cloo
aokomoriuta
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
parrotstudio
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
kojiokb
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
Yu Nobuoka
Open modeler
Open modeler
Yoshiki Izumi
From JS To CLJS
From JS To CLJS
Kent Ohashi
Jenkins study 7 2013-01-28
Jenkins study 7 2013-01-28
Ato ARAKI
Similar to ClojureでElectronアプリを作ろう
(20)
Inside frogc in Dart
Inside frogc in Dart
明日から使えるgradle
明日から使えるgradle
OpenCLに触れてみよう
OpenCLに触れてみよう
Driverについて
Driverについて
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
React Native GUIDE
React Native GUIDE
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都 Flex & Google App Engine for Java & ...
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都 Flex & Google App Engine for Java & ...
OpenGLプログラミング
OpenGLプログラミング
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
SwaggerとAPIのデザイン
SwaggerとAPIのデザイン
Scalaで実装するGC
Scalaで実装するGC
Dockerを活用したリクルートグループ開発基盤の構築
Dockerを活用したリクルートグループ開発基盤の構築
C#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + Cloo
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
Open modeler
Open modeler
From JS To CLJS
From JS To CLJS
Jenkins study 7 2013-01-28
Jenkins study 7 2013-01-28
More from Kazuhiro Hara
MDX with Next.js
MDX with Next.js
Kazuhiro Hara
MDX and Next.js
MDX and Next.js
Kazuhiro Hara
About Plone Conference Tokyo 2018 Frontend Day
About Plone Conference Tokyo 2018 Frontend Day
Kazuhiro Hara
Gatsby & React Static
Gatsby & React Static
Kazuhiro Hara
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
Kazuhiro Hara
Clojure.tokyo.descjop
Clojure.tokyo.descjop
Kazuhiro Hara
Re-frame and A-Frame
Re-frame and A-Frame
Kazuhiro Hara
WebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 Java
Kazuhiro Hara
第2回 -Play部屋- Play 2.0はじめて&もくもく会
第2回 -Play部屋- Play 2.0はじめて&もくもく会
Kazuhiro Hara
-Play部屋- Play 2.0はじめて&もくもく会
-Play部屋- Play 2.0はじめて&もくもく会
Kazuhiro Hara
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
Kazuhiro Hara
sbtマルチプロジェクトビルドの使いどころ
sbtマルチプロジェクトビルドの使いどころ
Kazuhiro Hara
Playbay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイ
Kazuhiro Hara
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
Kazuhiro Hara
PlayFramework1.2.4におけるWebSocket
PlayFramework1.2.4におけるWebSocket
Kazuhiro Hara
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
Kazuhiro Hara
WP Jelly vol.01 WordPress管理画面にメニューを追加しよう
WP Jelly vol.01 WordPress管理画面にメニューを追加しよう
Kazuhiro Hara
Play FrameworkとWeb Socketの話
Play FrameworkとWeb Socketの話
Kazuhiro Hara
MVCのVを極めしWebデザイナーになる - CakePHP勉強会
MVCのVを極めしWebデザイナーになる - CakePHP勉強会
Kazuhiro Hara
Cakephp And Wordpress
Cakephp And Wordpress
Kazuhiro Hara
More from Kazuhiro Hara
(20)
MDX with Next.js
MDX with Next.js
MDX and Next.js
MDX and Next.js
About Plone Conference Tokyo 2018 Frontend Day
About Plone Conference Tokyo 2018 Frontend Day
Gatsby & React Static
Gatsby & React Static
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
Clojure.tokyo.descjop
Clojure.tokyo.descjop
Re-frame and A-Frame
Re-frame and A-Frame
WebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 Java
第2回 -Play部屋- Play 2.0はじめて&もくもく会
第2回 -Play部屋- Play 2.0はじめて&もくもく会
-Play部屋- Play 2.0はじめて&もくもく会
-Play部屋- Play 2.0はじめて&もくもく会
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
sbtマルチプロジェクトビルドの使いどころ
sbtマルチプロジェクトビルドの使いどころ
Playbay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイ
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework1.2.4におけるWebSocket
PlayFramework1.2.4におけるWebSocket
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
WP Jelly vol.01 WordPress管理画面にメニューを追加しよう
WP Jelly vol.01 WordPress管理画面にメニューを追加しよう
Play FrameworkとWeb Socketの話
Play FrameworkとWeb Socketの話
MVCのVを極めしWebデザイナーになる - CakePHP勉強会
MVCのVを極めしWebデザイナーになる - CakePHP勉強会
Cakephp And Wordpress
Cakephp And Wordpress
ClojureでElectronアプリを作ろう
1.
Clojureで Electronアプリつくろう {:company “Greative GK” :name
“Kazuhiro Hara” :twitter “kara_d” :github “https://github.com/karad”} Electron(旧:Atom-Shell)勉強会 #1
2.
#atom_shelldescjop.org 自己紹介 2 原 一浩 ハラ カズヒロ ClojureScript +
Electronの プロジェクトテンプレdescjopの作者 http://greative.jp/ ( @kara_d ) http://descjop.org/
3.
#atom_shelldescjop.org ちょっと前の著書 ➡ Play Framework
2徹底入門 - JavaではじめるアジャイルWeb開発 3 実践編(4章∼7章)を担当 ✦ サンプルアプリの企画から設計、構築、テ スト、管理画面作成までを一通り マニュアルにはない詰まりポイントとかも ちりばめられてます。
4.
#atom_shelldescjop.org アジェンダ ➡ Clojureについて ➡ ビルドツールについて ➡
ClojureでElectronアプリをつくるには ➡ demo ➡ Clojureならでは話 ➡ ClojureScript & Node.jsハマりどころ ➡ 今後の課題 4
5.
#atom_shelldescjop.org 5 そもそもClojureってなに話
6.
#atom_shelldescjop.org Clojureってなに? ➡ Lisp方言 S式 データとしてのコード 成長可能な言語 ➡ 関数型プログラミング 第一級関数 イミュータブルなデータ構造 6 (println
(+ 1 2 3)) ; => 6
7.
#atom_shelldescjop.org Clojureってなに? ➡ 豊かなビルド環境 Leiningen REPL Clojars Javaのライブラリ or
Nodeのライブラリ ➡ 複数のビルドターゲット Java環境 JavaScript環境 .NET環境 7
8.
#atom_shelldescjop.org Clojureあれこれ ➡ Clojureは新しいけど、すごく古くもある Clojureが生まれたのは、2007年 LISPは、2番目に古い高級言語 ➡ ClojureScriptはJavaScript向けコンパイル環境 JavaとJavaScriptの関係とは、ちがう 同一シンタックスで書ける 拡張子は、Clojureが.clj、ClojureScriptが.cljs ➡
ClojureScriptは、AltJSとしては、そこそこ古い Jun 3, 2011に最初のコミット 8
9.
#atom_shelldescjop.org LightTableはClojureScript製 ➡ かなりの実用度!! 9
10.
#atom_shelldescjop.org Clojureは読みやすい(他のLispよりちょっとだけ) ➡ JavaScript ➡ Clojure 10 function
hoge (param) { console.log(“Hello world!”); } (defn hoge [param] (println “Hello world!”))
11.
#atom_shelldescjop.org Clojureを選んで何がいいのか ➡ フロントエンドのJavaScript、 バックエンドのJVMベースサーバを 強力な言語機能で統一的に作り上げることができる 11 Clojure Web JVM Server Electron APIAPI
12.
#atom_shelldescjop.org 12 ビルドツールについて
13.
#atom_shelldescjop.org ビルドツールについて ➡ ClojureとClojureScriptの ビルドツール、Leiningen Node、Npm、Grunt/Gulp/Bowerや テストランナーがくっついたようなもの 13 $ lein
new アプリ名 $ lein cljsbuild $ lein test
14.
#atom_shelldescjop.org ClojureScriptのコンパイル ➡ project.clj ビルド情報を書く package.jsonみたいなもの ➡ lein-cljsbuildを使う leinコマンドからClojureScriptのコンパイルができる ➡
ClojureScriptのコンパイル Google Clojure関係がライブラリとして使われていたり、 コンパイラとして使われたりしている 14 $ lein cljsbuild once
15.
#atom_shelldescjop.org JavaScriptにコンパイルされた時のサイズ ➡ :optimizations :simple 400KB∼2MBくらいになっちゃう これは重い ➡
:optimizations :advanced 数十から百KB程度 これならなんとか 15
16.
#atom_shelldescjop.org 16 ClojureでElectronアプリをつくるには
17.
#atom_shelldescjop.org Electronアプリ用のLeiningenツール ➡ http://descjop.org ➡ リリース後の顛末 公開したのが4/17 その日にAtom-Shell
-> Electron リポジトリも変更 Gruntタスク周りで本家にissue作成 無事パッチが当てられ、再リリース 17
18.
#atom_shelldescjop.org ClojureでElectronアプリをつくるには ➡ descjop.orgを使って開始すると楽 ➡ 使ってみて良い感じだったら★ください∼ 18 $
lein new descjop アプリ名
19.
#atom_shelldescjop.org 何が生成されるのか? 19 ├── README.md ├── app │
├── index.html // トップページ │ ├── js │ │ └── main.js │ └── package.json // アプリ用package.json ├── package.json // コンパイル用package.json ├── project.clj // Clojureのコンパイル設定 └── src └── NAMESPACE └── core.cljs // ClojureScriptを置く
20.
#atom_shelldescjop.org descjopのしくみ : その1 ➡
lein cljsbuildをすると、src/###/core.cljsが app/js/cljsbuild_main.jsとしてコンパイルされる /src/###/core.cljs ↓ コンパイル /app/js/cljsbuild_main.js 20
21.
#atom_shelldescjop.org descjopのしくみ : その2 ➡
cljsbuild_main.jsは、app/js/main.js から呼ばれる /app/js/cljsbuild_main.js ↑ 呼ぶ /app/js/main.js 21
22.
#atom_shelldescjop.org descjopのしくみ : その3 ➡
Electronは、app以下のpackage.jsonを通じて main.jsを呼び出す /app/js/cljsbuild_main.js ↑ 呼ぶ /app/js/main.js ↑ 呼ぶ /app/package.json 22
23.
#atom_shelldescjop.org descjopのしくみ : その4 ➡
cljsbuild_main.jsからは、BrowserWindowとし て、index.htmlをloadUrlする /app/index.html ↑ ロードする /app/js/cljsbuild_main.js 23
24.
#atom_shelldescjop.org Electron、ClojureとClojureScriptの関係 24 Clojure 界 Clojure Script 界 JavaScript 界 Electron 界 COMPILE マクロなど .clj.cljs.jsAPI Leiningenによる
25.
#atom_shelldescjop.org 25 demo
26.
#atom_shelldescjop.org demo 26 $ npm install
-‐g grunt-‐cli $ npm install $ grunt download-‐electron $ lein externs > app/js/externs.js $ ./electron/Electron.app/Contents/MacOS/Electron app 5 4 3 2 1 $ lein new descjop アプリ名
27.
#atom_shelldescjop.org ビルド終了後の構成 27 ├── README.md ├── app │
├── index.html // トップページ │ ├── js │ │ ├── cljsbuild-‐main.js // コンパイル済JS │ │ ├── externs.js │ │ └── main.js │ └── package.json // アプリ用package.json ├── package.json // コンパイル用package.json ├── project.clj // Clojureのコンパイル設定 └── src └── NAMESPACE └── core.cljs // ClojureScriptを置く
28.
#atom_shelldescjop.org 28 Clojureならでは話
29.
#atom_shelldescjop.org こんな構文あったらいいな ➡ appに対して、イベントハンドラ設定めんどい ➡ こんな構文が欲しいとする 29 (var的なもの
app名 app生成 :イベントハンドラ (関数) :ほかのハンドラ (関数) ... ...)
30.
#atom_shelldescjop.org ちょいとマクロ ➡ マクロは、ClojureScriptではなく、 Clojureとして書く ➡ ただし、関数でできる場合は関数で書こう 30 (defmacro
defatomshellapp [name app & clauses] `(loop [cl# [~@clauses]] (if (and (not (nil? cl#)) (first cl#) (next cl#)) (do (.on ~app (name (first cl#)) (second cl#)) (recur (next (next cl#)))) (defonce ~name ~app))))
31.
#atom_shelldescjop.org こんな風に呼び出せる ➡ 欲しかった構文を拡張できる 31 (defatomshellapp app
(nodejs/require "app") :ready (fn [] ( 処理 )) :window-‐all-‐closed (fn [] ( 処理 ))))
32.
#atom_shelldescjop.org 32 ClojureScript &
Node.jsハマりどころ
33.
#atom_shelldescjop.org 注意ポイント ➡ externs advancedオプションにてサイズを小さくするときに、 必要な変数名などの書き換えをさせないための指定 js/externs.jsとかに記述する lein-externsを使うと楽 33 $ lein
externs > app/js/externs.js
34.
#atom_shelldescjop.org 注意ポイント ➡ externs js/externs.jsは、こんな風になる 34 var TopLevel
= { "BrowserWindow" : function () {}, "console" : function () {}, "loadUrl" : function () {}, "log" : function () {}, "on" : function () {}, ... }
35.
#atom_shelldescjop.org 注意ポイント ➡ nodeモジュール関係 node関係のモジュールもexternsすること package.jsonに project.cljに 35 :externs [ "app/js/externs.js" "node_modules/closurecompiler-‐externs/path.js" "node_modules/closurecompiler-‐externs/process.js" ] "closurecompiler-‐externs":
"^1.0.4"
36.
#atom_shelldescjop.org 注意ポイント ➡ pathまわり 開発時と、ネイティブアプリケーションとしてパッケージングした時の 取得可能なパスがメソッドによって異なるので注意 36 (str
"file://" (.resolve path (js* "__dirname") "../index.html"))
37.
#atom_shelldescjop.org 注意ポイント ➡ その他 よくJavaScriptの関数を渡す場面で、へんなものが渡るときがある。 きちんと無名関数を渡そう オブジェクトは、clj->jsを使って渡す 37 (clj-‐>js {:width
800 :height 600})
38.
#atom_shelldescjop.org 今後の課題 ➡ NW.js用のスカフォルディングの提供 ➡ gruntタスクからgulpへの移行 ➡
UI周りで構成をいろいろ考え中 ➡ 今は遊びがてら 学習サイクルまわし中 38 学ぶ 作る問う
39.
ありがとうございました!! Electron(旧:Atom-Shell)勉強会 #1 ClojureでElectronアプリつくろう {:company “Greative
GK” :name “Kazuhiro Hara” :twitter “kara_d” :github “https://github.com/karad”}
Download now