azihsoyn's blog

技術のこととか釣りの事とか(書けたらいいなぁ)

ラブライブ!サンシャイン!! Aqours 3rd LoveLive! Tour ~WONDERFUL STORIES~ に参加した感想

TL;DR

控えめに言って神でした。

感想垂れ流し

ライブのネタバレを多分に含みます

人生で2回目のライブに参加してきました。 ちなみに1回目は

azihsoyn.hatenablog.com

こちらのシンフォギアのライブです。

参加するまでは不安なことがあって、シンフォギアライブが最高だったから霞んでしまったりしないだろうか?ちゃんと楽しめるだろうか?🤔とライブが始まるまで思ってました。杞憂でした。

やはり好きなアニメの曲を生で聴けるだけでもテンション上がるのに、それを盛り上げるための演出が盛りだくさんで楽しめないわけがないって感じでした。

gs.dengeki.com セトリはこちらから

1. 未来の僕らは知ってるよ(TVアニメ2 期OP主題歌)

これは予想通りでした。やっぱアニメ2期の曲が多くなるんだろうなと思っていたのでOPで始まるのは妥当だと思います。

2. 君の瞳を巡る冒険(TVアニメ2 期OP C/W)

これは意外でした。曲もですが振り付けがカッコよくて見てて楽しかったです。

3. “MY LIST” to you!(TVアニメ2 期ED C/W)

これも意外でした。意外ばっかですが。君の瞳を巡る冒険から一転して可愛い系の曲です。3曲目にしてAqoursのいろんな側面を楽しめました。

4. MY 舞☆TONIGHT(TVアニメ2 期第3 話挿入歌)

この曲めっちゃ好きなんですよね、、、。聞けて本当に嬉しかったです。ドームの演出がすごくて、MY 舞☆TONIGHTの冒頭の和傘の映像がドーム天井に写って一瞬で引き込まれました。(天井じゃなくてスクリーンかもしれません。夢うつつだったので記憶が曖昧。)

5. 君のこころは輝いてるかい?(1stSingle・TVアニメ2 期第3 話挿入歌)

学校説明会で歌った曲ですね。この曲の前にアニメのシーンが流れてみかんのトロッコで学校に向かうシーンや坂道を走っているシーンが総集編のように流れて、この「君のこころは輝いてるかい?」を歌うまでの期待値を上げてくれました。シンフォギアライブでもありましたがこういう演出大好物です。

6. MIRACLE WAVE(TVアニメ2 期第6 話挿入歌)

この曲もホント好き、、、というかアニメのシーンを思い出すと泣ける、、、。アニメ放送時に物凄く話題になったというか騒然としていたんですが、センターの千歌ちゃんがバク転するんですよね。アニメの中でも必死に練習して最後の最後に成功させるんですが、これをライブでやるときに伊波杏樹さんは果たしてバク転するのか!?と話題になっていました。 この曲のイントロが流れて「あの」フォーメーションで並んでるメンバーを見て会場が「まじでやるのか!?」という雰囲気に包まれました。 いよいよそのシーンというところで、ロンダートで止まって、「やっぱり難しかったかー。怪我したら危ないししょうがないよ」という雰囲気になりそうなところで、バク転を決めました。

バク転を決めたんですよ。

恐らくライブ中1, 2を争うぐらい盛り上がったと思います。自分もテンション上がって声を上げてました。

曲が終わってからこのフォーメーションを考えた果南ちゃん役の諏訪ななかさんが、アニメのシーンを再現して「千歌、ありがとう」と言ってハグしてたのは普通に泣けました。というか果南ちゃんの声可愛すぎる。。

アニメ6話ほんと好き、、、無限に語れそうですが話が脱線するので。誰か語り明かしましょう。

7. One More Sunshine Story/ 高海千歌(TVアニメ2 期Blu-ray第1 巻特装限定版 特典楽曲)

この曲はiTunesとかでは配信されておらずBDを買わないと入手できないんですよね。自分はBDは買ったんですがCDを再生するデバイスを持ってないのでfullで聞いたことはありませんでした。スクフェスで何度かプレイしたことがあるぐらいでした。

というかソロ曲あるんだ!という驚きのほうが強かったです。ぜひともiTunesとかで配信されてほしいですね。。。予習できない。。。

8. おやすみなさん! / 国木田花丸(TVアニメ2 期Blu-ray第2 巻特装限定版 特典楽曲)

ソロ曲シリーズの2曲目。初めてステージではなくゴンドラ?みたいなのにのって会場中を回って歌ってました。近くで見れるのは嬉しいですね。

9. in this unstable world/ 津島善子(TVアニメ2 期Blu-ray第3 巻特装限定版 特典楽曲)

個人的にめっちゃツボだった曲。というか演出がね。小林愛香さんが善子よりヨハネしていて、ヨハネ降臨していました。カリスマというかオーラというか、雰囲気がすごすぎました。小林愛香さん以上にウィンクが上手い人いるんですかね?ダンスもキレッキレでした。

10. Pianoforte Monologue/ 桜内梨子(TVアニメ2 期Blu-ray第3 巻特装限定版 特典楽曲)

梨子ちゃんのソロ曲。これも桜やピアノや音符の映像がすごかったです。全体的にソロ曲は演出が凝ってた気がします。

この曲もスクフェスでプレイしたことがあるのですが、譜面が好きです。プレイしてて指が楽しい。

残念ながらソロ曲はここで終わり。残りの5人の曲も聞きたかったんですが時間的に仕方なかったんでしょう。次のライブで聞きたいです。

11. 空も心も晴れるから(TVアニメ2 期第7 話挿入歌)

この曲も好き、、、ただ配信はされてないんですかね?廃校が決定したのにラブライブに参加するのか?と葛藤するシーンで流れていた曲です。歌詞が最高ですね。聞けて幸せでした。

12. SKY JOURNEY(3rd Single「HAPPY PARTY TRAIN」C/W)

記憶喪失

13. 恋になりたいAQUARIUM(2nd Single)

ほんっと嬉しい。。。多分Aqoursの曲で一番好きかもしれない。というか一番人気なんですかね?2期の曲ではないですが歌ってくれました。 よくカラオケでMV付きで歌うんですがMVと全く同じ振り付けというかもはやアニメの実写化というかアニメ映像を見ているのか本人映像を見てるのかわからなくなってました。

14. Awaken the power/Saint Aqours Snow(TVアニメ2 期第9 話挿入歌)

はぁ、、、もう最高すぎて、、、。4月にあった函館ツアーはチケットが当たらず行けなかったのですが、Saint Snowが好きすぎてほんと来てくれ頼む🙏ってずっと思ってたんですが、前日物販でSaint Aqours Snowのバングルが売っていてこれはワンチャンあるのでは!?!?!と思っての当日これですよ。。もうほんと来れてよかった。もう思い残すことはないです。

欲を言えばSaint Snowとしての曲も歌って欲しかったですね。一曲だけでも。

15. WATER BLUE NEW WORLD(TVアニメ2 期第12 話挿入歌)

記念すべきLove Liveで優勝したときの曲。衣装可愛い。しかも早着替えもやってましたね。この曲の振り付け好きです。

ステージから遠くてよく見えなかったんですが本物の羽根が舞ってたような?青い羽だったのか気になります。

16. 青空Jumping Heart(TVアニメ1 期OP主題歌)

この曲に入る前になんとオリジナルアニメが流れましてね。AqoursがLove Liveで優勝してアンコールを受けてOPに繋がるんですが、その楽屋裏のやりとりがアニメ化されていました。

観客はアンコールしてるんですよ。そしてそのアンコールに応えて青空Jumping Heartのイントロが始まる。完全にアニメの世界に入ってました。

あのアニメの中でサイリウム振ってる観客は自分たちだったんですね。 最高にニクイ演出でした。

EN1. Landing action Yeah!!(ラブライブ!サンシャイン!! Aqours CLUB CD SET)

fullは初らしいです。掛け声が盛り上がる曲でした。

EN2. 勇気はどこに?君の胸に!(TVアニメ2 期ED主題歌)

アニメ2期ED。この曲でめっっちゃ嬉しいことが起きてしまったんですよねぇ。

自分の席はアリーナ席ではあるんですが、ステージから一番遠いブロックの更に最後尾近くの席で、自席からはほぼ生Aqoursは見えなかったんでした。 この曲のときは9曲目お花丸ちゃんが乗っていた移動式ステージで会場のアリーナ外周を回りながら歌ってました。

つまり、移動式ステージが真後ろに来たときほぼ最前列になるということです。めっちゃ近くでAqoursのメンバーを拝見できました。しかもそこでとどまって歌ってくれてる、、、。しかも一番の推しであるダイヤちゃん役の小宮有紗さんがこっちを向いて歌っている、、、死ぬのか俺は、、、?

最高の数分間でした。

ここで重大発表が。なんと4thライブが11月17(土), 18(日)に開催されるらしいです。早くない!?しかも発表はそれで終わりではなく、

  • 4thライブのテーマソング発売
  • Newシングルが発売
  • 劇場版が1月4日に決定

と第4弾までありました。ただでさえ上がりきっているテンションが天元突破しますよ。

EN3. WONDERFUL STORIES(TVアニメ2 期第13 話主題歌)

アニメのEDが流れて終わりかなーと思ったんですが、ツアーのタイトルにもなっている曲まだやってないな?と思っていたら最後の最後に歌ってくれました。

この曲も好きでな。。。ヨハネの振り付け好きなんですよ。夢で夜空を照らしたいの衣装のところの振り付け。わかりますかね。

まとめ

実現してほしいと思っていたことがほぼ全て実現してくれたライブでした。

KPT

ライブから帰ってきて書いているのですがすでに4時になりそう。。 電車乗り換えミスったりテンション上がった勢いでカラオケに言ったからなんですが。振り返りは軽くにしておきます。

Keep

  • シンフォギアライブのときには持っていけなかったサイリウムを2本持っていきました。腕を振るより圧倒的に負担が少なかったです。

Problem

  • 前の席の人に恵まれなかったですね。。。

Try

  • 両日応募

11月のライブは両日応募するぞ!!!絶対行きたい!!!

Google I/O 2018 Day 3 雑感

自分が参加したセッションの雑な感想まとめです(その3)

→ 1日目

azihsoyn.hatenablog.com

→ 2日目

azihsoyn.hatenablog.com

[Codelabs] Introduction to Sceneform

セッション予約してたのですが、day2の AndroidStudioで3Dモデル表示するやつが気になりすぎてcodelabに参加しました。

Introduction to Sceneform

デモだとコードが短く見えたのですが、実際は結構書くことが多かったです。

しかもこの御時世に何故かサンプルがJavaで書かれており、中途半端にkotlinでプロジェクトを作成しまったために読み替えながら進めるのに時間がかかりました。

実際にAndroidStudioだけでAR開発ができた時はテンション上がりました。

全然関係ないですが、この朝の時間のchrome OSのセッション参加者にchromebookの75%オフクーポンが配られていたらしいです。

欲しかった。。。

[Session] Build real world games with Google Maps

events.google.com

I/O開催前に発表されていた Google Maps Platformのデモです。

developers.google.com

すでにいくつかのゲームがリリース予定だそうです(ジュラシック・パークゴーストバスターズなど)

ARゲームが作りやすくなる反面、ポケモンGoライクなアプリが増えそうなので独自性出すのが難しそうです。

Googleオフィス訪問

たまたまご縁があって、Googleのオフィスにお邪魔することができました。

オフィスというか町でした。

I/O食で満足できていなかったので、ジャンキーなランチを食べることができて最高でした。

f:id:azihsoyn:20180515230311j:plain

歴代ドロイド君像も見ることができ、一生の思い出になりました。

[Session] An overview of Cloud IoT Core

events.google.com

セッションの時間を間違えて参加してしまったやつ。

デモはやや手間取ってましたが、成功したときの拍手がすごかったです。

IoT系の開発は全くしたことがなかったのですが、Pub/Subは確かにいるよなぁと思いました。

お土産に貰ったAndroidThings Starter Kitで試してみたいです。

Cloud IoT Coreのロードマップもあったのですが、

AndroidThings Pluginってなんでしょうね?

[Session] Add Firebase to your cross-platform React Native or Flutter app

events.google.com

最後のセッションもflutterです。

ReactNative と flutterのコードにfirebaseのsdkを組み込んだデモアプリだったのですが、アプリの完成度が高すぎでした。

firehuntというscavenger huntのアプリでした。切実にコードの公開を望みます。。。🙏

デモの内容はfirebase predictionでプッシュの打ち分けと、remote configを使ってアプリのデザインを変えるみたいな実践的なものでした。(プッシュのデモは失敗でしたが)

firebaseがめっちゃ便利なのがわかりました。

また、flutterにはhot reloadがあるからなのか、ライブコーディングをするセッションが多かったです。

After Hour

は最終日はなく、セッションが終わったら終了です。特にアナウンスとか拍手とかはなかったです。

ジャンキーな食事もステーキも楽しんだので最終日はひたすら飲むことにしました。

f:id:azihsoyn:20180515232724j:plain

この後ワイン2杯ほどおかわりして帰りました。


以上で3日間の振り返りは終わりです。

やっぱり当日のうちにやっておきたいですね。

Google I/O 2018 Day 2 雑感

自分が参加したセッションの雑な感想まとめです(その2)

→ 1日目

azihsoyn.hatenablog.com

[Session] Code beautiful UI with Flutter and Material Design

events.google.com

flutterのライブコーディング的なやつ。なにげにファイルの分割とか参考になった。

[Session] Microservices in the Cloud with Kubernetes and Istio

events.google.com

microserviceは辛い?みたいな導入だったのが印象的

Istio サービスメッシュ的なやつ。

デモだったけど結構失敗してた。

(他にもデモで失敗してるセッションもあったけど、Googleに勤めてる人も人間なんだなぁと思った)

yamlでルーティング設定できる。特定のヘッダーが付いたリクエストだけcanaryとかの設定とかもできる。

[Session] What's new in AR

events.google.com

ARCoreのアップデートの詳細

デモの完成度が高くARの可能性の高まりを感じた。

ARの使い所の説明もあった。

[Session] Design Actions for the Google Assistant: beyond smart speakers, to phones and smart displays

events.google.com

Actionのガイドラインみたいな話。

作る時は聞いたほうがよさそう。

いろんなデバイスでレスポンスが違う(Contextで変える)みたいな内容。

あとActionでどうやってブランドごとの特色を出すかみたいな。 f:id:azihsoyn:20180514224922j:plain

[Session] The future of the web is immersive

events.google.com

WebXRの話。WebXRの意義はVRバイスを持ってない人のギャップを埋めるためみたいな話。

Chrome67 Canaryから対応(flags)。Webのコンテンツをリッチにするという話。

Chrome in VR内でWebXRを使うとシームレスに移行できるっぽい?。

標準化も進めているっぽい。

[Session] Pushing immersive learning beyond the classroom

events.google.com

これもWebXRの話。技術的な内容というよりは講演に近かった。

教育でもXRでという話。

最後にTour Creatorというサービスを紹介してた。

vr.google.com

Google Mapのストリートビューとかを組み合わせてツアーを作れるっぽい。

これは教育だけじゃなくていろんなことに使えそう。

[Session] Total mobile development made fun with Flutter and Firebase

events.google.com

これもライブコーディングしながらFlutterでできることを紹介する話。

サンプルのアプリはあんまりマテリアルっぽくなかった。

ルーセルウィジェットがある。

音を流すとか簡単にできるっぽい。

個人的にはmainにasyncってつけられるのを知ったのが一番の知見

[Session] ML Kit: Machine Learning SDK for mobile developers

events.google.com

ML Kit のデモ。セッションの列がすごかった。

face detectionの判定めっちゃ早い Smart Reply APIも使えるようになるらしい。

今までもTensorFlow liteがあったけどそれだけでは大変だったので幾つか簡単に使えるようにしましたという話っぽい。

また、オフラインでも使えるようにモデルサイズを小さくしているため、サーバー上での判定とは結果が異なっていた。

ただし独自のモデルを別途ダウンロードすることも可能。

Fishbrainという釣りのアプリは魚の画像判定モデルサイズを80MBから860KBにしたらしい。

なぜかスライドのサンプルコードがJavaだった

[Session] TensorFlow in production: TF Extended, TF Hub, and TF Serving

events.google.com

これすごかった。

TensorFlowがめっちゃ身近になるというかfor Everyoneみたいな感じになってきた。

RestAPIとかもあるし、モデルのバージョン管理とかホスティングとかモジュール化とか。

どんどん実用のハードルが下がってるので勉強しなければ。。。 Swift for TensorFlowも発表されオンラインチュートリアルが充実してるらしいので試してみる。

[Session] Building AR apps with the Sceneform SDK

これは最初何が起きてるのかわからないぐらい驚いた。

android でUnityみたいなことができる(Codelabで触って理解した)。

とにかくすごいの一言。やばい。

Sceneform Overview  |  ARCore  |  Google Developers

jsonフォーマットで3Dのアセットを定義できる(幾つかのオブジェクトファイルから生成する感じ)

レンダリングの解説とかもあって勉強になる。

[Session] Best practices for text on Android

events.google.com

渋すぎるタイトル。新機能が多数リリースされている中でのtextの話。

事前に予約するときから異彩を放っていた。実際にガチの内容だった。

スライドの進みがめっちゃはやいのでyoutubeで一時停止しながらじゃないと追いつけないと感じた。

  • PreCompiledText
  • RecyclerView
  • android Pでの改善

などなど

After Hour

2日目もビールが飲めます。

しかもこの日はJusticeのコンサートがありました。

events.google.com

が、洋楽に詳しくない私は一杯だけ飲んで早々に帰り、I/O食で食欲が満たされていなかったので洋食を食べに行きました。

写真が微妙ですがスマイルさんに教えてもらったyelpで1位のお店です。

The Best 10 Steakhouses in Mountain View, CA - Last Updated May 2018 - Yelp

Sundance The Steakhouse - 775 Photos & 1118 Reviews - Steakhouses - 1921 El Camino Real, Palo Alto, CA - Restaurant Reviews - Phone Number - Menu - Yelp

幸せな気分でホテルに帰ってベッドの上で2日目の振り返りをしながら夢の世界に沈んでこの日は終わりました。


3日目(最終日)につづく

Google I/O 2018 Day 1 雑感

自分が参加したセッションとかの雑な感想まとめです。 参加した当日に書けばよかったなと後悔してます。

pre keynote

events.google.com

AIが演奏(音楽生成)して人間がパラメータチューニングしてた?(実際AI系の発表が多かった)

あと

keynote

events.google.com

すごかった(語彙力)

  • Google Assistant

    • アシスタントの声増えるよ(日本人声優でも頼む)
    • アシスタントが電話
    • ディスプレイつきGoogle Home
  • グーグルニュースアプリ(新しいのリリースというよりアップデートかな?)

    • ニュースアプリ系のサービス大変そう
  • android
    • app actions
      • Google Assistantとの連携が強くなる
      • 将来的には全てのアプリがassistant上で動く感じになっていきそう(妄想)
    • ML Kit
    • Google MapでARで案内してくれる(めっちゃ欲しかったやつ...)
  • Waymo(自動運転)
    • これだけAIの進化見せつけられると絶対自動運転の時代来る、、、って思った

あとこの時点でめっちゃ日焼けしました

ランチ

1日目のメニュー f:id:azihsoyn:20180514020253j:plain

ROMANが人気すぎでした。どこも品切れ状態。 自分はCALI BIRDにしました

次のdeveloper keynoteまでのお土産買おうと思ったら、、、

反省点でした。

developer keynote

events.google.com

すごかった

  • android
  • PWA
  • chrome OS
    • linux対応
      • Intelのday 0 パーティでデモ見せてもらったので知ってたけど欲しくなった
    • android studioも動く!!
  • material theming
    • マテリアルデザインにしながらもブランドごとの特色を出せるようになる
    • そのためのツールも提供(Sketch Plugin)
  • ARCore
    • Augumented Image
    • cloud anchor
      • AR空間が複数のユーザーで共有できるやつ
      • 簡単に言うとポケモンカードARとか遊戯王ARができるようになる(誰か作って...)

アンドロイド開発順当にめっちゃ進化してた。

個人的にはflutterの発表も欲しかった。。。

[Session] Customize Material Components for your product

events.google.com

初セッション。だったけど発表内容がピンと来なかった。 matherial themingでどれぐらいカスタマイズできるかみたいな内容っぽい。

デザインツールはこれ material.io

[Session] An introduction to developing Actions for the Google Assistant

events.google.com

これよかった

  • actionsでどうマネタイズするか
  • action links
    • Google Assistantへのintentみたいなリンクをどこにでも置ける
      • 可能性広がりまくる、、、
      • アプリのFQAとかaction linkにしたら面白そう

16:00 Codelabs

初Codelab参加。先のセッションで刺激されてActionを作るやつをやりました。

Build Actions for the Google Assistant (Level 1)

手順通り進めたものの途中でエラー。 なんかドハマリしそうだったので手を上げて質問。 一瞬で解決してくれてCodelab最高かよ、、、ってなりました。

ちなみに原因はchromeでactionのシミュレートするときに権限みたいなのが幾つか必要で

ここでロケーション履歴とか音声アクティビティとかをOnにする必要があったみたいです。

[Office Hour] Flutter

events.google.com

flutterで作ったアプリのデモとか展示してあった。

flutterとネイティブViewの融合に可能性を感じた(マテリアルデザインのビューの後ろがゲーム画面みたいな)。

flutterでのdynamic routingについて質問した。 こんな感じで状態によって遷移する画面を分けたい時はFutuerBuilder使うといいみたい。(この例はいまいちだけど)

  Future<Widget> _routing() async {
    var user = await _auth.currentUser();
    if (user == null) {
      return new InitialPage();
    } else {
      return new HomePage();
    }
  }

return new MaterialApp(
        title: 'Demo',
        theme: new ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: new FutureBuilder(
            future: _routing(),
            builder: (BuildContext context, AsyncSnapshot<Widget> snapshot) {
              switch (snapshot.connectionState) {
                // TODO splash
                case ConnectionState.none:
                  return new Text('Press button to start');
              // TODO splash
                case ConnectionState.waiting:
                  return new Text('Awaiting result...');
                default:
                // TODO error page
                  if (snapshot.hasError)
                    return new Text('Error: ${snapshot.error}');
                  else
                    return snapshot.data;
              }
            }));
  }

[After Hours] Firebase AppShip Launchpad & Flutter Hot Reload games

外でflutter hot reloadゲームとかやってた(というかやった) プレイしたけど意味は分からなかった。

events.google.com

flutter製かどうか聞けばよかった。

[Session] Modern Android development: Android Jetpack, Kotlin, and more

events.google.com

トークが面白い。スライドも面白いのでぜひ見て。

今後のandroidをどう開発するかっていう内容。

androidで辛かったやつが色々解決されるっぽい。

Android Architecture Componentはすでにいい感じのArchitectureになってれば無理して使う必要ないらしい。

19:00 - after hour

お酒たくさん飲んだ。 f:id:azihsoyn:20180514213030j:plain

お酒って昼間から飲めるんじゃないんですね。

食べ物はめっちゃ行列になる。

補充してる途中で貰おうとすると、普通にくれる人と列にならばないとだめって言う人がいて面白かった。

会場内もライトアップされて遊園地みたいです。

ドロイド君もテンション上がってました。

f:id:azihsoyn:20180514213232j:plain

この後ホテルに帰ってこの記事を書こうと思いながらベッドの上で気持ちよく寝落ちしていました。

1日目はそんな感じです。


2日目に続く

Google I/O 2018 に行ってきたので振り返り

帰りの飛行機でKPTやってます。 f:id:azihsoyn:20180513001056j:plain

イベント中はセッション回ったりお昼ごはん食べたり、イベント後はアフターパーティでお酒飲んだり、ホテルに戻ってご飯食べたりお酒飲んだりで忙しくて時間がありませんでした。各セッションの感想は別のエントリに書く予定なので、このエントリではそれ以外の良かったこととかこうしたら良かったというのをまとめておこうと思います。

Keep

参加できた

全てはこれに尽きます。昔から一度ぐらいはGoogle I/Oに参加したいよなぁと漠然と思っていて申し込んだり申し込まなかったりで過ごして来たんですが、ついに念願叶って参加することができました。 1日目は感極まってこみ上げてくるものがありました(泣いてはいないですが)。

また会社に費用を出してもらえることになっているのもとてもありがたいです。そのためにもアウトプットを頑張りたいと思います。

自分の興味を満たすように行動する

「(一応)会社を代表して参加してるので、業務に関係のあることとか使えそうなセッションを見ないとな。」

という考えは捨て去って行動してました。完全に自分が見たいセッションだけを見てました。セッションの感想は別のエントリにしましたが、大体

系のセッションを見てました。同じ時間帯に見たいセッションがいくつもあってそこは流石に取捨選択しなければいけませんでしたが悔いはない選択できたかなと思います。

また、Androidの新機能系のセッションはあえて避けるようにしました。日本からAndroidスペシャリストが何人も参加していてきっとそういう人たちが参加するだろうと思ったからです。 ツイッターで #io18jp のハッシュタグ見てるだけでも知見が貯まるぐらいだったのでこれもなかなかいい決断だったなと思いました。

ただ盛り上がりが異常だったので少しぐらいは新機能系のセッションも参加してライブ感を楽しんでみても良かったかもしれません。

知り合い増えた

Google I/O参加者のプレパーティに参加しました。

googleioparty.connpass.com

ここで知り合った方と1日目のAfter Hourで一緒にお酒飲んだりできました。

また、たまたまご縁があってGoogleのオフィスにお邪魔した際にも他社の開発者の方と知り合えました。(しかも最終日に同じホテルに泊まっていたことが発覚した)。

あとは最終日にtwitterシリコンバレー企業巡りする人に合流してアップルのビジターパークやfacebookに行ったりと、この数日の間にいろいろな人と知り合えたのもとても良かったです。

割りと英語困らなかった

自分は英語全くできない方ですが中学生ぐらいの英語レベルでもなんとか無事生き抜くことができました。自分が困ってなかった分現地の人が困っていたと思いますが。

移動はUber/Lyftで会話しなくても問題ありません(もちろん会話できるに越したことはないです)。セッションは英語わからなくてもスライド見ればなんとなく分かったり会場の雰囲気を感じる事もできます。あとツイッターハッシュタグ見たりとか。

一応Google I/Oに参加できることになってから海外ドラマのフレンズを英語で1ヶ月ほど聞いてたりしました。効果があったのかはよくわかりませんが何もしてないよりは耳が慣れてたような気がします。

また、こちらの記事

tomoima525.hatenablog.com

を参考にhow are youを言うように頑張ってはみたんですが、実践するのは難しかったです。成功率40%ぐらいでした。想定外の返答があると一瞬フリーズしてしまう。。。

Project Fiが最強

ホテルや会場ではwifiがあるので問題ないのですが、ツイッターがないと呼吸できない自分みたいな人間にとっては常に快適な回線がないと辛買ったと思います。Zip Simも自分が立ち寄ったエリアでは品質は問題なかったのですが2GBで上限なので何かあると不安です。

Project FiはGoogleMVNOで、6GBぐらいまで一定料金/容量 で使えるので大分安心感がありました。

fi.google.com

使える端末が少ないのと契約できる条件が厳しいのがネックですが。。。(日本だとアプリ自体落とせないのでミラーでアレをアレしてなんとか使えるようにしました)

もし他におすすめのsimがあったら教えてほしいです。

Problem

I/O グッズ一部買えなかった

今回一番の反省点かもしれません。

会社の同僚からいくつかお土産を頼まれていたのですが、1日目終わってから追加で頼まれたTシャツを2日目の終盤に買おうと思ったらサイズがなくなってました。。S, MがなくなっていてL以上しかない状態でした。

また、自分用のパーカーも1日目に買い忘れたのですが、2日目にはSがなくなってました。 まぁMでもそんなに困ってないですが。

めっちゃ日焼けした

1日目のキーノートがやばかったです。

サンフランシスコは日向はめっちゃ暑くて日陰はめっちゃ寒いみたいな気候で、事前情報として日焼け止めは塗ったほうがいいとかサングラス必須とかは知っていたのですが、セッションに夢中になって半袖のまま日向でプレゼンを見ていたら腕が真っ赤になりました。

参加者には水筒、サングラス、日焼け止めが配られるぐらいなので対策は本当にした方がいいです。

自分は日焼け止め塗るのが好きじゃないので次回は長袖のシャツで参加しようと思います。ただ日が落ちると一気に気温が下がるので寒さ対策も必須です。ユニクロのウルトラライトダウンが大活躍でした。

iPhoneパケ死

日本でZip Simを買ってiPhoneに挿して運用していたのですが、到着3日目(I/O 2日目)で2GBを使い切ってしまいました。これは完全に原因不明です。SMSで7850宛にでbalanceって送ると使用量が確認できるのですが、2日目では500MBぐらいしか使っていなかったのに何故。。。 3日目の朝になんかネット遅いなーと思ってbalance見てみたら

You have used 2048 MB of
2048 MB of your data balance.

って返ってきた時は絶望しました。

可能性があるとしたら2日目の夜に外食した時に店でツイッターやslackを非wifi環境下で見てしまったからか、ホテルに戻ってwifiに繋がないまま寝てしまってバックグラウンド通信で天元突破したかぐらいしか思いつきません。

追記: あっ。。。

f:id:azihsoyn:20180512235833j:plain

写真のiCloudバックアップっぽい。。。 設定でoffにしておかないとですね。。。😇

こんなこともあるかと思ってPixel2の方でproject fiも契約していたので困ることはありませんでしたが、次は気をつけたいです。

観光についてノープランすぎた

折角なので色々観光すべきでした。 たまたま運良く最終日にいろんなIT系のオフィス観光に行けましたが。(ありがとうございました) デプロイ肉、食べたかったなぁ。。。

荷物多すぎた

iPadとPCどっちかで良かったです。ほぼブログとかメモとか文章書くぐらいにしか使ってなかったので。 スライドの写真を撮ってtwitterで実況するみたいな使い方だったらiPadの方が良いかもしれません。

Try

  • 来年も申し込む
    • 当選するかは運ですが、絶対また参加したいです。
  • Google I/Oのグッズは1日目に買う
    • 欲しいものを確実に買うなら並んででも朝イチで買ったほうがいいかもしれません。
  • 持ち歩く荷物は極限まで少なくする
    • この境地にたどり着いたのは3日目でした。荷物が多いと余計に疲れるので少なくするに越したことはないかなと思います。来年参加できたら手ぶらで1日目から回れるようにしたいです。ポケットの多い服を着るのが良いかもしれません。水筒が配られましたが、会場内で水は飲み放題なのでなくても大丈夫です。(1日目のキーノートが鬼門)。モバイルバッテリーだけあれば自分的には事足りました。
  • Codelabsクリアする
    • 4回Codelabsをクリアすると翌年のGoogle I/Oの無料チケット抽選権が得られるらしいです。ただでさえ倍率が高いので少しでも当選確率を上げるにはコンプリートした方がよさそうです。1日目は空いてるらしいです(実際空いてた気がする)。
  • セッションは最前列に座る
    • 理由はいくつかあって、
      • セッション後に質問に行きやすい(質問に行って良いんだって気づいたの最終日でした)
      • スライドの写真撮っても後ろの人の邪魔にならない
      • スライドの写真撮ってる人が邪魔にならない
      • 荷物置ける
      • 足伸ばせる あたりでしょうか。人気のセッションだとそもそも最前列に座るのが難しいかもしれませんが、遠慮してなのか最前列は意外と空いてたりします。最前列を目指していきましょう。
  • 英語もっと頑張る
    • 旅行中もっと英語できたらなぁと思わなかったシーンがないぐらい無力さを味わったので次の機会までに上げておきたいです。相槌のパターンは一杯持っておきたいです。自動翻訳で英語力不要になる世界はいつか来ると思いますが、そのいつかまでは頑張らないとなと思いましたまる
  • Office Hour / App Reviewを活用する
    • 英語もそうですが、自分は業務ではアプリ開発担当ではないのでせっかく専門家に聴く機会があるのにあまり活用しませんでした。会社のアプリをビルドする環境を作っておいて質問するなり個人開発でアプリ作るなりして色々聞けるとようにしたいです。
  • 復習/アウトプットする
    • 多分全てのセッションがyoutubeに上がってるので見れなかったやつとか見ないといけないですね。実際に手も動かさないと何の意味もないのでcodelabやります。
    • 得たものを整理するためにもアウトプットもしていかないとなーと思ってます。twitterで登壇者を募集してるのをたまたま見つけたのでこちら

firebase-community.connpass.com

で発表することにしました。これから頑張って資料作ったりします。

  • ものをなくさない
    • はい。以後気をつけます。こちら

azihsoyn.hatenablog.com

に書いたので禊は済んだと思ってProblemに入れませんでした。

こう見るとTry多いですね。。まぁ

ということで。

その他細かい知見

  • 綿棒大好き人間なので綿棒持ってきてよかった
  • トイレットペーパーがやすりというのを聞いて念のためふわふわなトイレットペーパーを1ロール持ってきたけど使わなかった
  • スーツケースは自分の荷物を持っていくというよりもお土産を持ち帰るものとして考えて大きいもののほうがいい
    • お土産を考慮しなくて良いのなら大きめのリュックでも過ごせそうな感じでした。
  • I/O参加前に rehash.fm #44 で話した(2018/5/13現在未公開)店頭のチップの話がめっちゃ役に立った。
  • ホテル普通に良かった(初アメリカなので比較対象がないけど)。 www.booking.com

  • I/O会場付近は車が混んでるのでホテルから会場までUberで行くよりも、ホテルからマウンテンビュー駅までUberで行ってシャトルバスで会場に向かうのが良い気がします。帰りはその逆で。


おわりに

この記事が来年の参加者に少しでも役に立ったら嬉しいです。

あとスマイルさんとやっているポッドキャスト rehash.fm でもGoogle I/Oとかその他について話す予定なので良かったら聞いてみて下さい。

また、聞きたいことがあればtwitterで気軽に質問していただければ答えられる範囲で答えます。

繰り返しになりますが輪番変わってくれたり仕事引き継いでくれたり出張費出してくれた会社に深く感謝します。あとGoogle I/Oに参加することを快諾してくれた妻にも感謝してます。

頑張ろう。

Google I/O 2018のためにアメリカに来てiPhoneをなくしてその日のうちに回収した話

なんの知見も得られないただの失敗談です。

TL; DR

  • Uberはめっちゃ便利
  • Zip Simもめっちゃ便利
  • iPhoneを探すはまじで優秀

全容

さて、今私はGoogle I/Oのためにアメリカに来ているわけですが、イベント前日からやらかしました。

Uberの車にiphoneを忘れる

という大失態。 空港でたまたま一緒になったゆきさんと一緒にインテル博物館観光したあと、Google I/O Zero Day partyにUberで移動した後のことでした。アメリカに着いてから移動手段は全てUberで油断していたのかもしれません。時差でウトウトしていたからかもしれません。原因がなんであれ、パーティ会場のDevil’s Canyon Brewing Companyに到着してすぐのことでした。

あれ、iphoneなくね?

自分はPixel2とiPhoneXを2台持ちにしてズボンの同じポケットに入れるのですが、写真を撮ろうと手を突っ込んでもPixel2の感触しかない。。。

sim入れ替えのためにリュックに入れてたかな?とかいろんな可能性を考えましたが、旅行用に買ったユニクロのズボンがめっちゃスマホ滑り落ちるなと思っていたので多分今乗ってきた車に忘れたんだろうなと、割と冷静に結論付けました。

でも大丈夫!Uberはドライバーとメッセージのやり取りができるからね

ただし、乗るまでは なんですよね。少なくとも目的地に着いて決済が完了してしまうとドライバーと連絡を取る方法はなさそうでした。(もしかしたら電話番号を登録しているドライバーなら履歴から辿って連絡できるかもしれません。)

この時点でめっちゃ焦る。。。アプリの履歴から色々操作してみますが直接連絡を取る方法はありませんでした。一応自分の番号を送って折り返しかけてくれるサポート機能もあるのですが、かかってきたのは自動音声っぽいよくわからない電話だけでした。

なくしたのに気づいてからすぐ車を追いかけてたら気づいて止まってくれてたかもしれないとかどうしようもないことを考えてました。

この時点で半分以上諦めかけていて、パーティ楽しんでお酒飲んで忘れようとか考えてましたがちょっと無理でした。

また、クレジットカードの保険とかで新しいの買えれば別にいいんじゃないかと前向きなことも考えてみましたが、紛失は基本対象外っぽいことを知り更に絶望を深めてました。

しばらく諦めてIntelの展示品の紹介を聞いてたりしたのですが、ゆきさんの「iPhoneを探すを使ってみてはどうか」という発言を思い出し、パーティ会場でmacbookを広げてwebのiCloud Sign in to iCloud - Appleから探してみたら、

あるじゃん!!!

見つかった場所はインテル博物館からパーティ会場の中間ぐらいの距離の場所でした。しかも移動してないっぽい。車から落とすわけはないのでそこにUberで乗った車が止まってるっぽいことがわかりました。

もしかしたらUberの客待ちでしばらくしたら移動してしまうかもしれないとも思いましたが、パーティ会場から20分ほどの距離のところだったので最後の希望に縋ってUberで直行しました。

向かう途中、車があっても駐車場から持ち主の家の場所わからなくね?とか思いましたが、アメリカは戸建てが多いので家の近くに止めてある可能性の方が高いんじゃね?とか考えてたりしました。


無事目的地に着いたら、まさにパーティ会場まで移動したときに乗った車が見つかり、

これでもう終わった、、、

と思ったのですが、結局持ち主探し問題にぶち当たりました。

集合住宅の用になっていて、道の至る所に車が止めてあります。一応一番近くの家のチャイムを押してみたのですが反応がない、、、。

iPhone探しから車の持ち主の家探しに変わった瞬間でした。

その後も何件かチャイム鳴らしたり、すれ違う人に持ち主わかりますか?って聞いたりしてはいたのですが全く見つからず。。。時間も18時過ぎていたので大分日が落ちてきて更に寒くなってきてで途方にくれていました。


トイレもずっと我慢してたので近所のセブンイレブンでトイレを借りて、手紙挟んでおいて連絡してくれるのに賭けようかなぁとか考えながら、いざドライバー探しを再開しようとしたところ、最初の方に話しかけた妙齢の女性(スーザン)に話しかけられました。


「車の持ち主見つかったの?」

「まだです...」

911に電話する?」

「(911ってアメリカの警察だっけ???)うぅ...」

「私がかけてあげるから電話かして」

スッ(スマホをわたす) スーザン電話をかける

「日本からの旅行者が車にiphoneを忘れてしまったみたいで」

…色々喋ってるけど全然聞き取れない…

「1時間後ぐらいに来るから座って待ってなさいよ」


とスーザンの家の前で座って色んな話をしながら待ってたところ、テレビで見たことあるパトカーっぽい車が到着しました。

(本当に色んな話をしました。というかスーザンの息子がドラ息子というかドラッグをやってる息子らしく、スーザンの怒りや愚痴を聴きながらたまにリアクションするだけでしたが。。本当に肌寒いのに上着を羽織ってまで一緒に待ってくれたのはありがたかったです。あとスーザンはUberの価格は高いとか、もう使わないほうが良いわよとも言ってました。でも便利なんですよね。本当に。)


Uber使ったときにiPhoneを中に忘れてしまって…」

「大体わかった」


といって集合住宅の奥の方に進んでいきました。(ちなみに車が駐めてあった場所からは大分離れてました。自力で探すのは完全に無理です。)

10分ほどしてから警察の方と一緒に夕方乗せてもらったUberのドライバーの人が出てきて、今度こそほんとに終わったと思いました。

車の鍵を開けて、すぐにiPhoneを見つけてくれてお礼と謝罪を何度もして受け取りました。

ちなみに最後は、


「君はどこに滞在してるの?そこにどうやって戻るの?」

「全然考えてませんでした。…Uberですかね?」

「Perfect」(本当に言ってた)


みたいなアメリカのホームドラマみたいなやり取りをして終了しました。 上のやり取りの後はスーザンに深い感謝と謝罪を伝えて挨拶をして別れました。

今はUberでホテルに帰ってきて、日本から持ってきた揚げ餅を食べながらこのブログを書いてます。登場人物が全員いい人だったので奇跡的に戻ってきましたが、本当に気をつけないとですね。。。

大変だったというか自分が馬鹿なだけでしたが、1日目(Google I/O 0日目)で解決できて良かったです。明日からは気をつけてイベント楽しみます。。

goaでマイクロサービス間のI/Fを共有する

最近会社のAPIサーバーがgoaを使って実装されることが多くなってきています。設計とドキュメンテーションが同時にできる上にボイラープレートの省略(バリデーションとかレスポンス定義とか)ができるので使わない手はないですね。

それはいいのですが、今まで単体のAPIサーバーでgoaを使っていた時には気づかなかった問題に遭遇しました。

下のような構成を考えてみます。

client -> gateway API -> user API

gatewayAPIが内部のuser APIからデータを取得してクライアントにレスポンスを返すとします。マイクロサービスアーキテクチャでよくある構成だと思います。user APIのレスポンスだけをclientに返すのであればproxyすればいいのですが、gatewayで構造を変える場合はいい感じにレスポンスの構造体に詰める必要があります。

// こんなイメージ
type User struct {
    ID int
    Name string
}

type Response struct {
    Page int
    Users []*User // この部分はマイクロサービス通信
}

愚直にuser APIのレスポンス構造体をgateway側にコピペ定義してあげてもいいのですが、ネストした構造だったり更新が多かったりすると辛いところです。また、どうせBのレスポンスを返すんだからAny (interface{})でいいじゃんという気持ちもあるのですが、なんでも突っ込めるフィールドになってしまうのが悩ましいところです。

そこでgoaを活かした解決策がないか考えてみました。

1. user APIのdesignをimportする

goaのdesign DSLはgoで定義します。つまりgo getできるということです。 user APIのdesignをgo getしてgatewayのdesignで同じものを使うようにしてgenerateすれば同じ構造のstructを作ることができます。gRPCのprotoファイルのような使い方ですね。 goは1.8から同じstructの構造であれば簡単にキャストできるようになったので変換もすぐできます。 Go 1.8 Release Notes - The Go Programming Language

// user api
package media_types

import (
    . "github.com/goadesign/goa/design"
    . "github.com/goadesign/goa/design/apidsl"
)

var User = MediaType("application/vnd.user+json", func() {
    Description("user")
    Attributes(func() {
        Attribute("id", Integer, "ID of user", func() {
            Example(1)
        })
        Attribute("name", String, "Name of user", func() {
            Example("test")
        })
        Attribute("created_at", DateTime, "Date of creation")
        Required("id", "name", "created_at")
    })

    View("default", func() {
        Attribute("id")
        Attribute("name")
        Attribute("created_at")
    })
})
// gateway
package design

import (
    . "github.com/azihsoyn/goa_microservice_sample/user_service/design/media_types"
    . "github.com/goadesign/goa/design"
    . "github.com/goadesign/goa/design/apidsl"
)

var Complex = MediaType("application/vnd.complex+json", func() {
    Attributes(func() {
        Attribute("users", CollectionOf(User)) // user_serviceのUserを使う
        Required("users")
    })

    View("default", func() {
        Attribute("users")
    })
})

2. user APIでgenerateしたモデルを使う

1でもある程度問題は解決できるのですが、同じ構造のstructの配列はそのままcastできません。

package main

type A struct {
    ID int
}

type B struct {
    ID int
}

type ArrA []*A

type ArrB []*B

func main() {
    a := []*A{&A{1}, &A{2}, &A{3}, &A{4}, &A{5}}
    var b ArrB
    b = ArrB(a)
}

// ./cast.go:18:10: cannot convert a (type []*A) to type ArrB

愚直に変換してあげてもいいのですが、どうせならuser APIの構造体をそのまま使いたいところです。 以前

azihsoyn.hatenablog.com

というエントリで書いた方法と同じなのですが、Metadata DSLを使います。

var Complex = MediaType("application/vnd.complex+json", func() {
    Attributes(func() {
        Attribute("users", CollectionOf(User), "list of user", func() {
            Metadata("struct:field:type", "app.UserCollection", `github.com/azihsoyn/goa_microservice_sample/user_service/app`)
        })
        Required("users")
    })
})

と書くと以下のように

import (
    "github.com/azihsoyn/goa_microservice_sample/user_service/app"
    "github.com/goadesign/goa"
    "time"
)

type Complex struct {
    // list of user
    Users app.UserCollection `form:"users" json:"users" xml:"users"`
}

と、user APIの型そのままでgenerateすることができます。 これでgateway → user API間のstructの構造とレスポンスの構造を再利用できるようになりました。

ただこの方法も幾つか制限があり、

  • design, appがinternalパッケージになってると使えない
  • 1つのAPIから接続するマイクロサービスの数が2つ以上になるとappパッケージがバッティングする(Metadata DSLはnamed importできない模様)
    • ので、generateする際のディレクトリ名を変更する(デフォルトapp)
  • designをimportするときにapi_definitionが重複するとgenerateできないのでimportされる側はパッケージを分ける必要がある
  • designをimportするときにMediaTypeのidentifierが重複するとgenerateできないので識別子はユニークにする

と気軽には使えないかもしれません。

せっかくgoa実装のAPIが増えてきたので連携もいい感じにできたら嬉しいんですけどね。。

こんな感じにやってるなどの知見があればアドバイスいただけるとうれしいです。

素直にI/F用のパッケージ置き場を作ったほうがいいんだろうか🤔

// こんなイメージ?
gateway -(import)-> I/F packages <-(import)- user api

サンプルはこちらに置いておきます。

github.com