Studyplus Engineering Blog

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

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)…

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

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

WorkManager + Dagger2によるバックグラウンド処理

こんにちは、Androidチームの若宮(id:D_R_1009)です。 昨年末にAndroidチームが導入した、WorkManagerをDagger2と組み合わせる方法を紹介します。 WorkManagerとは developer.android.com WorkManagerは、確実に実行したい非同期処理に対して利用するAndroid…

EOF 2019に参加しました(イベントレポート)

こんにちは、スタディプラス iOSチームの大石(id:k_oishi)です。 2019/10/31に開催されたEOF 2019に参加しました。 EOFとはEngineering Organization Festivalの略で最近役職として注目されているEngineering Manager(略してEM)のためのカンファレンスです。…

スタディプラス SREチームの2019年の取り組みまとめ

SRE

SREチームの栗山(id:shepherdMaster)と菅原(id:ksugahara08)です。 年末ということもあり、弊社SREチームが2019年に行ってきた取り組みの中で大きめのトピックを紹介したいと思います。 本来ならもっともっと書きたいことがあるのですが、今回はスタディプラ…

Studyplus for SchoolのCSS事情

こんにちは。ForSchool事業部の石上です。最近、弊チームのスクラムマスター id:atomiyama さんから、「伝えにくい事とか相手の注意引きたい時に幼児言葉を使うと有効です。」というテクニックを教えてもらいました。今後はなるべく実践していきたいでちゅ …

CloudNative Days Kansai 2019参加レポート

どーも、SREやってます。菅原です。 先日は11月27,28日にグランフロント大阪のコングレコンベンションセンターで行われたCloudNative Days Kansai 2019に参加して来ました。 せっかくなのでイベントの参加レポートを載せたいと思います。 CloudNative Daysと…

AAC Navigation で Bundleの受け渡しを SafeArgs で行なってハマった話

こんにちは、Studyplus Androidチームの中島です。 以前の話に引き続き、 AACのNavigationについて話したいと思います。 今回は 遷移元・遷移先のFragment間でのBundle受け渡しでちょっとハマったことについてです。 なお、執筆時に利用している Navigation …

FirebaseとStripe Billingを組み合わせるとき、stripe.customerのdescriptionとmetadataが便利です

こんにちは、スタディプラスの須藤(id:kurotyann)です。 9/17にFirebaseとStripe Billingを使って新しいサービスをリリースしました。 サービスについては先日投稿したブログを参照してください。 tech.studyplus.co.jp 今日は、タイトルどおり「FirebaseとS…

Studyplus - ML Study Jamsとして機械学習に取り組みました

こんにちは、Androidチームの若宮(id:D_R_1009)です。 2019年8月から9月にかけて、社内にて "Studyplus - ML Study Jams" を開催しました。 "Studyplus - ML Study Jams" はGoogleの "ML Study Jams vol.3" に取り組むため、社内で行ったイベントとなります…

CircleCIのPerformance Planでテスト時間を半減させた

こんにちはスタディプラスCTOの島田です。 今回はスタディプラスでCircleCIのPerformance Planを導入し、テストの実行時間を半分以下にした内容を書きます。 Performance Planについて CircleCIのPerformance Planとは、処理能力を最適化しパォーマンスを最…

散らかったStorybookを整理する

こんにちは。ForSchool事業部の石上(id:shgam)です。今回はStorybookの話です。 7/17にリニューアルしたStudyplus for Schoolでしたが、このとき導入したStorybookを活用できていませんでした。そもそも整備が足りてなかったので、1日もらってStorybookを整…

スタディプラス AndroidアプリKotlin化の歩み

こんにちは、Androidチームの若宮(id:D_R_1009)です。 今回はAndroidアプリの大きな更新、JavaからKotlinへの移行について書きたいと思います。 Androidアプリの歴史 Kotlinの導入 Kotlin化の本格化 Kotlin Coroutines導入、RxJavaから移行開始(2018年11月) …

FlutterとFirebaseで新しいサービスをリリースしました

こんにちは、スタディプラスの須藤(id:kurotyann)です。 タイトルどおり、9/17にFlutterとFirebaseで新しいサービスをリリースしました。 サービス名は「ポルト(Porto)」です。 受験生に人気の参考書を月額980円でスマホで読める電子参考書サービスです。 …

Studyplus iOSでライブラリ管理をCocoaPodsからCarthageに移行した件

iOS

こんにちは。今年の5月に入社したiOSエンジニアの大石(id:k_oishi)です。 今回は弊社がリリースしているStudyplusのiOSアプリのライブラリ管理をCocoaPodsからCarthageに移行した件をご報告します。 プロジェクトの構成と開発PCのスペック 現在のStudyplus i…

iOSDC Japan 2019に行ってきました

こんにちは、Studyplus iOSチームの明渡(id:m_yamada1992)です。 iOSDC Japan 2019(2019年9月5日〜7日)にiOSチームのうち2名(大石、明渡)で参加いたしました。 なお、費用については下記のスポンサー枠1名 + 弊社の 勉強会・カンファレンス参加補助 で参加さ…

Google Developers ML Summit Tokyo : Human-Centered Machine Learningに参加しました

こんにちは、Androidエンジニアの若宮(id:D_R_1009)です。 先日、Google社で開催されたGoogle Developers ML Summit Tokyo : Human-Centered Machine Learningにインフラエンジニアの菅原(id:ksugahara08)と共に参加してきました。 events.withgoogle.com 今…

builderscon 2019に行ってきた

今回は8/29~31に開催された builderscon tokyo 2019 へ行ってきた感想を書きます。 参加メンバーの写真 はじめに buildersconへの参加は2年連続です。昨年の感想はこちらになります。 tech.studyplus.co.jp またスタディプラスは昨年に続きbuildersconのスポ…

Rubyアプリケーションのメモリ使用量上昇問題をjemallocを使うことで解決しました

こんにちは、スタディプラスの栗山(id:shepherdMaster)です。 今回はRubyアプリケーションのメモリ使用量上昇問題をjemallocを使うことで解決した話です。 Rubyアプリケーションのメモリ使用量上昇問題 弊社ではRuby on Railsをメインで使っていますが、Ruby…