koogawa blog

iOS、Android、foursquareに関する話題

#WWDC19 What's New in Core Location メモ

読みやすさは考慮していません。ご了承ください。

developer.apple.com

#WWDC19 Implementing Dark Mode on iOS メモ

読みやすさは考慮していません。ご了承ください。

developer.apple.com

#WWDC19 What's New in Xcode 11 メモ

読みやすさは考慮していません。ご了承ください。

developer.apple.com

#WWDC19 Creating Independent Watch Apps メモ

読みやすさは考慮していません。ご了承ください。

developer.apple.com

アルに入社して半年が経ちました(在職エントリ)

f:id:koogawa:20190412225425p:plain
人が増えたなー!

こんにちは koogawa です。気が付けばアルに入社して半年が経過していました。 入社当初から今もフルリモート勤務を続けております🌴

良い機会なのでここらでこの半年を振り返ってみます。

iOSアプリ担当からAndroidアプリ担当へ

今年の3月までは id:wadap と2人体制でアルのiOSアプリを開発していました。

4月からは t__kashimarikutech という強力なエンジニアが入社し、アプリチームは一気に4人体制になりました。自分はこのタイミングで Android アプリ担当にチェンジしました。また、この時期に kumami が CX 担当として入社しました🎉

現在は t__kashima のもとで Android アプリをガシガシ開発中です。あと少しで公開できそうなので、Android ユーザーの方はもうちょっとだけ待ってくれよな!🙏

Android × Kotlinどうよ?

最初は Activity と Fragment の違いがちゃんとわかっていなかったり、Swift の if let hoge = hoge みたいな書き方ができなくてストレスを感じたり、vallet と書いてしまうこともありましたが、元気でやっています😁

coroutines もとても良い感じですね!非同期処理を同期的な書き方にできるので、ソースコードがとても読みやすくなるのが気に入ってます。

ちなみに、アルの Android アプリは Model View Presenter(MVP) アーキテクチャを採用しています。

フルリモートどうよ?

働く場所が自由というのがとても良いです。

朝起きて、天気が良ければ外で仕事をしてもよいし、雨ならそのまま家に引きこもることもできます。

テレビ会議はうまくいってる?

東京メンバーとのテレビ会議も定期的に行っています。最初は会議室にいる何人かとこちら一人で繋ぐ、という形式を取っていたため、こちらから話を差し込み難い等のストレスを感じることもありました。

しかし最近ではテレビ会議を円滑に進めるためのノウハウも溜まってきており、ほとんどストレスを感じることはなくなりました。

テレビ会議のコツ

  • 東京側
    • 一人一台カメラ付きのPCを用意
    • 良いマイクスピーカーを買う
    • マイクと繋ぐPC以外はすべてミュートにする(音が回ってしまうため)
  • こちら側
    • PCについてるマイクは使わずマイク付きイヤホンつける
    • 周りがうるさいとき(選挙カーが近くにいるとき等)はマイクをミュートする
  • 共通
    • なるべく相槌を打ったほうが喋る人が不安にならない(と思っている)

雑談について

よく雑談は大事と言われますが、フルリモート組はオフラインでの雑談に参加できません。

しかし、弊社の Slack における 雑談チャンネル や 分報チャンネル は割と活発(な方だと思う)ので、寂しさを感じることはありません。

f:id:koogawa:20190530231648p:plain
Slackの日常

もしかすると、自分はもともと積極的に雑談に絡んでいくタイプではない、というのもリモートワークがうまくいっている理由のひとつかもしれません。

良いことばかり書いてしまったのでデメリットもあげるとすれば、旅行先で買ってきたお土産を気軽に渡せなかったり、逆にもらえなかったりするときちょっとだけ寂しさを感じます。まぁ、これはどうにもならないことなので、そんなに気にしていません😁

さいごにお約束

そんなわけで、アルに興味を持っていただいた方は、下記のリンク先から気軽にコンタクトを取ってみてくださいね!

www.wantedly.com

Webナイト宮崎 で Firestore 設計の話をしてきたよ #Webナイト宮崎

f:id:koogawa:20190530131740p:plain

もう2週間ぐらい経ってしまいましたが、先日 Webナイト宮崎 というイベントで Firestore の話をしてきました!

Webナイト宮崎とは

tegehoge.connpass.com

宮崎のWeb系フリーランス集団 てげほげ が開催しているWeb系勉強会です。実は私もてげほげメンバーです!

以下、発表内容を簡単にまとめていきます。

発表内容

最初に今回話すことを整理。

Firestore におけるデータベース設計について自分が知ってる方法を話します。 この方法がベストプラクティスとは限らないので、もっと良い方法があったら教えてね!

f:id:koogawa:20190530142156p:plain

Firestore の簡単なおさらい。すでに他の発表者の方も説明されていたので、ここはサラッと流しました。

f:id:koogawa:20190530142226p:plain

今回は、とあるSNSサービスを例にDB設計について考えていきます。

f:id:koogawa:20190530142249p:plain

このSNSサービスの機能要件です。とてもシンプルです。

f:id:koogawa:20190530142305p:plain

最初にユーザー情報を格納するためのコレクションについて考えます。 今回は users というコレクションを作り、その中に「1ユーザー1ドキュメント」という感じで追加していく感じにしました。

f:id:koogawa:20190530142324p:plain

次に「ユーザーは他のユーザーをフォローすることができる」という仕様を Firestore に落とし込むときにどういう設計があるか?ということについて考えていきます。

f:id:koogawa:20190530142352p:plain

いくつか方法はあると思いますが、今回は2つの方法をピックアップしました。

1つ目は users コレクション直下に follows というサブコレクションを置く方法です。この例だと「aaaaa は bbbbb と ccccc をフォローしている」という状態になります。

f:id:koogawa:20190530142416p:plain

2つ目は root 直下に follows というフォロー情報を管理するための専用コレクションを作る方法です。この例だと「aaaaa は bbbbb をフォローしている」という状態になります。

f:id:koogawa:20190530142432p:plain

さて、ここからは機能の実装に入っていきますよ。

まずは「aaaaaさんがフォロー中のユーザーリストを表示する」機能を実装するにはどうしたら良いでしょうか。

f:id:koogawa:20190530142510p:plain

「/users 直下に置く」場合について考えましょう。 この例だと「aaaaa は bbbbb と ccccc をフォローしている」という状態になるので、ここは単純に赤枠を見れば良さそうです。

f:id:koogawa:20190530142539p:plain

次に「/root 直下に置く」場合について考えましょう。 この例だと「aaaaa は bbbbb をフォローしている」という状態なので、followee = “aaaaa” のドキュメントを抽出すれば良さそうです(赤枠内)。

f:id:koogawa:20190530142606p:plain

さて、今度は「aaaaaさんをフォローしているユーザーリスト(=つまりaaaaaさんのフォロワー)を表示する」機能を実装するにはどうしたら良いでしょうか。

f:id:koogawa:20190530142618p:plain

こちらもそれぞれのパターンについて考えていきましょう。

まずは「/users 直下に置く」場合を考えてみます。 この例だと「bbbbb は aaaaa と ccccc をフォローしている」という状態になるので、 bbbbbさんはaaaaaさんのフォロワーということになります。 よって、users コレクション内の follows サブコレクションを横断して検索しながら、サブコレクションに aaaaa を含むドキュメントを抽出すれば良さそうです。

実はこれ、最近までできませんでした。この資料を作っている最中(2019年4月)に CollectionGroup という機能がリリースされ、こういった横断的な検索も可能になりました。

f:id:koogawa:20190530142701p:plain

続いて「/root 直下に置く」場合について考えてみます。 この例だと「ccccc は aaaaa をフォローしている」という状態なので、ccccc は aaaaa のフォロワーということになります。よって、follower = “aaaaa” のドキュメントを抽出すれば良さそうです(赤枠内)。こちらは「/users 直下に置く」場合と比べるとだいぶシンプルですね。

f:id:koogawa:20190530142725p:plain

最後にまとめ。今回は「フォロー/フォロワー」のようにリレーションシップを Firestore で管理する方法として /users 直下に置く方法と /root 直下に置く例を紹介しました。

/users 直下に置く方法だとサブコレクションを横断した検索ができない、という制約がありましたが、最近できるようになりました!

どちらの方法がベターか?という点については、格納するデータの内容によっても変わってくると思いますが、個人的には直感的にわかりやすい /root 直下に置くほうが好きです。

f:id:koogawa:20190530142743p:plain

2019.6.3 追記:/root 直下に置く方法だと Collection の Write 制限で秒間に 500 人以上フォローできないことを 1amageek さんから教えていただきました!

感想

発表終了後にもたくさんの質問をいただき、割と好評だったという印象です。 Firestore は比較的新しいサービスであり、設計ノウハウなどもまだまだ不足しているなーと感じています。今後も勉強会などで積極的にアウトプットしていきたいですね!!

Webナイト宮崎、次回も参加します👍

▲てげほげmicciさんによるツイート!

発表スライド

アルに入社しました

f:id:koogawa:20190701112725j:plain
この写真は 2019.6.25 に撮ったものです

こんにちは koogawa です。この度、アル株式会社に入社しました。

アル株式会社について

マンガファンのためのサービス「アル」というサービスを運営する会社です。

alu.jp

入社の経緯

実は昨年の8月から副業として開発をお手伝いしていました。

しかし、上記エントリにも書きましたが、いつの間にか本業よりもアルでの仕事の方が楽しくなってしまったんですね。より学ぶことも多かったですし。なので思い切って本業を辞めました。

その後、しばらくフリーという立場でアルの開発をサポートしていたんですが「せっかくならフルコミットしたい」という気持ちが高まり、正式に加入することになりました。

本社は東京渋谷にあるので、自分は宮崎からのフルリモート勤務になります。

社内の印象

設立して間もない会社ということもあり、とにかく自由な雰囲気です。 「役割は誰かえらい人が与えられるものではなく、自分で見つけていくもの」 という考え方が軸にあり、基本的に仕事の指示もされません。みんな自分で考え、自分で行動しています。

もちろんプロダクトマネージャーなども存在せず、細かい仕様などはメンバーが主体となって決めていきます。

f:id:koogawa:20181219005438p:plain:w320

例えばこんなノリで機能が追加されていきます。メンバーを管理するリーダー等も存在しませんが、今のところ上手く回っています。

評価制度なんかも(まだ)存在しません。私個人としては期ごとに個人目標設を設定する作業はとても煩わしく感じますし、「今は評価の対象期間じゃないからその仕事はやらない」みたいな不毛なことが起こらずに済むのでとても動きやすいです。

時雨堂さんのエントリなんかはとても共感できます。

生活リズム

今の生活リズムをグラフにしてみました。

f:id:koogawa:20190131092138p:plain
https://tool.stabucky.com/maker/twentyfour/

フルリモートですが、メリハリをつけるため雨の日以外はコワーキングスペースに通っています。

コアタイムも存在しないため、各自自分にあったスタイルで仕事をしています。自分にはまだ小さい子供がいるため、毎日18:00前には帰宅して子供の世話をできるのがありがたいです。家族からも「幸福度が上がった」と言われました。今までこんなことを言われたことなかったので、正直驚いてます。

アルのメンバー

現在、アルは代表の id:kensuu をはじめ、CTO id:wadap、VP of Product id:rinrin900、サーバーサイド兼インフラエンジニア id:astap、そして、iOSアプリエンジニア id:koogawa というメンバーで開発を進めております。 これからやっていきたいことはたくさんありますので、アルに興味を持ってくれた方がいればぜひ一度お話しましょう!

作っているもの

最後に宣伝も兼ねて今作っているプロダクトの紹介です。

www.itmedia.co.jp

自分はこのサービスのiOSアプリ開発をメインで担当しています。

アプリを Gmail と連携すると、過去に買ったマンガを分析し、新刊情報を通知で知らせてくれます。もちろん買ったことがないマンガもウォッチリストに追加することでウォッチの対象とすることができますよ!

アルのユーザーからたくさんウォッチされているマンガのリストも見られるので、次に読むべきマンガを簡単に見つけることもできます。

マンガ好きな方はぜひ使ってみてくださいね!