azihsoyn's blog

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

flutterでネイティブplugin作ってみた振り返り

最近寒くないですか???

この記事は Flutter Advent Calendar 2018 - Qiita 12日目の記事です。 昨日は aoinakanishi さんの Google公式Flutter用WebViewプラグインを一通り使ってみた でした。

さてもともとはネイティブpluginの作り方という内容で書こうかなと思っていたのですが、 公式サイトDeveloping packages & plugins - Flutter を見れば済む話なのと、Qiitaに翻訳記事 Flutter - Developing Packages & Plugins (日本語訳) もあったので特にやることがなくなってしまいました。

なので実際に作って公開してみてわかったこととかを思い出しながら振り返ってみたいと思います。年末ですし。

作ったもの

github.com

Google I/O 2018で発表されたfirebaseの機能の一つである ML Kit をflutterで使えるようにしたやつです。

Firebase Japan User Group / Google IO 2018 報告会 で発表してきました! - Gunosy Tech Blog

Google I/O に参加して意識が高まってたときにflutterで勉強会に登壇することを決め、なにかネタが欲しいと思って作ってみたのがきっかけでした。

それがまさかスター100を超えるとは思っても見ませんでした。それだけflutterとMLKitの需要が高かったんだなと思います。

当時はまだ公式のpluginはありませんでしたが、そこは開発速度の早いflutter、今はちゃんと提供されています。

github.com

flutter公式で提供するpluginは全て https://github.com/flutter/plugins で管理する運用みたいです。

公式のpluginが出たのでそこまでがっつり機能追加していくつもりはないですが何気に カスタムモデル にも対応していたりするので気が向いたら使ってみてください。動かないとかは修正するつもりです。

さて宣伝はここまでにして、以下plugin開発で得た知見とか参考になりそうなことを。

参考になりそうなこと

公式リポジトリに参考になるコードがたくさんある

上でも述べましたが https://github.com/flutter/plugins にはたくさんのpluginが用意されています。 pluginを作るときはまずここを参考にすると良いと思います。

ネイティブpluginには以下の2つの機能があると思っていて、

  1. ネイティブ側でなにか処理をしてflutter側に値を返す
  2. ネイティブ側のViewをflutter側でも表示する

1のような機能を作りたいときは

あたりを参考にすると良いと思います。

2の機能だと

あたりでしょうか。

また、1の機能を実装する上で必ず見ることになるのが

flutter.io

dartとネイティブの型の対応表です。

公開しなくてもpluginを読み込める

plugin開発のページでは公開する方法として flutter pub コマンドを紹介しています。

flutter.io

pubコマンドでpublishされたpluginは https://pub.dartlang.org/flutter/packages に公開されます。

ただ、このコマンドはGoogleのCLAに同意する必要があったり、パブリックになってしまうため開発中に使うには少しハードルが高い気がします。

そういう場合は gitのリポジトリから直接pluginを読み込むことができます。

flutter.io


これ最初からあったんでしょうか?自分が最初plugin作り始めたときはなかったような🤔もっと早く知りたかったやつです。

公式pluginsの言語はJava/Obj-C

flutter公式のpluginに機能を追加したい場合は普通にPRを出せばレビューしてくれます。

今の所言語はJava/Obj-Cで実装していくポリシーみたいです。

github.com

そういう意味では参考になるコードがあると言ってもJava/Obj-Cに慣れてないと辛いかもしれません(辛い)。

ただplugin自体は当然Kotlin/Swiftでも書けますし flutterのコマンドでも言語を指定できます。

$ flutter create --template=plugin -i swift -a kotlin hello

flutter.io

慣れてる言語で書くのが良いと思います。

依存パッケージ問題はむずい

flutterに限らずパッケージの依存関係を管理するのは難しいです。 ネイティブ側で使う依存ライブラリは

  • iOSでは .podspec
  • Androidでは build.gradle

指定することでflutterからも呼び出すことができます。

これは1つのplugin内では特に問題は起きないのですが、他のpluginと同じライブラリを使っていると一気にハードルが上がります。 というか多分どっちかのライブラリが対応しないと同時に使えないとか普通に起きる気がします。

firebaseのSDKは開発スピードが早く機能追加が頻繁に行われるのでライブラリのバージョンも結構よく上がります。(semverとは...)

この問題の最適解は自分の中では出てませんが CocoaPods なら optimistic operator (~>)を使ってパッチバージョンのアップデートに追従しておくのがいいのかなと思ってます。

# 5.11.X までサポート
s.dependency 'Firebase/MLVision', '~> 5.11.0'

この場合依存ライブラリのアップデートがあったら対応が必要になりますが、勝手に依存ライブラリが上がって動かなくなるというのは防げる気がします(ライブラリのバージョニングのポリシーによりますが)。

公開後の分析を見る

pluginのリポジトリにはanalysis tabがあります。https://pub.dartlang.org/packages/mlkit#-analysis-tab-

ここではlint的なチェックや依存ライブラリ、対応してるflutterのバージョンなどによってスコアづけしてくれるみたいです。ここで提案されている修正は直したほうがいいと思います。

もしかしたら flutter analyze コマンドとかで公開前にわかるかもしれません。 flutter pub --dry-run でも出てきたかもしれません。

pluginの開発はAndroidStudioが多分良さそう

flutter pluginの開発はIDEがサポートしてれば何を使って書いても問題ないですが、AndroidStudioが便利です。

flutter pluginは、flutterとしてのプロジェクトとAndroidとしてのプロジェクトとiOSとしてのプロジェクトが共存しているような状態なのでIDEのコード補完を効かせるのに難儀します。

AndroidStudioではflutterプロジェクトの状態ではflutter補完が普通に効くのですが、その状態でAndroidのコードを編集しようとするとandroid用のimport pathが読めなくてIDEが真っ赤になると思います。

そんな時AndroidStudioの右上に出てくる Open On AndroidStudioをクリックするとAndroidプロジェクトとして開いてくれます。当然gradle syncが終われば補完が効きます。 同様にiOSのコードを開くとOpen on XCodeが出てくるので(macの場合) そのままXCodeで開けば補完に頼ってコードを書くことができます。

他のエディタを試していないのでなんとも言えないですがネイティブのコードを書く場合はAndroidStudio/XCodeを使ったほうがハマりどころが少ない気がします。

(例えばAppCodeにandroidとflutterのplugin入れたら1エディタで開発できるんでしょうか?🤔気になる...)

まとめ

flutterも1.0になったことだし、どんどんplugin作って行きましょう!(雑)

(そういえばhummingbirdでwebもflutterで書けるようになったらpluginのweb対応もあるのかな)


明日は superman9387 さんのエントリです。

自分とラブライブ振り返り2018

この記事はラブライブ! Advent Calendar 2018 - Adventarの1日目の記事です。トップバッターです。

実は去年も書いてました。

azihsoyn.hatenablog.com

どうやらサンシャインアニメの2期放送中だったみたいです。

もう一年経つんですね。早いです。

今年もあと一ヶ月ということで、今年の自分のラブライブ活動を振り返ってみたいと思います。

2018年は2017年よりラブライブにどっぷり浸かった年だったように思います。

今年は初めてラブライブのライブに参加しました。

azihsoyn.hatenablog.com

これでライブにハマってからというもの、その後もライブやファンミーティングなどに応募して参加しまくってました。 といっても、eplus様がチケットをなかなか用意してくださらないのでLVでの参加が多かったですが😇。

そういえばLVでライブを見たのも初めてだし、ファンミーティングに行ったのも初めてでした。ファンミは初めてライブに参加したとき同様、楽しめるのか不安でしたが杞憂でした。

いろんなイベントに参加しながら友人にラブライブを布教した結果、ラブライブガチ勢が3人になり、チケットを協力して申し込めるようになったので、3rdライブでTryにしていたライブ両日参加を4thライブで実現することができました。

f:id:azihsoyn:20181201012032j:plain

4thライブはあの、μ’sがファイナルライブをした東京ドーム。 本当に最高でした。。。(まだファイナルライブの円盤は見てないんですけどね)

何度も言ってますが2日目のHPTのすわわの力強いソロが印象に残ってます。

また、打ち上げで他のラブライバーの人と絡んだのもいい思い出です。

参加するまではThank, you friendsや学年曲の卒業がテーマの曲などから終わりが近いのかなとものすごく不安でしたが、まだまだAqoursは終わらないというメッセージを感じられて、2019年も2020年も、いや、大阪万博の2025年もずっとAqoursを追いかけていこうと思えました。

4thの感想は他にも書きたいことはいっぱいあるのですがキリがないのでこの辺で。

この記事が出た翌日12/2はGuilty Kissの福岡公演のLV、12/15にはAZALEAの仙台公演のLV、大晦日には紅白を見て1/4には劇場版の舞台挨拶(当選予定)に参加してからの劇場版鑑賞、その翌日はGuilty Kissの千葉公演の現地参加!!その他のファンミ公演もLVで参加予定と、すでにある予定だけでも年末年始が充実しています。

2019年には5thライブだけでなくアジアツアーも決定していたりとどんどん輝きが大きくなっています。

更に、2019年にはスクスタという約束されし神アプリがリリースされます。また虹ヶ崎の活動も本格的に始動しました。

lovelive-as.bushimo.jp

lovelive-as.bushimo.jp

2019年もラブライブという作品から目が離せないですね!

さて、このままラブライブが好きという話を延々と書いても良いんですが、今年ラブライブに関連して気づいたことがあります。

自分の観測範囲で最近ラブライブにハマった人は、口を揃えて

「なんでもっと早くラブライブに出会わなかったんだろう」

と、後悔してることです。もちろん自分も含めて。

もちろん今からハマっても無印のアニメを見たり、円盤でライブを見ることもできます。というかそういう人のほうが多いハズ。 ですが、やっぱりリアルタイムで参加している時の楽しさって格別なんですよね。ライブもLVで見るのと現地で見るのは全然違います。ご用意されないことが多いためよく痛感してます。

そういった後悔をしたからか、自分は結構後悔しないような選択というか生き方をするようになったような気がしなくもないです。楽しんだもん勝ちというか。

rehash.fm

先日 スマイルさんのやっているポッドキャスト rehash.fm に連続出演58回のゲストとして参加させて頂いたときに、グノシーのVTuberタブのリリースについてちょろっと話しました。

あれも本当の発端はどうだかわからないですが、VTuberコンテンツやりたいみたいなことをアピールしてたから関われたのかなと思ったりしてます。

やっぱラブライブって人生なんですよね。


ラブライブと絡めてちょっとエモい感じのことを書いてみました。

なんかまとまってるのかよくわからないですがラブライブアドベントカレンダー1日目はこんな感じで終わりです。

isucon8に参加して予選敗退してきました

勝利を知りたい。。。

辛いです。辛すぎるので「今日は一日ラブライブ三昧」を聴きながら書いてます。 聴き逃し配信来ないですかね、、、

今年で3回目の参加のisuconですが、参加者もどんどん増えているみたいです。今回も去年と同じメンバー(おばちゃん (mobata) , ゆづるくん (yudsuzuk), azihsoyn)でチーム rehash.fm として参加したのですが、予選突破ならず。スマイルさんほんとすみません。

正確な順位はまだ出てませんが 100位のちょっと上ぐらいだったみたいです 62位でした。

isucon.net

一応前回よりは成長できたみたいなのでそこはせめてもの救いです。。

以下やったこと。敗退したので参考にはなりません。

事前準備

isucon7の予選問題を復習

一週間前におばちゃんがconohaで練習用インスタンスを立ててくれました。 この問題はまずcache-controlをどうするかが鍵だったのでnginxの設定ファイルをいろいろいじってました。他の人のブログを参考にしながらpublicにすればいいというのはわかってましたがなんとかベンチマークIf-Modified-Since を送ってこさせようとしたのですがうまく行きませんでした。publicにするのは簡単だったので本戦でもpublicつけとこって思いました。 練習は前日までやってましたが圧倒的準備不足でした。ただ直前まで練習していたのでisuconの感覚をもったまま当日に望めたのはよかったです。

リポジトリ, slack部屋を用意

最初githubisucon8-qualify-appisucon8-qualify-conf の2つのリポジトリを用意してましたが練習問題やりながらconfも同じリポジトリで管理したほうがやりやすいなと気づいて isucon8-qualify に統合されました。この判断は良かったと思います。 こんな構成でMakefileで全部最新の状態にできるようにしてました。

webapp/
nginx/
systemd/
db/
Makefile

当日やったこと

初期状態でベンチマーク

今回はpythonでやると決めていたのでアプリケーションをpythonにしてベンチマークを実行しました。確かデフォルトだと600とかだった気がします。

レギュレーション確認

やるのは当然なのですが、今回はスコア配分も載っていたので配点の低いところにリソースを割かないように気をつけてました。次どこやろうで悩んだときにこの基準に振り返れたのは良かったと思います。

サービス把握

e○lusのようなイベントの予約サービスでした。一通り触るのは今思っても大事だと思います。今回はadminの機能もあって売上レポート出力機能があったのですが、配点が低かったのでここはスルーすることにしました。

ここまでで30分ぐらいでしょうか。

そろそろBGMが必要だと思ったので BanG Dream! より Roselia をひたすら流してました。9/17がファンミだったので予習しないとだったんですよね。

ボトルネック特定

もはや定石となったalpやgo_accessなどを使ったnginxのログ解析。 さて設定ファイルいじるか、と思ったら

ない。。。?

とここでおばちゃんが、 h2o じゃない?と気づいて

そ、そうきたかー!!!ってなってました。 一番最初の判断ポイントで、h2oのまま行くかnginxに載せ替えるかの2択でしたが、h2oは全員ほぼ触れたことがなくドハマリする可能性があったのでまずはnginxに載せ替えることに。 nginxの設定ファイルの一部をいじることはありますが0から入れるのはほとんどやらないので意外と手こずって終わる頃には12時過ぎになってました。 ただ前日までにおばちゃんが用意してくれたisucon7の設定ファイルがあったのでそこまではまらなくて済みました。

その後alpを使って測定したところ、 GET / GET /api/event GET /admin/sales GET /api/users あたりがボトルネックになってました。 とりあえずの方針としして自分が GET /, ゆずるくんが GET /api/event , おばちゃんがDBサーバとWEBサーバの分離などを担当することになりました。

アプリケーション改修

辛い、、、コードが辛い、、、。トップページを表示するのに events テーブルをselectしてから その event.id でもう一度 eventsをselectしてそのevent.id でreservationsとsheetsを舐めるみたいなことをしていていわゆる N+1問題なのですがそのレスポンスのjsonが呼び出し元でkeyを削除していたり DBのカラム名をそのまま使っていたり違うkey名に変えたりと難読化されていて修正がだいぶ困難でした。しかもそのコードがいたるところで使われていて呼び出し元の引数によって返す内容も変わったりするので、あぁ、今回のisuconのテーマはリファクタリングとか歴史的経緯とか闇かな?って思ってました。 影響範囲が大きいのが嫌だったのでトップページ用の関数を新たに作りました。

また、この修正なら動くだろと思って実行した結果エラーが出たりとpython力の無さがだいぶ出てました。なぜpythonにしてしまったんだ、、、。 レスポンスのjsonの構造を変えないようにフィールドとテーブル定義などとにらめっこすること3時間ぐらいでやっとスコアが上がる修正ができました。 この時点でスコア1545。 その後ゆずるくんのランクの固定値かや不要なフィールド返さない修正で2319。

多分この時点で16時ぐらい。

その間おばちゃんの2台構成も試してみたところスコアが下がったのでロールバック

次の方針を決めるためにベンチマーク実行したところ トップページやevent apiはそこまでボトルネックではなくなっていたので users系の改修に入りました。これはそこまでスコアにはならないのですが明らかに遅くて他にも影響ありそうだったので悩みましたが手を付けました。

usersも動くかわからないまま本番で確認しながら修正したので時間がかかって17時ぐらいになってました。この時点でスコアが2849。

もうほぼできることがなくて諦めムードが漂ってたんですが、トップページ用に作ったイベント取得処理を他の箇所にも適用したら早くなるんじゃね? と思ってえいやでやってみたらスコアが一気に7010に。

この時点で17時半。

同じことを全部のイベント処理にも適用しちゃっていいんじゃね??と最後のワンチャン実装を試したところadmin系ではエラーになったのでadminを除くevent処理の書き換えを試したところ更にスコアが伸びて16156に!!

全員テンションぶち上がってました。

流石にこれ以上はやる時間がなかったので記念写真撮って残り10分はひたすら祈ってました。

f:id:azihsoyn:20180917235942j:plain

結果はまぁ予選敗退だったんですけどね。 それでも最後のライブ感は参加しないと味わえないなと思います。 死ぬほど悔しいですけど!!!

結果出た後しばらくこんな気持でした。

f:id:azihsoyn:20180917235619j:plain

来年同じ思いをしないために振り返っておきます。

振り返り

Keep

  • レギュレーション読み合わせ めっちゃ大事だと思いました。認識があってるのが大事。
  • アプリケーション一通り触る これも時間取りすぎたかと思いましたがやってよかったです。
  • リポジトリの構成 1コマンドでミドルウェア含めて最新の状態にできるのが本当に大事だなと思いました。去年はgit管理していながらmasterで動かないみたいなことがあって今年はめっちゃやりやすかったです。出題のinitializeが良かったというのもありますが。
  • tagでスコア記録 isucon7で次回はやろうと言っていたのができました。

めっちゃ便利。振り返りにも便利。

Probelm

  • 慣れてない言語で挑む 勝ちに行くのであればやはり自身のある言語で行くのが一番だなと思いました。違う言語で挑むのも勉強になるので一概には言えませんが。
  • 役割分担 去年も書いた気がしますが気づいたら同じところをやってたみたいなのはもったいないのでなにか考えないとですね。。
  • 部分最適になってしまった alpでエンドポイント別の対応をしたんですが、アプリケーションコードの全体像を見る前に修正を始めてしまったので改修の割にスコアが伸びなかったというのがあったのかもしれません。
  • パフォーマンスを上げるための必殺技ばかり意識してしまった なるべくDBにアクセスしないでメモリに乗せるのがほぼ定石になっていますが、そもそもDBの構造がおかしい(予約がないと座席の空き状態がわからないとか)のを直せなかったのが悔しいです。データ構造を変えるということに頭が回りませんでした。

Try

  • そろそろgoで出たいぞ
  • ローカル or 個別の環境で動かせるようにする 動くかどうかまで本番環境で試すのは流石に効率悪いので…
  • 全体最適を意識する 自分がこのサービスを作るならどういう設計にするかみたいなことを考えながらやる

今年も予選突破は叶いませんでしたが解いていてじわじわスコアが上がっていくとてもいい問題だと思いました。運営の皆さん毎年ありがとうございます!あと3年連続で弊社オフィスを使わせて頂いてありがとうございます。外部の人でも快諾してくれて懐の深さに感謝しかありません。

チームメイトの二人も今年もありがとう!

f:id:azihsoyn:20180917235745j:plain

(写真にチームメイトじゃない人が写ってますが)

あ、rehash.fm も相変わらずよろしくおねがいします。 rehash.fm

ラブライブ!サンシャイン!! 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日目に続く