初めてのサンフランシスコ/海外カンファレンス〜KotlinConf2017に行ってきた〜

初めて海外カンファレンスに行ってきた。次行く機会に自分でも見直せるように書き残しておく。

www.kotlinconf.com

きっかけ

  • ちょうどGoogle IOがあった時でTLでtwitterでいつも見ている人が皆Google IOに行っていることを知る
  • 自分の会社、他の部署・他の関連会社では同じ年くらいの人も行っていたのでいいなーと思う。
  • 会社で行かせてもらうほど自分に技術やスキルに自信がなかったのですぐには行けないけど、いつか行きたいなと思っていた
  • シリコンバレーや海外で働くことに対して漠然とした憧れはあったけど実際に何が良いのかうまく自分の中で説明できなかった。
  • 「とにかく海外カンファレンス行ってみたい!」何が良いのかも一回行ってみないとわからないでしょう、一回行ったら気が済むのでは、と思っていた。

自腹でもいいから買おうかなと言っている人を見て、そうか。自腹で行っちゃうという手もありなのかと思う。 ということで会社の経費が落ちるかは全くわからなかったけど勢いだけでチケットを買ったところからが始まりだった。(結局会社からいけることになった。本当にいい会社です)

英語とKotlin

仕事で使うこともなく英語/Kotlinは「しようしよう」と言いながらできてなかった。いつかしなきゃな、と思っていたのでKotlinConf行くのを目標に英語/Kotlinのキャッチアップをするというのを11月までの目標にした。

5月にチケットを買ってからDMM英会話に登録した。1日30分ずつレッスンを受けていた。週に5日くらいはできていたと思う。朝早く起きてレッスンを受けることが多かったので早起きできるようになってうれしかった。 CLEMというイベントにいったのがきっかけで英語でLTすることにもなった。

chiiia12.hatenablog.jp

Kotlinは業務で使ってなかったので趣味で自分で書いていた小さいアプリをKotlin化したりしていた。小さいアプリかつ難しいことも何もやってないので、Kotlinができるとは程遠いけど…ここはもうちょっとできたなぁと反省している。

Day1:移動・MountainView訪問

カンファレンスの前日にサンフランシスコ入り。昼すぎに着いたので、直接マウンテンビューに向かいGoogleオフィスを訪問。たまたまGoogleに務める知り合いがマウンテンビューにいたので少しオフィスの中のほうまで見せてもらった。 以下メモ

  • googleのキャンパスは大学みたいな感じ
  • 田舎で車がないと生活できないらしい
  • 知り合いはSF市内に住んでいて、googleが専用のバスを出してくれてるからそれで通勤しているらしい
  • 朝夜は渋滞がすごいらしい。空港からMTVも1hくらいと教えてもらっていたけど実際30分くらいでついた
  • SF市内にもオフィスがあるのでSFオフィスとMTVオフィスを曜日ごとに通い分けているらしい
  • MTVには偉い人がいるからそういう会議を出席するのにMTVに週何日かくる必要があると言ってた
  • キャンパス内にジムや食堂あり。フリードリンクでスナックや飲み物はいつでももらえる。3時くらいに行った時は何人かジムを使ってた。やることやってれば昼間でも自由にジムにいける
  • Google Storeは日曜休み。Tシャツとかマグカップとかgoogle homeとか。Droidくんのぬいぐるみに手を出しそうになったがやめておいた
  • google社員だと1割引きになるらしく知り合いのカードで支払ってもらった(社員証を見せて私の支払いはダメらしい)
  • レジにNo cashと書いてあるのが印象的だった。

f:id:chiiia12:20171119223616j:plain
GoogleStoreでの戦利品

Day2-3:Kotlin Conf参加

Day2-3は本命のカンファレンス参加。受付を前もってしておくpre-registrationというのが前日行われていたらしいが、自分はしていなかったので少し早めに向かったが、受付は一瞬で終わった。写真つきのIDを見せてシールを発行。

f:id:chiiia12:20171119223740j:plain
KotlinConfでのノベルティ達。他にTシャツがある。

セッション

色々わからないことも多かったけど、とにかく全部の時間でセッションを聞きに行った。以下感じたことのメモ。

Day1最初のKeynoteではKotlinの最新事情や今後の展開などが話された。KotlinをMultiplatform化することにすごく力をいれているということが伝わった。サーバサイド・Android・JSだけでなく、iOSの公式サポートが発表されて会場はドっと湧いていた。CommonModuleというフロントとサーバサイドでKotlinコードを共有できるという概念は興味深かった。ちょうど自分のチームが少ない人数でフロントからモバイル・サーバサイドまで開発していかなきゃいけない体制になっていきそうなので、Kotlinで開発することでクロスファンクショナル化をより進められるのかも?などと考えていたりした。

Kotlin1.1から導入されたコルーチンの話題が多かった印象。非同期処理行う時のコールバック地獄をスッキリ書けるんだよみたいな話をIntroduction to Coroutinesでしていたと思う。Springでコルーチンをどう使うかというセッションもあったり、Kotlin製のWebフレームワーク「Ktor」でもコルーチンを使った非同期処理を利用していたり推されている機能のように感じた。何が良さでどう使い分けるのか自分でもわかってない部分があるので、今後ちゃんと理解したいトピックだなと感じた。非同期処理を書く時にはRxJavaを使うことが多かったところをコルーチンが代替するかも、という点で皆の関心度が高かったのではという話を参加者としていた。

Introduction to Coroutines @ KotlinConf 2017

Springの話も多かった。Bootiful Kotlinというセッションが大変人気なようだった。2017/9にリリースされたSpring Framework5にSpring WebFlux機能の追加とKotlinのサポートが入ったことがポイントと理解している。Spring WebFluxのプログラミングモデルの一つである「Router Functions」というアノテーションではなくラムダを通して設定していく書き方とKotlinの組み合わせの相性がよく、よりシンプルに書けるというところが好評どころだった、と私は理解している。

KotlinConf 2017 - Bootiful Kotlin by Josh Long [Updated Session Available] - YouTube

Kotlin製のテストフレームワークであるSpekの話も興味深かった。JUnitでは「コードの繰り返し」「メソッド名が長くなりすぎる」「何のテストをしているかわからない」状態に陥ることが多くSpekはそういった問題点を簡単に解決してくれるといった内容だった。JUnitでもテストの構造化やパラメータ化はできるが、JUnitよりもより覚えやすい・書きやすいというところが良いところなんだと思う。おそらくSpec系のテストフレームワークとできることは一緒なのでは、という認識。なのですが 、Kotlinで書けることがプロダクションコードとのスイッチングコストをより少なくできる点で良いところなんだと理解している。

Testing Kotlin at Scale — Spek #KotlinConf2017 - Speaker Deck

準備と心づもり編

実際にサンフランシスコに行く前に準備していたことと、もっとこう準備しておけばよかったことを備忘録として書いておく。

  • 日中と夜の寒暖差が激しいと聞いたので冬用のコートを用意。会場は屋内だったが、すごく寒かった。一日中コートを着ていても顔が青くなるくらい寒かったので、カイロか何かをいくつか持っていけばよかった。
  • 向こうでの移動はほぼUber/Lyftと聞いていたのでアプリをインストールしておく。空港からすぐ使えるよう、スマホの充電を十分にしておく。
  • テンダーロインという地域は危ないので近づかないよう気をつける。テンダーロイン以外にも重厚なシャッターが閉まっているところがあるので地面を見つめながら黙って早歩きで通り抜ける(とアドバイスをもらった)
  • 21時以降は出歩かない、そもそもあまり一人で出歩かない。気をつけていたけど、夜中の2時まで参加者のみんなで外で飲んだりしたので、みんなで一緒なら大丈夫。
  • ホテルに歯ブラシがないことがあるので持っておく。当然あるものだと思っていて気づいたのが夜中だったので朝コンビニで買えるまで地獄だった。
  • 時差ボケひどいので無理しない。サンフランシスコについた日の夜は夜中に目が覚めてしまいそのまま朝まで寝れなかった。日本と違って体調も崩しやすい& ただのビールだと思ったらアルコール度数10%でした、というパターンがあるのでお酒はいつもより少なめにしておく。夜は寝れないが昼の2.3時の眠気がヤバい。
  • 会場のWifiや電源は日本と違ってあまりアテにできない。

サンフランシスコ/海外事情

Day1のパーティ後に海外の参加者達と一緒に二次会・三次会に繰り出した。 この思い出が特に印象に残っていて、海外でのエンジニア事情について聞けたことが新鮮で刺激的だった。(知人のおかげで一緒に混ぜてもらえた、ありがたい🙇)

カンファレンス参加について

会社で行ってるので帰ったらフィードバックしなきゃいけない、という話をした。 (すべての会社ではないと思うが)話した人の会社では年に100万くらい(金額は曖昧)研修やカンファレンスなど自分で何に使うか決めていいお金があって、それを使って今回のカンファレンスに来たと言っていた。 なので、今回のイベント参加は別に会社にFBする必要もないし、この費用はカンファレンスでも本でも何にでも比較的自由に申請できるんだー、と言ってたのが印象的だった。 今回出会った人たちは、かなりカンファレンスに参加に積極的らしく、日本にもDroidKaigiで来てくれていたらしい。日本でもコミュニティがあると、「次は日本に来てよ!」「いくいく!」て繋がっていくのがうれしかった。恋人同士エンジニアで一緒にカンファレンス参加している人も多い。

エンジニアのキャリアについて

  • ネットフリックスのエンジニアは皆すごい給料高くもらってるらしい。
  • アメリカだとCSを持ってないとエンジニアなれないって聞いた。→「そんなことないよ。本当に今エンジニアの職たくさんあって、特にSFがエンジニアの求人が本当多い」「実際に自分は大学の学士持ってないよー」
  • エンジニアの立場が下になってしまうことがよくあって・・・→アメリカはエンジニアの立場が絶対上。
  • やっぱりエンジニア、コード書かなくなっちゃうことが多いのかな→エンジニアからマネージャーいくこともあるけどエンジニアはそれはそれで評価されてるみたいな。プロダクトマネージャーとかになるエンジニアも多いかも。自分もマネージャーだった時は全くコード書けなかった。けどそれが役割だからit's ok

振りかえり

セッション選び

わかりやすいセッションもあったし、自分の英語力不足であまりついていけないセッションも多かった。 エモい系のセッション(プロセスとか、心持ちとかのことを語る内容だとニュアンスが聞き取れない)はついていけなくなることが多いことにDay1で気づいたのでコードベースで説明してくれそうなセッションに変更したりした。

リスニング

参加前GoogleIOの動画をいくつか見ていてなんとかついていけるかもと思っていたが、自分の想像以上についていけなくて愕然とした。話す練習をしようと思ってDMM英会話を続けていたけどまずはリスニングで聞き取れるようにならないとな、と感じた。(Google IOは皆に理解されやすいように特に英語の表現気をつけてくれているという話をチラッと聞いた)

その他

  • 知らないことばかりだったけど大量の新しいinputの機会になった
  • カンファレンス来ている人皆息を吐くようにコード書いてた
  • githubintelliJの画面しか開いていなかった印象
  • 日本人的には英語喋れないので消極的になりがちだけど本当無駄で向こうの人は全然気にしていない。ウッっとなって喋れないのは誰の得にもならない。
  • KotlinConfに参加していたことがきっかけで同じように参加されている日本の方(話してみたかった)人ともお話ができたのが嬉しかった

最後に

長くなったが、刺激的で色々と感じるものが多かった良い海外出張だった。 もっと頑張らなきゃなという気持ちしかないけど、また日本で頑張って海外出張行かせてもらえるように成長するしかない。