Radiotalk Tech Blog

Radiotalk株式会社のエンジニアが知見や取りくみについてを共有するテックブログです。

Flipperを導入してデバッグを快適に

こんにちは、Androidエンジニアの牧山(@_rmakiyama)です。

Radiotalkでは、特にAPI通信周りの確認にokhttp3logging-interceptorを使っていました。
どのエンドポイントを呼び、結果がどうだったかなどを確認する上では十分だったのですが、細かくレスポンスの中身を見たい、APIの呼ばれた順序をひと目で確認したいというニーズが高まりました。

タイミングよく、DroidKaigi 2020 - 1から学ぶAndroidアプリデバッグ - アプリの動作を追いかけよう / Yoshihiro Wada [JA]の発表を見て、デバッグツールの便利さを改めて知り、Flipperを採用したのでご紹介します。

Flipperとは

公式から引用すると

Flipper is a platform for debugging iOS, Android and React Native apps. Visualize, inspect, and control your apps from a simple desktop interface. Use Flipper as is or extend it using the plugin API.

つまり、モバイル用のデバッグツールです。Android専用ではないところが驚きでした。

ちなみにiOSでは物理デバイスのサポートはされていないようなので、RadiotalkではiOSでの導入は見送りました。

他の選択肢

他にもstethoHyperion-Androidなどがあります。

今回は主にNetwork周りのデバッグを楽にしたいというニーズと、比較的導入が簡単なFlipperを選びました。

Flipperを導入して良かったところ

まずは導入方法の前に良かったところを。

ネットワーク通信のログをLogcatを探らず見れる

どのエンドポイントにリクエストしてレスポンスが何かをGUIで簡単に見れて素敵でした。 一覧性があるのでどの順番で呼んだかなども見やすくなりました。

API呼び出し一覧

|f:id:radiotalk-tech:20200626155506p:plain

APIレスポンス

f:id:radiotalk-tech:20200626155522p:plain|

Roomデーターベースの中身が覗ける

f:id:radiotalk-tech:20200626155621p:plain

デバッグのときはかなり便利。クエリも書けちゃいます。

SharedPreferenceの中身が覗ける

f:id:radiotalk-tech:20200626155637p:plain

Android Studio上からも見れますが意外と面倒ですよね…これも便利です。値の変更もできます。

Flipper導入方法

公式のSet up your Android appに沿って説明していきます。

今回は紹介したNetworkプラグインを含めた導入方法になります。

Dependencies

複数のビルドバリアントが存在する場合は各バリアントに合わせた依存を定義します。

debugImplementation "com.facebook.flipper:flipper:${versions.flipper}"
debugImplementation "com.facebook.soloader:soloader:${versions.soloader}"
debugImplementation "com.facebook.flipper:flipper-network-plugin:${versions.flipper_network}"
stagingImplementation "com.facebook.flipper:flipper:${versions.flipper}"
stagingImplementation "com.facebook.soloader:soloader:${versions.soloader}"
stagingImplementation "com.facebook.flipper:flipper-network-plugin:${versions.flipper_network}"

releaseImplementation "com.facebook.flipper:flipper-noop:${versions.flipper}"

Application Setup

releaseImplementation'com.facebook.flipper:flipper-noop'を入れましたが、プラグインに関してはnoopを提供しない予定なようなので、リリース版とその他版でApplicationをわけるのが良さそうです。

本番のApplicationをopenクラスにしつつ

open class App : DaggerApplication() {

    override fun onCreate() {
        super.onCreate()
        // setups...
    }

他のバリアントでは、元のApplicationを継承しつつFlipperをセットアップしましょう。

class DebugApp : App() {

    override fun onCreate() {
        super.onCreate()
        initializedFlipper()
    }

    private fun initializedFlipper() {
        SoLoader.init(this, false)
        if (BuildConfig.DEBUG && FlipperUtils.shouldEnableFlipper(this)) {
            val client = AndroidFlipperClient.getInstance(this).apply {
                addPlugin(NetworkFlipperPlugin())
                addPlugin(SharedPreferencesFlipperPlugin(this@DebugApp))
                addPlugin(DatabasesFlipperPlugin(this@DebugApp))
            }
            client.start()
        }
    }
}

Diagnostics

公式のとおりこちらも追加しておきます。

<activity android:name="com.facebook.flipper.android.diagnostics.FlipperDiagnosticActivity"
        android:exported="true"/>

Enabling plugins

公式サイトからデスクトップアプリケーションをダウンロードして、追加したプラグインを有効にすれば完了です!

Links

輪読会のすゝめ

こんにちは、サーバーサイドエンジニアの サイトウ (@gamu1012) です。

今回はエキサイト社とRadiotalk社の合同で行っている輪読会について紹介します。

輪読会とは

輪読会

人々が集まって、同じ教科書などの本を読み、その内容について意見を交わすことを意味する語。事前に決められた担当者が、本の内容を訳したりまとめたりしてから、他の参加者が理解できるように発表する形式がとられることも多い。

Weblio辞書より引用

我々が行っている輪読会は下記の特徴があります。

  • 全員が本を購入
  • 章ごとに行う
  • 事前に該当章を全員が読んでくる
  • 議論中心
  • 週に1回1時間程度

誰とやっているか

エキサイト社とRadiotalk社のエンジニア合同でやっており、現在は8人で進めています。

年次は新卒入社1年目から中堅まで、専門領域や担当サービスなどもバラバラです。

本を選ぶ

上述のとおり、メンバーは領域、経験がバラバラなため、下記の2点を意識しています。

  • 極端に簡単であったり、極端に専門的な内容は選ばない
  • 偏った領域の本は選ばない

1冊が完了したときに、みんなで次はこれがいいと思う!というのをリストアップし、合議で決めるという流れで行っています。

2点を意識すると設計の話になりがちで、もし輪読会をやっているよ!という方がいらっしゃいましたら、オススメの本を教えて下さい!

進め方

事前準備

  • 全員が購入済み
  • 章ごとに担当を割りふる
  • 担当は概要と気になった点をまとめる

当日のフロー

担当から概要の共有

それぞれが"気になった点"をあげる

議論

以下、くりかえしで1時間ほど、盛り上がったときは1時間30分ほどの議論します。

"気になった点"について

  • 私はここが気になった
  • ここがいまいち理解できなかったので、どなたかもう少し解説してほしい
  • ここが"エモい"

議論の種は幅広くあげ、それぞれの意見を交換することを心がけています。

輪読会のなにがいいか

本の内容と実体験を交えた話ができるため、学びが深くなるというのが一番素晴らしい点だと感じています。

経験があるメンバーは実体験を踏まえた、意見をルーキーのメンバーに共有しながら、

設計パターンやテクニックついて、メリットデメリットを議論できたり、

ルーキーのメンバーから出た質問に全員がハッとすることも多々あり、いいサイクルがまわります。

まとめ

輪読会は議論を通すことで、学びが深くなり、素晴らしいです。

XTechグループは輪読会をはじめ、AWSGCPなどのクラウド勉強会もやっております。

その話はまた別の機会にさせていただきます。

参考

主催メンバーからみた輪読会はこちら。

ohshige.hatenablog.com

ohshige.hatenablog.com

いつもありがとうございます!

輪読した本

GCPで組織間のプロジェクト移行

こんにちは、サーバーサイドエンジニアの サイトウ (@gamu1012) です

この記事ではGCPで組織間でのプロジェクト移行について、それの手順と気をつけることについて紹介します。

概要

GCPのリソースはプロジェクトという単位で基本的に管理します。

そのプロジェクトを束ねる、組織というリソースがあります。

f:id:radiotalk-tech:20200616101246p:plain
GCP_リソース階層 リソース階層 より引用

上記のように、組織は会社単位になることが多いので、

GCPにおいて、別の組織へプロジェクトを移行するということはめったに起こらないと思います。

そういう背景もあり、調べても事例や体験談が全く見つからなかったので、この記事を通して、誰かの助けになれば幸いです。

基本的な手順については公式ドキュメントに記載がありますので、あわせてご確認ください。

https://cloud.google.com/resource-manager/docs/project-migration?hl=ja

ポイント

  • 組織移行は自分たちでは行うことはできない
  • Googleがやってくれるることは 該当プロジェクトを組織から外す という部分のみ

手順 と 気をつけること

1.準備

上記のドキュメントにもあるこれらを行う

以下のリストを使用して、プロジェクト リソースを移行する準備をします。

f:id:radiotalk-tech:20200616101417p:plain
移行への準備 別の組織へのプロジェクトの移行 より引用

特に権限周りは注意して確認することが大事です。

組織やディレクトリから継承している権限が該当プロジェクトにないか、上位のリソースから確認しましょう。

特にプロジェクト担当者と組織管理の担当者が違う場合は密に確認することをオススメします。

2.チケットを発行する

我々は有償のサポートに入っていなかったため、サポートケース経由で連絡をしました。

またサポートケースは英語のみなのでご注意ください。

有償サポートに入っている場合は日本語で送ることができますが、その場合はサポートではなくテクニカル担当者に連絡するのが一番いいと思います。

3. 現組織から外す

外すと書きましたが、実際に外すのはGCPの担当者です。

サポートケースを送り、メールアドレス等の確認が済むと、受付完了連絡がサポート担当者から送られてきます。

そこから我々のケースでは1日後に実際に現行の組織からプロジェクトが外されました。

最初のサポートケースから5日間で完了しました。

ちなみに受付完了後にいつ行う予定等の連絡はありません。

次に連絡をもらえるのは、組織から外れたことの完了連絡です。

組織から外されることで影響がでる権限周り等の調整は必ず事前に終わらせておきましょう。

4. 組織なしプロジェクトを新組織に紐付ける

新しい組織に紐付けを行うのは

移行前に新組織でのディレクトリ構成とそれに紐づく権限構成を決めておくとスムーズでオススメです。

5. 請求先アカウントを変更する

ここは必須ではないですが、組織が変わると、多くの場合は請求先アカウントを変わるはずなのでお忘れなく。

まとめ

  • 組織移行は自分たちでは行うことはできない
  • Googleがやってくれることは 該当プロジェクトを組織から外す という部分のみ
  • サポートケースを開いてから、5日程度で現行の組織から外れる

参考

Google Cloud 別の組織へのプロジェクトの移行

Google Cloud リソース階層

Google Cloud エンタープライズ オンボーディング チェックリスト

Google Cloud エンタープライズ企業のベスト プラクティス