サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
体力トレーニング
tech.studyplus.co.jp
江戸時代エンジニアとして、エンジニアしながら江戸時代の研究に勤しんでいる伊尾木です*1。 スタディプラスでは、WebApp グループのテックリードもやっています*2。 この記事では、新人エンジニアに向けてキャリアの考え方として 3 つの輪というものを紹介します。 新人エンジニアの皆さんは、まだ自分は何ができるのか、自分がどうなりたいのか、色々迷うことも多いでしょう*3。 そんな方々に向けて、「へーこういう考え方があるんやな」と参考にしてもらえたらと思っています。 3 つの輪というのは、「やりたい」「できる」「やるべき」の 3 つの輪が重なった仕事をしていこうという考え方です *4。 簡単に言うと、「やるべき」が目の前にある仕事であり、「できる」があなたのスキルであり、「やりたい」があなたの情熱です。 つまり、情熱があって、スキルも活かせることが、仕事になったら最高!だからこの3つの輪が重な
こんにちは、スタディプラスのカンファレンス/OSSサポートチーム、菅原です。 RubyKaigi 2024がいよいよ来週開催に迫ってきました! 今年もスタディプラスはRubyKaigi 2024にゴールドスポンサーとして協賛しています。 rubykaigi.org 今年は沖縄県那覇市で開催ということで、現地の食事や景色など行くだけで楽しめそうですね。 弊社からも4名のエンジニアが現地参加予定です。見かけたらお声がけいただけると嬉しいです。 RubyKaigi 2024とは? RubyKaigiは、Rubyプログラミング言語に関する国際会議です。 最新の技術について議論する場であり、Rubyの将来について議論する世界最大のRubyコア開発者の集まりです。 それだけでなく日本語と英語でのコミュニティハブとして重要な役割を果たしています。 講演者には、Rubyの生みの親であるまつもとゆきひろ(M
Amazon CloudWatchの費用を半額削減した話 こんにちは。スタディプラスのSREグループの蜂須賀です。 今回はAmazon CloudWatchの費用を半額削減した話を紹介します。 Amazon CloudWatchの費用を半額削減した話 経緯 CloudWatch Metric Streamsの試験導入 背景 試験導入の結果 実施内容 不必要なリージョンを除外する 不必要なサービスを除外する 不必要なリソースを除外する まとめ 経緯 スタディプラスでは主にAWSでシステムを構築しており、そのモニタニングツールとしてはDatadogを使用しています。 2023年初頭にCloudWatchの費用が昨年比で2倍に増加していたことをグループ内で問題視していました。 調査したところ、DatadogのAWSインテグレーションによるメトリクスの収集で発生する費用が、CloudWatchの費
こんにちは。開発部エンジニアの石上です。会社のブログ記事を書くのが久しぶりすぎて、ここにいつも書いていたちょっとした日常エピソードも何を書いたらいいのかわからなくなっています。ここに悩んでも仕方ないので、本題に入ります! 今回は、 Studyplus for Schoolの新機能開発において、Rails製のバックエンドとReact製のフロントエンドをどう並行して開発しているかを紹介します。 APIと画面を並行して開発したい Studyplus for Schoolのシステムには、主にRails製のバックエンドとReact製のフロントエンドがあります。基本的に画面はAPIを叩いてデータを取ってきます。代わりの仕組みを用意せずにやると、APIができるまで、データがあるときの表示ができません。この制限は、開発を遅くしてしまいます。 そこで、なるべくこういった待ちを発生させずに機能実装を進められる
はじめに こんにちは。開発部の大石です。2019年5月にスタディプラスへ入社してから、もうすぐ丸4年になります。入社した時に高校生だった長男が就職し、中学生だった次男は大学生になりました。(2023年現在) そんな私ですが、昨年4月からはVPoEというポジションを担当しており、一昨年からソフトウェアエンジニア(以下、エンジニアと略します)の採用責任者を兼任しております。 今回はこれまでカジュアル面談させていただいた候補者の方からよく聞かれる質問をピックアップしまして、普段私がどのように答えているか紹介します。 なお、候補者の方からの質問は採用ピッチに書かれている内容に関する質問もありましたので、参考までにリンクしておきます。当社のエンジニア職にご興味がありましたらぜひこちらもお読みください。 今回紹介する質問はいくつかのカテゴリに分けています。 はじめに カジュアル面談でよく聞かれる質問と
こんにちは。2022年7月に入社したサーバーサイドエンジニアの青山です。 今回は入社してからやってきたことの1つとして、同じグループの山田と一緒にAmazon RDSのPerformance Insightsを利用してアプリケーション側からDBの負荷を改善した話をします。 ※改善するにあたり複数の対応をしましたが個々の対応の詳細については書いていないのでご注意下さい。 はじめに Performance Insightsを利用して調査 データベース負荷の確認 トップSQLの確認 ボトルネックの解消 改善した結果 DBのCPU負荷削減 データベース負荷削減 Amazon RDSの費用削減 おわりに はじめに Studyplusはサービスの性質上、受験シーズンにかけてユーザー数や利用頻度が増加していく傾向にあります。そのような背景もあり、私が入社して数ヶ月が経った頃から徐々にDBへの問い合わせで
こんにちは。サーバーサイドエンジニアの山田です。 Rubyに型システムが入ってからしらばく経ちましたが、弊社のRailsプロジェクトの一部でもRBSを導入しました。 そのことについて昨年行われたKaigi on Rails 2022にて「RBSとSteepで始める型のあるRails開発とその運用」というタイトルで発表しました。 この記事では発表の内容についてあらためて整理した内容やその後の状況について紹介します。 記事の目的 RBSを導入した背景 対象となるRailsアプリケーション どうやって進めたか RBSの分類 ディレクトリ構成 自作クラス・モジュールなどのRBS GemのRBS(RBS Collectionにあり) GemのRBS(RBS Collectionになし) 当初の運用ルール 変更後の運用ルール RBS Railsから生成されるRBS 標準ライブラリのRBS CIの導入
チームとしてモブプログラミングを始めてみました こんにちは。ウェブアプリケーショングループのエンジニアのましばです。 早いものでもう2022年も終わりが近づいてきました。 今回は、チームでモブプログラミングに取り組みはじめた件について記事にします。 チームとしてモブプログラミングを始めてみました 背景 進め方 良かった点 知識の共有 チーム内のコミュニケーション 課題 時間や変更の管理 事前の段取りがもう少し必要 おわりに 背景 少し前にチーム体制の変更があり、別々のプロダクトを担当していた2つのチームが合流することになりました。 どうしてもプロダクトに関するメンバーの知識の偏りがあるので、仕様の議論や複雑なタスクの担当などが特定のメンバーに集中してしまうという問題がありました。 そのような状態を解決することを目的として、チーム全員でモブプログラミングを定期的に実施してみることになりました
こんにちは。開発部エンジニアの石上です。最近は息子とプラレールで遊ぶのが楽しいです。先日、社内のSlackでおすすめされていて気になっていた自動ターンアウトレールなるものを買ってきました。走るごとに進行方向が切り替わって、とても楽しいです。 さて、今回はGitHub Discussionsによって開発チーム間の非同期コミュニケーションを実現した取り組みについてご紹介します。新しいプロジェクトで仕様を固めるのが難しい、開発者が多くてAPIの認識合わせに時間がかかるなど、新機能開発時の認識合わせで困っている方に、こういうやり方もあるのかと参考にしていただけたら幸いです。 3行で 忙しい方向けの3行要約です。興味があったら中身も読んでみてください。 開発の認識合わせが難しい GitHub Discussionsで相談や議論しながら進めた 非同期かつ図を用いたコミュニケーションで効率的に認識を合わ
お久しぶりです。SREグループの菅原です。 おすすめのアイスはオハヨー乳業のBRULEEです。夏場は1日にアイスをいくつも食べてしまいました。もう末期ですね。 弊社ではポストモーテムをバックエンド(サーバーサイド+SRE)で運用して3年経ちました。2019年のSREチームを立ち上げ直後から導入しており、そこで作った運用ルールを基に現在も引き続き運用しております。今回は弊社のポストモーテムについて詳しくご紹介します。 目次 ポストモーテム導入で何を解決したかったのか? 障害対応のドキュメントが単なる作業証跡だった 障害対応を率先して行うメンバーに偏りがあった システムの理解度に差が生まれがちだった ポストモーテムの布教 ポストモーテムのルール作成 ポストモーテムを書くべきインシデントの基準 ポストモーテムのレビュー ポストモーテムの運用 ポストモーテムの担当者 ポストモーテムの実施タイミング
こんにちは。サーバーサイドグループの山田です。 最近クロスバイクを買って自転車で走ることにはまっています。 弊社ではRailsアプリケーションの非同期処理やバッチ処理でSidekiq/Sidekiq Enterpriseを使用しています。 tech.studyplus.co.jp Sidekiq Enterpirseには便利な機能が多くありますが、今回は Rate limiting の Concurrent について書いていきます。 なぜConcurrentかというと、先日この設定内容が原因で想定外に大量の待機ジョブを発生させてしまったためです。 その失敗を交えて紹介していきます。 TL;DR Rate LimitingのConcurrentを使う場合 ジョブの処理時間に合わせたlock_timeoutを設定する ジョブの処理を修正する場合はlock_timeoutも見直す Sidekiq
はじめに こんにちは!開発部の大石です。 4月から新しい体制になり全社のソフトウェアエンジニア(以下、エンジニアと略します)がソフトウェア事業本部の開発部所属になりました。 今回は弊社のエンジニアが配信しているPodcast「Studyplus Engineering Podcast」についてご紹介します。 「Studyplus Engineering Podcast」とは 弊社のエンジニアの配信チームが昨年から配信しているPodcastです。 ホストがゲストを招いて所属するチームの業務や自社サービスに関する技術の紹介をしており、これまで10回配信しています。 anchor.fm 配信の目的 Podcastは当初、1人のエンジニアが始めた取り組みでした。 それとは別に会社のエンジニア採用広報活動の一環として、採用候補者向けイベントを開催しようという案がありました。 しかし、コロナ禍の影響も
こんにちは!CREの冨山です。 最近子供が夏休みに入って日中家庭が騒がしくなりました。 さてスタディプラスでは新型コロナウィルスの影響で2020年からエンジニアは基本的にフルリモートで働いており、2022年頭からはリモートワーク手当として月3000円が支給されています。 そこで以前こちらの記事でも取り上げましたが、メンバーの数人にリモートワーク環境の写真とこだわり、リモートワーク手当の使いみちを教えてもらったので共有します。 CRE 冨山 まずは言い出しっぺの私のデスクから紹介します! 本人からのコメント こだわり 自動昇降デスク(FLEXISPOT) 購入して3年近く経ちますがめっきり立ち上がらなくなりました ウルトラワイドモニター エディタとブラウザを並べて表示しても十分な幅が確保されるので作業が捗る 今の在宅環境の悩み サブディスプレイの方を見てweb会議に参加するとよそ見している人
こんにちは。 モバイルクライアントチームの若宮(id:D_R_1009)です。 スプラトゥーン3がそろそろですね。アップをしっかりしていきましょう。 さて、モバイルクライアントチームではFlutterをAndroidやiOS、Web向けのフレームワークとして採用しています。 スタディプラス全体で見ると、2019年の2月からFlutterを採用しているので、すでに3年半ほど利用している状況です。 今回は、スタディプラスで採用している設計方針や目指している開発スタイルについて紹介します。 開発に利用する技術について Architecture Navigation Localization 開発への取り組み方について 小さな開発 ライブラリを組み合わせる 独立して再利用可能である アプリケーションごとの設定の反映 UIパーツの共通化とコピーコード 考えることを最小にする これから目指していくとこ
こんにちは! SREの栗山です。 最近観て良かった映画は「コーダ あいのうた」です。 今回は弊社で使っているコンテナビルドを速くするためのテクニックを紹介します。 以下のような一般的なテクニックに関しては他でよく紹介されているので今回は割愛します。 Dockerfileでは変更が少ないものを上に、変更が多いものを下に定義し、キャッシュが効くようにする .dockerignoreをちゃんと定義する マルチステージビルドを活用する bundle installの結果をキャッシュする 弊社のサーバーサイドではRuby on Railsをメインで使っています。 そのためコンテナビルド時にbundle installをする必要がありますが、bundle installはとても時間がかかりますよね。 以下のようにしてしまうとCOPYしたファイルに変更があるたびにキャッシュが使われずbundle ins
こんにちは、ForSchoolチームでエンジニアをしている島田です。最近の好きな漫画は「白山と三田さん」です。 今回はStudyplus For School(以下FS)のseed運用について説明します。 FSは以下で構成されたSPAです。 サーバーサイド:Ruby on Rails フロントエンド:React.js Railsの環境構築時などで初期データをローカルのDBへ投入する場合に、Railsのseed( $ rails db:seed )を利用している方が多いのではないでしょうか? FSチームでもRailsのseedを利用していたのですが、以下のようなことが発生していました。 モデルが増えたことで seed.rb が肥大化し複雑になっていた テーブルスキーマの定義を変更した場合に、 seed.rb の変更がされない 上記が原因で保守コストが上がり、新規のデータが追加されなくなってい
こんにちは、Studyplus事業部モバイルクライアントグループの上原です。 中途入社でiOSエンジニアとして入社して、StudyplusのiOSアプリの開発を主にしています。 また、最近はiOS以外にもFlutterを触り新機能を開発したりしています。 趣味の方では、Apex Legendsを数年やっているのですが、最近愛用していた武器が弱体化&武器生成必須になりモチベーションがどんどん低くなっています。新しい複数人でやれて人口の多いゲームの発売を切実に期待しています。 さて、今回は、Swift 5.5から導入されたasync/awaitをStudyplusのiOSアプリに一部導入したことについて書きます。 docs.swift.org async/await導入以前の非同期コード iOSでは、ネットワーク処理などの時間がかかる処理で、非同期的に動作させるためにクロージャーを呼び出す必要
こんにちは、サーバーグループの市川です。モバイルクライアントグループに所属していましたが、バックエンドの開発を担当することが多くなったので、サーバーグループ異動にしました。 最近、Studyplusブックというサービスをリリースしました。Studyplusアプリ内で、200冊以上の参考書が読み放題で使えるサービスです。 このサービスの開発にあたって、社内向けの管理画面を新規に構築したのですが、Rails 7から標準でインストールされるHotwireを利用することにしました。 今回はHotwireを実際に利用する上で、どういったUIを作ればいいか試作しましたので、その話を書きます。 作った画面 書いたソースコード 使った技術 解説 Turboを理解する Turbo Frameでフレーム分割する 追加フォーム (Turbo Frame) 追加処理 (Turbo Stream) 編集フォームと更
こんにちは、スタディプラスの島田です。好きな漫画は「葬送のフリーレン」です。 はじめに スタディプラスでは、Railsで開発しているプロダクトが2つあります。 Studyplus Studyplus for School それぞれのプロダクトはサービスの性質や歴史が異なり、別なチームが担当しているので同じRailsでも利用しているGemに特色があります。 Railsで開発していると、他のチームがどんなGemを利用して開発をしているのか気になることありませんか? ということで、今回は、Studyplus for School(以下FS) で利用しているGemの紹介をします。 利用している全てのGemを紹介すると大変なので、紹介する内容については私の独断と偏見で、 FSチームの開発をなんとなく想像できる FSの開発でよく利用している あまり有名ではないかもしれないがとても便利 といった観点でピ
こんにちは、ForShcool事業部の島田です。好きな漫画は「ドラフトキング」です。 スタディプラスではこの度、会社として RSpec に寄付をしました。 rspec.info なぜOSSへ寄付するのか 2020年12月からGitHub Sponsorsで、企業がOSSのスポンサーをすることが可能になりました。 GitHub Sponsorsで、企業がオープンソースプロジェクトや開発者をスポンサーすることができるようになりました。これによって皆さんの企業で利用しているオープンソースプロジェクトを支援しましょう!#GitHubUniverse https://t.co/jQI3fdT5tc— GitHub Japan (@GitHubJapan) 2020年12月9日 この発表の後、日本でも多くの企業がOSSの寄付をしたという記事を目にしました。 時雨堂として GitHub Sponser
こんにちは。モバイルクライアントグループの若宮(id:D_R_1009)です。 最近スタンディングデスクを導入しました。業務時間中はずーっとスタンディング状態で、疲れたら業務終了な感じでやってます。 スタディプラスでは一部のプロダクトでFlutterを採用しています。 社内では私がFlutterの開発経験が一番多く、また長くなっているので技術選択などを行っています。 先日、新たにFlutterのアーキテクチャを選びなおす機会がありました。 アーキテクチャを比較するにあたり、社内向けに書いたブログを一部編集して公開します。 はじめに StatelessWidget StatefulWidget StatefulWidgetにmixinするObserver Viewを更新するController Provider (InheritedWidget) InheritedWidgetとは Prov
こんにちは。ForSchool事業部の石上です。先日、コンビニでサクレの梨味を買ってきたところ妻に絶賛されました。今年一番家庭で貢献した日かもしれません。 今回はフロントエンドのCircle CI実行時間を短くしたことについて書きます。 3行で フロントエンドのCI実行時間が長く困っていました 無駄なものを消したり並列化したことで、実行時間が9分(改善前)から3分(改善後)になりました 今回サクッとできたのは改善がしやすい仕組みのおかげ Studyplus for School フロントエンドのテスト 私が現在携わっているStudyplus for School(塾向けのSaaS)のフロントエンドでどのようにテストを書いているかについては、以前@okuparaさんが書いてくれました。 tech.studyplus.co.jp この方針が定まる前はテストコードが少なかったのですが、方針を定め
はじめまして、モバイルクライアントグループの市川です。昨年9月からポルトの開発にジョインしました! porto-book.jp ポルトはFlutterとFirebaseで開発しているサービスです。 サーバサイドの処理は全てFirebase Functionsで実装されており、エンドポイントの数は40近くあります。 その中には、課金に関するクリティカルなAPIや外部サービスと連携するAPIなど、問題が起きるとサービスの継続に大きな影響を与えるものも多くあります。 今回はサービスを安定運用するため、Firebase Functionsのロギング改善した話を3つ書こうと思います。 ロガーの変更 と エラーレポーティング ①重大度レベルの反映 ②ロガーの引数が柔軟 参考情報 ログの保持期間の変更 不要ログの排除 除外の設定方法 まとめ ロガーの変更 と エラーレポーティング ポルトのFunctio
こんにちは。SREの菅原です。 突然ですがKustomize便利ですよね。 弊社ではKubernetesのManifest管理にKustomizeを使っています。Kustomizeの機能は複数ありどれも便利なのですが、今回はその中でもComponentsという機能を使って便利なのかどうなのかという話をしたいと思います。 KustomizeのComponentsについて Componentsの便利なところ Componentsで躓いたところ まとめ KustomizeのComponentsについて ※KustomizeのComponentsについて話したいので、Kustomize自体の説明は省きます。 Kustomize Componentsはv3.7.0から使えるようになった機能です。 kubectl.docs.kubernetes.io どのような機能かというと、componentsとい
こんにちは @okupara です。 去年から Studyplus for School の API 周りの state 管理を Redux から React Query にし始めました。キャッシュや無限スクロールでのリクエストのサポート、ページネーションのサポートなど、隈雑になりがちな処理を抽象化してくれてるので、かなり使いやすいです。 最近個人的に React Query を使った optimistic-update な UI の実装方法をどうすれば良いのか試行錯誤していたので、現時点での実装案を共有できればと思います。 optimistic-update (optimistic-ui) "楽観的な更新・UI"とはなんぞやについてはカミナシさんの開発者ブログでわかりやすく解説されてます。 Reduxによるいいねボタンの実装例もありますので是非ともそちらををご参考ください。 今回自分が試
SREの菅原(id:ksugahara08)です。 最近、既存のシステムをAmazon Auroraへ移行させるという作業が頻繁に発生しました。 モテ期かな?と勘違いするくらいAuroraに関しての仕事に恵まれたため、その中でも役に立ったTerraformでAmazon AuroraのMySQLユーザーを管理する方法を今回紹介します。 興味あれば最後まで読んで頂けると幸いです。 目次 Terraformでのパスワード管理の難しさ 鍵の暗号化・復号化 Terraformでの設定 AWS Key Management Service (KMS) のマスターキーを作成 AWSのKMS権限を設定したIAMを作成 KMSを使ってパスワードを暗号化 MySQLユーザーの設定 KMSを使ってパスワードを復号化 あとがき Terraformでのパスワード管理の難しさ どのように設定したかお話する前にTer
こんにちは、SREの菅原です。 あっという間に2020年も年末ですね。時が過ぎるのが早い... 今回は今年の振り返りも兼ねて、2020年でSREチームが行ったインフラのリニューアルについて記事にしたいと思います。 以前スタディプラスを支えるインフラ技術(2019年)を投稿したのですが、2020年版という形でインフラ技術を紹介します。 なぜインフラのリニューアルをしているかという理由については、「Kubernetesを本番導入しました」という記事で「スタディプラスのインフラの現状の課題」を説明しているので、気になる方は読んでみてください。 tech.studyplus.co.jp はじめに システム構成 利用中の主なAWSリソース 構成管理 CI/CD 監視・検知 メトリクス監視 アプリケーションのエラー検知 ログ収集 OnCall 現在の課題 システム構成 構成管理 CI/CD 監視・検知
こんにちは、Studyplus for School事業部エンジニアの島田です。 もうすぐ2020年も終わりになりますね。 はじめに なぜ導入したか ツール選定 LambdaTestでE2Eテスト(自動テスト) 構成とテストの実行タイミング E2Eテストコード(RSpec)の実装例 リポジトリ構成 Gemfile spec/spec_helper.rb spec/login_spec.rb .circleci/config.yml JenkinsからCircleCIのジョブを実行する際のAPI呼び出し例 LambdaTestのダッシュボード さいごに はじめに 皆さんはスモークテストをしていますか? スモークテストとは元々「電子機器での発煙がないかをテストしていたこと」を起源とし、そこから転じて「ソースコードの開発・追加・修正を終えたソフトウェアが動作する状態にあるかを確認するテストのこと
こんにちは、Studyplus for School事業部エンジニアの島田です。 今回は先日リリースしたStudyplus for School(以下FS) のZoomとの連携機能と、そのリリースに至るまでのプロセスを紹介させていただきます。 prtimes.jp 導入の背景 Zoom OAuth Appについて OAuthアプリの作成 Rubyでの実装について 利用するAPIについて 実装サンプル アプリの申請について アプリ申請の却下について 機能・ユーザビリティテスト セキュリティテスト 最後に 導入の背景 FSを利用している塾・予備校の多くでコロナ禍によりオンライン指導が急速に進んでいます。その中でZoomを導入しているケースが多くありました。オンライン指導をするにあたってミーティング予定を作成するためにZoomを起動する手間を省き、FSからZoomのミーティングの予定をシームレス
次のページ
このページを最初にブックマークしてみませんか?
『Studyplus Engineering Blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く