2017年3月 9日

iOS

try! Swift Tokyo 2017 のハッカソンに参加しました #tryswifthack

  • このエントリーをはてなブックマークに追加


こんにちは。
Yahoo!乗換案内のiOSアプリを担当している 2016 年新卒の田中 (@tattn) です。

2017年3月2日と3日に開催された「try! Swift Tokyo 2017」とその翌日に開催されたハッカソンに始めて参加しました。



try! Swift Tokyo 2017
https://www.tryswift.co/tokyo/jp

try! Swift Tokyo 2017 ハッカソン
https://tryswift.devpost.com/

ハッカソンの結果としては、残念ながら賞をいただいくことはできませんでしたが、とても楽しい経験ができましたので、そのイベントレポートを行いたいと思います!

try! Swift Tokyo 2017 ハッカソンのTwitterハッシュタグは #tryswifthack です。
併せてご覧になると面白いと思います。

また、ヤフーは try! Swift Tokyo 2017 のスポンサーとしてブースを出展していました。
その様子に関しては こちら をご覧ください。

会場

ハッカソン会場は講演が行われた場所とは異なる場所でした。

WiFi 機器は同じものが使われているらしく、会場に入って PC を開くと、もうネットに繋がっていました (≧▽≦)
こんなにスムーズに開発をスタートできるハッカソンは初めてです。

Workshop

他の部屋では

など様々なワークショップが行われていたようです。
私たちはハッカソンにフルコミットしていたので見ることができませんでした><
来年はこちらに参加してみるのも面白そうだと思いました!

食事・ドリンク

朝食には個人的に大好きなバームクーヘンやクッキーが用意され、コーヒーやお茶も飲み放題で作業が捗りました!

昼食はお弁当が用意されていたのですが、余っているらしく、足りない人は好きなだけ食べても良いようでした 笑
(私は 1つでお腹いっぱいでしたが…)

開発

ここからは本題のハッカソンでの開発についてレポートします。

開発時間は約7時間 (ランチタイムを除く) で、とても短かったです。
アイデアは事前に考えておいても良いとのことでしたので、私たちはアイデアのみ、事前に決めて臨みました。

ハッカソンのテーマ

「Pushing the Limits of Swift / Swiftでイノベーションを起こそう!」

Swiftハッカソンは、try! Swift参加者同士が共に作業し、そしてカンファレンスで学んだ事を実践できるコミュニティイベントです。

参加者は、Swiftを使ったものであれば、ツール・フレームワーク・ウェブサイト・Androidアプリ・iOSアプリ・オープンソースSwiftへの貢献、スクリプトの作成などに取り組むことが出来ます。

(https://tryswift.devpost.com/ からの引用)

ということで、Swift を利用したものであれば、自由に開発してよさそうなテーマでした。

作ったもの

私たちが作った作品は、その名も

「SwiftyDeckset」

です。

!?

どこかで見たことがある名前でしょうか?
そうなんです、Decksetという有名なプレゼンテーションツールがあります。

その名前から想像できるように、私たちはSwiftでプレゼンテーションツールを作りました!

SwiftyDeckset - Run Swift code on your slides
https://devpost.com/software/swiftydeckset

そして、メイン機能としては、そのプレゼンテーションツールの中でSwiftのコードを編集 & 実行することができます ヽ(`▽´)/

LT をしながら tips のコードを実行したり、初心者向けに Swift ハンズオンをしたりする際にとても便利です!

開発の経緯

try! Swift が始まる数日前に、社内で自由に参加できる Go 言語のハンズオンセミナーがありました。
そこで Go の present というスライド作成用のパッケージの存在を知りました。

なんと、そのパッケージで作成したスライドはその上で Go 言語を実行していたのです。
私たちは衝撃を受け、Swift でもそれをやりたい!ということで作ることにしました。

下記で Go 言語の present で作成されたプレゼンテーションを閲覧することができます。
https://talks.golang.org/

チーム

アイデア段階では、社内の2016年新卒の iOS エンジニア3人でチームを組んでいました。
そして、ハッカソン会場内で社内の先輩 iOS エンジニアの方と出会い、チームに加入していただきました。

というわけで、計4人の社内 iOS エンジニアで参戦しました。

開発スタイル

使用したコミュニケーションツールは

  • Github

のみです 笑

もはや Slack さえも使わずに開発を行いました。
時間のない中、最も素早く意思疎通する方法はリアルコミュニケーションです。

メモやタスクなどは Github の Issue や Projects 機能を使って残しておきました。
それ以外は心で通じ合っていました 笑

必要なタスクを Github Projects で管理 & Issue 化し、余裕のある人がタスクを取っていく方法で開発を進めていきました。

その時の Issue や Pull Request

アイデア決め時のIssue

Files changedが多すぎるプルリクエスト

終了10分前くらいの焦りの気持ち

業務では読む人が分かりやすいように記述することを心がけていますが、ハッカソンではその時間も惜しまれます。
ハッカソンでのみ味わう事ができる張り詰めた空気感がそこにはありました。

仕組み

MacOS アプリ、iOS アプリなど色々な実現方法を考えましたが、約7時間という時間の中で現実的な方法を取ることにしました。

それは

  • Server Side Swift
  • remark.js

を使ってブラウザで動かすという方法です。

remark.jsは JavaScript 製のプレゼンテーションツールです。この技術を利用してプレゼンテーション部分を実現しました。

Server Side Swift のフレームワークには Vapor を使用しました。
選定理由としてはチームメンバーの中に経験者が2人いたためです。
Vaporを利用してWebアプリとして動かし、Swiftをスライド上で実行するためのAPIも作りました。

アーキテクチャ図

SwiftでSwiftを実行するAPI

この作品で一番の肝はこの機能でした。
一見難しいかと思われたのですが、意外にも簡単に実現できました。

その方法はサーバーサイドで

$ swift tmp.swift

を実行するという方法です。 (実にハッカソンらしい解決策です)

Swift のコアライブラリである Foundation には Process という外部プログラムを実行する仕組みがあります。
それを利用して、Swift 上から Swift を実行することに成功しました。

後は API で受け取った文字列を一時ファイル化して、その仕組みに渡し、結果をレスポンスとして返してあげることで、完成しました。

しかし一筋縄では行かず、さくらの VPS の Ubuntu でホスティングしてみると、Process is an unresolved identifier と言われてしまい、実行できませんでした><

調べてみると、Swift 3.0.2 (2017年3月現在) では Linux 用の Swift から Process を利用できないようです…

かなり焦りましたが、代用として Task を利用することで同様の機能を実現できました。

このように、あまり使われていない機能を触ってみるというのもハッカソンの醍醐味の1つだと思います。

まとめ

作りたいと思っていたものが、短時間でここまで実現することができて、とても嬉しかったです。
Swift のハッカソンだからこそ、チャレンジすることができたのだと思います。

私たちのチームは完全に社内メンバーでしたが、始めて出会った方、海外の方とチームを組むのもとても良いと思いました。
自然言語は日本語と英語で異なっていても、Swift は世界共通です。コードで対話することができると思います。

英語が苦手な方も安心してください。
今回のハッカソンでは日本語で発表されている方が多かったです。
発表時のデモに映像を利用したり、字幕をつけたりすると、海外の方にも分かってもらえるようでした。

ここでしか味わえない体験がありましたので、来年も参加したいと思いました!

今回参加できなかった方も来年はぜひ、足を運んでみてはいかがでしょうか。

後日談

作ったものをそのままにしておくのはもったいないということで、Swift をランタイムに実行する仕組みをライブラリ化しました。

ぜひ触ってみたいという方は、 Playground で実行して遊んでみてください。

https://github.com/tattn/SwiftRunner

ヤフーが iOS の勉強会を主催します!

最後になりますが、1点告知をさせてください。

3月16日にヤフーが主催するiOSアプリ開発の勉強会

CAMPFIRE iOS #1

が開催されます。

CAMPFIRE iOS は毎回 iOS に関するあるテーマを設定し、交流することを目的としています。

3月16日のテーマはアプリの設計です。
僭越ながら私、田中 (@tattn) も発表させていただきます。

会場は LODGE です。

LODGE
https://lodge.yahoo.co.jp/

LODGE は 2016年11月にオープンしたばかりの Yahoo! JAPAN のコワーキングスペースです。

第1回の募集は締切となってしまいましたが、
ご興味のある方はぜひ、次回参加してみてください!

Yahoo! JAPANでは情報技術を駆使して人々や社会の課題を一緒に解決していける方を募集しています。詳しくは採用情報をご覧ください。

  • このエントリーをはてなブックマークに追加