Slide 1

Slide 1 text

mixi2 の技術スタックを探ってみる (アプリ編) 2024-12-19 マイベスト社内 LT / Ichiki Sato (@ichiki1023)

Slide 2

Slide 2 text

みなさん!

Slide 3

Slide 3 text

先日 mixi2 がリリースされましたね! 懐かしさと新しさが入り混じった良いアプリ!

Slide 4

Slide 4 text

今日はそんな mixi2 の技術スタックを調べてみました

Slide 5

Slide 5 text

きっかけ mixi2 が先日(2024/12/16)にリリースされた X で Flutter 製だよ、という噂を見たので真実かどうか確かめたくなった アプリが良い感じなのでついでに他の周辺技術も気になったので調べてみたくな った

Slide 6

Slide 6 text

大前提 犯罪に触れることはしていません mixi2 と言いつつ方法論的な話をメインにするので他でも使えます

Slide 7

Slide 7 text

アプリの気になりポイント アプリの言語は? (Swift or Kotlin, Dart(Flutter), React(React Native), ...Other?) API の通信手段は? (REST, GraphQL, gRPC?) 使っているライブラリは? (State 管理は?, Analytics は? Logging は?) メディアファイル系の置き場所は? (s3? Cloud Storage? imagix?)

Slide 8

Slide 8 text

(補足) 今回やらなかったこと 開発者に直接聞く 採用情報から調べる 見た限りだと特に mixi2 のエンジニア募集はなかった (2024/12/18 時点) https://mixigroup-recruit.mixi.co.jp/jobs/?cats=engineer

Slide 9

Slide 9 text

2 つのアプローチ 1. ライセンス表記から探る 2. Proxy 経由でリクエストを覗き見る

Slide 10

Slide 10 text

1. ライセンス表記から探る 2. Proxy 経由でリクエストを覗き見る

Slide 11

Slide 11 text

Apple 公式の App Review ガイドラインからの引用 https://developer.apple.com/jp/app-store/review/guidelines/ 5.2.1 全般:商標、著作権取得済みの作品、特許取得済みのアイデアなどの保護さ れたサードパーティ製の素材をアプリで許可なく使用することはできません。ま た、誤解を招く、虚偽の、または模倣の描写、名前、メタデータを App Bundle (アプリバンドル)やデベロッパ名に含めることは許可されません。アプリは、 知的財産権およびその他の関連する権利を所有する、またはそのライセンスを受 けている個人または法人によって提出される必要があります。 1. ライセンス表記から探る

Slide 12

Slide 12 text

つまり、アプリを公開するなら利用している OSS の ライセンス表記はほぼほぼ必須 対応していない場合は Reject をもらう可能性も。 。 Apple を例に出したが Google も同様 (参照) 1. ライセンス表記から探る

Slide 13

Slide 13 text

なのでこのライセンス表記から使用している技術を探 っていきます 1. ライセンス表記から探る

Slide 14

Slide 14 text

実際に見てみる 1. ライセンス表記から探る

Slide 15

Slide 15 text

ライセンス一覧の場所はアプリによってまちまち (iOS の場合) 大抵は端末のアプリ設定 or アプリ内の設定にある mixi2 はアプリ内だった プロフィール → 設定 →mixi2 について → ライセンスで辿れます 1. ライセンス表記から探る

Slide 16

Slide 16 text

こんな感じ mixi2 mybest ChatGPT mixi2 同様マイベストもアプリ内、ChatGPT は端末のアプリ設定にあった 1. ライセンス表記から探る

Slide 17

Slide 17 text

mixi2 やっぱり Flutter だった 1. ライセンス表記から探る

Slide 18

Slide 18 text

その他発見した技術スタック 気になったやつだけ PickUp! - Dart, Flutter - Bugsnag - Firebase関連 (Firebase Analytics, Firebase Crashlytics, ...etc) - Google fonts - Noto Serif Japanese - gRPC - protobuf - lottie - rxdart - web_socket - GitHub Copilot (??) 技術スタック見るとツヨツヨエンジニアがいそうな雰囲気? (rxDart とか gRPC とか) 1. ライセンス表記から探る

Slide 19

Slide 19 text

1. ライセンス表記から探る 2. Proxy 経由でリクエストを覗き見る

Slide 20

Slide 20 text

2. Proxy 経由でリクエストを覗き見る Proxyman や Charles などを使って HTTP リクエストの中身を覗いてみる その情報を元に使用している技術を推測する 2. Proxy 経由でリクエストを覗き見る

Slide 21

Slide 21 text

しかし、 、 、 2. Proxy 経由でリクエストを覗き見る

Slide 22

Slide 22 text

Flutter だと見れなかった。 。 https://docs.proxyman.io/debug-devices/flutter#id-4.-flutter-with-android-emulator Flutter 製のアプリだとシステムレベルでの Proxy が使えないらしく通信内容を見る ことができなかった 通信を見たい場合はコードを修正する必要があるらしい。なので本番では見れな い (学び) 2. Proxy 経由でリクエストを覗き見る

Slide 23

Slide 23 text

一応 マイベストのアプリを Proxyman for iOS で見るとこ んな感じ リクエストの内容から、以下の推測ができる Firebase 使っている imgix 使っている (レスポンスのヘッダで判別で きる) Sentry 使っている KARTE 使っている 2. Proxy 経由でリクエストを覗き見る

Slide 24

Slide 24 text

さいごに mixi2 の技術スタック答え合わせ アプリの言語は? Dart, Flutter API の通信手段は? おそらく gRPC (だと思う。いつか公式で出た情報で答え合わせをする) 使っているライブラリは? Firebase 諸々, Bugsnag, rxDart, Lottie, Google Fonts, ...etc メディアファイル系の置き場所は? (s3? Cloud Storage? imagix?) Proxy が使えなかったのでわからず。 。

Slide 25

Slide 25 text

まとめ アプリ側だけでフォーカスして見れば PC 使わずとも大体使っている技術が何かわ かる (ただし Flutter 製アプリだと情報が少ない) Web の場合だと最近は便利な Chrome 拡張があるのでもっと簡単にわかる (はず)