クラウドワークス エンジニアブログ

日本最大級のクラウドソーシング「クラウドワークス」の開発の裏側をお届けするエンジニアブログ

安全にRailsを更新するためにモンキーパッチをたくさん作った話

クラウドワークスの弓山 (@akiray03)です。

前回のブログに引き続き、Rails3からRails4にアップグレードした際に行った工夫をご紹介したいと思います。前回の記事を未読の方は、合わせてどうぞ。

engineer.crowdworks.jp

今回は、「モンキーパッチ」に焦点をあてて、取り組みを紹介します。安全な並行稼動を実現するために、いくつかのモンキーパッチを作成しました。作成したモンキーパッチを振り返ってみると、以下のように分類することができます。

  • Rails3/4並行稼動時に、双方を分離するためのモンキーパッチ
  • Rails3/4並行稼動時に、双方の振る舞いを揃えるためのモンキーパッチ
  • Rails3の振る舞いをRails4と揃えるためのモンキーパッチ (Rails3側にパッチを当てた)
  • Rails4の振る舞いをRails3と揃えるためのモンキーパッチ (Rails4側にパッチを当てた)

今回の記事では、それぞれどのようなモンキーパッチを当てながらリリースを進めていったかをご紹介します。

続きを読む

Rails3/4並行稼働の仕組みと実際にやってみて良かったこと悪かったこと

クラウドワークスのエンジニアの森田(@minamijoyo)です。

ついにRails5がリリースされましたね。今日はRails5じゃないですけど、Rails3/4並行稼働させた話をしようと思います。Railsバージョンアップを検討している方々の参考になれば幸いです。

はじめに

去る2016/03/28 「Rails Upgrade Casual Talks」というイベントでRails3/4並行稼働させる仕組みを作ってる話をしました。 イベントの模様はエンジニアブログにきびたん(@ctokoro_me)がまとめてくれてるのでこちらを参照して下さい。

engineer.crowdworks.jp

上記のイベントで発表した内容はこちらです↓

www.slideshare.net

その後、並行稼働させつつ業務機能ごとに段階的にアップグレードを行い、無事にすべての切り替えが終わったので、 Rails3/4並行稼働の仕組みのおさらいと、実際にやってみて良かったこと悪かったことなどを共有します。

イベントでは時間の都合で、URL振り分けをするnginxのリバプロ層のところの説明をだいぶ端折ったので、この記事ではそのあたりの補足説明を多めにしようかと思います。

続きを読む

Rails4へ移行しましたのご報告とブログ連載のお知らせ

Railsをアップグレードするということ

f:id:koichiroo:20160706175639j:plain *1

大場です。

先週はRails5リリースされたように大きな動きのあったRails界隈ですがいかがお過ごしでしょうか。

2016年3月に弊社セミナールームで開催したRails Upgrade Casual Talksの中でも話題にしていたようにCrowdWorksでは、Rails3からRails4へのアップグレードに取り組んでいました。

Rails5がでたところ今さら感も漂いつつあるかもしれませんが、さる2016年6月13日からCrowdWorksはサービス全体がRails 4.2.6で稼働していますことをここにご報告いたします🎉 *2

根幹となるフレームワークを古いまま使い続けることは、洗練された記法が使えなかったり、高速化最適化が進んだモジュールが使えなかったり*3、周辺gemの対応についていけずに置いていかれるリスクなどが負債となって積み上がっていきます。また、セキュリティの問題が修正されなくなるリスクもあるため長い目でみてユーザーに不利益になり、生きたサービスを開発し続けるためにはフレームワークのアップグレードが不可欠と感じています。

CrowdWorksがやったこと

稼働中のサービスのRailsをアップグレードするということは、単に bundle update するだけでは終わりません。ましてやCrowdWorksのような10万行を超えるサービスの中心となるフレームワークを更新していくことにはいくつもの課題があります。社内では「車を走らせながらエンジンを取り替えるようなもの」と課題の大きさを比喩しています。

稼働したサービスを止めずにRailsのアップグレードをするにあたって、段階的な移行を実現するためにRails3とRails4が共存できる環境を構築しました。これによってサービスの特定の機能だけRails4にして公開することが可能になります。問題の発生箇所を絞り込んだり、即座に切り戻しできたり、いちどにたくさんの(制御しきれないほどの)問題が起こることを避けることができました。

このような取り組みのお陰で大きな障害を出すこともなくユーザーへの影響も最小で移行しています。その他、実際にどういう課題に取り組んでどう解決していったかというお話は次回以降に取り上げていきます。

これからのコンテンツ

Railsアップグレードを行って得た知見を開発メンバーが各々の視点からブログを書いてゆくシリーズをはじめます。今週から来週にかけてRails4アップグレード記事を公開していきますのでおつきあいくだされば幸いです。

これらはきっとRails5へのアップグレードへの対策としても役に立つことでしょう。CrowdWorksエンジニアブログの更新をお楽しみに! 🏃💨💨💨

公開済みの記事

engineer.crowdworks.jp

engineer.crowdworks.jp

engineer.crowdworks.jp

engineer.crowdworks.jp

engineer.crowdworks.jp

engineer.crowdworks.jp

*1:OGP画像: https://www.flickr.com/photos/blue_quartz/2413163162

*2:Rails5リリースよりはぎりぎり先に移行できたということでご容赦を...

*3:遅くなることもママありますが

Bashでくるくるさせる

クラウドソーシングで最大手のクラウドワークスで主にコンテンツマーケをやっています、KIMIです。

いい加減Zshを使えという声が聞こえてきそうですが、Bashの話です。

結論から

Bashでくるくるですが、いろいろ調べた結果次のようになりました。

$ cat hoge.sh
#!/bin/bash

spin() {
  local chars=('/' '-' '\' '|') i=0 mod=0

  while :
  do    
    echo -ne ${chars[mod]} "\r"
    mod=$(( ++i % ${#chars[@]} ))
    sleep .1
  done
}

spin

f:id:cw_kimi1:20160624123803g:plain

詳しく見ていきます。

続きを読む

クラウドワークスを支える愉快な仲間たち

こんにちは、野村です。今回は趣向を変えて、クラウドワークスを作っているのはこんな人達だよ、ということで、当社開発部門のエンジニアにアンケートを取ってみました。

アンケート配布数は約30、回答数は21でした。

Q1. エンジニア歴は?

f:id:shinichi_nomura:20160624110015p:plain

比較的若いメンバーが多いですね。

ちなみに自分は上記には含まれておらず、20年選手です (。◉ᆺ◉)

Q2. 好きな酒は?

大事な話なので2問目に持ってきました。

  • ビール … 8票
  • 日本酒 … 8票
  • ウィスキー … 4票
  • ワイン … 2票

なんとなくエンジニアっぽい結果ですね。エンジニアっぽいですよね。うん、エンジニアっぽい。

その他の回答

ビール・日本酒・ウイスキー・カクテル・焼酎・蒸留酒

要は酒ならなんでもよいわけですね。

自家製ラム梅酒

一瞬、酒税法的に大丈夫なのかなと思ってしまいました。

続きを読む

© 2016 CrowdWorks, Inc., All rights reserved.