カテゴリー
サインイン 新規登録
学習時間 15時間
難易度 初級
質問投稿
価格 ¥1,980
月額 ¥2,980
Unlimited会員はこちらの教材を含む100種類以上のUnlimited対象教材が学び放題

【全エンジニア必須】実務に役立つ!Railsでバッチ処理を作ろう!

実際にコードを書きながらバッチ処理の設計と開発手法を実践的に学べる教材です。バッチ処理を作ったことがない方も安心して学習可能。基礎から始めてテストコードを追加しリファクタリングや大量データを想定したパフォーマンスチューニングまでカバー。バッチ処理をテーマにした現場目線でのオリジナルコラムも多数収録。

5
最終更新 2021/7
大波誠

残念ながらプロダクトはWebアプリケーションのみでは完成しません

あなたはすでにRailsで何かWebアプリケーションを作ってみたことがあるでしょうか?

Webブラウザを介してユーザーに必要な情報を表示し、ユーザーの入力を受け付けてデータの登録や更新を行うWebアプリケーションは今日のプロダクトに欠かすことができません。

しかし、プロダクトがその価値をユーザーに届けるためにはWebアプリケーションのみでは足りないのです。
多くの場合は業務に必要な処理が正しく実装され、大量のデータを適切に取り捌くバッチ処理がWebアプリケーションの背後で適切に稼働する運用が維持されていることでプロダクトはようやくその真価を発揮します。

アプリケーションエンジニアにとって、「バッチ処理の設計開発ができること」は必須スキルであるといえます。

ところが、多くの入門書や学習教材にはバッチ処理の解説やトレーニングがありません。
実際の現場で求められていることと大きなギャップがあります。

本教材はそうしたバッチ処理の学習環境についての矛盾に気づいたところからスタートしました。
この機会にぜひバッチ処理の設計開発について学習し、現場で求められるスキルを習得していきましょう。

バッチ処理も作ることができるエンジニアになろう

本教材ではバッチ処理のコードを段階的に成長させていく過程の中で、バッチ処理の設計開発の知識やよく取り入れる手法についてひととおり学習することができます。

実はとにかく動くことを目的にバッチ処理を作ることはそれほど難しいことではありません。

ただ、業務でプロダクトのバッチ処理として期待される性能(処理時間の短さや対応可能なデータ件数など)やテストコードによる仕様の担保など現場で求められる要件に応えるためには考えることがたくさんあります。
これらの期待に応えるためにはいくつかのコツを掴んでおく必要があります。

本教材でそのコツを学んでいきましょう。

お題には「ゲームサービスのランキング情報を更新する処理」を取り上げ、まずはとにかく動作するコードを書くところから始めます。
そこからテストコードの実装やリファクタリング、トランザクションの導入やパフォーマンスチューニングを施しバッチ処理をプロダクトコードの水準になるまで磨き上げていく過程を体験することができます。

本教材の特徴

  • Techpit初!バッチ処理特化型の学習教材

    本教材の一番の特長は、バッチ処理の設計と開発に特化していることです。RubyやRailsに関する他の教材では主にWebアプリケーション本体を開発のテーマに取り上げていることがほとんどです。バッチ処理について詳しく書かれている教材はあまり見かけません。しかし、アプリケーションエンジニアとしてバッチ処理の設計と開発ができることは必須要件です。本教材ではテーマをバッチ処理に特化させ、基礎から実際の業務ですぐに応用できるノウハウまでできる限り盛り込むことを意識して解説しています。

  • 順を追って実務レベルに近いところまでステップアップできる

    最初はひとつのファイルに簡単なコードを書くところからスタートします。その後、現場でバッチ処理の設計開発を担当するときに必要な要素を学びながら、徐々にコードを磨き上げていきます。トランザクションの概念や利用方法、テストコードの追加やリファクタリング、大量データを想定したパフォーマンスチューニングも含まれています。また、「そもそもバッチ処理とは何か?」「パフォーマンスチューニングをするときに現場のエンジニアが考えていること」など開発の下支えとなる知識と知見も適宜解説しています。

学習内容

  • バッチ処理について理解しよう
    • バッチ処理がプロダクトで受け持つ役割について解説
  • バッチ処理を作ってみよう
    • とにかく、ひとつのコードにシンプルにバッチ処理を書いてみる
    • 開発に必要なテストデータを作る仕組みを用意する
    • 動作確認と便利なツールの紹介(SequelAce)
  • リファクタリングをしながらテストコードを書こう
    • テストがしやすいようにリファクタリングをする
    • RSpecを実行できるようにする
    • テストコードを書いてみる
  • トランザクションを使おう
    • トランザクションの基礎を解説
    • SQLで直接トランザクション(ロールバック含む)を実行してみる
    • バッチ処理にトランザクション(ロールバック含む)を導入してみる
  • パフォーマンスチューニングをしよう
    • 大量のテストデータを意のままに生成する方法
    • 実行時間とメモリ消費量を測定する方法
    • チューニングポイントを検討してみよう
    • 実践 実行時間の短縮
    • 実践 メモリ消費量の削減

作成物のイメージ

Image from Gyazo

本教材の対象者

  • 初めてバッチ処理を書こうとしている方
  • 既存のバッチ処理を読んだり、なんとなく書いたりしているけれど、最初から作る場合にどのように作ったらよいかお悩みの方
  • アプリケーションエンジニアとしてのキャリアを目指している方

受講における必要条件


本教材は以下の知識や経験がある方が受講されることを想定しています。

  • Rubyの基礎的な文法を理解している
  • Ruby on Railsでサンプルアプリケーションをいくつか作成したことがある

学ばないこと

Railsは使用していますがバッチ処理の設計と開発を学習することを目的としているため、
Webアプリケーション本体の設計と開発については取り扱っておりません。

本教材の対応バージョン


本文とサンプルコードで取り扱っている主なソフトウェアのバージョンは以下になります。

  • Ruby 2.7.2
  • Rails 6.0.3.2
  • MySQL 8.0.21
  • Docker 19.03.13 (docker desktopは2.4.0.0)

    また、PCはMacを想定しています。
    執筆当時のバージョンは以下になります。
  • macOS Catalina(バージョン 10.15.6)

本教材で質問対応可能なOSや環境

  • Mac OS
  • Docker for Mac

    本教材は Mac OS でのみ動作確認をしております(なお、M1 Mac 独自の問題などに関しては回答できかねます)。

    Docker を使って環境構築をしますので、Docker for Mac のインストールは必須です。詳細は対応する章にて解説します。

    また、本教材で扱っていないフレームワークや言語におけるリファクタリングについての質問や、実務などソースコードや詳細な要件を開示できない状況、および本教材で解説した範囲以外での質問にはお答えできません。

カリキュラム

Section 0 はじめに
  • 0-1 [全エンジニア必須スキル]Railsでバッチ処理を作って、トランザクションの基礎を学ぼう!
  • 0-2 効果的な学習の進め方
  • 0-3 Ruby on Railsの環境構築(macOS)
  • 0-4 DockerとMySQLの環境構築(Mac)
  • 0-5 コードが動かないときはどうするか
  • 0-6 コラム:フロントエンドエンジニアもバッチ処理を書く時代?
Section 1 バッチ処理とは何か?
  • 1-1 バッチ処理は処理方式のひとつ
  • 1-2 データの一括更新
  • 1-3 調査と集計
  • 1-4 非同期処理
  • 1-5 バッチ処理の実行環境
  • 1-6 コラム:どんなバッチ処理が走っているか想像してみる
Section 2 バッチ処理を作ってみよう
  • 2-1 お題 ゲームのランキング更新処理
  • 2-2 テーブルを設計する
  • 2-3 rakeファイルにバッチ処理を書く
  • 2-4 テストデータを作ろう
  • 2-5 動作確認とSequelAceのインストール
  • 2-6 コラム どのくらい丁寧に書くべきか?

講師のプロフィール

教材のレビュー

5.0
2件の評価
100%
0%
0%
0%
0%
にったま 1年以上前
現在新米のWEBエンジニアです。 本当にためになりました。 会社でバッチ処理の話題が本当によく出てきますが、最初はなぜこの話をしているのかそもそもの前提知識が大幅に欠落していたため全く理解できませんでした。 しかしこの教材を受講し、その前提が少しではありますが理解することができました。 また、なにか教材を執筆された際はぜひ受講させていただければと思います。 もっと見る
tryoma0326 1年以上前
大変わかりやすく学習できました! なんとなく理解していたバッチ処理を一通り復習できました。