muzigram

山椒は小粒でもピリリと辛い

2016/11/06

サイクリングしまなみ当日

前日

松山ー>今治 今治ー>松山。行って戻ってくる。明日も同じことをやる模様。

登録、ゼッケンの受取等は前日の為松山から今治へ移動。(片道1時間程度
輪行袋で自転車を持ち歩いている人もちらほら。ちなみに自転車は当日チェックとのことで、会場に無理に持ってくる必要はなかった模様。1時間おきにループバスも出ていたので歩きでも問題なし。


荷物預かり用のザックはけっこう大きめ(iPadとの比較

前日会場の様子。

お、おう

スポンサーの晩餐館。飲みながら走る?

は か た の し お !

当日


04:00 起床
05:00 松山駅集合(サイクルトレインを予約済み)
05:20 松山出発
06:20 今治到着
06:50 ループバスでサイクルステーション到着
07:00 イベント便で送っておいた自転車を受取り、組み立て、スタート地点に移動。
07:20 知り合いに挨拶も済ませ、荷物を預けてスタート地点に移動。

4時起きなのにけっこうギリギリだったな、という印象。スタッフの方々にはいろいろ誘導なりしていただいて感謝。

コースについて
合計110km。高速道路から大三島一周、伯方島、大島を得て今治に帰るルート。

http://latlonglab.yahoo.co.jp/route/watch?id=2b954f1e63a2d6a9aa9dd5b52a8dd69e

高速道路を走れることについて
30kmオーバーをノンストップで走り続けられる体験は貴重ですよ!道路の継ぎ目には重いゴム板が敷いてあるようでひたすらノンストップに走り続けることができます。
ちなみに、高速道路を封鎖して走れるイベント。というのはこのサイクリングしまなみだけ!

沿道の応援
坂のめっちゃ足着きたくなるタイミングに応援に来てる人はなんなんすかね。
あそこで応援されると頑張るしかない。定期的に沿道で応援してくれる人や運営のボランティアがいて、拍手、声援、応援をいただけました。普通に生活してるだけではここまで人に応援される機会なんてないので謎の感動が。地元の人からしたら高速道路は封鎖



 盲点だったのは橋を渡るためのアプローチ坂で、島を渡るために登って降りて、登って降りてを繰り返すのでなんだかんだ獲得標高が増えて最後の方はひたすら軽いペダルを無心で回し続けてました。あと、ゴール前のアースランドしまなみに至る道が鬼畜。

完走

最後の方は若干渋滞もあって安全運転重視。ゴールは16:00、リミットの1時間前でなかなかにギリギリでした。ゴールした後のフィニッシュエイドは焼豚玉子飯をチョイス。最高のうまさ。



持ってきてよかったもの

サイクルジャージの下に着るベースレイヤー。吸湿速乾に優れているので、山登った後の下りに体を冷やして調子を崩すこともなく走れました。

 
当日の天気は12度〜20度くらいだったので、ウインドブレイカーの代わりにカバーを選択、暑くて脱いだとしても荷物にならないだろうという判断。結果正解。

 あったほうがよかったもの


・ビンディングシューズ、ペダル:坂道とか変わってくるんだろうなーという
・サングラス:向かい風が強くて写真写りが最悪だったんじゃ・・・
・カメラ:スマホのカメラだとやっぱり揺れが酷いとか表示時間の問題とか色々あるので、ソニーのアクションカメラとか買いたい欲がましてきてます。

愛媛、松山、今治について

愛媛は観光する人にとってとても過ごしやすい環境が整ってますね。けっこう色んな場所に愛媛Wifiがあって、松山の路面電車も頻繁に行き来してて気軽に乗れます。
空港から松山駅も近くにあり、自転車用のスペースも用意してあって最高。

レース後の疲れを癒やしてくれたキスケBOXも最高でした。
http://www.kisuke.com/service/box/

道後温泉、平日昼間は流石にガラガラ、中は普通の銭湯っぽかった


松山城は体験コーナーが充実

おすすめされた霧の森大福。開店と同時にいったけど10人くらい並んだ。

2016/11/03

サイクリングしまなみに参加してきました。準備編

最高のサイクリング体験をしてきた話

サイクリングしまなみ2016に参加してきました。
結論からいうと、しまなみ海道は最高であるし、愛媛は最高だった。
お陰様でなんとか完走(制限時間1時間前…)することもできました。エンジニアには自転車愛好家も多いので後に参加するひとや、しまなみどうなん?って人のためにいろいろ書き残していきたいと思います。



サイクリングしまなみについて


サイクリングしまなみは2年に1回のペースで行われるらしく今回で3回目(プレ大会を含む)特徴としてはなんといっても、高速道路を封鎖して行われる。という点。信号もなく、整った道路を30km以上ひたすら走リ続けることができます。しかも雄大な瀬戸内の景色とともに!



こーんな感じの景色がずっと続くわけです。最高か?

登録

抽選の受付等が始まったのが2016/4月末5月頭くらい。
サイクリングしまなみはかなり抽選倍率が高く、地元の人も2割くらいしか割り当てがない。と嘆いていました。しかし、今回はANAの「旅作」経由で申し込むとコースDの出走権がもれなくついてくる。というプランがあり、速攻で飛びつきました。
(コースDは30km程高速道路を走った後、大三島一周、伯方島通過、大島を超え、今治に戻る。合計110kmのコースです)

 半年前の時点で今治のホテルに止まるプランはほぼ埋まっていて、結局松山にホテルを取り、当日4時起きで頑張るという流れに。半年前の時点ではサイクルトレインの予約の詳細等もなく、半ば行っとけ予約のような形でしたがなんとかうまく回りました。
 松山のホテルサンルートを陣取り、飛行機の往復を予約して4万円程度。安い!今治にホテルを確保できれば当日はだいぶ余裕ができると思います。

旅における自転車の取扱いについて

最初は飛行機輪行を、と考え、旅作専用のサイクルトレインも予約したのだけれども帰りの羽田〜自宅間が帰宅ラッシュとかぶることや、最終日の観光のことを考えると自転車イベント便にしてしまうのがベストという考えに至りました
http://www.seino.co.jp/seino/service/domestic/cycling/

 サイクリングしまなみではイベント便という連動が行われており、上記のサービスで送った自転車を当日、西濃運送のサイクルステーションで受取り、そこからスタート地点まで移動、帰りもそこで梱包する。という便利なしくみがあります。ありがたいことに、当日は今治駅からサイクルステーションまでのバスも出ており大きな混乱もなく移動することができました。
箱はけっこう大きめです。

自分はヘルメットなんかも送っちゃいました。

旅行プラン等

自転車を送ることにしたので、けっこう気楽なもんです。
大会前日に松山入り、大会参加の次の日の便で帰る。というプランにしたため、
愛媛観光もするぞ!という意気込み。これは大成功でした。ココらへんの旅行記はのちほど。

準備編まとめ

・サイクリングしまなみは人気イベントの為、抽選が厳し目、スポンサーにANAが入っていれば旅行プランがありそうなので、確実に出走したい人はそちらがおすすめ。
・自転車輪行に不安がある人は自転車イベント輸送便を利用するのがよい。(価格は1万プラスα)
・今治近辺のホテルは半年前でも埋まっているので松山等も視野に入れよう!



2016/09/30

LineBot動かしてみた #golang #linebot #heroku

始まり


  • LineさんのStreaming APIが公開されたようです。
  • とりあえずやれ(JUST DO IT)動かすぞの精神で動かします。 
  • 今回はGoとHerokuを使います

 JUST DO IT!!!!


今回はGoとHerokuを使います。理由は以下
 コードとりあえずGithubに。(と言っても、SDKに入ってたエコーをherokuに上げるように修正したのみ。
  https://github.com/mogeta/lbot

手順、および詰まった箇所等


  • そもそも、どこから登録すんだ?
  • channel_secret?channel_token?どこだ?ってなるので、素直に動画見たほうが良い。
  • webhookに指定するURLはhttps必須。とりあえず試す場合、herokuやLet's Encryptに頼ることになるかな?
  • IPのホワイトリスト指定。起動して、対話するとこんな感じでログが出てる。ひとまず動かすだけなので、指定されたアドレスをさくっと登録しときましょうねー。
linebot: APIError 403 Access to this API denied due to the following reason: Your ip address [<ipアドレス>] is not allowed to access this API. Please add your IP to the IP whitelist in the developer center.

herokuで起動の手順


  • herokuにユーザー登録。
  • herokuツールベルトのインストール
  • 後は各自、コマンドライン上でコマンド打っていく
  • 大体公式の手順書に従う感じでやれば問題ない、Goの場合はここ
  • heroku create 
    • >これだけでサーバーが立ち上がる、URLとgitリポジトリが示される
    • >デプロイしたいアプリがあるディレクトリでかつ、git initしとくとherokuというリモートを追加してくれる。
    • >というかgit initしてなくて、コマンドが動かんぞ?ってやってた。
  • herokuにgit push
  • 環境変数を指定。
    • >herokuのページから立ち上げたサーバーのSettings->Config Variables
    • >CHANNEL_SECRET
    • >CHANNEL_TOKEN
    • >それぞれLineの管理ページから取ってきましょう

動かしてみた

動いたーやったー。特に感動はないけど。
たまに反応してないのはホワイトリストに登録してないアドレスから来てるからっぽい。知識とheroku力が足りてないのでとりあえずスルーしてる。


終わりに

 優勝賞金1,000万円の「LINE BOT AWARDS」があるらしいのでなんか作ってみようぜ。つーことですね。

参考URL
https://github.com/line/line-bot-sdk-go
https://developers.line.me/

2016/09/29

サービスを作りたいエンジニアってなんだろうなー。リアルウォンテッドリーに行ってきた。

リアルウォンテッドリーに参加してきましたよっと。
お酒も入ってるけど、一気に書かないとブログ書かないなと思ったので。
(エンジニアという表記がブレてるなーと思ったけど、大体ITのエンジニア、いわゆるWeb系プログラムを書いたりする人と思ってください)
あ、コーヒー、めっちゃうまかったです。↓
 自分のような緊張しいには面接の場よりも数段カジュアルに仕事や技術のことが聞けたのでだいぶありがたい集まりでした。(それでも緊張してかなりしどろもどろ感もあったけど)

 どういうエンジニアを求めていますか?という質問をすると、多くの企業で「サービスを作りたいエンジニア」もしくはそれに準じたニュアンスをもらった。自分はどちらかと言えば、技術を追求して価値を高めるエンジニアではなく、今ある状況、使える技術においてどのように最大利益を追求するか?というエンジニアだと自負しているのでこの点に関してはだいぶ心強いなと思った。(ちなみに、自分と仕事をしたことがあるエンジニアや同僚に聞きたいんだけど、この点ってニュアンス合ってます?技術を追求する方のエンジニアって思われてる?)

 余談)前職ではベトナムのエンジニアと協業でゲームを製作していたのだけれど、エンジニアとしての仕事よりも、ゲームの仕組みづくりやどうやったら広告を見てもらえるか、ユーザーが続けたいと思うモチベーションはなにか。どうやってゲームが遷移するのか。みたいなのを考えてることが多かったなーなどとつくづく。一年かけて、結局3,4回フルスクラッチで作り直してポシャったんだけど。)

 ところで「サービスを作りたいエンジニア」ってなんだろう。という根本的な疑問が湧いてきている。思いつく限り、適当に羅列していく。

  • 企画から参加し、意見を出せるエンジニア
  • 改善案を提案出来る。
  • 自分ごとのように考える。
うーん、もうちょい具体例を出したいな。どういうのがいいだろう。自分はゲーム業界畑だったのでそちら側に流れがちになるけど。
  • どのタイミングで動画広告だす?それってユーザーがみたくなる?、じゃあこのタイミングで(ry
  • この数字が撃破したモンスターだと伝わるように魂的なエフェクト載せません?
  • PCとかスマホとかゲームのビュー複数持つならサーバー側APIにしてSAPに挑戦してみます?
一方でサービスを作るITエンジニアとして自分が弱いなーと感じる部分
  • 金になるコンテンツを企画する。金を払いたくなる機能
  • データ分析に基づく提案
技術に基づく提案っていうのがアプローチとしては一番かっこいいんだろうな。なかなか、過去のキャリアでそういうのって言えてないな。

 でもそれって今では割りと普通のプログラマ、エンジニアなんじゃないかなーという気もする。(業界にもよる?)。Web寄りの会社なんかだとアジャイル、スクラム。といった単語が浸透して、タスクも「プログラムの機能一つ」という状態から「ユーザーストーリーの完成」という状態になってきて、「プログラムや機能を作って終わり」ではなく「サービスとしてユーザーに使ってもらう」「金を産んで完成」という形になってきたんだなと。

ーーーーー区切り線ーーーーーー

 なんでこんな支離滅裂な文章書いたかっていうと、自分は「サービスを作りたいエンジニア」だと思っているけどそれを、転職時アピールとして「なぜならこういうことをやってきたし、これからもこういうことをやりたいと思っている」にどうやって昇華させようか、という悩みに直面したから。

 今までは「ゲームを楽しむ人を増やしたい、だから誰でも手に取れる携帯ゲームを俺はやるんだ」とか「世の中がどんどん便利になって、豊かになっていくのなら、最後に求められるのはゲームだろ」って思うところがあってゲームをやってきたけど、ソーシャルゲームやガチャ、課金システムに対して、うまく折り合いがつけられない。

 ゲームじゃない業界にもいた事あるし、そもそもパチンコ、パチスロの仕事をしてた時はゲームじゃねえよなぁ。と思ってたので他業種でも全然構わないとは思ってるけど、外から見た人は自分を「サービスを作りたいエンジニア」としてちゃんと評価してもらえるのか。という疑問もある。


まとめじゃないまとめ
  • サービスを作りたいエンジニアとしての自負はあるけど難しいね。
  • Go言語の仕事してみたいけど、Rubyおおいねー。(白目
  • 元ゲーム業界です。って人多いなー。スマートフォンゲーム一段落感
  • どのジャンルのエンジニアも募集してます。のお互いの難しさ
  • 自分のような浅く広くなんでもやってました的なエンジニアの難しさ。
 リアルウォンテッドリーはどんなスタートアップがあるのか?とか話気軽に聞いてみたいなーってフェーズの方はかなりおすすめな感じがしました。ありがとうございました。今、暇なんで職やら仕事は募集中です。

2016/09/25

GoとDockerのお勉強 #golang #docker

始まり

ISUCONの敗北から、もう少し体系的にWebサービスの作成を学ばなければ。と思い始めたので唐突にDockerから始める。Dockerについて、ガッツリ説明するというよりかは、自分の知識の再確認。メモの用途が強い記事。

一言まとめ

という流れ。

環境など


Goのバージョン
go version
go version go1.7.1 darwin/amd64
Macの環境
sw_vers
ProductName: Mac OS X
ProductVersion: 10.11.6
BuildVersion: 15G1004
Docker周り
docker -v
Docker version 1.12.1, build 6f9534c
docker-machine -v
docker-machine version 0.8.1, build 41b3b25
docker-compose -v
docker-compose version 1.8.0, build f3628c7
VirtualBox バージョン 5.1.6 r110634 (Qt5.5.1)

インストールはここから、Docker for Macを選択。
https://docs.docker.com/engine/installation/mac/

公式の導入記事

https://blog.golang.org/docker


  • サンプルをgo get
  • Dockerfileを書いてあるとおりに書き換える

# Start from a Debian image with the latest version of Go installed
# and a workspace (GOPATH) configured at /go.
FROM golang
# Copy the local package files to the container's workspace.
ADD . /go/src/github.com/golang/example/outyet
# Build the outyet command inside the container.
# (You may fetch or manage dependencies here,
# either manually or with a tool like "godep".)
RUN go install github.com/golang/example/outyet
# Run the outyet command by default when the container starts.
ENTRYPOINT /go/bin/outyet
# Document that the service listens on port 8080.
EXPOSE 8080

とこのようなことをやっているよ。なんだけど、onbuildというDockerfileを使うと以下の様に出来るぞ!と書かれている。(書き換えたのは一体…(まぁ、こんな動作するんやで。と。)

FROM golang:onbuild
EXPOSE 8080
ONBUILD
ってなんやねん。
http://docs.docker.jp/engine/reference/builder.html?highlight=onbuild#onbuild
イメージ構築時に実行される命令なんかを記述する。なるほど?
 Goの環境を作った際、「実行するコードをコピー」「ビルド」「インストール」
なんかを予めonbuildしとくことで毎回専用のDockerfile作ってーとかやらずにアプリ用の設定に集中出来るってことか。と解釈。go-wrapperにその辺、まとめてある。

おもむろに、docker-machine

Dockerを動かす環境を自分のPCやAWS、指定のVPC等に用意できる。
docker-machine create --driver virtualbox local
上記コマンドだと、VirtualBox上に環境を構築、localって名前をつける。
docker-machine ls
NAME             ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
local            -        virtualbox   Running   tcp://192.168.99.100:2376           v1.12.1
上記コマンド: docker-machine ls
にて作成した環境の一覧等が見れる。
docker-machine env local
eval $(docker-machine env local)
envでその環境を動かすための環境変数一覧等が表示される。なお、そのコマンドをevalすることによってその一覧を適用出来るようになっている。

ビルドする!

docker build -t outyet .

  • 現在位置のDockerfileの内容でビルドする
  • タグ名はoutyet 

実行する!

docker run --publish 6060:8080 --name test --rm outyet

  • dockerの8080を6060で受け付ける。
  • 名前はtest
  • 終わったらイメージを削除
  • outyetを実行するよ!

これ、どこで確認できんの!?

docker-machine lsした際にURLが表示されているので、http://そのアドレス
でアクセス。

あ、表示されてますね。やったぜ!

まとめ。
  • Goに公式のDockerfileがある。onbuildを利用すると、Dockerfileの記述を減らせる。
  • docker-machineでdockerを動かす環境を構築
  • docker-machine lsで作成した環境一覧表示
  • docker-machine envで動作させる為の環境変数一覧

次はdocker-composeと、VPS環境での実行辺りを




2016/09/19

ISUCONにてGoの正規表現で爆死 #ISUCON #golang

概要

基本的には表題の通りです。惨敗。

http://isucon.net/に参加してました。
メンツは去年と同じく自分、@ayumu83s@roro0000
チーム名は「瞬殺の美学」集まったときにみてたナショジオが由来。瞬殺どころか
問題にじわじわなぶり殺しだったわ。
選択した言語はGo。
なるべく一週間に一回、「ざつもく会」と称して復習をしてました。
去年は初参加で準備もそんなにできなかったため、自分は無能感を否めない感じでした。
今年は今無職なうでど暇(いや、面接なんかはしてましたけど)なのでサーバーサイドでのGoを色々キャッチアップする猶予があり、やってやるぞ!という気でいました。(仕事のご相談があればご連絡くださいてへぺろ)

問題について

 一応説明しておくと、http://anond.hatelabo.jp/のようなサービスをいい感じにスピードアップしろ。という問題が出題されてました。Go言語を選択した我々は

reg.ReplaceAllStringFunc(content, func(kw string) string {})

特定のキーワード(そこそこたくさんある)を文章内に見つけたらそれをリンクつけた形に変換する。をどうやって改善するかに失敗し、failした形になります。

当日の流れ

時間は曖昧です。

9:30くらいに集合

  • 朝、くっそ眠いけど自分は家だったので比較的気楽、@ayumu83s @roro0000はおつかれさまです。
  • HOOOOOO!!!!とか言いながら無理やりテンション上げてました。

10:00

  • 開始、順調にインスタンス立てる。@roro0000の下準備が光る。
  • $GOROOT、$GOPATHでガッチャガッチャする。今時$GOROOT???と自分も混乱する。
  • @ayumu83sが$PATHを書き換えて無事死亡。戦犯ポイントを稼ぐ
  • @ayumu83sがリアルな方の仕事に巻き込まれる。土曜デプロイ乙

12:00

  • 毎回regexpのやつ生成してるのあからさまにだめじゃね?
  • キーワードとハッシュのリストもとりあえず持っとくか
とか、毎回やる必要のない作業をinitに持っていく作業をする。
反省点としてはここが大きい。この時点でもっと細かく計測作業をするべきだった。
推測するな 計測せよ

13:00

ココらへんでお昼を食べたりしながら、「一回細かく速度を取ってみてどういうデータが入ったときどこが遅くなるの?」をやろうと相談。

@ayumu83sがisudaとisuterの統合作業、UNIXドメインソケット、グローバル化した変数に追加処理等の実装をごりごり入れる。

15:00

「ビスマルク級戦艦」だったかなにかの説明がめっちゃ長くて、これを処理するのに10秒程かかってる。ということが判明。ハッシュをリンクタグに変換する工程は早かったので
どちらにしても正規表現のところをどうにかしないとアカン。

@roro0000氏が「。とか改行コード」みたいなのでパラレルに処理できないっすか?というのでそのコードを書き始める。こんなのー>https://play.golang.org/p/TeFPJ325Pu

17:00

この辺から、やはりGoの正規表現は絶望的に遅いのでどうにかしなければ
という風潮になった記憶。

strings.contains & strings.replaceに切り替えて
0だったスコアが280点とかになる。しかし、Fail。うーんマジカ。。。。。

ちなみにこの処理だとハッシュに変換したもののなかの数字をもう一回ハッシュにして死ぬ。という罠が出てきます。

17:50

strings.replacerだったのでは?ということに気づく。
  • あー、見てた!見てたのに
  • 正規表現遅いってのは知ってたのになぜ目をそらした
  • 辛い
  • もういい、とりあえずこの処理にしてページ/ が早くなるかだけ見るぞ

18:20

ページ/が早くなったのをみて無事死亡

感想

観測
遅いものは遅い、Goの正規表現
正確な知識

正確には観測の単位が大きすぎたなーと。
関数内のどの処理にどのデータが入ったときにだめなの?まで追っていれば正規表現をどうする?にもっと早く至れたのかなと。

あと、正規表現は重い。というのは知っていたのにそこから目をそらし続けていたかなと思ってます。(適切な処理を思いつかなかったというのもありますが)

正確な知識。けっこう限られた時間で作業をしていたのに「これでいいと思うんだけど、あれ?どうだったかな?」となってググったり、確認する。という作業で時間を取られちゃいました。いや、そこはこうだよ。とか断言できる断言力が足りないなと感じました。
(上の正規表現もそうですね。遅いと思ってたけど、遅いから変えないとダメだ!と)

去年よりは自分は戦えた(ポイントアップに貢献できた)と思っていますが、いかんせん
スコアがPASSしなかったし、予選突破のボーダーラインにも絡めなかったので勉強不足でですね。次回開催があればリベンジしたい。

主催、協賛の方々、ありがとうございました。
@ayumu83s@roro0000次こそ予選突破しましょう。

2016/09/16

Firebase と Androidで認証、ストレージ、データベース #firebase

始まり

飲み屋で今日のメニューとかを通知出来るアプリがあると良いんだけど。
と相談されたのでFirebaseでいっちょやってみるか。とやってみました。
結論から言うと、コードラボをやりましょう。認証、データベースへの登録、表示等の扱い方を理解することができます。

やったこと

  • カメラを起動して、データを登録するAdminアプリとDBから一覧を表示するサポーターアプリの2つを作成。
  • アカウント認証 ->Googleアカウントで認証
  • 写真をとってFirebase Storageに保存。
  • 上で保存した画像のURLを取得。
  • タイトルや値段を設定してFirebase Databaseに保存
  • Databaseから一覧を取得して表示、画像のURLを取得して表示する。

スクリーンショット


ドキュメント、参考URL等


DBの書き込み権限を抑止する。

今回は、adminアプリ側で認証した人だけが書き込めれば良いので以下のようなルールを設定ユーザーUIDユーザー登録後、Authのページから参照できます。
{ "rules": { ".read": true, ".write": "auth.uid == 'ユーザー UID'" } }

各種機能のコード断片

ソースコードの断片等

storageへの保存
ディレクトリを作成しときましょう。(直下に上がると管理が…
gs://<your-storage-url>/new_dir/みたいな感じ。
https://gist.github.com/mogeta/d8abda24799d407673af3c7f908e927f ---- ----

databaseへの反映
事前にテーブルを用意する必要がなく、DTOを指定するとそのままの形でデータが突っ込まれる。これすげーな。
あらかじめ、DBのURL設計はしといたほうが良さげ。
カラム?の追加が発生した場合はそういうプログラムを毎回書くことになるのかな。

consoleからはこんな形でデータを確認出来る。


https://gist.github.com/mogeta/c4c1ec6e3e7efc1accc8fced8c10c2f7 ---- ----

感想

  • 小規模のアプリだったらFirebaseの無料アカウントでなんとかなるなーという感じ。
  • Push機能もあるのでお昼のメニューを更新したら全員に通知とか、今日は休むよ!みたいなのも実現できるでしょう。
  • FirebaseRecyclerAdapterがめっちゃ楽。Firebaseの更新がリアルタイムで反映されます。
  • コードラボで勉強が捗りそう。