こんにちは。17年度新卒のkwzrです。普段はAndroidアプリとiOSアプリを開発しているエンジニアです。
2018年8月30日(木)〜9月2日(日)に開催されたiOSDC Japan 2018において、ピクシブから登壇者6名含む9名が参加しました。その際にピクシブ社員が着ていたイケてないピヨピヨしたソースコードが書かれていたTシャツについて解説していきます。
なんと社員全員が違うソースコードが書かれたTシャツを着ています!
ノベルティとして、LGTMと書かれた扇子も配りました。こちらは人気が非常に高かったです。
アイデア出し
せっかく9名も参加するので、発表やノベルティの配布以外でiOSDCを盛り上げたいという気持ちがあり、以下の3点を考慮したTシャツを作ることにしました。
- ピクシブのエンジニアだということがわかる
- 懇親会などで話のネタになる
- 何を得意としているエンジニアなのか伝わる
各々Tシャツに書く内容を考えるiOSエンジニア。例としては以下のようなものが挙がりました。
- 「I.can_use.swift!;」のように、コーディング規約がGitHubのswift-style-guideに従っていなかったり、謎のforce unwrapしている
- 「I am a master of Swift」などの強い文言を使う
- みんな違うメソッドが書かれたTシャツを着て、全員を追うと意味がわかる
最終的に「iOSできますよ」と書かれた下に「いや、できてないじゃん」とツッコミたくなるようなコードが書かれていると言うアイデアが採用されました。 元ネタは、過去C++やUnity界隈で話題になっていた「僕○○できますよ」と書かれたTシャツです。
配布するノベルティのアイデア出しも同様に行っており、イケてないソースコードが書かれたTシャツを着たピクシブ社員のコードをレビューするか、「レビューお願いします!」と言うことでLGTM扇子が貰えるという設定になりました。
制作
Tシャツはイラストや画像を1枚上げるだけで簡単に様々なグッズを作ることができる、pixivFACTORYで制作されています!
Tシャツに書かれているコードは、話のネタにしやすいように自分で書いてもらうのが良いと思いました。普段意識せずに生み出しているはずのイケてないコードを、意識して生み出すのは、なかなか難しいことでした。Tシャツに収まる行数でイケてなさを表現するというのも難易度が高いです。イケてないコードを考えるという、全く生産性のない業務をさせて弊社の優秀なiOSエンジニアたちを疲弊させてしまいました。
イケてないソースコードが揃ったところで、デザイナーの方に1文字1文字丁寧に温かみのあるシンタックスハイライトをしていただきました。iOSDCやpixivのロゴが入っており、めちゃくちゃかっこいい!
Tシャツはイラストや画像を1枚上げるだけで簡単に様々なグッズを作ることができる、pixivFACTORYで作成されています!
Tシャツ紹介
実際に社員が着ていたTシャツをいくつか紹介します。
kwzr
フロントエンド開発でよくありそうな(?)失敗をまとめ上げました。
ポイント
- FoundationとUIKitがimportされている。UIKitをimportした場合、Foundationはimportしなくて良い
- userIDのような初期化時に必ずVCに渡される変数は、Implicity Unwrapped Optionalにする
- RxSwiftのようなものを使っているが、disposed(by:)が書かれていない
- 通信が終わってからisFollowingをtrueにしている。ユーザーが戸惑わないように、ボタンを押した瞬間に見た目が変わると良い。エラーが起きたら、ボタンを押す前の状態に戻す
- 連打防止対策がされていない。フォローAPIを叩く前にisEnabledをfalseにして、通信が終わったらtrueに戻すと良い
- VCで直接フォローAPIを呼び出している
danbo-tanaka
こんなテストはよくないという例。
ポイント
- AuthDataStoreがDIを前提としていない
- Keychainのserviceが開発環境と同じっぽい
- 本番を意識したテストデータでテストしていない(セーブしてる文字列)
- テストデータを変数化して共通利用していない
- テストデータの後片付けをしていない
- key("AccessToken")を定数化してほしい
- そもそもTypoでコンパイルが通らない
Before
import XCTest | |
import KeychainAccess | |
@testable import AwesomeIOSDC | |
class AuthDataStoreTests: XCTestCase { | |
let keychain = Keychain(service: Bundle.main.bundleIdentifier!) // ② | |
func testSaveAccessToken() { | |
let authDataStore = AuthDataStore() // ① | |
authDataStore.save(accessToken: "Congrats iOSDC "2018🎉") // ③, ④, ⑦ | |
let sut = try! keychain.get("AccessToken") // ⑥ | |
XCTAssertEqual("Congrats iOSDC 2018🎉", sut) // ④ | |
// ⑤ | |
} | |
} |
After
import XCTest | |
import KeychainAccess | |
@testable import AwesomeIOSDC | |
class AuthDataStoreTests: XCTestCase { | |
private let testAccessToken = "TestAccessToken" | |
private let accessTokenKey = "AccessToken" | |
private let keychain = Keychain(service: "TestService") | |
func testSaveAccessToken() { | |
let authDataStore = AuthDataStore(keychain: keychain) | |
authDataStore.save(accessToken: testAccessToken) | |
let sut = try! keychain.get(accessTokenKey) | |
XCTAssertEqual(testAccessToken, sut) | |
} | |
override func tearDown() { | |
super.tearDown() | |
keychain.set(nil, key: accessTokenKey) | |
} | |
} |
kameike
ポイント
- // 念のためassert系を書きまくる
念のため
のようなコメントを入れておいたほうが分かりやすかったと反省しています。関数全体があったほうがレビューしやすいよねというレビューをいただきました。
kobaken
Androidも開発できるアピールということで、Swiftコードと見せかけたKotlinというTシャツのアイデアもありました。
ポイント
- よく読まなくてもAndroid
- 🙅♀️ Activity 🙆♀️ ViewController
- layoutのファイル名が
storyboard
- Can you write Swift? Yes, I can write Swift!
rokuroku
ポイント
- よく読まなくてもiOSではない
- SwiftでC++呼ぶために突如現れるObjective-C++
よかった反響
Tシャツを着たピクシブ社員の反応は以下のような感じでした。
- コードが気になって、話しかけてもらえた
- ピクシブ社員とわかってもらえた
- コードから技術的な話題に繋げられて便利だった
反省
- 腹の辺りをずっと見られるのは恥ずかしい&見る方も恥ずかしい...
- 長いソースコードが書かれたTシャツは、着ている側から見ると何が書いてあるかわからず、何が書いてあったっけとなってしまいました。1度試しに着てみればこんなことは起こらなかったかもしれません。プロトタイピングは重要ですね。
- 結構Tシャツの文脈を理解するのが難しく、プロダクションコードと勘違いされている気配を感じました😭
まとめ
おそらく現地ではまじまじと見れなかった方も多いと思いますので、記事にしてまとめました。参考にしたり、あるあると思っていただけたら幸いです。次回以降のカンファレンスではより進化したおもしろTシャツで場を盛り上げていきたいと思います。
ピクシブではイケてないコードを良い感じにできるiOSエンジニアを積極的に採用しています!