読者です 読者をやめる 読者になる 読者になる

ボクココ

サービス開発を成功させるまでの歩み

Rails を学んだ後に学びたいオススメ技術

AWS Elasticsearch Heroku Rails

ども、@kimihom です。

たまには Rails 初心者向けのコンテンツでも書こうと思い立った。 Rails を本なりなんなりで勉強した後、どういった技術を学ぶべきなのか。私のオススメする順番でご紹介していこう。

対象者

主にWeb アプリを作りたいと思っている Rails エンジニア。今回は スマホアプリとか フロントエンドの話はしないことにする。Bundler を扱えて、Rails の AssetPipeline, ActiveRecord 周りはそれなりに理解したけど、そのあとどうするのっていうくらいな方。

Heroku

Rails ならこれというくらいの定番。 最近では Rails の本にでも Heroku が登場することが多くなってきた。 Heroku を使えば、ローカルで開発した Rails アプリを公開して運用することができる。せっかく Rails でアプリ作れるようになったら、そのグレートなサービスをみんなに見てもらいたいところ。Heroku を使えば 5分もかからずに公開することができてしまう。 Heroku は Rubyist を Hero にしてくれるのだ。

メールをどうする? ログやアラートの管理は?HTTPS にするには? そういった Web の共通の課題は全て Heroku アドオンが解決してくれる。私たちはポチッと使うアドオンをクリックするだけで便利な機能を利用することが可能だ。 Chef? Ansible? Capistrano? そんなこと全く知らなくて OK。そんな所にコードを書く時間があったら、サービスの改善に時間を使おう。Heroku と その周辺のアドオンがインフラのあらゆる悩みを解決してくれるのだ。

Heroku はアメリカにサーバーがあるからレイテンシが〜。そんな声は無視しよう。実際に使えばわかるが、Heroku を使って遅いと感じることはほとんどない。Rails 初学者に必要なのは、自分たちの作りたいサービスがどんどん出来ていくその過程と、その実現のしやすさだ。それを実感していく中でどうやったら Heroku x Rails で速くするかは自ずと学んでいくことだろう。

AWS の一部

AWS は最近どんどん新しいサービスを出してきているが、Heroku を使っていれば知らなければならないことはそんなに多くない。私がオススメする以下の AWS を最低限マスターしておくと良いだろう。

  • S3。画像などのファイルのアップロードや閲覧などの静的ファイルを置く場所として有用。
  • Route 53。ドメイン周りの管理をしてくれる。独自ドメインを運用していきたい時に有用。
  • Lambda。 Rails の一部のコードを外に切り出してレスポンスを早めたり、定期的に処理をさせたい時に有用。
  • Cognito。 Web や スマホアプリからAWSサービスにアクセスする際に有用。
  • IAM。 AWS の権限周りの管理。

このくらいだ。他は類似した Heroku のアドオンを使ったほうが手っ取り早いし安上がりに済む場合が多い。他の AWS サービスは概要を知っておくっくらいで、後に回して良いだろう。

Redis

Redis を"キャッシュストアだ"と思うだけでは Redis の本当の素晴らしさを分かっていない。Redis は非常に柔軟な KVS でいてとても高速だ。Redis は PostgreSQL などの RDB では実現が難しいような痒い所に手が届く素晴らしい技術である。

例えば、一時的にデータを持っておきたいんだけど一定時間後に削除していいようなデータがあったとしよう。RDBでは定期的に削除するバッチ処理などを実装しなければならないが、Redis であればタイムアウトを設定することで勝手に消えてくれる。Key に自由な値を設けることで、RDB さながらの実装を Redis だけで実現できてしまう。この詳細については Redis の本を学ぶとイメージがつきやすいだろう。

Redis入門 インメモリKVSによる高速データ管理 : Josiah L. Carlson, 長尾高弘 : 本 : Amazon.co.jp

Heroku Redis として標準のアドオンとして提供されているので、 KVS であれば Redis という選択は賢い選択と言えるだろう。

Elasticsearch

たいていのサービスでは"検索"機能を実現したいということになるだろう。 Heroku Postgres では日本語の全文検索をサポートしていないので、 Elasitcsearch を使う決断をすることにいずれなる。Rails と Elasitcsearch を簡単に扱えるような Gem があるので、概要をさらっとドキュメントを読んで Sense を使いながらデータの出し入れと検索ができるようになればひとまずは OK 。日本語のドキュメントが全然なくて最初は苦戦するかもしれないが、Elasticsearch に限って言えば実際にインストールして使ってみながら改善していくスタイルでいいと思う。 Elasticsearch 周りの話はこのブログでもたまに取り扱ってるので気になる方はタグの Elasticsearch からざっと眺めてもらえれば幸いだ。

Elasticsearch 自体は Heroku のアドオンとして豊富に取り扱っているので好きに選べば良い。AWS でもいいけど。

終わりに

一気に書いていったが、まず一番大事なのは基本であると改めて書いておきたい。Rails より HTML/CSS/JavaScript のフロントエンド。フロントエンドよりも HTTP やCookie、セッションなどの基本的な概念だ。というのも Web の性質 をしっかりと理解しないと Rails コードにおいて簡単にレールを踏み外して、最高にカオスなコードを書き散らかす初学者が後を絶たないからだ。Rails を学んだらもう一度 HTTPの基本から始まり、 Rails の ActiveRecord, ActionView, ActionController などをしっかりと理解しておきたいところ。テストコードが自然に書けるようになれれば、 Rails エンジニアと名乗ることができよう。

今回紹介した技術はその基礎があって初めて応用できる分野とも言える。基礎を吹っ飛ばしていきなりこういう技術に手を出すのもいいけど、結局 Rails の基礎が足りないといつか気づいて後戻りするだけだから、ルートとしてはどちらでもいいのかもしれない。

エンジニアを成長させる一番の材料は「好奇心」だ。あの技術はどれを使ったら実現できるのだろう?というアンテナを常にめぐらせ、それに飛び込む。そうした思いっ切りの良さこそがいいエンジニアになるための条件である。是非とも好奇心のあるエンジニアの仲間になって世界を変えるサービスを作って欲しい。同じ思いを持つ私からの僅かながらのメッセージである。