スタディサプリ Product Team Blog

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

Engineering

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

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

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

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

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の隠し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 の発表もそろそろとの噂でそちら…

スタディサプリ/Quipper オンラインミートアップ#3で How to measure "Site Reliability Engineering" というタイトルで登壇しました

こんにちは。SRE の chaspy です。先日オンラインイベントで登壇しました。 quipper.connpass.com 本記事では、その時の発表を完全にブログ化するのではなく、話した内容をベースに、あらためて今我々 SRE Team および開発組織・事業が抱えている課題とその…

自分たちのシステムを診断するために DX Criteria"システム"テーマを実施しました

はじめに こんにちは。SRE Team の @chaspy です。本日は 日本 CTO 協会が作成した DX Criteria を実施した話をします。 背景: 自己診断能力の獲得に向けて スタディサプリ小中高大のプロダクト開発部では、今年の4月より「技術戦略グループ」という組織を発…

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

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

SRE チームをよりサステナブルにするために Vision/Mission/Values を作った話

小中高 SRE チームで Engineering Manager をやっている @yuya-takeyama です。 Quipper にはスタディサプリ ENGLISH の SRE である ENGLISH SRE チームと合わせて 2 つの SRE チームがありますが、この記事では自分たち小中高 SRE チームについての話です。…

Terraform の CI に tfmigrate を導入した話

こんにちは。 SRE の @suzuki-shunsuke です。 Terraform Monorepo の CI にtfmigrate を導入した話を紹介します。 なお、弊社の Terraform Monorepo に関しては過去の記事も参照してください。 Terraform リポジトリをマージして CI/CD を改善した話 - スタ…

Epoxy と 入力フォーム

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

AWS IAM の管理を miam から Terraform に移行した話

こんにちは。 SRE の @suzuki-shunsuke です。 AWS IAM の管理を miam から Terraform に移行した話を紹介します。 なお、 AWS や miam に限らず「Terraform で管理されていない大量のリソースを Terraform で管理する」ことを検討している方には参考になる…

RubocopでRubyコードのスタイルを強制せず、バグだけ検出

今回はRubyのRubocopの使い方のお話です。 Summary RubocopのLayout, Lint, Metrics, Styleらのcopのほとんどすべてをdisable 潜在的バグ発見に役立つ系のSecurity, Lintのcopの一部をenable rubocop:disable や .rubocop_todo.yml だけゆるく禁止 というル…

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

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

SRE と Developer のコラボレーションを支える仕組み

こんにちは。SRE の @int128 です。 Quipper の SRE チームでは、Platform の安定運用や改善だけでなく、Platform を利用する Developer のサポートも重要な仕事と位置付けています。 SRE チームで工夫していることを紹介します。 Issue に記録を残す SRE チ…

AWS - GCP の ID 連携を使い、 AWS CodeBuild で Terraform を使って GCP を管理

こんにちは。 SRE の @suzuki-shunsuke です。 Google Cloud Platform (以下 GCP) を Terraform で管理するように CI/CD を整備した話を紹介します。 背景 何度か本ブログで紹介したように、弊社では Terraform を使い AWS を始めとする様々なリソースを管理…

プロジェクト失敗可能性を軽減するプレモーテム

こんにちは。Engineering Manager の @wozaki です。 2年前のプロジェクトで、プレモーテム(premortem)を実施した例をご紹介します。 プレモーテムとは、プロジェクト初期にチームで集まり「プロジェクトが失敗したとして、その失敗とは? 原因は? どう対策す…

AWS IAM User の初期パスワード通知を自動化

こんにちは。 SRE の @suzuki-shunsuke です。 AWS の IAM User 作成後に初期パスワードをユーザーに Slack の DM で通知する作業を自動化した話を紹介します。 背景 弊社では AWS を使っており、開発者は入社したらまず自分用の IAM User を作成します。 IA…

リモートワーク時代のチーム仕事術(15分ミーティングの活用)

こんにちは、@kei_yamashita です。 所属はデータソリューション部でスタディサプリのデータ分析関連業務を担当しています。 今回quipperでのブログ投稿は初投稿となりますので、至らないところもあるかもしれませんが、よろしくお付き合いください。 昨年2…

プロダクトやコード改善のためにチームでやっていることのご紹介

こんにちは。スタディサプリの Web エンジニアをやっている @ttokutake です。 今日は、私の所属するチームがプロダクトやコードを改善するためにやっていることを簡単にご紹介したいと思います。 そもそもどんなチームなのか 私の所属するチームはプロダク…

GitHub Actions Self-hosted Runner の導入と安定運用に向けた軌跡

こんにちは。SRE の @int128 です。 Quipper では GitHub Actions Self-hosted Runner を一部のジョブで導入しています。本稿ではその目的と具体例を紹介します。 背景と解決したい課題 Quipper では以下の CI サービスを用途に合わせて利用しています。 Cir…

GitHub Actions で失敗したテストをコメントで通知する Action の作成

こんにちは。 Web Engineer の a2ikm です。 先日、 GitHub Actions で失敗したテストをコメントで通知をしてくれる quipper/comment-failure-action という Action を作成し、公開しました。 今回はこの Action を作成するに至った経緯と使い方、そして Act…

〜その意思決定を刻め〜「アーキテクチャ・デシジョン・レコード(ADR)」を利用した設計の記録

こんにちは。スタディサプリのWeb開発をやっている@highwideです。 今日は、自分の所属する"コーチングチーム"(個別指導コースや合格特訓コースの機能開発を行っています)が、最近のプロジェクトで利用した「アーキテクチャ・デシジョン・レコード」、通称「…

Terraform リポジトリをマージして CI/CD を改善した話

こんにちは。 SRE の @suzuki-shunsuke です。 Terraform のコードを管理する複数のリポジトリ (以下 Terraform リポジトリ) を一つにまとめて CI/CD の品質およびメンテナンス性を改善した話をします。 弊社のこれまでの CI/CD 改善の取り組み 弊社ではこれ…

iOS アプリ開発とユニットテスト

はじめに こんにちは。iOS エンジニアの@nkmrhです。 本稿では、現在実践している iOS アプリ開発のユニットテストの Tips をご紹介します。 ユニットテストについてご興味のある方はこちらの記事(iOS/Androidチーム合同でユニットテストクロスレビューを行…