IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

Ruby on Rails 海外事情コラム

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第41回 RailsにはActive Deploymentが必要だ (野田貴子) 2019年2月

RailsにはActive Deploymentが必要だ

こんにちはー。野田貴子です。 海外のコラムで面白いものがあったので、意訳してお届けします。 ご参考ください。


私の好きな英単語のひとつに、「controversial」があります。「議論になる」「物議を醸す」といった意味です。本日ご紹介するブログを読んだときに、この英単語が思い浮かびました。意見を持たれた方は、ぜひリンク先のコメント欄も読んでみてくださいね。

Rails needs Active Deployment
https://medium.com/@wintermeyer/https-medium-com-wintermeyer-rails-needs-active-deployment-65c207858c3

私はRuby on Railsを10年間使ってきましたが、今でもRailsが大好きです。しかし時には気に入らない点もあります。私はいわゆる消火活動をするコンサルタントとして、さまざまな企業のRailsプロジェクトを手助けしています。とりわけ、あらゆる種類のパフォーマンスや高可用性の問題を解決する手助けをしてきました。そして多くのRailsアプリケーションのコードベースを見てきました。成功例だけを見てきたのではなく、そうでないものもたくさん見てきました。より多くのRails初心者のためにと、Railsについての本も何冊か書きました。

私はActive Storage、Active Job、Action Cable、新しいAction Mailboxなどの機能を正しく理解するのにしばらく時間がかかりました。幾たびも私の最初の考えは、「この問題には良い解決策(gem)が既に1つはあるのに、なぜ車輪の再開発をするのか?」でした。しかし、数多くのRailsプロジェクトに取り組んでいるうちに、それぞれのチームには最初に一連のツールを提供する方が良いと思い始めました。もちろん別のgemを使っても構いませんが(多くの人がテストに別のgemを使うのと同様です)、彼らはプレーンなRailsプロジェクトのままで非常に良いスタートを切っていました。また、同じツールを使用するプロジェクトが多いほど、ドキュメントやコードの品質が向上しました。今ではstackoverflow.comでRailsの問題に対するヘルプを見つけるのは簡単になりました。ありきたりな問題を解決するために奇抜なgemは必要ないのです。ちなみに、そのような奇抜なgemの多くはRubyのアップグレードを乗り超えることができていません。メンテナンスをする人が興味を失ったか、あるいはただメンテナンスのための時間がなくなってしまったからでしょう。

新しいRailsプロジェクトの開発はこれまでになく簡単かつ迅速になりました。しかし・・・

デプロイは未だに悪夢のようだ

本番サーバーへのデプロイが容易ではない場合、そのフレームワークは何が良いのでしょうか。Rails以前では、PHPファイルのあるディレクトリをSCPやFTPを使ってWebサーバにコピーしただけでした。これがRailsではさらに複雑になりました。

もちろん、Herokuを使えばデプロイの面倒を避けることができます。多くの企業がHerokuを使用していますが、Herokuは高価であり、常に超高速というわけでもありません。多くの企業はRailsアプリケーションを通常のLinuxディストリビューション(DebianやRedhatなど)にデプロイしたいと考えているのです。

ApacheやNginxは、PHPと同じようにRailsをそのまま移動することはしません。しかしApacheやNginxはまだ必要です。ですのでPumaやUnicornなど、実際にRailsアプリケーションを実行するためのものを選んでから、ApacheやNginxをその前面に配置する必要があります。あるいは、Phusion Passengerを使用します(これはNginxやApacheモジュールをいじり回します)。Railsの初心者にとってはどの方法も複雑です。さらに、必要なRubyバージョンを実行するためにRVMrbenvを使わなければなりません。

ほかにも、実際にソースコードをサーバーにコピーし、必要なマイグレーションをすべて実行し、サーバーを再起動する方法を見つける必要があります。勇気ある人々は、ゼロダウンタイムデプロイを試みることさえやってしまいます(ここだけの話:Phoenix Frameworkがいいでしょう)。ですので、Capistranoや新顔のMinaなどに飛び込む必要があります。

Herokuで簡単なRailsアプリケーションのデプロイをセットアップするのには数分かかります。最大で30分でしょうか(もし上司のクレジットカード情報を最初に入手しなければならない場合)。しかし、プレーンなLinuxサーバ上でデプロイプロセスを設定するには、数日と言わないまでも数時間はかかります。あまりにも多くのチュートリアルを読み、そしてあまりにも多くの決断をしなければなりません。そして結局は雪の結晶(訳注:米スラング)になってしまいます。見事ですが、ほかに類を見ず、サポートしにくいものというわけです。

Docker!?

「Dockerを使ってはどうでしょう。Dockerは何もかもをとても簡単にしますよ!」という意見もちゃんと聞いています。

しかし違います! RailsアプリケーションのDebianサーバ用のDockerデプロイを最初から最後まで設定する方法をすべて解説しているチュートリアルを見つけてごらんなさい。ハウツーサイトのほとんどはせいぜい50%の完成度です。それらは開発システム用のDockerを動かす方法をただ紹介しているだけです。

しかし、誤解しないでいただきたいのは、私はDockerに大賛成なのですが、この投稿自体はDockerに賛成でも反対でもなく、Railsの標準的なデプロイについて述べています。

しかし私たちプロはDockerの使い方を知っています!

そんなことは全く役に立ちません。1つか2つのRailsプロジェクトに取り組んでいる普通の開発者が、Herokuではない本番環境への単純なデプロイを作成できないとすれば、これは大きな問題です。@DHHの15分間のブログビデオでRailsは人目につくようになりました。このビデオではアプリの完成までがとても簡単だったので、陽の目を浴び、普及しました。しかし簡単な本番環境がなければ、その価値はありません。

Active Deployment

正直に言うと、私はサーバーでどの技術を使用するかは気にしていません。誰がどんな方法をとっても構いません。私が気にするのは、最初から備わっている機能のままのシステムが使いやすいものでなければならないということです。デプロイを雪の結晶(独特でサポートしにくいもの)にするのはやめましょう。設定より規約です! 私は既存のRailsプロジェクトを見て回りたいと思います。恐らくそれらにはデプロイのための標準的なツールが使用されていることでしょう。

私はこのことについて考えてもらえるようにDHHやほかのRailsコミュニティの組織に呼びかけています。一歩退いて、この問題がスーパーヒーロー並のDevOpsパワーを持たない通常のRubyチームにとってどれほど難しいことなのかに気がついてください、と。

私にはこの問題に対する最適な解決策を見つけるための技術的な知識はありません。私はただ、新しいRailsプロジェクトの多くが、Heroku以外の環境にデプロイする簡単な方法がないからといってチャンスを得られなかった現実を見てきて、心を痛めているのです。

このことについて議論し、共有してくださると嬉しいです。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes