スタディサプリ Product Team Blog

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

スムーズな開発体験を支えるデータベースリストアの仕組み

こんにちは。SRE の @int128 です。 背景 スタディサプリではいろいろな役割の人が協力してプロダクトを開発していくための文化と仕組みがあります。 例えば、Pull Request を作成すると自動的にプレビュー環境がデプロイされる仕組みや本番相当のデータで動…

縦書き学習コンテンツを実現する際に利用した縦書き CSS プロパティとその奥深さ

こんにちは。スタディサプリで Web Engineer をしている@indigolainです。最近はフロントエンドの割合を高めに開発をしています。 今回はスタディサプリで提供している学習コンテンツの中でも特徴的な縦書き学習コンテンツに関して、それを実現する上で利用…

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

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

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

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

New Relic で Prisma のパフォーマンスを計測してみた

スタディサプリ中学講座では、バックエンドの一部に TypeScript x GraphQL x Prisma を採用しており、パフォーマンスの計測などに New Relic を用いています。New Relic は Prisma を正式にサポートしていないため、導入するためには自分たちで実装する必要…

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

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

Terraform Modules を Monorepo で versioning して管理

こんにちは。 SRE の @suzuki-shunsuke です。 Terraform Modules を Monorepo で versioning して管理するようにした話を紹介します。 先日紹介したとおり、弊プロダクトではインフラを Terraform の Monorepo で管理しており、 CI は GitHub Actions + tfa…

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アプリがようやくリリースされました! いやぁ〜みんなで頑張りましたよ!中学生のお子様がいらっしゃる方はぜひお試しください! …

「0回目のポストモーテム」としてのプレモーテムのすすめ

こんにちは。SREの@kyontanです。スタディサプリのSREチームにジョインしてから初のブログ記事となります。 つい先日、スタディサプリ 中学講座が大幅リニューアルされました。*1 今回は、そのリリースを自信を持ってユーザーの皆様へお届けするために実施し…

チームのコラボレーションを支える"ミッションツリー"

こんにちは。SRE Team の @chaspy です。 リクルートでは、チームがやるべきことを、メンバーの納得感を持って仕事してもらうためにミッションを設定しています。ミッションは WCM - Will / Can / Must というフレームワークを用いて、本人の希望、本人の能…

Cloud Dataflow で実現する柔軟なデータパイプライン

はじめに こんにちは、@shase です。 スタディサプリでは、データパイプラインのツールとして、従来 AWS Kinesis Stream や、Embulk や、AWS Lambda などがよく使われてきました。 ただ、現在開発中のプロジェクトでは、システム間の連携の為、Cloud Pub/Sub…

SRE チームを支えるふりかえりの文化

こんにちは。SRE チームの@chaspy です。 本記事では私の所属する SRE チームにおける「ふりかえり」の文化を紹介します。 背景 最近のチームのふりかえり会 *1 で僕自身が以下のようなコメントを"Keep"として出しました。 これは、単にこのふりかえり会が継…

Renovate の大量の Pull Request を処理する技術

こんにちは。 SRE の @suzuki-shunsuke です。 Terraform Monorepo に対する Renovate の大量の Pull Request を処理するための技術について紹介します。 背景 過去ブログで何度か紹介しているように、弊プロダクトでは Terraform の Monorepo を管理してい…

6社合同 SRE 勉強会で" SRE を実現するための組織マネジメント"という題で登壇します

こんにちは。SRE の @chaspy です。 タイトルの通り、以下のイベントで登壇します。 line.connpass.com 本記事では、当日の発表をより多くの人に見てもらえるよう、connpass に掲載されている発表概要について補足します。 登壇情報 Title: SRE を実現するた…

Terraform の CI を AWS CodeBuild から GitHub Actions + tfaction に移行しました

こんにちは。 SRE の @suzuki-shunsuke です。 Terraform の CI を AWS CodeBuild (以下 CodeBuild) から GitHub Actions + tfaction に移行した話を紹介します。 これまでの Terraform Workflow (CodeBuild) 弊プロダクトの Terraform の CI に関しては過去…

AWS SSO を導入してセキュリティと利便性を改善した話

こんにちは。 SRE の @suzuki-shunsuke です。 AWS SSO を導入してセキュリティと利便性を改善した話を紹介します。 背景 これまで弊プロダクトチームでは各開発者に AWS IAM User を作成し、 IAM User の ID/Password で AWS にサインインし、 IAM User の …

GitHub Actions Self-hosted Runner と Gatling による負荷試験

こんにちは。SRE の @int128 です。 先日の「負荷試験、Gatling を使ってやってみた」で紹介したように、スタディサプリではユーザ体験の改善や本番障害の予防を目的に負荷試験を行っています。 本稿では、SRE と Product Team がどのようにして一緒に負荷試…

Poetry, Docker, Build, and Run

データエンジニアの@masaki925 です。 私が所属するデータ組織では、スタディサプリ本体に対して検索やレコメンドなどのデータプロダクトをマイクロサービスとして提供しており、その多くはPython がメイン言語です。 またデータ基盤としてBigQuery をはじめ…

社内留学制度を利用したら色々と上手くいった話

こんにちは。スタディサプリのコーチング開発チームでWeb Engineerをしている@mpls104です。 今回は、私が実際に利用した社内留学制度について、体験談を交えつつ紹介をします。 なお、本制度は株式会社リクルート全体の制度ではなく、スタディサプリの開発…

負荷試験、Gatlingを使ってやってみた

StudySapuri + Gatling = ♥

Autify を導入したらなかなか良かった話

スタディサプリのコーチングサービス (合格特訓コース、個別指導コース) 開発チームで Engineering Manager をしている @pankona です。 最近弊チームで取り入れている Autify の良さについて紹介します。 TL;DR 弊チームでは最近 E2E テストとして Autify …

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

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

子育てしながらの働き方を紹介します

こんにちは。 Engineering Manager の @kojoma です。普段はスタディサプリの学校向けサービスを開発しているチームに所属しています。 私事ですが2021年3月に子どもが生まれ、子育てをしながら日々業務をしています。育児休業を取得したというブログ記事は…

HashiTalks Japan 2021 で弊プロダクトの Terraform Platform について登壇しました

こんにちは。 SRE の @suzuki-shunsuke です。 HashiTalks Japan 2021 で登壇させていただきました。 HashiTalks Japan 2021 とは HashiCorp が主催するコミュニティ向けのイベントです。 Terraform や Vault など、 HashiCorp の様々なプロダクトに関して自…

Prisma の Interactive Transactions でロジック中の複数クエリを 1 トランザクションにまとめる

おばんです、Web Engineer の @ravelll です。 Prisma の Interactive Transactions を利用して複数の Prisma のクエリを含む処理をアトミックにするような変更を最近行ったので、それについての話を書きます。 Prisma とは? Prisma を触ったことがない人も…

大規模サービスにおけるMongoDBのインデックス運用

スタディサプリにおけるMongoDB運用のポイントを解説

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

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

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

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