SlideShare a Scribd company logo
1 of 21
今さら始めるCoffeeScript
- 社内勉強会 第3回 -




                                2012/9/5 @mryoshio




                Copyright 2012 tachibanakikaku.com. All rights reserved.
目次

■ 自己紹介
■ CoffeeScript
■ 使えるの?
■ インストール
■ sample.coffee
■ sample.js
■ コード例
■ Railsとの組合せ
■ 参考情報
自己紹介

■ 仕事
  ‣   Alfresco ... カスタマイズやサポート

  ‣   Liferay ... カスタマイズやサポート


■ それ以外
  ‣   Alfresco ... https://www.facebook.com/AlfrescoUserJP の管理

  ‣   Ruby,Python,Heroku,GAE,AWS等で遊ぶ
CoffeeScript

■ 概要
  ‣    JavaScriptのGood Partsを簡単に利用できるように実装された言語。コンパイルして最終的に
       JavaScriptに変換される。最新バージョンは1.3.3(2012/9/5時点)


■ メリット
  ‣    JavaScriptの煩わしい部分を避けられる

      ➡ } や ) の不整合とか,


      ➡ (int i = 0; i < list.length; i++)という記述とか,


      ➡ (function() {})();のようなものとか..


■ http://coffeescript.org/を読んでください
■ 要するに何なの?
  ‣    The golden rule of CoffeeScript is: It’s just JavaScript .
使えるの?

■ 例えばどこで使われている?
  ‣   Ruby on Rails ... バージョン3.1から正式にサポートされている


■ 覚えるの面倒くさいんだけど
  ‣   JavaScriptの方が遥かに面倒


■ コンパイルを噛ませるので手間が増えるのでは?
  ‣   自動化する手段なら幾つでもある

  ‣   開発チーム内でだけソースコードを触る場合には大丈夫


■ jQuery等と組合せられるの?
  ‣   できます。


■ 既存のコードを置換できるの?
  ‣   やめたほうがよいと思う。新規開発を対象とするのがよさげ。
インストール

■ Node.jsを入れる
  ‣   $ brew install nodejs

  ‣   $ curl http://npmjs.org/install.sh

  ‣   sh install.sh


■ CoffeeScriptを入れる
  ‣   $ npm install -g coffee-script


■ 入ったかな
  ‣   $ coffee

  ‣   coffee> # => プロンプトに変わればOK


■ コンパイル
  ‣   $ coffee -o <出力先ディレクトリ> -c <ソースディレクトリ>
sample.coffee

# assign
x=3


# array
a = [1, 2, 3, 4, "go"]


# function
ok = ->
   alert "ok"


# function with arg
square = (v) ->
   return v*v


# call function
alert square(6)


# object
o={
   "name": "taro",
   "age": 37,
   "mail": "taro@aegif.jp"
   }
sample.js(コンパイル結果)

// Generated by CoffeeScript 1.3.3
(function() {
  var a, o, ok, square, x;


 x = 3;


 a = [1, 2, 3, 4, "go"];


 ok = function() {
    return alert("ok");
 };


 square = function(v) {
    return v * v;
 };


 alert(square(6));


 o={
    "name": "taro",
    "age": 37,
    "mail": "taro@aegif.jp"
 };                                 http://javascripter.github.com/jsrepl.html で動作確認済み

}).call(this);
CoffeeScriptとコンパイル結果
代入

             CoffeeScript                 JavaScript


x=3                        var a, b, x, y;


a = b = 21                 x = 3;


y = 2*x                    a = b = 21;


                           y = 2 * x;
配列

              CoffeeScript                         JavaScript


a = [1, 2, 3, 4, "go"]            var a, aa, aaa;


aa = [1, "ni", ["in", "array"]]   a = [1, 2, 3, 4, "go"];


aaa = [                           aa = [1, "ni", ["in", "array"]];
  1, 2, 3
  4, 5, 6                         aaa = [1, 2, 3, 4, 5, 6, "nana", "hachi",
  "nana", "hachi", "ku"           "ku"];
  ]
オブジェクト

              CoffeeScript                              JavaScript


o={                                   var aegif, o;
 "name": "taro",                      o={
 "age": 37,                              "name": "taro",
                                         "age": 37,
 }
                                       };

aegif =                                aegif = {
  ac:                                    ac: {
      name: "accounting consulting"        name: "accounting consulting",
  bc:                                    },
      name: "bussiness consulting"       bc: {
  oc:                                      name: "bussiness consulting",
      name: "oss consulting"             },
                                         oc: {
                                           name: "oss consulting",
                                         }
                                       };
分岐

                 CoffeeScript                       JavaScript


if true                        var a;

    alert "ok"                 if (true) {
                                 alert("ok");
                               }
a=0
switch a                       a = 0;

  when 0
                               switch (a) {
     alert 0                     case 0:
  when 1                          alert(0);
                                  break;
     alert 0                     case 1:
  when 2                          alert(0);
                                  break;
     alert 2                     case 2:
  when 3                          alert(2);
                                  break;
     alert 3
                                 case 3:
  else                            alert(3);
     alert "else"                 break;
                                 default:
                                  alert("else");
                               }
Function

               CoffeeScript                        JavaScript


ok = ->                       var ok, square, square2, cube;

  alert "ok"
                              ok = function() {
                                  return alert("ok");
# function with arg            };

square = (v) ->
                               square = function(v) {
   return v*v                     return v * v;
                               };

square2 = (v) -> return v*v
                               square2 = function(v) {
                                  return v * v;
cube = (x) -> square(x)*x      };


                               cube = function(x) {
                                  return square(x) * x;
                               };
Rails(+jQuery)との組合せ
前準備

■ サンプルアプリケーションの用意
 ‣   $ rails new coffeetest && cd coffeetest

 ‣   $ rm public/index.html

 ‣   $ rails g controller top index

 ‣   $ bundle -V install

 ‣   $ rails g controller top index

 ‣   app/views/top/index.html.erbを変更

 ‣   app/assets/javascripts/top/js.coffeeを変更


■ デモ的なもの
CoffeeScriptとコンパイル結果

               CoffeeScript                                        JavaScript


 $ ->                                            (function() {
  $("input[type=radio]").click ->
    $("div#contents").css("background-color",      $(function() {
 $(@).val())                                         return $
                                                 ("input[type=radio]").click(function() {
                                                       return $
                                                 ("div#contents").css("background-color", $
                                                 (this).val());
                                                     });
                                                   });


                                                 }).call(this);




JavaScriptコードは次のパスに存在 => tmp/cache/assets/D84/210/sprockets%2Fabd0103ccec2b428ac62c94e4c40b384
jQueryのみで書いた場合との比較

              CoffeeScript                                          jQuery


$ ->                                           (function($) {
 $("input[type=radio]").click ->                   $(document).ready(function() {
   $("div#contents").css("background-color",           $("input[type=radio]").click(function() {
$(@).val())                                                $("div#contents").css("background-
                                               color", $(this).val())
                                                       });
                                                   });
                                               })(jQuery);
所感

■ 使いやすい
 ‣   思ってたより簡単

 ‣   これまでjQuery使ってたりRuby触ってた人なら1日もあれば何とかなりそう

 ‣   最終的にJavaScriptに変換されるため、これまで通りFirebugでのデバッグも簡単そう


■ 複雑な処理でも大丈夫か?
 ‣   軽いロジックのみ必要な仕事で採用してその後徐々に利用対象の仕事を大きくするのが良さげ


■ その他
 ‣   とりあえずやってみるには敷居が低いのでお薦め

 ‣   .coffeeという拡張子の長さが欠点

 ‣   コーヒー好きでない
参考情報

■ 参考URL
  ‣   http://coffeescript.org/

  ‣   http://javascripter.github.com/jsrepl.html

  ‣   http://www.oiax.jp/rails/coffee00.html
Copyright 2012 tachibanakikaku.com. All rights reserved.

More Related Content

What's hot

メディア・アートII 第2回 openFrameworks基礎 配列、くりかえし、乱数 ベクトルを使用したアニメーション
メディア・アートII  第2回 openFrameworks基礎 配列、くりかえし、乱数 ベクトルを使用したアニメーションメディア・アートII  第2回 openFrameworks基礎 配列、くりかえし、乱数 ベクトルを使用したアニメーション
メディア・アートII 第2回 openFrameworks基礎 配列、くりかえし、乱数 ベクトルを使用したアニメーション
Atsushi Tadokoro
 
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3DプログラミングWebデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Atsushi Tadokoro
 
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oFメディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
Atsushi Tadokoro
 
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLMedia Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Atsushi Tadokoro
 
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Media Art II 2013  第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズムMedia Art II 2013  第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Atsushi Tadokoro
 
PFDS 10.2.1 lists with efficient catenation
PFDS 10.2.1 lists with efficient catenationPFDS 10.2.1 lists with efficient catenation
PFDS 10.2.1 lists with efficient catenation
昌平 村山
 
Media Art II 2013 第5回:openFrameworks Addonを使用する
Media Art II 2013 第5回:openFrameworks Addonを使用するMedia Art II 2013 第5回:openFrameworks Addonを使用する
Media Art II 2013 第5回:openFrameworks Addonを使用する
Atsushi Tadokoro
 

What's hot (18)

Spectacular Future with clojure.spec
Spectacular Future with clojure.specSpectacular Future with clojure.spec
Spectacular Future with clojure.spec
 
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
 
メディア・アートII 第2回 openFrameworks基礎 配列、くりかえし、乱数 ベクトルを使用したアニメーション
メディア・アートII  第2回 openFrameworks基礎 配列、くりかえし、乱数 ベクトルを使用したアニメーションメディア・アートII  第2回 openFrameworks基礎 配列、くりかえし、乱数 ベクトルを使用したアニメーション
メディア・アートII 第2回 openFrameworks基礎 配列、くりかえし、乱数 ベクトルを使用したアニメーション
 
CG2013 12
CG2013 12CG2013 12
CG2013 12
 
swooleを試してみた
swooleを試してみたswooleを試してみた
swooleを試してみた
 
emc++ chapter32
emc++ chapter32emc++ chapter32
emc++ chapter32
 
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3DプログラミングWebデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
 
Ajax 応用
Ajax 応用Ajax 応用
Ajax 応用
 
20150530 pgunconf-pgbench-semi-structured-benchmark
20150530 pgunconf-pgbench-semi-structured-benchmark20150530 pgunconf-pgbench-semi-structured-benchmark
20150530 pgunconf-pgbench-semi-structured-benchmark
 
Haskell で CLI
Haskell で CLIHaskell で CLI
Haskell で CLI
 
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oFメディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
 
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLMedia Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Media Art II 2013  第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズムMedia Art II 2013  第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
 
PHP Object Injection入門
PHP Object Injection入門PHP Object Injection入門
PHP Object Injection入門
 
PFDS 10.2.1 lists with efficient catenation
PFDS 10.2.1 lists with efficient catenationPFDS 10.2.1 lists with efficient catenation
PFDS 10.2.1 lists with efficient catenation
 
EWD 3トレーニングコース#20 GlobalストレージのJavaScript用抽象化-(a)DocumentNodeオブジェクト
EWD 3トレーニングコース#20 GlobalストレージのJavaScript用抽象化-(a)DocumentNodeオブジェクトEWD 3トレーニングコース#20 GlobalストレージのJavaScript用抽象化-(a)DocumentNodeオブジェクト
EWD 3トレーニングコース#20 GlobalストレージのJavaScript用抽象化-(a)DocumentNodeオブジェクト
 
Media Art II 2013 第5回:openFrameworks Addonを使用する
Media Art II 2013 第5回:openFrameworks Addonを使用するMedia Art II 2013 第5回:openFrameworks Addonを使用する
Media Art II 2013 第5回:openFrameworks Addonを使用する
 

Similar to 今さら始めるCoffeeScript

TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
Akira Inoue
 
はじめてのCouch db
はじめてのCouch dbはじめてのCouch db
はじめてのCouch db
Eiji Kuroda
 

Similar to 今さら始めるCoffeeScript (20)

JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタート
 
第2回 JavaScriptから始めるプログラミング2016
第2回 JavaScriptから始めるプログラミング2016第2回 JavaScriptから始めるプログラミング2016
第2回 JavaScriptから始めるプログラミング2016
 
これからのJavaScriptの話
これからのJavaScriptの話これからのJavaScriptの話
これからのJavaScriptの話
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
 
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.jsFunctional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.js
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
 
Guide for Swift and Viewer app
Guide for Swift and Viewer appGuide for Swift and Viewer app
Guide for Swift and Viewer app
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
 
20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会
 
はじめてのCouch db
はじめてのCouch dbはじめてのCouch db
はじめてのCouch db
 
Testman
TestmanTestman
Testman
 
Java SE 7 InvokeDynamic in JRuby
Java SE 7 InvokeDynamic in JRubyJava SE 7 InvokeDynamic in JRuby
Java SE 7 InvokeDynamic in JRuby
 
Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
 

More from Ashitaba YOSHIOKA

メタプログラミングRuby勉強会#7(fluentプラグイン)
メタプログラミングRuby勉強会#7(fluentプラグイン)メタプログラミングRuby勉強会#7(fluentプラグイン)
メタプログラミングRuby勉強会#7(fluentプラグイン)
Ashitaba YOSHIOKA
 
メタプログラミングRuby勉強会#4
メタプログラミングRuby勉強会#4メタプログラミングRuby勉強会#4
メタプログラミングRuby勉強会#4
Ashitaba YOSHIOKA
 
Alfrescoのバックアップとレストア
AlfrescoのバックアップとレストアAlfrescoのバックアップとレストア
Alfrescoのバックアップとレストア
Ashitaba YOSHIOKA
 
PolicyとItem (CMIS輪読会#3)
PolicyとItem (CMIS輪読会#3)PolicyとItem (CMIS輪読会#3)
PolicyとItem (CMIS輪読会#3)
Ashitaba YOSHIOKA
 
今さら始めるJavaScript
今さら始めるJavaScript今さら始めるJavaScript
今さら始めるJavaScript
Ashitaba YOSHIOKA
 
Alfresco and Web Script (English)
Alfresco and Web Script (English)Alfresco and Web Script (English)
Alfresco and Web Script (English)
Ashitaba YOSHIOKA
 

More from Ashitaba YOSHIOKA (20)

メタプログラミングRuby勉強会#7(fluentプラグイン)
メタプログラミングRuby勉強会#7(fluentプラグイン)メタプログラミングRuby勉強会#7(fluentプラグイン)
メタプログラミングRuby勉強会#7(fluentプラグイン)
 
AWSを利用した開発者・データを扱う人向けの資料
AWSを利用した開発者・データを扱う人向けの資料AWSを利用した開発者・データを扱う人向けの資料
AWSを利用した開発者・データを扱う人向けの資料
 
メタプログラミングRuby勉強会#5
メタプログラミングRuby勉強会#5メタプログラミングRuby勉強会#5
メタプログラミングRuby勉強会#5
 
メタプログラミングRuby勉強会#4
メタプログラミングRuby勉強会#4メタプログラミングRuby勉強会#4
メタプログラミングRuby勉強会#4
 
千年繁栄する法
千年繁栄する法千年繁栄する法
千年繁栄する法
 
もくもく会について
もくもく会についてもくもく会について
もくもく会について
 
Alfrescoのバックアップとレストア
AlfrescoのバックアップとレストアAlfrescoのバックアップとレストア
Alfrescoのバックアップとレストア
 
PolicyとItem (CMIS輪読会#3)
PolicyとItem (CMIS輪読会#3)PolicyとItem (CMIS輪読会#3)
PolicyとItem (CMIS輪読会#3)
 
AlfrescoとSolr(後編)
AlfrescoとSolr(後編)AlfrescoとSolr(後編)
AlfrescoとSolr(後編)
 
AlfrescoとSolr(中編)
AlfrescoとSolr(中編)AlfrescoとSolr(中編)
AlfrescoとSolr(中編)
 
Alfresco Google Docs連携
Alfresco Google Docs連携Alfresco Google Docs連携
Alfresco Google Docs連携
 
Alfrescoクラスタリング入門
Alfrescoクラスタリング入門Alfrescoクラスタリング入門
Alfrescoクラスタリング入門
 
今さら始めるJavaScript
今さら始めるJavaScript今さら始めるJavaScript
今さら始めるJavaScript
 
Alfresco CI
Alfresco CIAlfresco CI
Alfresco CI
 
Alfresco JP Site
Alfresco JP SiteAlfresco JP Site
Alfresco JP Site
 
AlfrescoとActiveCMIS
AlfrescoとActiveCMISAlfrescoとActiveCMIS
AlfrescoとActiveCMIS
 
Alfresco Java Foundation API
Alfresco Java Foundation APIAlfresco Java Foundation API
Alfresco Java Foundation API
 
Alfresco and Web Script (English)
Alfresco and Web Script (English)Alfresco and Web Script (English)
Alfresco and Web Script (English)
 
AlfrescoとWeb Script
AlfrescoとWeb ScriptAlfrescoとWeb Script
AlfrescoとWeb Script
 
Alfresco SDKとカスタムアクション
Alfresco SDKとカスタムアクションAlfresco SDKとカスタムアクション
Alfresco SDKとカスタムアクション
 

Recently uploaded

Recently uploaded (11)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

今さら始めるCoffeeScript

  • 1. 今さら始めるCoffeeScript - 社内勉強会 第3回 - 2012/9/5 @mryoshio Copyright 2012 tachibanakikaku.com. All rights reserved.
  • 2. 目次 ■ 自己紹介 ■ CoffeeScript ■ 使えるの? ■ インストール ■ sample.coffee ■ sample.js ■ コード例 ■ Railsとの組合せ ■ 参考情報
  • 3. 自己紹介 ■ 仕事 ‣ Alfresco ... カスタマイズやサポート ‣ Liferay ... カスタマイズやサポート ■ それ以外 ‣ Alfresco ... https://www.facebook.com/AlfrescoUserJP の管理 ‣ Ruby,Python,Heroku,GAE,AWS等で遊ぶ
  • 4. CoffeeScript ■ 概要 ‣ JavaScriptのGood Partsを簡単に利用できるように実装された言語。コンパイルして最終的に JavaScriptに変換される。最新バージョンは1.3.3(2012/9/5時点) ■ メリット ‣ JavaScriptの煩わしい部分を避けられる ➡ } や ) の不整合とか, ➡ (int i = 0; i < list.length; i++)という記述とか, ➡ (function() {})();のようなものとか.. ■ http://coffeescript.org/を読んでください ■ 要するに何なの? ‣ The golden rule of CoffeeScript is: It’s just JavaScript .
  • 5. 使えるの? ■ 例えばどこで使われている? ‣ Ruby on Rails ... バージョン3.1から正式にサポートされている ■ 覚えるの面倒くさいんだけど ‣ JavaScriptの方が遥かに面倒 ■ コンパイルを噛ませるので手間が増えるのでは? ‣ 自動化する手段なら幾つでもある ‣ 開発チーム内でだけソースコードを触る場合には大丈夫 ■ jQuery等と組合せられるの? ‣ できます。 ■ 既存のコードを置換できるの? ‣ やめたほうがよいと思う。新規開発を対象とするのがよさげ。
  • 6. インストール ■ Node.jsを入れる ‣ $ brew install nodejs ‣ $ curl http://npmjs.org/install.sh ‣ sh install.sh ■ CoffeeScriptを入れる ‣ $ npm install -g coffee-script ■ 入ったかな ‣ $ coffee ‣ coffee> # => プロンプトに変わればOK ■ コンパイル ‣ $ coffee -o <出力先ディレクトリ> -c <ソースディレクトリ>
  • 7. sample.coffee # assign x=3 # array a = [1, 2, 3, 4, "go"] # function ok = -> alert "ok" # function with arg square = (v) -> return v*v # call function alert square(6) # object o={ "name": "taro", "age": 37, "mail": "taro@aegif.jp" }
  • 8. sample.js(コンパイル結果) // Generated by CoffeeScript 1.3.3 (function() { var a, o, ok, square, x; x = 3; a = [1, 2, 3, 4, "go"]; ok = function() { return alert("ok"); }; square = function(v) { return v * v; }; alert(square(6)); o={ "name": "taro", "age": 37, "mail": "taro@aegif.jp" }; http://javascripter.github.com/jsrepl.html で動作確認済み }).call(this);
  • 10. 代入 CoffeeScript JavaScript x=3 var a, b, x, y; a = b = 21 x = 3; y = 2*x a = b = 21; y = 2 * x;
  • 11. 配列 CoffeeScript JavaScript a = [1, 2, 3, 4, "go"] var a, aa, aaa; aa = [1, "ni", ["in", "array"]] a = [1, 2, 3, 4, "go"]; aaa = [ aa = [1, "ni", ["in", "array"]]; 1, 2, 3 4, 5, 6 aaa = [1, 2, 3, 4, 5, 6, "nana", "hachi", "nana", "hachi", "ku" "ku"]; ]
  • 12. オブジェクト CoffeeScript JavaScript o={ var aegif, o; "name": "taro", o={ "age": 37, "name": "taro", "age": 37, } }; aegif = aegif = { ac: ac: { name: "accounting consulting" name: "accounting consulting", bc: }, name: "bussiness consulting" bc: { oc: name: "bussiness consulting", name: "oss consulting" }, oc: { name: "oss consulting", } };
  • 13. 分岐 CoffeeScript JavaScript if true var a; alert "ok" if (true) { alert("ok"); } a=0 switch a a = 0; when 0 switch (a) { alert 0 case 0: when 1 alert(0); break; alert 0 case 1: when 2 alert(0); break; alert 2 case 2: when 3 alert(2); break; alert 3 case 3: else alert(3); alert "else" break; default: alert("else"); }
  • 14. Function CoffeeScript JavaScript ok = -> var ok, square, square2, cube; alert "ok" ok = function() { return alert("ok"); # function with arg }; square = (v) -> square = function(v) { return v*v return v * v; }; square2 = (v) -> return v*v square2 = function(v) { return v * v; cube = (x) -> square(x)*x }; cube = function(x) { return square(x) * x; };
  • 16. 前準備 ■ サンプルアプリケーションの用意 ‣ $ rails new coffeetest && cd coffeetest ‣ $ rm public/index.html ‣ $ rails g controller top index ‣ $ bundle -V install ‣ $ rails g controller top index ‣ app/views/top/index.html.erbを変更 ‣ app/assets/javascripts/top/js.coffeeを変更 ■ デモ的なもの
  • 17. CoffeeScriptとコンパイル結果 CoffeeScript JavaScript $ -> (function() { $("input[type=radio]").click -> $("div#contents").css("background-color", $(function() { $(@).val()) return $ ("input[type=radio]").click(function() { return $ ("div#contents").css("background-color", $ (this).val()); }); }); }).call(this); JavaScriptコードは次のパスに存在 => tmp/cache/assets/D84/210/sprockets%2Fabd0103ccec2b428ac62c94e4c40b384
  • 18. jQueryのみで書いた場合との比較 CoffeeScript jQuery $ -> (function($) { $("input[type=radio]").click -> $(document).ready(function() { $("div#contents").css("background-color", $("input[type=radio]").click(function() { $(@).val()) $("div#contents").css("background- color", $(this).val()) }); }); })(jQuery);
  • 19. 所感 ■ 使いやすい ‣ 思ってたより簡単 ‣ これまでjQuery使ってたりRuby触ってた人なら1日もあれば何とかなりそう ‣ 最終的にJavaScriptに変換されるため、これまで通りFirebugでのデバッグも簡単そう ■ 複雑な処理でも大丈夫か? ‣ 軽いロジックのみ必要な仕事で採用してその後徐々に利用対象の仕事を大きくするのが良さげ ■ その他 ‣ とりあえずやってみるには敷居が低いのでお薦め ‣ .coffeeという拡張子の長さが欠点 ‣ コーヒー好きでない
  • 20. 参考情報 ■ 参考URL ‣ http://coffeescript.org/ ‣ http://javascripter.github.com/jsrepl.html ‣ http://www.oiax.jp/rails/coffee00.html
  • 21. Copyright 2012 tachibanakikaku.com. All rights reserved.

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n