Upgrade to Pro — share decks privately, control downloads, hide ads and more …

私のENECHANGEでのインターンシップと今後

Avatar for Naki-ym Naki-ym
September 18, 2024
450

 私のENECHANGEでのインターンシップと今後

2024-09-17
【Ruby】テックベンチャー3社のインターン生が語る!学生エンジニアの本音トーク
https://enechange-meetup.connpass.com/event/330018/

Avatar for Naki-ym

Naki-ym

September 18, 2024
Tweet

Transcript

  1. 3 自己紹介 大学2年生 好きな言語:Ruby 趣味:邦楽、謎解き     バスケ、少年漫画… 山田 直生 •

    小学生 ◦ 2年生の頃にプログラミングを始める ◦ 夏休みに短期のプログラミング教室でRubyに触れる • 中学生 ◦ 部活が忙しくあまり開発できず ◦ HTML/CSS、Javascriptなどに触れる • 高校生 ◦ プログラミングコンテストを目指す ◦ 中高生国際Rubyプログラミングコンテスト ▪ 高校1,2年次 → 奨励賞 ▪ 高校3年次 → 最優秀賞 • 大学生 ◦ データサイエンスを専攻 ◦ 旅行系の企業、チームラボ株式会社、ちゅらデータ株式会社でインターンを経験 ◦ 2024年6月よりENECHANGEにてインターンを開始
  2. 7 ENECHANGEでのインターンシップ • ENECHANGE株式会社 ◦ エネルギー分野に特化したテック企業 • エネルギークラウド事業部 ◦ クライアントを相手にBtoBまたはBtoBtoCのサービスを展開

    ◦ 大手クライアント案件が多数 • EVユニット ◦ EVに特化したサービスを提供するチーム 大手クライアント向けに提供している EV充電アプリのバックエンドを担当
  3. 8 ENECHANGEでの仕事の進め方 • フルリモート可 • 週15hほど稼働 • 各種ツール ◦ 社内コミュニケーションはSlack

    ◦ チケット管理はAsana ◦ ソースコード管理はGithub • 仕事の進め方 ◦ メンターの方がAsanaで案件のチケットを作成、説明 ◦ メンターの方と相談しながら詳細仕様を詰める ◦ 実装・PR作成→レビューしてもらって修正
  4. 10 GoodJobのダッシュボードの導入 • GoodJobとは? ◦ マルチスレッドで非同期処理を行うために利用するgem ◦ RubyのActiveJobのPostgreSQLベースのバックエンド • 課題

    ◦ GoodJobが積極的に活用されているが、可視化されず状況が把握しづらい • 解決 ◦ GoodJobが提供するRails::Engineをmountすることで、Dashboardを導入(簡単!) ◦ → GoodJobの実行状況がリアルタイムで見られるようになった🎉
  5. 11 FCMへのpush通知における500エラーのリトライ • FCM(Firebase Cloud Messaging)とは? ◦ スマートフォンにpush通知を送信するためのサービス • 課題

    ◦ push通知は数万デバイスに向けてまとめて実行する ◦ その中でFCMへのリクエストは時折500エラーを返却する→push通知に失敗してしまう ◦ FCM公式の見解としては、500エラーは発生し得るのでリトライを行う必要があるとのこと • 解決 ◦ 通知1周目 ▪ 対象デバイス全てへの通知をトライする ▪ 500エラーが返却されたデバイス情報を格納しておく ◦ 通知2周目 ▪ 1周目の完了から10秒待つ(FCM公式の指示) ▪ 1周目の通知時に500エラーが返却されたデバイスを対象に、再度処理を行う
  6. 12 FCMへのpush通知における500エラーのリトライ • エラーコード毎にmockを利用したUTを実施し、テストコードの網羅性を担保 500 Response Mock { "error": {

    "code": 500, "message": "Unexpected error", "status": "INTERNAL", "details": [ { "@type": "type.googleapis.com/google.firebas e.fcm.v1.FcmError", "errorCode": "INTERNAL" } ] } } 500 Response Rspec Test context '異常系 ' do context 'エラーコードが INTERNAL' do let(:device_tokens) { %w(dummy_token4) } before do allow(fcm_messenger).to receive(:send_one).and_call_original end it '10秒間sleepしてからリトライする ' do res = subject[:results] expect(fcm_messenger).to have_received(:sleep).with(10).once expect(fcm_messenger).to have_received(:send_one).exactly(device_tokens.size * 2).times end end
  7. 14 ENECHANGEインターンで得られること • 実務経験を積むことができる ◦ 実際の課題の解決 ◦ AWSを活用したログの調査 ◦ テストコードによる堅牢性の高い実装

    • 並列処理やFlutterなど、技術的な新しいチャレンジもできる ◦ キャッチアップする上でのロードマップ ◦ 社員エンジニアに気軽に相談できる環境 (club_ruby, club_flutterチャンネル) • 社内のテックトーク(勉強会)に参加できる