スタディサプリ Product Team Blog

株式会社リクルートが開発するスタディサプリのプロダクトチームのブログです

Native

スタディサプリ小学・中学講座にRoborazziを導入して半年が経過しました

こんにちは、Androidエンジニアの@morux2です。 スタディサプリ小学・中学講座では、Visual Regression Test (以下 VRT)を実施しています。VRTは画像比較によるUIの回帰テストです。変更前後のコードそれぞれに対する画面のスクリーンショットを比較し、意図…

detekt × Dangerで、プルリクコメントにルール名を表示する

こんにちは。スタディサプリ Androidエンジニアの@morayl です。 本記事では、Kotlinの静的解析ツールであるdetektの解析結果をDangerでプルリクにコメントする際に、ルール名も一緒にコメントするためにしたことを紹介します。 Dangerの基礎言語であるRuby…

単一アプリでユーザに応じた機能切り替えを実現するために

はじめに iOSエンジニアのkomajiです。2023年9月に「スタディサプリ 小学講座」をリニューアルし、既存の「スタディサプリ 中学講座」アプリに組み込む形でリリースしました。 この小学講座は既存の中学講座とは機能が全く異なっていますが、単一アプリで両…

SwiftUI: Explicit Identity の正しい使い方と落とし穴

こんにちは。iOS エンジニアの @_nkmrh です。 SwiftUI が発表されてからはや4年が経ち、昨今のプロダクションコードでも多く活用されているのではないでしょうか。 そこで本稿では SwiftUI を活用する上で欠かすことのできない SwiftUI.View の Explicit Id…

Firebase Remote Config の変更内容を Slack に通知する

こんにちは、@manicmaniac です。スタディサプリ iOS アプリ開発チームのエンジニアリングマネージャーをしています。 小ネタみたいな話ではありますが、Firebase Remote Config の変更を Slack に通知するようにしたらちょっと便利だったので記事にしようと…

スタディサプリ小学・中学講座でRoborazziを導入しました

こんにちは、Androidエンジニアの@morux2です。本記事ではスクリーンショットの撮影にRoborazziを導入した経緯をご紹介できればと思います。 はじめに きっかけ RoborazziとPaparazziの比較 書きやすさ 複数端末での撮影 スクロールした画面の撮影 Showkase…

Jetpack Composeでスポットライト機能を実装する

こんにちは、Androidエンジニアの@morux2です。本記事ではJetpack Composeでスポットライト機能を実装する方法を紹介します。 はじめに スポットライトは、特定の要素を目立たせることでユーザーの行動を促す機能です。スタディサプリ中学講座のオンボーディ…

「スタディサプリ中学講座」における最近の Jetpack Compose 関連の改善

はじめに こんにちは。「スタディサプリ中学講座」 で Android エンジニアをしている @maxfie1d です。「スタディサプリ中学講座」 では Jetpack Compose を最大限に活用しています。現在アプリ全体の 7 割程度の UI は Jetpack Compose で構築されています…

Jetpack ComposeでタブをSticky Headerにする方法

こんにちは。Androidエンジニアの@morux2です。先日スタディサプリ中学講座にまなレポ機能が追加されました まなレポは学習状況・学習履歴を確認できる機能です。リアルタイムで学習状況が表示されるので、学習後すぐに成果の振り返りをしていただくことがで…

社内勉強会がきっかけでメモ帳機能を実装した話 with PencilKit

こんにちは、スタディサプリ開発チーム iOS エンジニアの @m-sugawara です。 スタディサプリの iOS アプリでは2~3ヶ月前に PencilKit を使ったメモ帳機能を公開したのですが、今回はその機能の開発〜公開まで至った流れについてご紹介したいと思います。 (…

スタディサプリ中学講座iOSアプリの開発環境

はじめまして!2022年の9月の中頃にジョインしたiOSエンジニアの@komajiです。まだ歴が浅くキャッチアップしている最中ではありますが、私が担当しているスタディサプリ中学講座のiOSアプリが2022年12月現在どのような環境で開発されているのかを紹介してい…

Xcode の Test Repetition 機能を利用して flaky test を自動リトライする

こんにちは、iOS エンジニアの @manicmaniac です。 現在スタディサプリ iOS アプリ開発チームのエンジニアリングマネージャをしています。 「スタディサプリ」ブランドで出ているアプリは数多くあるのですが、今回は今年リリースされたばかりの「スタディサ…

Google Play In-App Reviews API の導入により Google Play Store 評価を1ヶ月で2.5から4.5に改善した話

こんにちは。Android エンジニアの @omtians9425 です。スタディサプリ中学講座の開発に携わっています。 今回は、 Google Play In-App Reviews API の導入により、スタディサプリ中学講座の Google Play Store 評価を4.5(2022年10月7日時点)に改善したこ…

Jetpack Compose を使って実際に画面を作ってみて

こんにちは。Android アプリ開発者の geckour です。 前回はデザインシステムの実装についての話をしましたが、今回はそちらを実際に運用してみた中間報告をしたいと思います。 はじめに 前回は、Jetpack Compose によってデザインシステムを構築するところ…

「スタディサプリ 中学講座」のSwiftUI x In-App Purchase設計と結合テストのノウハウ

こんにちは!iOSエンジニアの @chuymaster です。今回は私たちのチームが2月にリリースした「スタディサプリ 中学講座」のIn-App Purchase(IAP)の実装について書きたいと思います。SwiftUI x IAPの事例をお探しの方必見です! 背景 「スタディサプリ 中学…

SwiftUI.NavigationView のバックボタンをカスタマイズする方法

こんにちは。iOS エンジニアの @_nkmrh です。 最近、Full SwiftUI で開発したスタディサプリ 中学講座をリリースし、アプリ開発の醍醐味を味わっています。 はじめに 本稿では、スタディサプリ中学講座 iOS アプリで実装した SwiftUI の NavigationView の…

SwiftUIで対応しきれずUIKitを使ったコンポーネントのまとめ

こんにちは、iOSエンジニアの @elliekwon です。去年のiOSDC Japan 2021「スタディサプリ」がFull SwiftUIを選択した先に見えてきたものの発表で紹介させて頂いた通り、SwiftUIで開発してきた「スタディサプリ中学講座」ですが、SwiftUIでは対応しきれず、ご…

iOS バージョン による SwiftUI の機能差分・制限まとめ

こんにちは。iOS エンジニアの wadash です。先月2022年2月に無事リリースした「スタディサプリ 中学講座」のチームで開発に携わっています。 今回は iOS バージョンによる SwiftUI の挙動差異と制限のまとめをご紹介します。 SwiftUI の採用とサポートバー…

Jetpack Compose と GraphQL Fragment でつくるデザインシステム実装

こんにちは。Android アプリ開発者の geckour です。 今回は、デザインシステムの実装についての話をしたいと思います。

Android における Visual Regression Test tips 集 #2

こんにちは。Android エンジニアの @omtians9425 です。 今回は、 Visual Regression Test (以下 VRT) の tips 集の続編についてお話しします。 VRT の簡単な説明と前回の tips (tips 1~4) については こちら をご覧ください。 Tips 集 5. 「スワイプ」 で…

SwiftUI x Combineのメモリリークを防ぐ3つのTips

こんにちは!iOSエンジニアの @chuymaster です!私たちのチームが2年近くかけて開発した 「スタディサプリ 中学講座」 のiOSアプリがようやくリリースされました! いやぁ〜みんなで頑張りましたよ!中学生のお子様がいらっしゃる方はぜひお試しください! …

不要な Swift コードを静的解析で安全かつ継続的に消していく

不要な Swift コードを静的解析で安全かつ継続的に消していく こんにちは、iOS エンジニアの @manicmaniac です。 現在スタディサプリ iOS アプリ開発チームのエンジニアリングマネージャをしています。 スタディサプリ iOS アプリは開発開始から7年以上が経…

SwiftUIの隠しNavigationLinkを使って画面遷移をプログラムで制御する

こんにちは、iOSエンジニアの @chuymaster です!iOSDC Japan 2021の「スタディサプリ」がFull SwiftUIを選択した先に見えてきたもの。のトークセッションで紹介された、プログラムで画面遷移を制御する方法について詳しく解説します。トークで話しきれなか…

SwiftUIで全画面モーダルを無限に重ねる

こんにちは、iOSエンジニアの @chuymaster です!iOSDC Japan 2021の「スタディサプリ」がFull SwiftUIを選択した先に見えてきたもの。のトークセッションの時間の都合上、ご紹介できなかった「全画面モーダルを重ねる」実装方法をご紹介します。 全画面モー…

SwiftUI でカスタムアニメーションを簡単に実装する

こんにちは。iOS エンジニアの @wadash です。 今回は iOSDC Japan 2021 のセッション「スタディサプリ」がFull SwiftUIを選択した先に見えてきたもの。で紹介した、 SwiftUI におけるアニメーションの実装方法方法について詳しく解説します。 SwiftUI のア…

SwiftUI でスポットライト機能を実装する

こんにちは、iOSエンジニアの @motoshima1150 です。 iOSDC Japan 2021の「スタディサプリ」がFull SwiftUIを選択した先に見えてきたもの。のトークセッションで収まりきれなかったTipsを紹介いたします。 はじめに 本記事では、Spotlight機能の実装方法につ…

SwiftUI コーディングガイドのすすめ

こんにちは iOS エンジニアの @_nkmrh です。 先日 iPhone 13, iPad mini 等が発表されましたね!私は手元の iPhone がまだ現役なので購入の予定はないのですが、Apple Store で見られるのが楽しみです...! 新型 MacBook Pro の発表もそろそろとの噂でそちら…

Android における Visual Regression Test tips 集 #1

こんにちは。Android エンジニアの @omtians9425 です。 今回は、弊 Android アプリ開発チームで取り組んでいる Visual Regression Test (以下 VRT)の tips 集についてお話しします。 はじめに 弊チームでは、実装初期の段階から unit test に加えて VRT を…

Epoxy と 入力フォーム

こんにちは。Android アプリ開発者の geckour です。 今回は、Android アプリ開発が便利になる Epoxy とそれを利用した入力フォーム作りについてお話しします。 はじめに 弊チームではリスト表示を含む UI の実装の際に、Epoxy を利用しています。 RecyclerV…

「スタディサプリ」が React Native から卒業するまで、あるいは技術的負債への感謝と敬意

こんにちは、Quipper iOS エンジニアの @manicmaniac です。 現在スタディサプリ iOS アプリ開発チームのエンジニアリングマネージャをしています。 今回はスタディサプリで長らく使われていた React Native のコードを Swift に書き換えた話をします。 実は…