スタディサプリ Product Team Blog
https://blog.studysapuri.jp/
株式会社リクルートが開発するスタディサプリのプロダクトチームのブログです
フィード

アジャイル開発で「納期」がある案件とどう向き合うか?スタディサプリ開発の現場で考えるプロジェクトマネジメント
スタディサプリ Product Team Blog
こんにちは!スタディサプリ TPM(Technical Product Manager)組織のマネージャーをしている@yuukiinoueです。 突然ですが、皆さんのチームでは「アジャイル開発」と「納期」の付き合い方に悩んだことはありませんか? 「うちのチームはスクラムだから、カッチリした納期はちょっと…」 「変化に強いのがアジャイルの良さなのに、期限に縛られたら意味ないのにな…」 アジャイル開発を実践していると、一度はこんな声が聞こえてくるかもしれません。実際に私もそんなことをよく思っていました。 私たちスタディサプリの開発チームは、多くがスクラムを採用してプロダクトを開発しています。しかし…
22日前

Amazon EKS で Pod 単位のコストをモニタリングする
スタディサプリ Product Team Blog
こんにちは。SRE の @int128 です。 AWS ではサービス単位(S3、RDS など)のコストは比較的簡単にモニタリングできますが、Pod 単位のコストとなると途端に難しくなります。 Amazon EKS のコスト管理について、多くの組織が同じような課題を抱えているのではないでしょうか。 今回は、AWS Cost and Usage Reports(CUR)の Split cost allocation data 機能を活用して、Pod 単位のコストを Datadog で日常的にモニタリングしている取り組みをご紹介します。 解決したい課題 Pod のコストが分かりにくい スタディサプリ…
2ヶ月前

Claude Code Action × AWS Bedrock × GitHub Actions self-hosted runnerでAIコーディングAgentを構築してみた
スタディサプリ Product Team Blog
おっす!おら@_a0i!最近でびんだかかーそるだか色々でてくるな!追いつかねーだよ! とかなんとか言ってる間に出ました、Claude Code Action。 github.com Claude Code Actionとは? ClaudeというChatGPTのような生成AIチャットツールがあります。 Claude CodeはClaudeをターミナル上で呼び出すことができ、さらにこのClaude CodeをGitHub Actions上で呼び出せるのがClaude Code Actionです。 Claude Code Actionを使うことでDevinのように自律的にコードを修正してPRを作って…
2ヶ月前

Cursor と Slack MCP Server で実現する新しい Working Out Loud の形
スタディサプリ Product Team Blog
Cursor と Slack MCP Server で実現する新しい Working Out Loud の形
3ヶ月前

「Google でログイン」の OAuth App Verification を通す
スタディサプリ Product Team Blog
こんにちは、認証チームの @a2ikm です。 この記事では、 スタディサプリに「Google でログイン」機能を導入する際に行った OAuth App Verification について紹介します。 OAuth App Verification とは 先日、学校でスタディサプリを利用されているユーザに向けて Apple、Google、Microsoftのアカウントを利用してログインする機能がリリースされました。 このうち Google と Microsoft には、アプリの提供者を確認してもらう制度があります。 Google のこの制度は OAuth App Verification と呼ば…
3ヶ月前

Flutterリプレースプロジェクトにおけるテストの工夫と気づき
スタディサプリ Product Team Blog
こんにちは、QAエンジニアの@tyngwです。 下記の記事では、スタディサプリ for SCHOOLのFlutterリプレースプロジェクトについて紹介しました。 blog.studysapuri.jp Flutterは単一のコードベースでマルチプラットフォームに対応するアプリを開発できるフレームワークです。この特性により、以下のような課題を解決する手段として選定されました。 モバイルエンジニアの採用が難しいという課題 iOSとAndroid間での仕様差分が原因で発生する運用負荷 テストにおいても、単一コードベースの特性を活かし効率化を図ることが可能ですが、注意すべき点も存在します。この記事では…
4ヶ月前

「比較言語学のススメ -Ruby vs. Python に学ぶ言語のアイデンティティ-」というタイトルで地域.rb の LT 会で発表してきました!
スタディサプリ Product Team Blog
2025年02月の地域.rb の LT 会にて発表した「比較言語学のススメ -Ruby vs. Python に学ぶ言語のアイデンティティ-」のサマリー記事です。
5ヶ月前

イラストでわかるRAGを用いたbot開発~生成AIを使った開発の知識を深めよう~
スタディサプリ Product Team Blog
こ〜んにちは〜!スタディサプリ小中高SREの@_a0iです。 先日RECRUIT TECH CONFERENCE 2025 プレイベントで「イラストでわかるRAGを用いたbot開発」と題してLTを行いました。 資料もアップされています。 speakerdeck.com (首痛いポーズがいいですね〜!) 資料を見ていただければ終わりではあるのですが、せっかくなのでブログで補足しながら説明しようと思います。 この分野についてちょっとでも気になる!という方に向けて改めて生成AI周りで登場する用語を整理してお伝えできればと思います。 なるべく平易な言葉を使うことで、開発者ではない方も含めて理解してもら…
5ヶ月前

講義動画における生成 AI を活用した字幕生成
スタディサプリ Product Team Blog
こんにちは、『スタディサプリ』の iOS エンジニアのヴァンサンです。 先日、『スタディサプリ』の一部の講座の動画に日本語字幕が追加されました。音声と同じ言語の字幕は、聴覚に障がいのあるユーザーだけでなく、音声が聞こえづらい環境や、イヤホンが手元になく音を出せない環境でも有用です。さらに、字幕データ自体も検索や内容のまとめなど、さまざまな用途での活用が期待できます。そのデータがなければ、せっかく制作したコンテンツをフル活用できないでしょう。 この記事では、私たちが自動生成を選んだ経緯や字幕生成のプロセスを紹介します。私の生成 AI に関する知識はまだ浅く、改善の余地は多分にあります。また、AI…
5ヶ月前

スタディサプリ小中高のフロントエンド技術戦略と課題解決の歩み
スタディサプリ Product Team Blog
こんにちは。技術戦略フロントエンドGのマネージャーをしている @kuranari です。 本記事では、スタディサプリ小中高のフロントエンド技術戦略活動について紹介します。 技術戦略グループとは スタディサプリ小中高のプロダクト開発部には「プロダクト開発組織とそのシステムをより変化に強くする」ことを目的とした技術戦略ワーキンググループ(以下WG)が存在します。現在は、横断WG、フロントエンドWG、DevOpsWGの3つのワーキンググループがそれぞれの技術領域に置いて、戦略立案や負債解消の計画づくりを進めています。 本記事では、ワーキングループの一つである「フロントエンドWG」の取り組みを紹介しま…
5ヶ月前

RECRUIT TECH CONFERENCE 2025 で『スタディサプリ』の開発組織を紹介しました
スタディサプリ Product Team Blog
こんにちは、Androidエンジニアの@morux2です。先日 RECRUIT TECH CONFERENCE 2025 にて、「エンジニア主導の企画立案を可能にする組織とは?『スタディサプリ小学講座』に新機能がリリースされるまで」というLTを行いましたので、発表内容のサマリを共有させていただきます。(当日の10分でお伝えしきれなかった内容も補足しております!) 発表資料はこちらになります。 speakerdeck.com アーカイブも公開されましたので、ぜひご覧ください。 youtu.be 導入 Point 1. 情報へのオープンアクセス 1. 技術的な興味関心 2. ユーザー価値 3. 事…
6ヶ月前

monorepo で Cursor Project Rule を扱う Tips
スタディサプリ Product Team Blog
こんにちは、@chaspy です。開発部長をしています。本日は小ネタで失礼します。 私たちは普段、monorepo で開発しています。monorepo については過去色んな記事で言及されているのでぜひご覧ください。 blog.studysapuri.jp blog.studysapuri.jp 最近、monorepo で Cursor Project Rules を管理する仕組みを整えたので、その話をします。 Cursor Project Rules の課題 さて、読者の皆さんの周囲でも利用している人は多いかと思いますが、AI エージェント系の開発ツールを利用しておりまして、私たちの組織では …
6ヶ月前

再エンコード無しで、HLS動画への字幕の追加を実現する
スタディサプリ Product Team Blog
こんにちは、動画基盤チームの @kumackey です! 2月17日に、『スタディサプリ高校講座』に生成AIを活用した字幕表示機能が追加されました! まずはブラウザ版・特定講座での提供となりますが、今後提供範囲の拡大も検討していきます。 参考: 『スタディサプリ高校講座』、講義動画に字幕表示 音声文字起こし生成AI活用で、聴覚障がい者も利用しやすく まずは「数学Ⅰ/A」「情報Ⅰ」で 本記事では、字幕をHLSで配信させる方法についてご紹介したいと思います。 字幕の種類 字幕には大きく以下の2種類あります: Open Captions:常に表示される字幕 Closed Captions:表示・非表…
6ヶ月前

【番外編】スクリプト言語と GitHub Actions で GitHub Wiki に秩序をもたらそう! Vol.4 -しくじり編-
スタディサプリ Product Team Blog
「スクリプト言語と GitHub Actions で GitHub Wiki に秩序をもたらそう! 」シリーズ第4弾です。Ownership 単位で Wiki の Markdown ファイルをディレクトリごとに整理して Revisions を吹っ飛ばし、現状復帰させるまでの辛いお話です。
6ヶ月前

【本編】スクリプト言語と GitHub Actions で GitHub Wiki に秩序をもたらそう! Vol.3 -自動化ワークフロー実装編-
スタディサプリ Product Team Blog
「スクリプト言語と GitHub Actions で GitHub Wiki に秩序をもたらそう! 」シリーズ第3弾です。スクリプト日時実行結果と Ownership 不在 Wiki 件数週次報告 Slack 通知の GitHub Actions の実装のお話です。
6ヶ月前

【本編】スクリプト言語と GitHub Actions で GitHub Wiki に秩序をもたらそう! Vol.2 -スクリプト実装編-
スタディサプリ Product Team Blog
「スクリプト言語と GitHub Actions で GitHub Wiki に秩序をもたらそう! 」シリーズ第2弾です。自動化スクリプトの実装のお話です。
6ヶ月前

Flutterアプリ開発に欠かせないbuild_runner速度アップTips
スタディサプリ Product Team Blog
Dartチームがmacrosの開発をストップしたことを受けて、緊急でブログとビルドを回しております。 ForSCHOOL開発グループの @koji-1009 です。 medium.com macrosの開発停止に伴い、Dartチームはbuild_runnerのパフォーマンス向上とdata classの実現に注力する旨の表明をしています。 これらの機能は、macrosにより代替される想定でした。このため、この発表は単純な開発の停止ではなく、よりDartを安定化させつつ要望の多い機能を実現する発表であると感じています。 とはいえ、build_runnerの改善に期待したいのですが、改善がリリースさ…
6ヶ月前

iOS Dynamic Type を中心にアプリ内ブラウザーで文字サイズ調整対応
スタディサプリ Product Team Blog
こんにちは、『スタディサプリ』の iOS エンジニアのヴァンサンです。 iOS でユーザーが文字サイズを調整できる機能を Dynamic Type と言います。iOS アプリ開発では UIKit や SwiftUI での Dynamic Type 対応に関する情報が多く見つかりますが、この記事ではウェブページでの実装方法を説明します。また、Android のフォントサイズ設定についても触れながら、マルチプラットフォームでの文字サイズ調整対応について解説します。 コンテキスト 『スタディサプリ小学・中学講座』iOS アプリは主に SwiftUI で書かれていますが、動画視聴や問題回答をする学習画…
7ヶ月前

【本編】スクリプト言語と GitHub Actions で GitHub Wiki に秩序をもたらそう! Vol.1 -泥臭い手作業編-
スタディサプリ Product Team Blog
「スクリプト言語と GitHub Actions で GitHub Wiki に秩序をもたらそう! 」シリーズ第1弾です。自動化前の布石にあたるお話です。
7ヶ月前

CXプラットフォームKARTEを活用したコスパの良い機能開発のススメ
スタディサプリ Product Team Blog
こんにちは。スタディサプリ小中高のWebアプリの開発を担当している @kiki-ki と tsukamoto です。 スタディサプリでは5年ほど前からCXプラットフォームとして KARTE という外部サービスを利用しています。本記事では私たちのチームでのKARTEの活用方法について紹介します。 はじめに: KARTE導入の背景 スタディサプリでの活用事例 プレトタイピング ABテストでの活用 終わりに はじめに: KARTE導入の背景 KARTEの機能についての詳細は割愛します。公式の サービスページ を参照ください。 KARTEではユーザーの属性やアクションに合わせて接客内容をリアルタイムに…
7ヶ月前

小学背景デザインのご紹介と実装上の工夫
スタディサプリ Product Team Blog
こんにちは。iOS エンジニアの @_nkmrh です。 今回は『スタディサプリ 小学講座』の背景画面のデザインについてご紹介します。 1 月から 12 月までの季節感やイベントを踏まえた複数バリエーションの背景をいかに効率よく実装したか、デザイナーとのコミュニケーションコストをどのように最適化したかをまとめました。 1. 小学背景とは? 「小学背景」は、小学生向けの学習アプリ用にデザインされた、子どもたちが親しみやすい雰囲気を意識した背景デザインです。 1〜12 月の季節感を反映している シンプルかつかわいらしいイラストやモチーフを採用している 私たちは、月ごとのバリエーションを用意すること…
7ヶ月前

SwiftUI の NavigationStack の実践的な使い方と制限の克服
スタディサプリ Product Team Blog
あけましておめでとうございます。 スタディサプリの iOS エンジニアのヴァンサンです。 最近、スタディサプリ 小学・中学講座 iOS アプリ(以下スタサプ小中 iOS)で SwiftUI のナビゲーション周りの改善に取り組んできました。SwiftUI のナビゲーション API が iOS 16 で大きく変更され、スタサプ小中 iOS でもその対応が必要になりました。 これまでは、NavigationView と NavigationLink(isActive:...) を使用してナビゲーションを実装してきました(以前の実装については、こちらの記事をご覧ください)。しかし、アプリの iOS 1…
7ヶ月前

開発組織が事業貢献するには
スタディサプリ Product Team Blog
こんにちは。@chaspyです。『スタディサプリ 小学・中学・高校講座(以下、スタディサプリ小中高)』の開発部長をしています。この記事はスタディサプリProduct Team Advent Calendar 2024の25日目の記事です。 まずはじめに、このアドベントカレンダーを執筆してくださった皆さん、そして運営をしていただいたEngieering Office Team*1の皆さん、レビューいただいた広報関係者の皆さん、本当にありがとうございました。はじめての取り組み、かつ急に決まったにも関わらず、無事全ての枠が埋まり、公開できたことを嬉しく思います。この場を借りてお礼申し上げます。 本稿…
8ヶ月前

Jenkins から Argo Workflows 移行に挑戦した話
スタディサプリ Product Team Blog
Merry Christmas! SRE Team の @panicboat です。 突然ですが、皆さんはジョブ基盤に何を使っていますか? Jenkins や Digdag、Apache Airflow など多くの選択肢があり組織にマッチするものを選択するだけでも苦労しますよね。 今回はジョブ基盤を Jenkins から Argo Workflows に移行している件について話していこうと思います。 移行前の状況 私たちは Jenkins をジョブ基盤として使っています。Jenkins とは CI/CD に関連するタスクの自動化を行うことができる OSS です。 多くのジョブは Jenkins…
8ヶ月前

oapi-codegen の strict-server オプションを使ってより硬くサーバーサイドを実装する
スタディサプリ Product Team Blog
スタディサプリ小中高でエンジニアリングマネージャーやソフトウェアエンジニアをしている @pankona です。 本稿では oapi-codegen の strict-server オプションを使った開発事例を紹介します。 OpenAPI と oapi-codegen OpenAPI とは、Web API の仕様を記述するための規格のひとつです。どのパスがどんなリクエストを受け付けてどんなレスポンスを返すのか、という情報を yaml もしくは json の形式で記述することができます。以下は公式サイトです。2024年12月現在、OpenAPI 3.1.0 が最新バージョンのようです。 swagg…
8ヶ月前

Xcode ProjectにローカルのSwift Packageを追加する2つの方法の違い
スタディサプリ Product Team Blog
背景 まず、Swift Package、Xcode Project、およびXcode ProjectにSwift Packageを追加する方法について説明します。なお、説明は全てXcode 15.4の挙動に基づいています。 Swift PackageはSwiftのソースコードや関連するリソースファイルを1つにまとめる仕組みです。同じくSwiftを使うiOSアプリ開発と親和性が高く、iOSアプリ開発に用いられるXcodeという統合開発環境からよく参照されます。XcodeではソフトウェアをProjectという単位に分けて管理することが可能なのですが、このXcode Projectにローカルに存在す…
8ヶ月前

k6+TypeScriptでRSA公開鍵を用いたチャレンジレスポンス認証を突破する
スタディサプリ Product Team Blog
k6+TypeScriptでRSA公開鍵を利用し、各VUごとにAPIのチャレンジレスポンス認証を突破する手法について紹介します。
8ヶ月前

エンジニアリングマネージャーはいいぞ
スタディサプリ Product Team Blog
こんにちは。スタディサプリの開発組織でエンジニアリングマネージャー(以下、EM)をしている @ojiry です。 本稿はスタディサプリProduct Team Advent Calendar 2024 20日目の記事になります。 私はEMになってから3年と3ヶ月ほど経つのですが、その中で得たEMという職種への学びやキャリアの魅力を簡単に紹介できればと思います。この記事を読んでEMやってみたいなと思える方が1人でも増えてくれると嬉しいです! いきなりだけどEMってとても楽しいよ! EMの業務について、みなさんはどのようなイメージを持っていますか?ピープルマネジメントや組織開発、事務作業などが思い…
8ヶ月前

Credential Managerに移行するために調べたこと
スタディサプリ Product Team Blog
こんにちは。スタディサプリ Androidエンジニアの@moraylと@omtians9425 です。 スタディサプリのAndroidアプリでは、ID/パスワードの記憶に CredentialsApiを使っている箇所がありました。現在はCredential Managerが推奨となっており、そちらへ移行するために調べたことをまとめました。 「ID/パスワードの記録」の性質上、実装の確認や検証では「その記録をリセットする」ことが必要になるので、その方法についても解説します。 ライブラリandroidx.credentials:credentials は1.3.0を利用しました。 移行の背景 Sm…
8ヶ月前

現在時刻に依存する機能の動作確認コストを下げる基盤 -Time Injection-
スタディサプリ Product Team Blog
こんにちは。スタディサプリ小学・中学講座の Engineering Manager をしている @ywada526 です。 今回は、現在時刻に依存する機能の動作確認コストを下げる基盤について紹介します。この基盤は、社内ではコード上の名前をとって「Time Injection」という愛称 1 で呼ばれています。この記事内でも Time Injection という名前を使って説明します。 みなさんは、現在時刻に依存する機能の動作確認や品質保証はどのように行なっていますか。「時刻を固定した環境を用意する」「データを弄る」「ユニットテストで担保するから動作確認はしない」「コードをじっと見つめて問題ない…
8ヶ月前