Upgrade to Pro — share decks privately, control downloads, hide ads and more …

モバイルアプリ&GraphQL化と壁を超えたコラボレーションを実現するために できそうな観点を探る

モバイルアプリ&GraphQL化と壁を超えたコラボレーションを実現するために できそうな観点を探る

Omotesando.rb #96の登壇資料になります。

私が現在、モバイルアプリ開発を中心としながらも、業務内でバックエンドでのコードを見る様にしてみた際に変わったことの中で、下記3点に焦点を当ててご紹介しています。

1. RESTful APIからGraphQLへ置換する際においてできる事
2. Backend処理&Mobile処理間における「つなぎ目」の意識がある事で役立つケース紹介
3. 実際に僕がRailsコードを見る際にはどの様な事を考えているか?

個別知識の集まりが繋がった時に理解が深まる様な点を見つけるポイントの解説が中心になります。

※過去の勉強会でもお話ししたトピックも含まれていますが、モバイルアプリのBackend開発時におけるアイデアや参考になれば幸いです。

Fumiya Sakai

June 06, 2024
Tweet

More Decks by Fumiya Sakai

Other Decks in Technology

Transcript

  1. 自己紹介 ・Fumiya Sakai ・Mobile Application Engineer アカウント: ・Twitter: https://twitter.com/fumiyasac ・Facebook:

    https://www.facebook.com/fumiya.sakai.37 ・Github: https://github.com/fumiyasac ・Qiita: https://qiita.com/fumiyasac@github 発表者: ・Born on September 21, 1984 これまでの歩み: Web Designer 2008 ~ 2010 Web Engineer 2012 ~ 2016 App Engineer 2017 ~ Now iOS / Android / sometimes Flutter
  2. モバイルアプリエンジニア時々バックエンドを見る 業務内でバックエンドでのコードを見る様にしてみた際に変わったこと 普段はiOS/Androidアプリケーション開発が中心ですが、いわゆるバックエンドを見る際に考えている事の紹介です。 1. RESTful APIからGraphQLへ置換する際においてできる事: 実際に想定しているレスポンスの認識をお互いに合わせるためのコミュニケーション&コードレビュー。この様なステップを挟 む事によって、実装者と利用者間における懸案事項の解消や想定するユースケースを合わせやすくなると思います。 2. Backend処理&Mobile処理間における「つなぎ目」の意識がある事で役立つケース紹介:

    複雑な機能を実現するための実装に向き合う際には、クライアントでどの様にデータが利用され、どの様な役割を担っているか に目を向ける必要があると感じています。その際に両方の事情を知っておくと良さそうな例を紹介します。 3. 実際に僕がRailsコードを見る際にはどの様な事を考えているか?: Railsのバージョンが4〜5系だった当時に実務経験はあるがブランクが空いている状態でした。プロダクションコードを読み進め ながらキャッチアップや調査をする際に「自分なり」に考えている事を紹介できればと思います。
  3. GraphQLを良さを最大限活用するためにできそうな事 Schema定義に注目する事がCommunication&Collaborationを生み出すきっかけ 認識を合わせる際に実装前に歩調を合わせ、その後にSchema定義を元に議論する様なイメージが理想形 Request 📲 Response Mobile App Ruby on

    Rails Apollo GraphQL Mobile処理はApolloを活用 実装前にどの様なデータを返すかの議論 実装者&PO間で議論 Backend Engineer Mobile Engineer Product Owner 1. download schema definition 2. set xxx.graphql file 3. generate codes 嬉しい点 1. Query/Mutationの形を元に議論が可能である点 2. 画面構築イメージとも照らし合わせやすい点
  4. GraphQL関連のキャッチアップを自分でも実施する Mobileアプリ関連の勉強会でも注目があるトピックなので気に掛ける様にする 登壇資料: https://speakerdeck.com/ymanya/swiftdemoapollo-iosdekuai-shi-nigraphql Swiftでもapollo-iosで快適にGraphQL https://speakerdeck.com/chocoyama/swiftuitographqltehurotakutofalseji- sok-de-napo-huai-nili-tixiang-kau SwiftUIとGraphQL でプ ロ

    ダ クトの継続的な破壊に立ち向かう 解説ブログ: https://zenn.dev/saboyutaka/articles/e5515872871534 GraphQLはいつ使うか、RESTとの比較 https://zenn.dev/saboyutaka/articles/07f1351a6b0049 GraphQLが解決する問題とその先のユースケース HAPPY + = ❤ https://x.com/fumiyasac/status/1677948595872612353 Tsukiji.graphql #1 への参加記録ノート
  5. Mobileでのログイン処理とBackend処理との関係図解例 ログイン処理とログイン後のJWTを利用した認証トークンの扱いの復習 成功 or 失敗時のレスポンス 📱 新規User作成 DB登録処理 OK: Client

    (Mobile App) Server (API Local Server) Userログイン NG: エラー処理 ログイン後の コンテンツ表示 [POST] /api/v1/signup: username・mailaddress・passwordを送信 [POST] /api/v1/signin: mailaddress・passwordを送信 成功 or 失敗時のレスポンス JWTを発行 OK: NG: エラー処理 [GET] /api/v1/items?page=1 成功 or 失敗時のレスポンス HeaderのJWTを検証 リクエスト時のHeaderに保存したJWTを付与してRequest(有効期限は1日) ・有効期限切れ ・存在しない → ログイン画面へ戻す Keychain等でアプリ 内にJWTを保持
  6. AWSを利用したPush通知基盤例 Amazon SNS & AWS Lambdaを利用した場合のPush基盤設計の例です ※この部分はAppDelegate.swiftで実施 (UNUserNotificationCenterDelegate) 初回起動時 ①Push通知で送る内容を

    組み立ててLambdaを実行 ②SNSの処理を実行して APNsへPush通知を送信 📱 APNs 送信処理実行 Push通知を受信する 後は内容に応じた処理を実施 アプリ起動時における処理の流れ プッシュ通知許可 この時に表示されるリモートプッシュ通知の 許可ダイアログはFCMに対して実行するもの。 補足: ③ デバイストークンをサーバーへ登録する ※①〜③は起動時に毎回実施される処理 Server DBにUserのに紐づく DeviceTokenを保持 しておく。 ② デバイストークンを受け取る ① registerRemoteNotification() 実行 Mobile App
  7. デザインにおけるWebとアプリの違いを見極める例 Webであれば頻出ではあるがアプリだとちょっと一手間がかかる事例 Mobileはやや難 文章内にテキストリ ンクが存在する&画 像表示エリアもある 様な形を実現する。 意外にWebでは頻出だけどもMobileではあまり見ないもの 補足: パンくずリストの様な形のUIはあまりお目にかからない…

    Railsでの実装アイデア リッチエディタの様な形が難しい場合はMarkdown記法を利用する 記事等のリンクや画像URL付きコンテンツに関し てはMarkdown形式のままで保存&を表示する。 Redcarpet: https://github.com/vmg/redcarpet Mobileで内容を表示する Markdown形式の文書を表示できる様に実装する。
  8. Railsの仕様調査をする際の読み進める順番について 手掛かりを見つける際には該当部分のUnitTestから辿る場合も多い 🤔 時間に余力がある場合にはノートやドキュメントへまとめる様にしておく ①まずはEndpointを特定する 今回の処理対象となっている部分を 特定するための第一歩。 起因となったErrorメッセージやロ グデータ等があればヒントにする。 モバイル・バックエンド・インフラ

    等の切り分けができているか? ②該当処理部分にUnitTestはあるか 該当処理と思われる部分にUnitTest は記載されているか? UnitTestから元々の仕様が把握でき る様な形になっているか? ③実装箇所の詳細を調査する DB定義等も合わせて該当処理の概要 を自分の言葉でまとめてみる。 限られた時間の中で関連性を探るた めに便利なツール等を活用する。