Studyplus Engineering Blog

スタディプラスの開発者が発信するブログ

Kubernetesを本番導入しました

こんにちは、SREチームの栗山(@sheepland)です。 さて、スタディプラスでは2020年9月に念願の Kubernetes本番導入 を果たしました。 本番導入といってもまだ10マイクロサービスあるうちの1つをKubernetes上で稼働させているだけです。しかしそこに至るまで様…

iOS 13におけるSiri Shortcuts 最小実装+α スライド書き起こしと補足

こんにちは、モバイルクライアントグループの明渡です。 先日iOSDC Japan 2020にてLTへ登壇させていただき、「iOS 13におけるSiri Shortcuts 最小実装+α」というテーマで発表いたしました。 fortee.jp フィードバッグも思いの外たくさん頂戴いたしまして、登…

iOSDC Japan 2020に参加しました

こんにちは、モバイルクライアントグループ iOSエンジニアの大石です。 9/19~21に開催された iOSDC Japan 2020 へ参加した件をブログにします。 今回、弊社としてはシルバースポンサーとしてスポンサードしており、LTへの登壇は1名、他のメンバーは勉強会・…

ReactのSPAでUIへのテストを真面目に取り組んでいく話

こんにちは。ForSchool事業部の@okuparaです。最近入社しました。今後ともよろしくお願いします。 Studyplus for SchoolはReactを使用したSPAとして構築されています。フロントエンドのテスト関しては以前よりReduxやロジックに対してのテストがいくつか存在…

RecyclerViewで Drawable に tint を設定する際は気をつけよう

こんにちは、モバイルクライアントグループの中島です。 最近健康診断で久しぶりに出社しましたが、体脂肪率が痛かったのでランニングを始めました。 頑張っていきたい。 さて、9月頭にも本ブログで紹介いたしましたが、Studyplusでは8月31日にiOS/Android両…

Studyplusアプリでダークモード・ダークテーマに対応しました

こんにちは、モバイルクライアントグループの明渡です。 8月31日、StudyplusのiOS版でダークモードに、Android版でダークテーマに対応したバージョンをリリースしました 左がiOSのダークモード、右がAndroidのダークテーマ 今回は、私も一部を担当したiOSア…

Studyplus for Schoolの1人目のQAエンジニアを募集中

Studyplus for Schoolの開発チームのリーダーをしている@atomiyamaです. Studyplus for Schoolでは現在1人目のQAエンジニアを募集しています. 募集ページでは説明できていない現状や課題,QAエンジニアの方と実現していきたいことなどを詳しく書いていきた…

Ruby+CloudSearchを用いた検索機能の実装をCloudSearch初心者が説明してみた

はじめまして、今年の5月に中途入社したサーバーサイドエンジニアの葉坂です。最近、弊社のサービスの検索改善を行ったのですが、その際にCloudSearchを初めて触りました(検索エンジンサービス自体触るのが初でした)。なので私の復習も兼ねてRuby+CloudSearc…

Amazon AuroraのMySQLユーザーをTerraformで安全に管理したい

SREの菅原(id:ksugahara08)です。 最近、既存のシステムをAmazon Auroraへ移行させるという作業が頻繁に発生しました。 モテ期かな?と勘違いするくらいAuroraに関しての仕事に恵まれたため、その中でも役に立ったTerraformでAmazon AuroraのMySQLユーザーを…

リモートでのペアプロにはSlack Callが便利

こんにちは。ForSchool事業部の石上です。最近はおやつに杏仁豆腐をよく食べています。甘党ではないのですが、杏仁豆腐はちょうどいい甘さなので好きです。 今回は小ネタです。友だちのエンジニアにリモートでのペアプロのやり方を聞かれたため、せっかくな…

GitHub Scheduled remindersにPull Pandaからさっそく切り替えてみた

モバイルクライアントグループの若宮(id:D_R_1009)です。 先日、すやすや寝ていたところGitHubから1通のメールが届きました。 私個人の話なのですが、AndroidとiOS、そしてFlutterのコードを書いたりレビューしたりしています。 このためFlutterのコードを書…

Kotlin Flow+Roomで作るTimer&Stopwatch

こんにちは、モバイルクライアントグループの若宮(id:D_R_1009)です。 2月以降リモートワークで開発を続けております。会社近くのラーメン屋さんが恋しくなってきました。 今回は5月中旬にリリースした、AndroidアプリのTimer&Stopwatch改修について書きます…

Studyplus iOS版におけるアプリ内課金時のUI制御

こんにちは、モバイルクライアントグループの明渡です。 先日のGoogle Play定期購入でプランを切り替えるモードの話でも記載の通り、スタディプラスでは今年3月に有料会員サービス Studyplus Pro をiOS/Android両OSでリリースしました。 info.studyplus.co.j…

少人数で複数のマイクロサービスの開発を行うための弊社の開発事情

こんにちは、サーバーサイドエンジニアの山田です。 昨年の11月に入社して以降、Studyplusアプリのバックエンドとそれに付随するいくつかのマイクロサービスの開発に関わってきました。今回はその中で感じたサーバーサイドチームの開発環境のいいところや改…

スタディプラスメンバーのリモートワーク作業環境事情

スタディプラスメンバーの作業環境事情 こんにちは。ForSchool事業部の田口です。 COVID-19の影響で在宅勤務になってしばらく経ちましたが、みなさんいかがおすごしでしょうか。 スタディプラスでは以前からリモートワークが可能でしたが、今回の騒動で原則…

新型コロナウイルスとStudyplus for School

新型コロナウイルスとStudyplus for School こんにちは、Studyplus for School事業部エンジニアの島田です。 新型コロナウイルスとStudyplus for School はじめに 数値でみる変化 生徒数 各機能の利用数 リクエスト数 エラーの発生数 DBのCPU利用率 機能開発…

Amazon AuroraにAuto Scalingを導入してCPU高負荷を乗り切った話

こんにちは、SREチームの菅原(id:ksugahara08)と栗山(id:shepherdMaster)です。 新型コロナウイルスが流行して世の中では外出自粛になる中、Studyplusは例年以上に多くのユーザー様に利用していただく機会を得ました。それに伴って4月からサーバーへのアクセ…

Elmの何が良いのか?何ができるのか?

こんにちは。ForSchool事業部の石上です。お菓子はばかうけが好きです。今日はElmの話です。 背景 Studyplus for Schoolには、Elmで実装された画面アプリケーションがあります。こういうやつです。 【新機能リリース】本日、新機能として「入退室管理機能」…

Google Play定期購入でプランを切り替えるモードの話

こんにちは、モバイルクライアントグループの中島です。 Studyplusでは3月17日に、有料会員サービスである Studyplus Pro をiOS/Android両OSでリリースしました。 info.studyplus.co.jp Studyplus Pro の開発では、アプリ内課金について様々な要件を調査しま…

アプリ内課金の定期購入(サブスクリプション)をFlutterとFirebaseで実装するときのポイント

こんにちは、スタディプラスの須藤(id:kurotyann)です。 昨年の9月にFlutterとFirebaseで新規サービス「ポルト Porto」をリリースしました。 tech.studyplus.co.jp ポルトはアプリ内課金を未実装でローンチしました1。ローンチ時の決済手段は、Stripeを使っ…

弊社のリモート事情

こんにちは。サーバーサイドエンジニアの金澤です。コロナウィルスがいまだに猛威を振るっていますが、みなさんはご無事に過ごされているでしょうか。この奇禍によってリモートワークを余儀なくされている方も多いかと思います。 弊社も例外ではなく、現在は…

HTMLとCSSでStudyplusのロゴをざっくり描いたり動かしたりする

CSS

こんにちは。ForSchool事業部の石上です。だし巻き卵が好きです。 やりたいこと さて、今回はCSSで遊ぶだけの記事です。以前、RubyWorld Conferenceへ参加させてもらった際、自社ブースでStudyplusのロゴに付箋をはっつけてベストRuby本を投票してもらうみた…

Kubernetes上でのFluentdを使ったログ収集について

こんにちは。ご機嫌いかがでしょうか? SREチームの栗山(id:shepherdMaster)です。 弊社ではKubernetesを導入するために着々と準備を進めております。 どんなシステム上でアプリケーションを動かすにせよ、ログ収集は必要になってきます。 Kubernetes上でロ…

AWS Lambdaを使ったStudyplus for SchoolのLINE連携

こんちにちは、ForSchool事業部の島田です。 今回はStudyplus for School(以下FS)のLINE連携について紹介させていただきます。 LINE連携とは? LINEの「FS公式アカウント」と生徒の保護者が友だちになることで保護者と塾(講師)が連絡をとれたり、生徒(子供)…

redux-thunkを使っているプロジェクトでのAPIリクエストの競合をAbortControllerで素朴に解決する

こんにちは。ForSchool事業部の石上です。今年の抱負はラーメンを月2食に抑えることです。今の所はなんとか達成できております。 さて今回は、Studyplus for School(以下、社内での呼び方でFSと書きます)のフロントエンドで、どうやってAPIリクエストの競…

WorkManager とViewModelの間でデータを受け渡しした話

こんにちは、モバイルクライアントグループの中島です。 今回はWorkManagerを使った非同期処理で、WorkManagerとViewModelの間でデータのやりとりを行なう方法について話したいと思います。 ここで「データのやりとり」と言っているのは、WorkManagerに処理…

JetpackのNavigationで開始画面を変更する方法

こんにちは、モバイルクライアントグループの隅山です。 去年からNavigationを導入してきましたが、導入する際に画面遷移周りで課題があったのでその課題について紹介します。 画面遷移の課題 解決策1:StartDestinationを用いる 解決策2:GlobalActionを…

Nuke + UIImageViewでいい感じにURLを読み込ませたい!

お久しぶりです。 モバイルクライアントグループの若宮(id:D_R_100)です。 もともとはAndroidアプリ専任だったのですが、昨年11月ごろよりiOSアプリ開発にも参加するようになりました。 今回は、iOSアプリに参加して取り組んでいたNukeによる画像読み込み処…

Firebase App DistributionへFabric Betaから社内向けアプリ配信を移行しました

こんにちは、新生モバイルクライアントグループの若宮(id:D_R_1009)です。 今回は社内向けのテストアプリ配信の更新について書きたいと思います。 移行の経緯 テストアプリ配信環境 fastlaneによるlaneの用意 CI(CircleCI)の設定 開発者マシン(shell script)…

開発プロセスを振り返ってみた話

こんにちは、サーバーサイドチームの山下です。 今回は昨年末にチームで実施した開発プロセスの振り返り会についてお話します。 背景 これまでの開発 なぜ振り返りをしたのか 準備 振り返りの流れ [第一部] スクラムやってみてどうだった会 [第二部] 今後ど…