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を本格的に採用したプロジェクトになります。 背景 ネイティブアプリ開発に当たって、プッシュ通知を受信して…

サイエンティストとエンジニアでつくるML ワークフロー

MLOps には、その成熟度に応じて3つのレベルがあると言われています。 私の所属するチームでは現在ここのレベルを上げるべく取り組んでいますが、その中でデータサイエンティスト(以下、DS) とデータエンジニア(以下、Dev) の協業って難しいよな〜と思う事例…

ArgoCD と Renovate によるコンポーネントの継続的なデプロイ

こんにちは、SRE の @int128 です。 Quipper では日本やグローバル向けのサービスをそれぞれの Amazon EKS クラスタで提供しています。Service Level を保ちながらクラスタを運用していくには Cluster Autoscaler や Datadog Agent などのコンポーネントが必…

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自体の…

collectionごとのメモリ利用量(MongoDB)

一般的なDBのテーブルのことをMongoDBではコレクションと呼びます。 下のグラフはコレクションごとのキャッシュメモリの利用状況(1週間分)です。毎日同じ時間に特定のコレクションのメモリ使用率が増えていることがわかります。キャッシュメモリの上限は…

DBを分割する前にできること(MongoDBチューニング)

Quipperでは4つのMongoDBクラスター(国内2&グローバル2)を本番環境で運用しています。 これまでに幾度も壁にぶつかりながら培ったMongoDBのチューニングの事例を紹介します。 メモリの大きいインスタンスを使う I/O性能を最高にする WiredTigerのキャッシ…

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

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

私のシェルプロンプト遍歴

入社一年目の @sakuro です。 プログラマーが日々使うツールの中には、カスタマイズに無限の時間を消費できてしまうものがあります。 ウィンドウマネージャ エディタ そしてシェル 日々使うものであればあるほど、使って心地よい状態でないとストレスになる…

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 の切り替えを行いまし…

褒めるラジオ quipper.fm

こんにちは。quipper.fm メインパーソナリティの @chaspy です。 今回、一緒に働く仲間をただひたすらに"褒める"社内企画をはじめてみました。好評により続いているので、その取り組みについて紹介します。 quipper.fm とは何か なぜはじめようと思ったのか …

Self-Hosted Cluster から EKS への移行と Platform の Production Readiness

こんにちは。SRE の @chaspy です。 Quipper では AWS 上で Kubernetes Cluster を運用してサービスを提供しています。 これまで kube-aws を用いて Kubernetes Cluster を Self Host してきましたが、このたび Managed Services である Amazon EKS に移行し…

リモート環境でも同じように楽しくやりたい!(後編) 〜2020年度 Coaching チームのモブプログラミング、オンボーディング事情 〜

再びこんにちは、 Quipper webエンジニアの @motorollerscalatron です。 前編には 自分の所属する開発チームでのリモート事情をとりあげました。後編では、そんな季節の中で、ちょっと癖のあるテーマ「モブプログラミング」「オンボーディング」をどうやっ…

サクッとわかる SwiftUI in WWDC 2020

こんにちは。4月に入社したiOSエンジニアの中村(@nkmrh)です。 東京もそろそろ梅雨が明けて夏がやってきますね。 さて、先月は WWDC 2020 がオンラインで開催されました。SwiftUI の新機能も発表され、いよいよ実戦投入の気運が高まってきているのではない…

GraphQL + Apollo の世界 ~Android 編~

こんにちは。Android アプリ開発者の geckour です。 今回は、Android における GraphQL と Apollo についてお話しします。 はじめに Quipper では現在新規プロジェクトに取り組んでいて、その技術スタックの議論の中で「GraphQL を使っていきたい」という意…

リモート環境でも同じように楽しくやりたい!(前編) 〜2020年度Coaching チームのリモートふん闘記〜

こんにちは、 自分が入社した時に憧れた先達がいなくなって寂しき中も、自身はもうすぐ Quipper 2年生をそつ業しようとしている、危うげな Quipper web エンジニアの @motorollerscalatron です。 stay home と言われて久しいですが、今回はそんな中でも私の…

Elastic CloudのElasticsearch Serviceに移行しています

こんにちは。Data Engineer の @shase です。 みなさんは全文検索エンジンに何を使われているでしょうか? 2020年現在では、比較的 Elasticsearchを使われている方が多いのでは無いかと思います。 Quipperでも、toC向けの検索機能をはじめとして、いくつかの…

Release Manager の負担を軽減する (Android 編)

Mobile Engineer の @chiiia12 です。今回は Android アプリのリリース作業の改善について紹介します。 Release Managerのしごと 私たち Android チームではアプリのリリース作業を担当するメンバーを Release Manager として当番制で回しています。 Release…

成長期のプロダクトをデザインする現場をより良くするために最初に取り組んだこと

こんにちは、デザイナーの@ishiguroyukiです。スタディサプリENGLISH(以下、スタサプENG)という英語学習サービスのプロダクトデザイナーをしています。 今回は、スタサプENGのデザインチームが取り組んでいるデザイン制作の業務改善についてご紹介したいと…