SlideShare una empresa de Scribd logo
1 de 13
Descargar para leer sin conexión
LLプログラマ向けExtensionsと	
  
テストライブラリ	
  Quickの紹介	
第2回	
  Swi2	
  勉強会	
  in	
  TechBuzz	
  
	
  
KitchHike,	
  Inc.	
  藤崎祥見	
  
2014/07/18
自己紹介	
•  藤崎祥見(フジサキ ショウケン)	
  
•  KitchHike,	
  Inc.	
  代表取締役	
  Co-­‐CEO	
  	
  
•  普段はRuby	
  on	
  Railsで開発しています。	
  
•  MongoDB	
  JP	
  副代表	
  	
  
gihyo.jpで「MongoDBでゆるふわDB体験」を連載	
  	
  
•  TwiQer:	
  @syokenz,	
  Qiita:	
  syokenz	
  
•  www.facebook.com/fujisaki.shoken	
  
•  Swi2経験:	
  2泊3日の開発合宿で麻雀の捨て牌候補を表示す
るアプリ作成
What is KitchHike	
現地人とコミュニケーションを取りたい旅行者が、
料理を作ってくれる現地人の家に
遊びにいけるサービスです。
hQps://kitchhike.com/
LLプログラマが幸せになれるそうな	
  
Swi2	
  Extensionsの紹介	
•  Extensionsとは	
  
•  ExSwi2	
  
•  Pythonic.swi2	
  
•  Dollar.swi2	
  と	
  __.swi2	
  
•  RubySwi2	
  
•  おまけ:	
  テストフレームワークQuick	
  
Extensionsとは	
•  Swi2の標準クラスを拡張できる仕組み	
  
•  ObjecYve-­‐Cでは拡張カテゴリと呼ばれていたもの	
  
extension Array {!
func each(f: (Element) -> ()) {!
for e in self {!
f(e)!
}!
}!
}!
!
Extensions	
  サンプルコード:	
  Arrayにeachを実装する	
	
> [1,2,3].each { println($0) }!
=> 1!
=> 2!
=> 3
ExSwi2	
•  hQps://github.com/pNre/ExSwi2	
  
•  JavaScript	
  (Lo-­‐Dash,	
  Underscore)	
  &	
  Rubyにインスパイア	
  
•  Swi2クラス拡張タイプ	
  
•  ファーストコミット	
  2014/06/04(WWDCの次の日)	
  
•  仕事早すぎぃ!	
  
356	
let array = [5, 1, 0, 10]!
array.each { item in println(item) }!
!
var items = Int[]()!
(0..2).each { items.append($0) }!
!
let dic = ["A": 1, "B": 2, "C": 3]!
dic.each { key, value in println(key, value) }!
dic.has(“A”)!
!
let dic = [ "A": 1, "B": 2, "C": 3 ]!
let mapped = dic.map(mapFunction: { return ($0 + "!",
$1 + 1) })!
println(mapped) 	
ExSwi2	
  サンプルコード
Pythonic.Swi2	
•  hQps://github.com/pracYcalswi2/Pythonic.swi2	
  
•  Python	
  
•  Swi2クラス拡張タイプ	
  
•  タブとは何だったのか?	
  
227	
if re.search("^foo", "foobar") {!
println(["foo", "bar", "zonk"].index("foo")) // 0!
println(["foo", "bar", "zonk"].count("bar")) // 1!
println(["foo", "bar", "zonk"].count("zoo")) // 0!
}!
!
if any(["foo", "bar", "zonk"]) {!
println(chr(ord("a"))) // a!
}!
!
var greeting = " hello pythonista "!
if greeting.strip().startswith("hello") {!
println(greeting.strip().title()) // Hello Pythonista!
}	
Pyhonic.Swi2	
  サンプルコード
•  hQps://github.com/ankurp/Dollar.swi2	
  
•  Lo-­‐Dash	
  or	
  Underscoreにインスパイア	
  
•  独自クラス(なので厳密にはExtensionsでは無い)	
  
•  同じプロジェクト内にCentというSwi2拡張タイプもある	
  
•  みんなの$が大好き	
  
	
  
•  hQps://github.com/lotz84/__.swi2	
  
•  Underscore.jsのクローン	
  
•  独自クラス(なので厳密にはExtensionsでは無い)	
  
•  _(アンダースコア)は2つ	
  
__.swi2	
 55	
1,022	
Dollar.swi2
$.at(["ant", "bat", "cat", "dog", "egg"], indexes: 0, 2, 4)!
=> ["ant", "cat", "egg”]!
!
$.contains([1, 2, 3, 1, 2, 3], value: 2) !
=> True!
$.range(0, endVal: 20, incrementBy: 5) !
=> [0, 5, 10, 15]!
!
let fun = $.bind({ (names: String...) -> String in!
let people = $.join(names, separator: " from ")!
return "Hello (people)"!
}, "Ankur", "Swift")!
$.times(2, function: fun) as String[] !
=> ["Hello Ankur from Swift", "Hello Ankur from Swift"]!
	
Dollar.Swi2	
  サンプルコード
RubySwi2	
•  hQps://github.com/Appletone/RubySwi2	
  
•  Ruby	
  
•  ファーストコミット	
  2014/07/16	
  メソッド少なすぎぃ!	
  
•  とりあえずStarした	
  
1	
5.times {!
println("Hey! You look really like Ruby")!
}!
!
5.upto(10) {!
println($0)!
}!
!
"HELLO".capitalized() !
=> Hello	
RubySwi2	
  サンプルコード
Quick	
•  hQps://github.com/Quick/Quick	
  
•  Specライクなテストフレームワーク	
  
•  実際に使った。幸せになれた。ドキュメントも充実している。	
  
705	
import Quick!
import Nimble!
!
class DolphinSpec: QuickSpec {!
override func spec() {!
it("is friendly") {!
expect(Dolphin().isFriendly).to.beTrue()!
}!
!
it("is smart") {!
expect(Dolphin().isSmart).to.beTrue()!
}!
}!
}	
Quick	
  サンプルコード
まとめとTIPS	
•  プロジェクトにファイルを置くだけ手軽に導入できる	
  
•  Ruby使っている人にはQuickおすすめ	
  
o  Spec!	
  Spec!	
  
•  プロジェクトで導入するには、バージョンを固定するのが吉	
  
o  仕様変更もたびたびあるので下手にUpdateすると動かなくなる	
  
•  必要な部分だけつまんで導入するのもあり	
  
o  リポジトリのソースを参考に自分で書くのもあり	
  
•  他のExtensionsとのコンフリクトに注意!	
  
o  Arrayクラスはだいたい拡張されている
https://kitchhike.com/

Más contenido relacionado

La actualidad más candente

Gitを使ったRoute53の管理
Gitを使ったRoute53の管理Gitを使ったRoute53の管理
Gitを使ったRoute53の管理
Sugawara Genki
 
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をするSlack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
sairoutine
 
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
豊明 尾古
 
Cocolumberjackの使い方 Ios lt 20140327
Cocolumberjackの使い方 Ios lt 20140327Cocolumberjackの使い方 Ios lt 20140327
Cocolumberjackの使い方 Ios lt 20140327
Ken Haneda
 
Herokumeetup8 growライトニングトーク
Herokumeetup8 growライトニングトークHerokumeetup8 growライトニングトーク
Herokumeetup8 growライトニングトーク
淳 竹野
 
Xcodeでmrubyをステップ実行してみた
Xcodeでmrubyをステップ実行してみたXcodeでmrubyをステップ実行してみた
Xcodeでmrubyをステップ実行してみた
firewood
 

La actualidad más candente (20)

Gitを使ったRoute53の管理
Gitを使ったRoute53の管理Gitを使ったRoute53の管理
Gitを使ったRoute53の管理
 
properties, yaml, and me
properties, yaml, and meproperties, yaml, and me
properties, yaml, and me
 
hubotで快適BOT生活
hubotで快適BOT生活 hubotで快適BOT生活
hubotで快適BOT生活
 
WordPress on PHP7 on CentOS7 on Saraku-VPS
WordPress on PHP7 on CentOS7 on Saraku-VPSWordPress on PHP7 on CentOS7 on Saraku-VPS
WordPress on PHP7 on CentOS7 on Saraku-VPS
 
Kotlinの紹介
Kotlinの紹介Kotlinの紹介
Kotlinの紹介
 
Bashのヒストリ展開を活用する
Bashのヒストリ展開を活用するBashのヒストリ展開を活用する
Bashのヒストリ展開を活用する
 
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をするSlack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
 
PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話
 
Swift - Result<t>型で結果を返すのは邪道か,王道か
Swift - Result<t>型で結果を返すのは邪道か,王道かSwift - Result<t>型で結果を返すのは邪道か,王道か
Swift - Result<t>型で結果を返すのは邪道か,王道か
 
Git紹介
Git紹介Git紹介
Git紹介
 
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
 
PSR-3 Logger Interfaceの紹介
PSR-3 Logger Interfaceの紹介PSR-3 Logger Interfaceの紹介
PSR-3 Logger Interfaceの紹介
 
Cocolumberjackの使い方 Ios lt 20140327
Cocolumberjackの使い方 Ios lt 20140327Cocolumberjackの使い方 Ios lt 20140327
Cocolumberjackの使い方 Ios lt 20140327
 
GR-CITRUSの紹介
GR-CITRUSの紹介GR-CITRUSの紹介
GR-CITRUSの紹介
 
Herokumeetup8 growライトニングトーク
Herokumeetup8 growライトニングトークHerokumeetup8 growライトニングトーク
Herokumeetup8 growライトニングトーク
 
RubyでGUIアプリケーションを書く
RubyでGUIアプリケーションを書くRubyでGUIアプリケーションを書く
RubyでGUIアプリケーションを書く
 
Etherpad-lite導入
Etherpad-lite導入Etherpad-lite導入
Etherpad-lite導入
 
Xcodeでmrubyをステップ実行してみた
Xcodeでmrubyをステップ実行してみたXcodeでmrubyをステップ実行してみた
Xcodeでmrubyをステップ実行してみた
 
gitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみましたgitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみました
 
Git勉強会
Git勉強会Git勉強会
Git勉強会
 

Similar a LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介

オープンセミナー香川2012 LT
オープンセミナー香川2012 LTオープンセミナー香川2012 LT
オープンセミナー香川2012 LT
Kouta Imanaka
 

Similar a LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介 (20)

今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
 
オープンセミナー香川2012 LT
オープンセミナー香川2012 LTオープンセミナー香川2012 LT
オープンセミナー香川2012 LT
 
oFの話題が殆ど出ない oF jp Summer Workout
oFの話題が殆ど出ない oF jp Summer WorkoutoFの話題が殆ど出ない oF jp Summer Workout
oFの話題が殆ど出ない oF jp Summer Workout
 
Swiftで外部ライブラリを使ってみよう
Swiftで外部ライブラリを使ってみようSwiftで外部ライブラリを使ってみよう
Swiftで外部ライブラリを使ってみよう
 
コミュニティのある風景
コミュニティのある風景コミュニティのある風景
コミュニティのある風景
 
Wantedlyを2年間Herokuで運用した話
Wantedlyを2年間Herokuで運用した話Wantedlyを2年間Herokuで運用した話
Wantedlyを2年間Herokuで運用した話
 
既存プロジェクトにSwiftLintを導入した話
既存プロジェクトにSwiftLintを導入した話既存プロジェクトにSwiftLintを導入した話
既存プロジェクトにSwiftLintを導入した話
 
Metahub for github
Metahub for githubMetahub for github
Metahub for github
 
SocketStream入門
SocketStream入門SocketStream入門
SocketStream入門
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
 
"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach
 
CouchDB+OpenSocial - OSC 2009/Fall Tokyo
CouchDB+OpenSocial - OSC 2009/Fall TokyoCouchDB+OpenSocial - OSC 2009/Fall Tokyo
CouchDB+OpenSocial - OSC 2009/Fall Tokyo
 
20150912わんくま大阪-Firefox OSの「いま」と「これから」
20150912わんくま大阪-Firefox OSの「いま」と「これから」20150912わんくま大阪-Firefox OSの「いま」と「これから」
20150912わんくま大阪-Firefox OSの「いま」と「これから」
 
MODXで超キレッキレのブログ作る秘訣公開します りたーんず!!!
MODXで超キレッキレのブログ作る秘訣公開します りたーんず!!!MODXで超キレッキレのブログ作る秘訣公開します りたーんず!!!
MODXで超キレッキレのブログ作る秘訣公開します りたーんず!!!
 
Swift Scriptingのすゝめ
Swift ScriptingのすゝめSwift Scriptingのすゝめ
Swift Scriptingのすゝめ
 
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3
 
らくちん Go言語
らくちん Go言語らくちん Go言語
らくちん Go言語
 
リブライズの裏側を見てみよう
リブライズの裏側を見てみようリブライズの裏側を見てみよう
リブライズの裏側を見てみよう
 
Scala lang evolution
Scala lang evolutionScala lang evolution
Scala lang evolution
 
Yapc2012資料
Yapc2012資料Yapc2012資料
Yapc2012資料
 

LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介

  • 1. LLプログラマ向けExtensionsと   テストライブラリ  Quickの紹介 第2回  Swi2  勉強会  in  TechBuzz     KitchHike,  Inc.  藤崎祥見   2014/07/18
  • 2. 自己紹介 •  藤崎祥見(フジサキ ショウケン)   •  KitchHike,  Inc.  代表取締役  Co-­‐CEO     •  普段はRuby  on  Railsで開発しています。   •  MongoDB  JP  副代表     gihyo.jpで「MongoDBでゆるふわDB体験」を連載     •  TwiQer:  @syokenz,  Qiita:  syokenz   •  www.facebook.com/fujisaki.shoken   •  Swi2経験:  2泊3日の開発合宿で麻雀の捨て牌候補を表示す るアプリ作成
  • 4. LLプログラマが幸せになれるそうな   Swi2  Extensionsの紹介 •  Extensionsとは   •  ExSwi2   •  Pythonic.swi2   •  Dollar.swi2  と  __.swi2   •  RubySwi2   •  おまけ:  テストフレームワークQuick  
  • 5. Extensionsとは •  Swi2の標準クラスを拡張できる仕組み   •  ObjecYve-­‐Cでは拡張カテゴリと呼ばれていたもの   extension Array {! func each(f: (Element) -> ()) {! for e in self {! f(e)! }! }! }! ! Extensions  サンプルコード:  Arrayにeachを実装する > [1,2,3].each { println($0) }! => 1! => 2! => 3
  • 6. ExSwi2 •  hQps://github.com/pNre/ExSwi2   •  JavaScript  (Lo-­‐Dash,  Underscore)  &  Rubyにインスパイア   •  Swi2クラス拡張タイプ   •  ファーストコミット  2014/06/04(WWDCの次の日)   •  仕事早すぎぃ!   356 let array = [5, 1, 0, 10]! array.each { item in println(item) }! ! var items = Int[]()! (0..2).each { items.append($0) }! ! let dic = ["A": 1, "B": 2, "C": 3]! dic.each { key, value in println(key, value) }! dic.has(“A”)! ! let dic = [ "A": 1, "B": 2, "C": 3 ]! let mapped = dic.map(mapFunction: { return ($0 + "!", $1 + 1) })! println(mapped) ExSwi2  サンプルコード
  • 7. Pythonic.Swi2 •  hQps://github.com/pracYcalswi2/Pythonic.swi2   •  Python   •  Swi2クラス拡張タイプ   •  タブとは何だったのか?   227 if re.search("^foo", "foobar") {! println(["foo", "bar", "zonk"].index("foo")) // 0! println(["foo", "bar", "zonk"].count("bar")) // 1! println(["foo", "bar", "zonk"].count("zoo")) // 0! }! ! if any(["foo", "bar", "zonk"]) {! println(chr(ord("a"))) // a! }! ! var greeting = " hello pythonista "! if greeting.strip().startswith("hello") {! println(greeting.strip().title()) // Hello Pythonista! } Pyhonic.Swi2  サンプルコード
  • 8. •  hQps://github.com/ankurp/Dollar.swi2   •  Lo-­‐Dash  or  Underscoreにインスパイア   •  独自クラス(なので厳密にはExtensionsでは無い)   •  同じプロジェクト内にCentというSwi2拡張タイプもある   •  みんなの$が大好き     •  hQps://github.com/lotz84/__.swi2   •  Underscore.jsのクローン   •  独自クラス(なので厳密にはExtensionsでは無い)   •  _(アンダースコア)は2つ   __.swi2 55 1,022 Dollar.swi2
  • 9. $.at(["ant", "bat", "cat", "dog", "egg"], indexes: 0, 2, 4)! => ["ant", "cat", "egg”]! ! $.contains([1, 2, 3, 1, 2, 3], value: 2) ! => True! $.range(0, endVal: 20, incrementBy: 5) ! => [0, 5, 10, 15]! ! let fun = $.bind({ (names: String...) -> String in! let people = $.join(names, separator: " from ")! return "Hello (people)"! }, "Ankur", "Swift")! $.times(2, function: fun) as String[] ! => ["Hello Ankur from Swift", "Hello Ankur from Swift"]! Dollar.Swi2  サンプルコード
  • 10. RubySwi2 •  hQps://github.com/Appletone/RubySwi2   •  Ruby   •  ファーストコミット  2014/07/16  メソッド少なすぎぃ!   •  とりあえずStarした   1 5.times {! println("Hey! You look really like Ruby")! }! ! 5.upto(10) {! println($0)! }! ! "HELLO".capitalized() ! => Hello RubySwi2  サンプルコード
  • 11. Quick •  hQps://github.com/Quick/Quick   •  Specライクなテストフレームワーク   •  実際に使った。幸せになれた。ドキュメントも充実している。   705 import Quick! import Nimble! ! class DolphinSpec: QuickSpec {! override func spec() {! it("is friendly") {! expect(Dolphin().isFriendly).to.beTrue()! }! ! it("is smart") {! expect(Dolphin().isSmart).to.beTrue()! }! }! } Quick  サンプルコード
  • 12. まとめとTIPS •  プロジェクトにファイルを置くだけ手軽に導入できる   •  Ruby使っている人にはQuickおすすめ   o  Spec!  Spec!   •  プロジェクトで導入するには、バージョンを固定するのが吉   o  仕様変更もたびたびあるので下手にUpdateすると動かなくなる   •  必要な部分だけつまんで導入するのもあり   o  リポジトリのソースを参考に自分で書くのもあり   •  他のExtensionsとのコンフリクトに注意!   o  Arrayクラスはだいたい拡張されている