第6回 カジュアル Swift 勉強会を開催しました #cswift

カジュアル Swift 勉強会

2016年4月2日に『カジュアル Swift プログラミング勉強会』の第6回目を横浜の青葉台で開催しました。


に、横浜市青葉台の 青葉台レンタルスペース で『第6回 カジュアル Swift プログラミング勉強会 』を開催しました。

この会で大事にしたいと思うことは、次の3つです。

今回も、いつも来てくださる顔ぶれに加えて、新しい顔ぶれもちらほらいらして、とても嬉しい限りです。

発足の経緯

発足のきっかけを思い出したように書いてみると、まだ Swift の話題が世間的に一般的ではなかった頃、Swift に熱心に取り組まれていた @royskimJPさんCocoa勉強会 関東 で出会い、それまで独りで学ぶだけだった楽しさを共有できたことは記憶に深く刻まれています。

もしそれだけではこの会を立ち上げる動機には足りなかったと思うんですけど、その楽しい団欒の中で指摘された Swift の構造体はオブジェクトじゃないよ😁 という言葉。自分はそれまで自分なりに Swift を解釈してきて、それなりに Swift の世界観を掴めたかなって思っていたところだったので、それを覆すこの一言はとても鮮明に覚えています。それに気付かされ、そして改めて構造体と向き合った時、自分の中の Swift の世界がさらに大きく広がりました。

やっぱり人と話せることって大事だなって思ったことが、この会の発足に強く繋がりました。ただ聞くではなく互いに思うことを交換し合える、そんな場所を作れたらもっと有意義な時間になりそう、そんな願いも込めてみながら。


これまでに来てくださったみんなの目にはどう映るかは判らないですけど、自分の目にはそんな願いをみんなが汲んでくれて、理想に近い勉強会を作ってくれてる、そんな風に感じます。

おかげさまで、第6回も無事に終えることができました。ありがとうございます!

まずは自習から

今回は、先日に他の勉強会で出会った @takasekさん との自習から始まりました。というのも先日の勉強会でちょっと声をかけていただいたんですけど、その時に時間がなくて話しきれなかったので、手早く会場の準備を済ませて早めに来てもらったのでした。

一緒にあれこれ検討するも、なかなかうまいことが見つからないまま時間いっぱいになってしまいましたけど、開始前からたっぷり楽しい時間を過ごさせていただきました。

そんな先日の課題はどうなんだろう。自分は型消去についての知識が浅いのでなんとも言えないところですけど、型でオブジェクト指向をするなら、コンクリート型みたいなものをプロトコルで無理して作るよりクラス機構を使った方が、もしかしてスマートにまとまったりするのかな、とも後になって思ってみました。

プロトコルで何を約束したいのか。もし単純に純粋仮想クラスとかインターフェイスを約束したいだけなら既定クラスでも良かったりしないか、そんなところに思いを馳せてみるのも楽しそうかもしれません。同時に、型消去についてももう少し意識して眺める必要性も感じたりしました。

雑談タイム

続いて、今回は遅れて来られる人がちらほら居たのもあり、前回の懇親会で 仕事の後で来るから自己紹介タイムに間に合わないのが残念 という声が心に残っていたのもあって、今回はさらに始める前に自分の雑談タイムをとってみました。

プロトコル指向に想う世界観

プロトコル指向に想う世界観 #__swift__ from Tomohiro Kumagai

他の勉強会で話したプロトコル指向の世界と向き合う中で自分が感じたことを綴った資料です。そちらの会でも議論になったのですけど、思い返せば中身というより喩えば『勉強会に食事は必要か』みたいな議論になってた気もして少し残念。

今回、みんなとも議論したらどんな風になるのかなと思って話題に挙げてみましたけど、いろいろ描くものの違いとか聞けて楽しかったです。とりあえず、どれが良いとか誰が言ったとかそういう話は抜きにして、挙がったことを脈絡なく混沌と列記しておきますね。

なんでしたっけ、肝心なイイところを忘れてしまいました。すごく良い話をたっぷり聞かせてもらったんですけど、全部を覚えきれてなくてもったいないことしてしまいました。ともあれそんな風に意見を重ね合わせられて楽しかったです。

それとひとつ、自分がもし「インターフェイス」とか「既定の実装」という言葉でプロトコル指向の世界観を掴めていたなら、スライドの中に出てくる言葉で説明することはなかっただろうというところにも、せっかくなので注目してみて欲しいなって思いました。色濃く見えてしまうことは確かですけど、果たして、どうだろう?

ちなみにこのお話は、以前に @niwatakoさん が投下した プロトコル拡張で挿入する実装をプロトコル側に制約を設けて実現できないか みたいな課題に対する違和感を解明するに至る中で得られたものをまとめたものでもあったりします。

Swift ならこう書くシリーズ 10選

そして、個人的にこの頃いちばんの関心どころな @JohnEstropiaさんSwiftならこう書くシリーズ 10選 | eureka tech blog についても良い機会なので取り上げてみました。

そんなブログについて話して、さらに今回の勉強会で話した内容を元に書いたのが こちら なのですけど、要は、最適解はその人が歩んで来た道とそこにある課題、正解というのはそんなバックグラウンドにも大きく左右されるものであって。そこを汲み取ることによって、それまで見えなかったことや見落としていたことが見えてくる、そんなことを強く感じさせてもらえたひと時でした。

自分の描く理想と違うと自分もついつい忘れてしまいがちですけれど、そのときに、あの人は何故そこに行き着いたのか、そんなところに意識を向けることを思い出せるか。そんなところがもしかして大事な分かれ目なのかもしれません。

そんなこんなもいろいろあって、このところのとても好きなブログ記事です。

lazy var の特徴を知る

ここで自己紹介タイムを挟んで、さらにそこから引き続き、自分が lazy var の話を始めてみたり。ここからが本題ですけど、終わってみれば何か1人で3時間半とか喋っていたみたいです。退屈してたりなかったでしょうか…!

さて、そんな今回の自分のお話は、先日に東京で開催された try! Swift というカンファレンスの中で、いろんな意味を含めて特に印象に残った @allonsykrakenさんHIPSTER SWIFT から lazy var についての話をしました。少し前の 3月12日に 第66回 Cocoa勉強会関西 でも話をしてきた題材です。

lazy var の特徴を知る #cocoa_kansai #cswift from Tomohiro Kumagai

内容的にはそれなりに端的にまとまっていると思うので、興味のある方は見ていただければと思うのですけど、今回の発表スライド P41 で思いがけず良い感じに話が盛り上がりました。

class MyClass {

	lazy var calculate1: () -> Int = self.calculate3

	lazy var calculate2: () -> Int = {

		self.calculate3()
	}
	
	func calculate3() -> Int {
	
		return 10
	}
}

let obj = MyClass()

obj.calculate1()		// 循環参照する
obj.calculate2()		// 循環参照する

obj.calculate3()		// 循環参照しない

ここが HIPSTER SWIFT における inline lazy var の要でもあるのでなおさらですけど、クロージャーに慣れた気になっていても、こうしてちょっと複雑な場面に出会うと混乱してしまうものですね。self の強参照問題ですとか、lazy var でクロージャーを入れることってあるのかなとか、1行クロージャーで関数を返す機会ってあまりないかもしれないところとか、循環参照を回避するための weak self や unowned self とか、いろんなことが交錯してクロージャーが掴めなくなって、それはそれはたいへん盛り上がりました。

そんな自分の次も「クロージャー」がテーマだったのもあり、良い感じで次の発表へとつながる形になりました。図らずともこう繋がるのって、なんとも嬉しくなれますね。

クロージャーについて

そんなこんなで @ZuQ9Nnさん からクロージャーのお話です。

この発表の良かったところは、クロージャーとは何かという Swift を始めてすぐからしばらくずっと悩む要所を、まさにその始まりから順を追って解説してくれるところでした。

こういういわゆる基礎のところって、いったん解った気になるとそうそう振り返らないですし、自分の発表のときみたいに知ってるつもりで意外と知らないみたいなこともあったりするので、Swift を始めてしばらくの人が学ぶにももちろんいいですし、すっかり慣れた人にもこうして振り返るきっかけにもなれて、すごく良い機会なんじゃないかなって自分は思います。

冒頭の『発足の経緯』でも話したように、自分はかつて構造体を分かった気になっていて、もし @royskimJPさん のひとことがなければ当分それを振り返ることもなかったでしょうから、そういうきっかけが生まれる勉強会、そしてこういう発表を届けてくれること、そんなことがとても嬉しいし大切なことのように思います。そしてそんなことができるのが、この会みたいな小さな勉強会の醍醐味かなとも思うのでした。

今回の @ZuQ9Nnさん の発表資料は、基礎中の基礎のところから始まり、けっこう細かいところまで丁寧に触れられているので、クロージャーはこれからの人も、すっかり慣れたつもりの人も、ざっくり眺めてみると良いことありそうな気がします。

SwiftTask

そして @akio0911さん からは ReactKit/SwiftTask ライブラリを活用するための実践的ノウハウがライブで披露されました。

自分に的確な説明ができるかわからないんですけど、このライブラリは @inamiyさん が作られたもので、Promise という、非同期処理みたいな『いつ実行されるかわからない』ものを、いつか将来のタイミングで『実行されることが約束されている』ものとして、不連続な処理を連続的に表現できる、みたいな特徴があるみたいです。

この性質によって、非同期処理をコード上はあたかも同期的に扱えること、そればかりか性質的に同期/非同期が異なるオブジェクトであってもインターフェイスを整えることで、同じロジックの流れの中にどちらも区別なく流し込めるみたいなことまで起こるのだとか。


そんなお話を、基本的なところから実用的なところまで、デモを主軸に見せてもらえて、SwiftTask のイメージがものすごく広がる心地がしました。これは、楽しそうかもしれない!

今回はデモが主体だったのと、飛び入り発表だったのもあって特に資料はアップされていないのでこの楽しさをここでは全く伝えきれないですけど、とにかく凄い体験だったので、もしどこかで @akio0911さん にお会いすることがあったら、ぜひぜひ SwiftTask の話題で盛り上がってくれたらなって思います!

体重ウォッチ

そんな SwiftTask の話も魅力的でしたけど、併せて話されていた HealthKit リジェクト祭りの苦労話もまた楽しかったです。

そんな苦労の末に完成したのが、たぶんこの Apple Watch対応の体重管理・ダイエットアプリ「体重ウォッチ」 というアプリ!

日々の体重を記録して、グラフとしてチェックしたり、TodayウィジェットやApple Watchのコンプリケーションでもチェックできるアプリです。 目につく場所に体重の増減値などを表示しておくことによって、ダイエットの意識向上に役立てることができます。

こんなアプリみたいなので、興味が沸いたらぜひぜひ使ってみてください。

まとめ

そんな感じで、たっぷり楽しいひとときでした。顔なじみの人たちも増えて、真新しい人たちも増えて、回数を重ねるほどに盛り上がる感じがとても嬉しい心地がします。またこんな風にみんなと楽しい時間を過ごせたらいいなと思いながら、今回もどうもありがとうございました。

最後に、今回の勉強会の中で呟いてくれたツイートをまとめたリンクを貼っておきますね。