48
Swift Scripting のすゝめ potatotips #23 株式会社ZUU yuichiro_t

Swift Scriptingのすゝめ

Embed Size (px)

Citation preview

Page 1: Swift Scriptingのすゝめ

Swift Scriptingのすゝめ

potatotips #23株式会社ZUUyuichiro_t

Page 2: Swift Scriptingのすゝめ

自己紹介• 高橋佑一朗

• 株式会社ZUU

• 新卒 iOSエンジニア(自称)

• ScalaやHaskellも大好物

• facebook: https://www.facebook.com/yuichiro.tt

• ←このキャラクターにピンときたら

• ちなみに犬派(猫アレルギー)

Page 3: Swift Scriptingのすゝめ

きっかけ

Page 4: Swift Scriptingのすゝめ

• 何かスクリプト言語使えた方がちょっとしたもの作るとき色々便利だよなー

Page 5: Swift Scriptingのすゝめ

• 何かスクリプト言語使えた方がちょっとしたもの作るとき色々便利だよなー

• スクリプト言語といえば? ruby? python?

Page 6: Swift Scriptingのすゝめ

• 何かスクリプト言語使えた方がちょっとしたもの作るとき色々便利だよなー

• スクリプト言語といえば? ruby? python?

• 型が無いのは嫌!

Page 7: Swift Scriptingのすゝめ

• 何かスクリプト言語使えた方がちょっとしたもの作るとき色々便利だよなー

• スクリプト言語といえば? ruby? python?

• 型が無いのは嫌!

• Scalaでスクリプト書くのは大変・・・(́・ω・`)

Page 8: Swift Scriptingのすゝめ

• 何かスクリプト言語使えた方がちょっとしたもの作るとき色々便利だよなー

• スクリプト言語といえば? ruby? python?

• 型が無いのは嫌!

• Scalaでスクリプト書くのは大変・・・(́・ω・`)

• HaskellもいいけどCabalうまく動かない・・・(́・ω・`)

Page 9: Swift Scriptingのすゝめ

• 何かスクリプト言語使えた方がちょっとしたもの作るとき色々便利だよなー

• スクリプト言語といえば? ruby? python?

• 型が無いのは嫌!

• Scalaでスクリプト書くのは大変・・・(́・ω・`)

• HaskellもいいけどCabalうまく動かない・・・(́・ω・`)

• そんなときにrealmのこの記事↓を発見https://realm.io/jp/news/swift-scripting/

Page 10: Swift Scriptingのすゝめ

Swiftでスクリプトが書ける!?

Page 11: Swift Scriptingのすゝめ
Page 12: Swift Scriptingのすゝめ

ちょっと待って

Page 13: Swift Scriptingのすゝめ

Scalaの時みたいに大変なんじゃね?(́・ω・`)

Page 14: Swift Scriptingのすゝめ

Swift Scriptの準備

Page 15: Swift Scriptingのすゝめ

1. ファイル先頭にshebangを入れる

1 #!/usr/bin/env xcrun swift2 print(“Hello! Swift")

Page 16: Swift Scriptingのすゝめ

2. ファイルに実行権限を付与

$ chmod +x sample.swift

Page 17: Swift Scriptingのすゝめ

おしまい!

Page 18: Swift Scriptingのすゝめ

めっちゃ簡単!

Page 19: Swift Scriptingのすゝめ

色々書いてみた

Page 20: Swift Scriptingのすゝめ

Splatoon Web Scraper

Page 21: Swift Scriptingのすゝめ

Splatoon Web Scraper• 特定のWebサイトからSplatoonのブキの種類と名前を抽出してくるだけ

• Splatoonのブキの使用率を可視化するアプリを作りたかったのでブキの名前と種類の一覧を取得したかった

• html解析にはKannaを使用https://github.com/tid-kijyun/Kanna

• ライブラリ管理にはCarthageを使用https://github.com/Carthage/Carthage

• ソースコードはこちらhttps://gist.github.com/yuichirokato/fa15a450bc2cc3672b62

Page 22: Swift Scriptingのすゝめ

苦労した・困った点

Page 23: Swift Scriptingのすゝめ

1. ライブラリどうやって使うん?

Page 24: Swift Scriptingのすゝめ

shebangでフレームワークのパスを指定してあげればいいらしい

1 #!/usr/bin/env xcrun swift -F Carthage/Build/Mac/

↑コレを追加

Page 25: Swift Scriptingのすゝめ

shebangでフレームワークのパスを指定してあげればいいらしい

1 #!/usr/bin/env xcrun swift -F Carthage/Build/Mac/ 2

↑後はいつもどおりimport

import Bond

Page 26: Swift Scriptingのすゝめ

2. 非同期処理が終わるまで待ってくれない!

Page 27: Swift Scriptingのすゝめ

例えばasync.swift 1 #!/usr/bin/env xcrun swift 2 func asyncTask(onComplete: () -> Void) { 3 // some code… 4 onComplete() 5 } 6 7 asyncTask { print("Complete!") }

→コンソールにComplete!と表示されてほしい

Page 28: Swift Scriptingのすゝめ

例えばasync.swift 1 #!/usr/bin/env xcrun swift 2 func asyncTask(onComplete: () -> Void) { 3 // some code… 4 onComplete() 5 } 6 7 asyncTask { print("Complete!") }

→(当然ですが)何も表示されない・・・

Page 29: Swift Scriptingのすゝめ

どうしよう・・・(́;ω;`)ブワッ

Page 30: Swift Scriptingのすゝめ

Swift Script Runner

Page 31: Swift Scriptingのすゝめ

Swift Script Runner• https://github.com/mgrebenets/SwiftScriptRunner

• お手軽に非同期処理の待ち合わせをさせられるライブラリ

Page 32: Swift Scriptingのすゝめ

使い方async.swift 1 #!/usr/bin/env xcrun swift -F Carthage/Build/Mac/ 2 3 import SwiftScriptRunner 4 5 func asyncTask(onComplete: () -> Void) { 6 // some code… 7 onComplete() 8 } 9 10 let runner = SwiftScriptRunner() ←これを追加 11 runner.lock() ←これを追加 12 asyncTask { 13 print(“Complete!”) // ここも実行される! 14 runner.unlock() ←これを追加 15 } 16 runner.wait() ←これを追加

Page 33: Swift Scriptingのすゝめ

その他困ったこと• Accountsフレームワークがエラーを吐いて使えない

→ El Capitanのエラーらしい?https://forums.developer.apple.com/thread/20030

Page 34: Swift Scriptingのすゝめ

その他困ったこと• Accountsフレームワークがエラーを吐いて使えない

→ El Capitanのエラーらしい?https://forums.developer.apple.com/thread/20030

• ファイル単位でのimportが出来ない→ 自分でモジュール(ライブラリ)を作成して読み込むしか無い

Page 35: Swift Scriptingのすゝめ

その他困ったこと• Accountsフレームワークがエラーを吐いて使えない

→ El Capitanのエラーらしい? https://forums.developer.apple.com/thread/20030

• ファイル単位でのimportが出来ない → 自分でモジュール(ライブラリ)を作成して読み込むしか無い

• 使用できないライブラリがある → import は成功してるけど、シンボルが解決できていない?実行データ(dylib)が必要? http://blog.skipbit.jp/2014/08/swift-command-line-2.html

Page 36: Swift Scriptingのすゝめ

オマケ

Page 37: Swift Scriptingのすゝめ

taylor.swift• 出落ち感MAXだけど一度やってみたかった

Page 38: Swift Scriptingのすゝめ

taylor.swift• 出落ち感MAXだけど一度やってみたかった

• 心が荒んだ時に見ると癒やされる

Page 39: Swift Scriptingのすゝめ

taylor.swift• 出落ち感MAXだけど一度やってみたかった

• 心が荒んだ時に見ると癒やされる

• 何故かTaylor Swiftじゃない人が混じってる

Page 40: Swift Scriptingのすゝめ

taylor.swift• 出落ち感MAXだけど一度やってみたかった

• 心が荒んだ時に見ると癒やされる

• 何故かTaylor Swiftじゃない人が混じってる

• 何が言いたかったかというとAppKitも使えるよ!ということ

Page 41: Swift Scriptingのすゝめ

まとめ• SwiftでScriptが簡単に書ける!

Page 42: Swift Scriptingのすゝめ

まとめ• SwiftでScriptが簡単に書ける!

• ライブラリも比較的簡単に扱える

Page 43: Swift Scriptingのすゝめ

まとめ• SwiftでScriptが簡単に書ける!

• ライブラリも比較的簡単に扱える

• AppKitも使えるので簡単なGUIツールもさくっと作れる(?)

Page 44: Swift Scriptingのすゝめ

まとめ• SwiftでScriptが簡単に書ける!

• ライブラリも比較的簡単に扱える

• AppKitも使えるので簡単なGUIツールもさくっと作れる(?)

• オープンソース化される予定なので今後使える範囲が広がるかも?

Page 45: Swift Scriptingのすゝめ

まとめ• SwiftでScriptが簡単に書ける!

• ライブラリも比較的簡単に扱える

• AppKitも使えるので簡単なGUIツールもさくっと作れる(?)

• オープンソース化される予定なので今後使える範囲が広がるかも?

• ファイルごとにimport出来ないのが残念

Page 46: Swift Scriptingのすゝめ

まとめ• SwiftでScriptが簡単に書ける!

• ライブラリも比較的簡単に扱える

• AppKitも使えるので簡単なGUIツールもさくっと作れる(?)

• オープンソース化される予定なので今後使える範囲が広がるかも?

• ファイルごとにimport出来ないのが残念

• iOS開発のお供に!

Page 47: Swift Scriptingのすゝめ

ZUUで一緒に働いてくれるエンジニアさん

デザイナーさん募集中!

Page 48: Swift Scriptingのすゝめ

ご静聴ありがとうございました!