Swift Scriptingのすゝめ

Preview:

Citation preview

Swift Scriptingのすゝめ

potatotips #23株式会社ZUUyuichiro_t

自己紹介• 高橋佑一朗

• 株式会社ZUU

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

• ScalaやHaskellも大好物

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

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

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

きっかけ

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

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

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

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

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

• 型が無いのは嫌!

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

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

• 型が無いのは嫌!

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

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

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

• 型が無いのは嫌!

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

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

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

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

• 型が無いのは嫌!

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

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

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

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

ちょっと待って

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

Swift Scriptの準備

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

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

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

$ chmod +x sample.swift

おしまい!

めっちゃ簡単!

色々書いてみた

Splatoon Web Scraper

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

苦労した・困った点

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

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

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

↑コレを追加

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

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

↑後はいつもどおりimport

import Bond

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

例えば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!と表示されてほしい

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

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

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

Swift Script Runner

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

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

使い方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() ←これを追加

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

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

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

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

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

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

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

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

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

オマケ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

• iOS開発のお供に!

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

デザイナーさん募集中!

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