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

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

Cloud Composer(Airflow)で分析者向けBigQuery SQL実行基盤をつくりました

はじめに こんにちは。Data Engineer の @shase です。 弊社ではいくつかのユースケースでCloud Composer(Airflow)を使っているのですが、今回はデータチームで開発している、分析者向けBigQuery SQL実行基盤(社内の通称はSaved Query Workflow)について…

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 で失敗したテストをコメントで通知する Action の作成

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

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

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

新規開発におけるシフトレフトアプローチ

QA

こんにちは。QA Engineer の@testtattoです。 今自分は新規開発プロジェクトのスクラムチームの一員として参画しています。 今回はチーム内で行っているテスト活動をシフトレフトアプローチの事例として紹介いたします。 対象読者 以下に興味や関心を持つ方…

SRE Team のオンボーディングのいま

こんにちは。SRE の @chaspy です。 Quipper の SRE Team ではじめて「オンボーディング」と呼ばれるものを行って約2年経ちました。 quipper.hatenablog.com その後、3人の仲間が入社し、そのたびにオンボーディングプロセスを改善してきました。 本記事では…

100 以上の Terraform 環境をいい感じに v0.14 に upgrade した方法

こんにちは。 SRE の @suzuki-shunsuke です。 100 個以上の Terraform state がある Monorepo で Terraform を v0.14 に upgrade しつつ Terraform Provider の自動 update を実現した方法を紹介したいと思います。 Terraform v0.14 の新機能とかにはあまり…

Pull Request の terraform plan の実行結果を S3 に保存して安全に apply

こんにちは。 SRE の @suzuki-shunsuke です。 Pull Request (以下PR) の CI の terraform plan (以下 plan) の実行結果(以下 plan file)を S3 に保存して、安全に terraform apply (以下 apply) 出来るようにしたとともに、 GitHub リポジトリの Require br…

プロダクトマネジメントレビュー会をやってみました

こんにちは。 隔週連載3回目は1,2回目とはちょっと趣を変えて、「プロダクトマネジメントレビュー会」をやってみた話をしようと思います。 過去の連載は下記になります。 連載1回目:差し込みの多いプロダクト開発のスケジュールの精度を上げるためにはバーン…

bimg (libvips Goバインディング) でサムネイル画像作成を高速化する

はじめに こんにちは、Webエンジニアの濱田裕太 (@yuuta) です。 Quipperが開発・運用している スタディサプリ のプロダクトでは、バックエンドの一部をGoで実装しています。そのサムネイル画像作成で利用する画像処理ライブラリを imaging から bimg (libvi…

進捗管理の精度を上げるためにTPMが行ったたった一つのこと

こんにちは。 今回は前回のバーンアップチャートの利用に引き続き、進捗管理の精度を上げるためにTPM(Technical Product Manager)の私が行ったことを書こうと思います。 具体的に行ったことはたった一つで、 「自分自身でタスクの雑見積もりをしてみる」 で…

iOS/Androidチーム合同でユニットテストクロスレビューを行っている話

こんにちは。2020年6月から Quipper に join している @omtians9425 です。現在新規プロジェクトにおいて Android アプリ開発を担当しております。 今回は弊プロジェクトの iOS/Android チーム合同で行っている、ユニットテストのケースを相互にレビューし合…

差し込みの多いプロダクト開発のスケジュールの精度を上げるためにはバーンアップチャートがおすすめです

こんにちは。 今回は差し込みの多いプロダクト開発におけるスケジュール精度の上げ方として、バーンアップチャートの利用をおすすめしたいと思います。 どんな人に読んでほしいか Product GrowthやEnhancementに携わっているけど、やることが多くて思ったよ…

ブログ番長を Bot にした

Web Dev の @mtsmfm です。 ブログ再開 から2年半、年間40~50本程度のブログ記事がこの Product Team Blog からでています。 継続的な更新を重視し、これまで概ね週1本程度が公開されるようにしてきました。 ローテーションを組んでいるものと、個々人が高…

SwiftUIのディープリンク対応:プッシュ通知から画面遷移する方法

こんにちは!2020年9月からQuipperにジョインした、iOSエンジニアの @chuymaster です!現在新規サービスのiOSアプリ開発を担当しており、SwiftUIを本格的に採用したプロジェクトになります。 背景 ネイティブアプリ開発に当たって、プッシュ通知を受信して…

2020年版スクラムガイドで重要な3つのこと

こんにちは、入社1年目くらいで「スタディサプリ for TEACHERS」の開発をしている @satoke と申します。コロナの影響もあって、エンジニアはリモート勤務にもなりやすい業種ですが、スクラム続けられているでしょうか? この記事では2020年11月に3年ぶりに公…

Renovate の Tips

こんにちは。 SRE の @suzuki-shunsuke です。 Quipper では Renovate という様々なツール、ライブラリのバージョンをアップデートしてくれるツールを活用しています。 今日はこれに関する Tips を紹介します。 Reviewer を設定する 対象を絞り込む 自動でマ…

Terraform の CI/CD を CodeBuild に移行した話

こんにちは。 SRE の @suzuki-shunsuke です。 Terraform の CI/CD を CircleCI から AWS CodeBuild に移行した話を紹介します。 背景 弊社では AWS のリソースを Terraform で管理しており、元々 CircleCI で CI/CD を実行していました。 リポジトリは mono…

巨大な .circleci/config.yml を分割した話

こんにちは。 SRE の @suzuki-shunsuke です。 6000 行を超える巨大な .circleci/config.yml を分割してメンテナンス性を改善した話を紹介します。 背景 我々 SRE は日々 Developer Productivity の改善に取り組んでいます。 その取り組みの一環で Developer…

Kubernetes HPA External Metrics を利用した Scheduled-Scaling

こんにちは。SRE の @chaspy です。 Quipper では Kubernetes Horizontal Pod Autoscaler (以下、HPA) を利用して Pod のオートスケーリングを実現しています。 HPA は非常に便利で、ほとんどのトラフィック増減に対応できます。しかし、オートスケーリング…

AWS Lambda を Python2 からPython3に移行しました

こんにちは。Data Engineer の @shase です。 何かしらの移行ばかり今年はしているのですが...前回はElasticsearchの移行で今回はAWS Lambdaの話です。 2020年1月にPython2がEOLになり、4月に最終バージョンの Python 2.7.18 がリリースされ、Python2自体の…

ステージング環境の夜間停止によるコスト削減

こんにちは。SRE の @chaspy です。 今回、ステージング環境のリソースを使用していない時間に削減することで、コストを削減したのでその事例を紹介します。 前提: Pull Request namespace Quipper では本番環境、開発環境ともに Amazon EKS*1 を使用してい…

Docker Hub の Rate Limit 問題に対応した話

こんにちは。 SRE の @suzuki-shunsuke です。 Docker Hub から Docker image を Pull する際に Rate Limit に引っかからないように対応した話について書きます。 anonymous user に対する Docker Hub の Rate Limit は段階的に導入されていて、 2020-11-02 …

新学習機能:ディクテーションの開発 ~ Android 編 ~

こんにちは。Android アプリエンジニアの geckour です。 今回は、スタディサプリ 中学/高校/大学受験講座 にて先日リリースした問題タイプ "ディクテーション" の Android アプリにおける実装についてお話します。

ALB Weighted Target Groups による EKS Cluster の Canary Switching

こんにちは。SRE の @chaspy です。 Quipper では Application Platform として Amazon EKS(以降、EKS)を利用しています。*1これまで Cluster を Upgrade する際には Blue/Green 方式で行っていましたが、今回 Canary 方式で Cluster の切り替えを行いまし…