コンテナビルドを速くするためのテクニック

Studyplus
2022-06-06 12:00:03
[Docker] [SRE] [Rails] [Skaffold]
こんにちは! SREの栗山です。 最近観て良かった映画は「コーダ あいのうた」です。 今回は弊社で使っているコンテナビルドを速くするためのテクニックを紹介します。 以下のような一般的なテクニックに関しては他でよく紹介されているので今回は割愛します。 Dockerfileでは変更が少ないものを上に、変更が多いものを下に定義し、キャッシュが効くようにする .dockerignoreをちゃんと定義する マルチステージビルドを活用する bundle installの結果をキャッシュする 弊社のサーバーサイドではRuby on Railsをメインで使っています。 そのためコンテナビルド時にbundle …

seedのベストプラクティス

Studyplus
2022-05-16 01:00:02
こんにちは、ForSchoolチームでエンジニアをしている島田です。最近の好きな漫画は「白山と三田さん」です。 今回はStudyplus For School(以下FS)のseed運用について説明します。 FSは以下で構成されたSPAです。 サーバーサイド:Ruby on Rails フロントエンド:React.js Railsの環境構築時などで初期データをローカルのDBへ投入する場合に、Railsのseed( $ rails db:seed )を利用している方が多いのではないでしょうか? FSチームでもRailsのseedを利用していたのですが、以下のようなことが発生していました。 モデルが…

Firestoreのカスタムオブジェクト利用時の注意事項

Studyplus
2022-05-02 01:00:09
こんにちは、モバイルクライアントグループの隅山です。 今回はCloud Firestore(以下、Firestore)をAndroidアプリに導入した際、難読化問題が発生したのでその対応方法を紹介します。 Firestore自体はとても便利なため、簡単な利用方法も併せて紹介します。 Firestoreについて 簡単な利用方法 Firestoreデータベース作成 データ初期化 データ操作 カスタムオブジェクトの注意事項 Kotlinのprefix問題 対応方法 難読化問題 対応方法 終わりに Firestoreについて FirestoreとはGoogleのNoSQLクラウドデータベースであり、ク…

Billing Libraryを使ったサブスクリプションのグレード変更をリリースして

Studyplus
2022-04-28 03:20:04
[Android] [Kotlin] [アプリ内課金]
こんにちは、モバイルクライアントグループの中島です。 趣味でやってるTCGが、最新のセットで浮世絵サムライニンジャライダーキック合体ロボしながら北斗の拳メタルギアもしつつ、テーマ曲を稲葉浩志と凛として時雨が歌ってて意味がわかりませんでした。 めちゃ楽しかったです。 さて、今回は Google Play Billing Library (以下Billing Library) を用いたアプリで、サブスクリプションのグレード変更をリリースして気づいたことについてお話しします。 機能の実装のために必要なことというより、リリースするために追加で注意が必要だったこと、実際に切り替えが行われた際に「こういう…

Studyplus iOS/Androidのサブスクリプションをサーバーサイドに実装した話

Studyplus
2022-04-28 03:20:23
[アプリ内課金] [iOS] [Android]
こんにちは、サーバーグループの中村です。 Horizon Forbidden Westを先日クリアしました! とても面白かったのですが大作オープンワールドゲームをがっつりプレイするのが最近しんどくなってきました。 ですが懲りずにELDEN RINGを買おうか悩んでおります。 (クリアできずに詰んでいるメトロイドドレッドもどうにかしなくてはですが) 今回は1月25日にリリースした、 Studyplus有料版のサーバーサイドを担当した時の話をさせてもらいます。 Studyplus有料版とは 元々Studyplus Proという名前で、サブスクリプションサービスは存在していました。 ですが今回のSt…

新機能リリース前のStudyplus for Schoolに対してLocustを使った負荷試験を行いました

Studyplus
2022-04-28 03:20:50
[負荷試験] [Test] [ForSchool] [Locust]
こんにちは。ForSchool事業部エンジニアの石上です!息子が1歳半になり、お互いなんとなく言ってることがわかるようになってきました。 今回は Studyplus for School の一部のAPIに対して行った負荷試験について書きます。 3 行で リクエストが多くなりそうな新機能リリースに備えて負荷試験を行いました Locustから本番相当の仕様にした負荷試験用サーバーへリクエストを投げました 見つかった問題の解決や不安要素への対処をしました なぜ負荷試験をしたのか ざっくり書くと、リクエストが多くなりそうな新機能リリースに備えてです。 具体的には、入退館管理と出席管理という機能のリリー…

【2021年度】 スタディプラスがスポンサー・協賛したイベントの振り返り!

Studyplus
2022-04-28 03:21:03
スタディプラス カンファレンス・スポンサーチーム(ksuga, 若宮(id:D_R_1009), 中村)です。 スタディプラスでは、様々なカンファレンスやOSSのスポンサーを行っております。 2021年度、スタディプラスがサポートをしてきたカンファレンスやOSSを振り返りたいと思います。 RubyKaigi Takeout 2021 RubyKaigi Takeout 2021にPlatinumスポンサーとして協賛させていただきました! 今年で4回目のスポンサー(2020年の中止を含む)をさせて頂き、弊社としても思い入れのあるイベントです。 当日はスポンサー動画も流して頂きました。ありがとうご…

Studyplus iOSアプリにasync/awaitを導入してみた

Studyplus
2022-03-08 03:56:58
[Swift] [iOS] [Dive to Learn]
こんにちは、Studyplus事業部モバイルクライアントグループの上原です。 中途入社でiOSエンジニアとして入社して、StudyplusのiOSアプリの開発を主にしています。 また、最近はiOS以外にもFlutterを触り新機能を開発したりしています。 趣味の方では、Apex Legendsを数年やっているのですが、最近愛用していた武器が弱体化&武器生成必須になりモチベーションがどんどん低くなっています。新しい複数人でやれて人口の多いゲームの発売を切実に期待しています。 さて、今回は、Swift 5.5から導入されたasync/awaitをStudyplusのiOSアプリに一部導入したことに…

Rails 7 + Hotwireで実用的なSPAを作ってみた

Studyplus
2022-04-28 03:17:46
こんにちは、サーバーグループの市川です。モバイルクライアントグループに所属していましたが、バックエンドの開発を担当することが多くなったので、サーバーグループ異動にしました。 最近、Studyplusブックというサービスをリリースしました。Studyplusアプリ内で、200冊以上の参考書が読み放題で使えるサービスです。 このサービスの開発にあたって、社内向けの管理画面を新規に構築したのですが、Rails 7から標準でインストールされるHotwireを利用することにしました。 今回はHotwireを実際に利用する上で、どういったUIを作ればいいか試作しましたので、その話を書きます。 作った画面 …

Studyplus iOS/Androidでお試し期間のあるサブスクリプション販売始めました

Studyplus
2022-04-28 03:21:39
[iOS] [アプリ内課金]
こんにちは、モバイルクライアントグループの明渡です。 2年近く前にStudyplus iOS版のサブスクリプションを実装した際、Appleの課金テスト用Sandboxアカウントが扱いづらかったのですが、iOS 14から改善されていたことを最近知りました。 途中解約ができるようになったうえ、反映に時間がかかるもののお試し資格のリセットまで可能になっており、アプリ開発者に優しくなったのだなと感動しました。 今回は、1月25日にリリースしたStudyplus有料版でお試し期間に対応するにあたり考慮した、Studyplus iOS版でのお試し利用資格判定についてを中心にお話しします。 Studyplu…

MinIOを使ってローカル環境でファイルストレージを利用してみる

Studyplus
2022-04-28 03:21:56
[Docker] [rails]
こんにちは。ForSchool事業部サーバーサイドエンジニアのましばです。 今回はDocker + Rails + MinIOを利用して、開発環境でもS3のようなファイルアップロードを行うことができる環境を構築します。 同様の内容を取り扱った記事は複数存在しますが、少し古いものもあったので整理も込めて記事にします。 MinIO 環境 docker-composeで環境を構築 MinIOへアクセスしてみる ブラウザからアクセスしてバケットを作成する Railsからファイルをアップロードする コンテナ起動時にバケットを作成する 終わりに MinIO MinIOはS3と互換性のあるストレージサービス…

スタディプラスを支えるインフラ技術(2021年)

Studyplus
2022-04-28 03:22:13
[AWS] [EKS] [Kubernetes] [SRE] [Terraform] [CircleCI] [Datadog] [インフラ]
スタディプラスでSREをしてます、ksugaです。 最近は寒くて、電気毛布が欠かせません。寝るとき足元に電気毛布を敷いて寝ると睡眠が深く、疲れが取れます。 毎年恒例になっている「スタディプラスを支えるインフラ技術」を書いていたら公開が年明けになってしまいました。振り返りも兼ねて2021年に何していたかブログを書いたので良ければご一読ください。 昨年までの記事はこちらです。 tech.studyplus.co.jp tech.studyplus.co.jp はじめに システム構成 セキュリティ 利用中の主なAWSリソース 構成管理 CI/CD 監視・検知 その他 最後に はじめに 弊社には大きく…

KotlinとSwiftとDartの標準的な日付変換を比べてみる

Studyplus
2022-04-28 03:22:36
[Kotlin] [Swift] [Dart]
こんにちは。 最近はヨッシーストーリーを進めています、若宮(id:D_R_1009)です。 Studyplusでは、いくつかの画面で日付を扱っています。 私はAndroidとiOSをKotlinとSwift、そしてDartで書く毎日を送っています。 そうなると、特に日付の操作で「この言語、この日付処理できたっけ?」となることが多くあります。 そんなわけで、今回はKotlinとSwift、Dartの日付処理についてまとめます。 やること Kotlin ISO8601形式の文字列パース yyyy-MM-dd形式の文字列パース UTCの日時をJSTとして表示 日付を生成しyyyy-MM-ddに変換 …

私がStudyplusに入社して2年半が過ぎました

Studyplus
2022-04-28 03:22:59
[iOS] [Swift] [ポエム]
こんにちは。Studyplus事業部モバイルクライアントグループの大石です。 先日、古代戦士ハニワットというコミック作品の色紙オークションという企画があり、無事落札できました。 作者の武富健治先生に好きなキャラクターをリクエストして直筆で描いてもらえる貴重な機会ですので大変嬉しく思っています。 どのような漫画かご存知ない方はぜひチェックしてみてください。 manganightbooks.hammerkit.io さて、今回はタイトルのとおり私が2019年5月にスタディプラスに入社して2年半が過ぎていましたので、これまでを振り返ったり最近の働き方について思うことを書いてみたいと思います。 これま…

スタディプラスはKaigi on Rails 2021にゴールドスポンサーとして協賛しました!

Studyplus
2022-04-28 03:23:25
スタディプラスはKaigi on Rails 2021のゴールドスポンサーとして協賛させていただきました。 Kaigi on Railsではrebako(https://rebako.io/)で企業ブースや発表者への質疑応答などを行っていてオンラインカンファレンスとして新たな取り組みをしていて面白いカンファレンスでした。 弊社スタディプラスも「Kaigi on Rails 2021」にGoldスポンサーとして協賛しています!!https://t.co/T9eATnPA4n#kaigionrails— Studyplus Developer (@studyplus_dev) 2021年10月21…

DroidKaigi 2021に参加した感想

Studyplus
2021-10-28 01:00:00
[Android] [DroidKaigi] [カンファレンス]
こんにちは、Pixel 3aユーザーの若宮(id:D_R_1009)です。 早速Android 12を入れて、毎日使っています。 あっという間の3日間でしたが、DroidKaigi 2021が開催されました! 今回は、3日間の振り返りと感想をまとめておきたいと思います。 感想 隅山 今回、「マルチデバイス対応で考慮すべきポイント」を発表した隅山です。 自分のセッションがDay1の最初の方だったので他のセッションをゆっくり視聴できました。 自分のセッションと印象に残っているセッションの感想を書いていきます。 自分の発表を振り返って droidkaigi.jp 自分の発表は事前録画の形式で行いまし…

Sidekiq Enterpriseの同時実行数制御を理解する

Studyplus
2022-04-28 03:23:53
こんにちは。サーバーサイドグループの山田です。 最近クロスバイクを買って自転車で走ることにはまっています。 弊社ではRailsアプリケーションの非同期処理やバッチ処理でSidekiq/Sidekiq Enterpriseを使用しています。 tech.studyplus.co.jp Sidekiq Enterpirseには便利な機能が多くありますが、今回は Rate limiting の Concurrent について書いていきます。 なぜConcurrentかというと、先日この設定内容が原因で想定外に大量の待機ジョブを発生させてしまったためです。 その失敗を交えて紹介していきます。 TL;DR…

ちょっとした改善を継続的に消化する取り組み

Studyplus
2022-04-28 03:24:13
[チーム開発] [SRE]
こんにちは、SREの栗山です。最近好きな小説は「十二国記シリーズ」です。 今回はちょっとした改善を継続的に消化する取り組みに関して書こうと思います。 TL;DR SREチームでは2週間に1回「改善デー」を設けている 「改善デー」では1日で終わるようなちょっとした改善のみ取り組む よくある課題 サービス開発を続けていると以下のような要求が出てきます。 ライブラリやツールのバージョンを上げたい ここを修正すれば開発がちょっと楽になるので修正したい 使っているライブラリやツールの新しい機能を試してみたい 新しいライブラリやツールを検証してみたい 重要度は高くないが脆弱性の対応をしておきたい 等など。…

スタディプラスはDroidKaigi 2021にSUPPORTERSとして協賛します

Studyplus
2021-10-21 02:54:24
こんにちは! スタディプラスの若宮(id:D_R_1009)です。 最近はポルノグラフィティのサウダージをよく聴いています。 さて、ついに! 色々とあって大変でしたが! DroidKaigi 2021が10月19日から始まります! そして、スタディプラスは昨年に引き続きスポンサーとしてサポートしています! droidkaigi.jp Androidとスタディプラス スタディプラスでは2012年ごろに最初のAndroidアプリをリリースしました。 その後もコツコツと機能追加や改善を重ね、そろそろ10周年が見えてきております。 もしかしたら、DroidKaigiに参加しているエンジニアの中にも、学…

iOSDC Japan 2021に参加しました

Studyplus
2021-09-29 03:30:09
[iOS] [iOSDC]
こんにちは、モバイルクライアントグループの大石(id:k_oishi)です。 2021/9/16~18に開催されたiOSDC Japan 2021へ参加した件をブログにします。 今回、弊社はシルバースポンサーとしてスポンサードしており、レギュラートーク(20分)での登壇が1名、他のメンバーは勉強会・カンファレンス参加補助で参加しました。 iosdc.jp はじめに 弊社スタディプラス株式会社はシルバースポンサーとして、ノベルティボックスに特製グッズを提供させていただきました。もし、機会がありましたら活用してもらえればと思います。(切実) tech.studyplus.co.jp 感想 今回は弊…

突撃!隣のRubyGems

Studyplus
2022-04-28 03:24:40
[rails] [ForSchool] [ruby]
こんにちは、スタディプラスの島田です。好きな漫画は「葬送のフリーレン」です。 はじめに スタディプラスでは、Railsで開発しているプロダクトが2つあります。 Studyplus Studyplus for School それぞれのプロダクトはサービスの性質や歴史が異なり、別なチームが担当しているので同じRailsでも利用しているGemに特色があります。 Railsで開発していると、他のチームがどんなGemを利用して開発をしているのか気になることありませんか? ということで、今回は、Studyplus for School(以下FS) で利用しているGemの紹介をします。 利用している全てのG…

スタディプラスはRubyKaigi Takeout 2021にPlatinum Sponsorsとして協賛しました!

Studyplus
2022-04-28 03:25:04
こんにちは。サーバーグループの山田です。 最近好きな漫画は「アオアシ」です。 スタディプラスはRubyKaigi Takeout 2021にPlatinumスポンサーとして協賛させていただきました!今年で3回目のスポンサーとなります。 弊社スタディプラスもRubyKaigiにプラチナスポンサーとして協賛しています!!https://t.co/bNQYv7iEJq#rubykaigi— Studyplus Developer (@studyplus_dev) 2021年9月8日 プラチナスポンサーとして スポンサーとしてカンファレンスの中で以下のような宣伝をさせていただきました。 Live Ch…

対話を頑張らなくても作れるSiri Shortcuts向けIntents App Extension スライド書き起こしと補足

Studyplus
2021-09-19 07:00:02
[iOS] [iOSDC] [Siri Shortcuts]
こんにちは、モバイルクライアントグループの明渡です。 iOSDC Japan 2021に採択していただいた、「対話を頑張らなくても作れるSiri Shortcuts向けIntents App Extension」のトーク収録を終えました! 数えてみると、合計6回ほど収録し直していました。 1週間近く練習と推敲を重ねていたのですが、撮ったものを見直すと気になる点が続々出てきて、ついつい何度も撮り直してしまいました。 当日他のセッションを視聴した方も、Siri Shortcutsの実装に少しでも興味があれば、是非動画の方も後日観てみていただけると嬉しいです。 fortee.jp こちらは、上記トー…

画面回転対応で対応すること

Studyplus
2021-09-13 01:00:06
[Android] [Kotlin]
こんにちは、モバイルクライアントグループの隅山です。 最近フィットネスバイクを購入し、運動不足の解消を心がけています。 今年の6月より、AndroidのStudyplusアプリはタブレットでの動作を前提とした実装に切り替えました。 タブレットでも快適に利用できるようにするため、縦画面固定ではなく横画面にも対応しつつレイアウトや画面状態も考慮する必要がありました。 今回は縦画面と横画面を切り替える画面回転に関して対応した内容を簡単に紹介します。 はじめに ActivityやFragmentのデータ保持 ViewModel導入サンプル LiveDataの導入および注意点 AlertDialogの表…

StudyplusはiOSDC Japan 2021にシルバースポンサーとして協賛します

Studyplus
2022-04-28 03:26:18
[iOS] [iOSDC]
こんにちは、モバイルクライアントグループの大石です。 好きな漫画は最近モーニングにて連載再開した「望郷太郎」です。 Studyplusは2021年9月16日からオンライン開催されるiOSDC Japan 2021にシルバースポンサーとして協賛します。 iosdc.jp 弊社のiOSエンジニアが登壇します 今回、弊社のiOSエンジニア明渡が「対話を頑張らなくても作れるSiri Shortcuts向けIntents App Extension」という内容で登壇します。 fortee.jp 昨年は「iOS 13における Siri Shortcuts 最小実装+α」という内容でLTでの登壇でしたが、今…

Billing Library v4.0.0 への更新

Studyplus
2022-04-28 03:28:08
[Android] [In-App Purchase] [Kotlin] [Kotlin Coroutines] [アプリ内課金]
こんにちは、モバイルクライアントグループの中島です。 最近、ディスプレイの上に引っ掛けて物を置けるようにするボードを買いました。思ったより便利に小物を置けるので良さげです。 さて、今回は Google Play Billing Library (以下Billing Library) を、2021年5月にリリースされたv4.0.0へ更新したことについてお話します。 また関連事項として、以前のブログでお話ししました定期購入のグレード切り替えについても、新しいものが追加されていましたので軽く触れておきます。 tech.studyplus.co.jp Google Play Billing Libra…

スタディプラスはRSpecに寄付しました

Studyplus
2022-04-28 03:28:25
こんにちは、ForShcool事業部の島田です。好きな漫画は「ドラフトキング」です。 スタディプラスではこの度、会社として RSpec に寄付をしました。 rspec.info なぜOSSへ寄付するのか 2020年12月からGitHub Sponsorsで、企業がOSSのスポンサーをすることが可能になりました。 GitHub Sponsorsで、企業がオープンソースプロジェクトや開発者をスポンサーすることができるようになりました。これによって皆さんの企業で利用しているオープンソースプロジェクトを支援しましょう!#GitHubUniverse https://t.co/jQI3fdT5tc— G…

7月にLT大会を開催しました。

Studyplus
2022-04-28 03:28:37
はじめまして、Studyplus事業部サーバーサイドエンジニアの中村です。 今年4月から入社し、Studyplusアプリのサーバーサイド開発に参加しました。 よろしくお願いします! 今回は、こちらの記事でも少し紹介している LT大会を7月に実施しましたので、詳しく紹介させてもらいます。 ちなみに余談ですが、入社3か月で今回司会をやらせてもらいました! なぜいきなりやることになったのかと言うと、スタディプラスでは勉強会や LT大会などの社内のエンジニアイベントが定期的に開催されているのですが、 毎回同じメンバーが運営していて、負担が大きくなってしまっていました。 そこで、有志をつのって持ち回り開…

Flutterの状態管理とViewの更新

Studyplus
2022-04-28 03:28:52
こんにちは。モバイルクライアントグループの若宮(id:D_R_1009)です。 最近スタンディングデスクを導入しました。業務時間中はずーっとスタンディング状態で、疲れたら業務終了な感じでやってます。 スタディプラスでは一部のプロダクトでFlutterを採用しています。 社内では私がFlutterの開発経験が一番多く、また長くなっているので技術選択などを行っています。 先日、新たにFlutterのアーキテクチャを選びなおす機会がありました。 アーキテクチャを比較するにあたり、社内向けに書いたブログを一部編集して公開します。 はじめに StatelessWidget StatefulWidget …

フロントエンドのCircle CI実行時間を1/3にしました

Studyplus
2022-04-28 03:29:05
[CircleCI] [frontend] [Test]
こんにちは。ForSchool事業部の石上です。先日、コンビニでサクレの梨味を買ってきたところ妻に絶賛されました。今年一番家庭で貢献した日かもしれません。 今回はフロントエンドのCircle CI実行時間を短くしたことについて書きます。 3行で フロントエンドのCI実行時間が長く困っていました 無駄なものを消したり並列化したことで、実行時間が9分(改善前)から3分(改善後)になりました 今回サクッとできたのは改善がしやすい仕組みのおかげ Studyplus for School フロントエンドのテスト 私が現在携わっているStudyplus for School(塾向けのSaaS)のフロントエ…