ユニファ開発者ブログ

ユニファ株式会社システム開発部メンバーによるブログです。

try! Swift 2018 に行ってきました

f:id:unifa_tech:20180309101205j:plain

ユニファのiOSエンジニアのしだです。
try! Swift 2018 が 3/1, 3/2 ベルサール新宿グランドでありました。

www.tryswift.co

try! Swift 初参加です!
今回は参加者・スタッフ合わせて800名ということだったので規模が大きいです。
他のカンファレンスだと、複数のセクション・ルームがあって聴きたいトークに移動したり、1つのトークが終わると休憩があるけれど、 try! Swift はセクションが1つだけなので移動がなく、複数のトークが続いたあと休憩になるので個人的に楽でよかったです。

また1つの発表の内容が濃くて、clang module、AST、SIL、SwiftNIO、Kitura、CoreML、Charles、AR、Kotlin、vDSP、Sourcery ... キーワードだけ上げても切りがないです。

気になった講演

いくつか面白かった講演のサンプルコードを動かしたりしてみました。

デジタル信号処理 in Swift (スライド

そろそろ Swift で FFT しなければと思っていたので参考になりました。 Accelerate.framework に DSP の API が用意されていたのを知らなかったです。

AudioToolbox の話が半分あったので vDSP 自体の話はそこまで多くはありませんでしたが、Accelerate の framework のほうはパフォーマンス最適化されてるから早いということです。
(ちなみに、参考URLをみたら vDSPの「v」はVectorのことみたいです。)

デモでリアルタイムで DSP 出来てたのですごいなと思いました。

f:id:unifa_tech:20180309121114g:plain

以下のリポジトリからデモのアプリが動かせます。 これを動かしているだけでも楽しいです。

github.com

Swift によるアルゴリズムの可視化 (スライド

UIBezierPathfunc addCurve(to endPoint: CGPoint, controlPoint1: CGPoint, controlPoint2: CGPoint) メソッドがあって、この controlPoint1、controlPoint2という引数を説明するために、一からベジェ曲線の実装をPlaygroundで行っていました。

f:id:unifa_tech:20180309114704j:plain

実際にベジェ曲線のアルゴリズムを Playground をつかって可視化していてデモも面白かったです。 また CoreGraphics で描画するときは、一度 Playground を使って書いてみるというは新たに気づきを得ました。
以下のリポジトリの Playground で見ることができます。

github.com

SwiftyPi (スライド

Raspberry Pi で Swift が動くのは知らなかったです。 ただ、Swfit 4がまだサポートされていないのが少し残念でした。 SwiftyGPIOを使えばすぐLチカまでできます。

ちょうど、Raspberry Pi Zero Wを購入したばかりだったので試しに環境を作って見ました。 手順はスライドにもあるこちら のページを参考にしてます。

必要なビルドツールをインストール

$ sudo apt-get update
$ sudo apt-get install clang cmake ninja-build

/// swift を実行したときにエラーが出たので入れておく
$ sudo apt-get install libpthread-workqueue0

Swift 3.1.1 インストール

swiftenv から入れようと思いましたが Raspberry Pi ZeroW だと swift のコンパイルに時間かかりすぎて諦めました。

ビルド済みのものが配布されていたのでそちらを使用しました。 こちらにある ARMv6 の Zero/W 向けが利用できます。

$ wget https://www.dropbox.com/s/hji6hwd6hd2cua7/swift-3.1.1-Rpi1armv6-RaspbianStretchAug17_dispatchfix.tgz
$ tar zxvf swift-3.1.1-Rpi1armv6-RaspbianStretchAug17_dispatchfix.tgz
$ echo 'export PATH="$PATH:~/usr/bin"' >> ~/.bashrc
$ source ~/.bashrc

$ swift --version
Swift version 3.1 (swift-3.1.1-RELEASE)
Target: armv6-unknown-linux-gnueabihf

プロジェクト作成

$ mkdir BlinkLED
$ cd BlinkLED
$ swift package init --type executable
Package.swift
// swift-tools-version:3.1
import PackageDescription

let package = Package(
    name: "BlinkLED",
    dependencies: [
        .Package(url: "https://github.com/uraimo/SwiftyGPIO.git", majorVersion: 0),
    ]
)
Sources/main.swift
import Glibc
import SwiftyGPIO

let gpios = SwiftyGPIO.GPIOs(for: .RaspberryPiPlusZero)
guard let gp = gpios[.P24] else { fatalError('Could not found .P24') }
gp.direction = .OUT
while true {
    gp.value = gp.value == 0 ? 1 : 0
    sleep(1)
}

ビルド & 実行

$ swift build && .build/debug/BlinkLED

f:id:unifa_tech:20180309104550g:plain

Raspberry Pi でSwiftが動いたので感動です、いろいろ遊んでみたいと思います。

終わりに

AST、SILなど知らないことも多かったのでとても刺激を受けました。
Charles や Sourcery など開発に役立ちそうなものもあったので弊社の開発で取り入れられる部分は積極的に利用して行きたいと思います。
参加者の皆さまお疲れさまでした。