pixiv insideは移転しました! ≫ https://inside.pixiv.blog/

Railsのアップグレードでもう苦しまない

pixiv Advent Calendar 2日目(つ∀-)

Ruby on Railsは世界中のプロジェクトで採用されている最も有名なWebフレームワークのひとつである。
これほど有名なフレームワークでありながら、約1年ごとに訪れるアップグレードでは皆揃って頭を抱えることになる。

そう。
Ruby on Railsを使うプロジェクトにとって、アップグレードはひとつの鬼門である。

一定以上の規模のプロジェクトになると
専任のエンジニアがブランチを作って、つきっきりでアップグレード作業をすることになる。(あなたの会社もそうじゃない?)

あんな退屈で辛い作業はない...

負債を減らすにはコツがいる

どうすればRailsのアップグレードを楽にできるか。

アップグレードに時間がかかるのは「最新バージョンとの差分」が大きいことが原因なので、
差分が少なければ、それだけアップグレードが楽になる。

今回は、Railsのアップグレードで苦しまないために差分を少なくするコツをいくつか紹介する。

1. コードを書かない

YAGNI(You Ain't Gonna Need it)(機能は必要になるまで追加しない。)という原則の元に開発する。
当たり前だけどコードが少ないほどアップデートは楽になる。

また、コードを追加するのと同様に、不要になったコードはガンガン消していく。
あなたのプロジェクトには不要なコードが残っていないだろうか?

2. Rails-Wayに乗ってコードを書く

Rails Guideの始めに記載されているように、Rails-WayはRails開発の唯一解である。

「1. コードを書かない」にも通じる話であるが、Rails-Wayに乗った開発をしていれば、余分なオプションや実装がグッと削られてコード量を少なくできる
そうすれば、当然アップグレードは楽になる。

Railsは、最善の開発方法というものを1つに定めるという、ある意味大胆な判断に基いて設計されています。Railsは、何かをなすうえで最善の方法というものが1つだけあると仮定し、それに沿った開発を全面的に支援します。言い換えれば、ここで仮定されている理想の開発手法に沿わない別の開発手法は行いにくくなるようにしています。...

(Rails Guide: 2. Railsとは何か)

また、Rails Guideに乗っ取っていれば、アップグレード方法も明示されるため、プロジェクト固有の問題に悩まされにくくなる。

3. Deprecatedなコードを明示する

認識できない(していない)負債ほど厄介なものはない。

次のバージョンで変更されることが明らかだったり、Railsをハックしていて不安な箇所があったりするならば
それを明示しておくだけでアップグレード作業が楽になる。

# コードかテストに直接記述する
if Rails.gem_version > Gem::Version.new('5.0.1')
  ActiveSupport::Deprecation.warn('廃止予定')
  raise '5.1.0で動かなくなるかもしれない'
end

これの良いところは「負債を認識できる」ようになることである。
こうしておけば、この負債は次回のRailsのアップグレード作業の時に確実に返済される。

4. Railsの変更をbackportする

普段からRailsの更新を細かくbackportする。
例えば config/initializers/backport_rails5_1.rb を作る。

語弊を恐れずに言うなら、Railsは壊れているため
プロジェクトでは幾つかのbackportをいれることがある。(例 #25834, #25146, #25364)

そこに、新機能(例 #25991)もbackportすることで次期バージョンとの差分を少なくすることができる。

とはいえ、これは積極的にやるものではなくて次の条件に当てはまるものだけ導入する。

  • 変更が小さい
  • テスト可能なこと
  • 導入にメリットがあること

This Week in RailsのRSSをSlackに流しておいて、必要そうなものだけピックアップしてbackportすると良いと思う。

まとめ

いくつか紹介したが、アップグレードを待たず、普段から小さく差分を減らしていく心がけが大事。
しかし、わざわざ時間をかけると本末転倒なので、あくまで開発に集中してついでに差分を減らせればベストだと思う。

Railsの開発は楽しくも少し大変。各プロジェクトのやり方で、うまく付き合っていければ嬉しい。


今更ながらの自己紹介

pixivFACTORYの開発リーダー や 日本酒の管理 をしている 2015年入社の @alpaca-tc だ。

twitter.com

普段は、pixivFACTORYでRuby/JavaScript/Goを書いている。
若手でもガンガン開発ができるこんな弊社に興味がある方は、ぜひオフィスに遊びに来てくれヾ(〃><)ノ゙

ピクシブの新執行役員に直撃!CTO&CCO就任記念インタビュー

pixiv Advent Calendarが今年も始まりました!

この12月、ピクシブ株式会社に新しい執行役員が2人誕生しました。今回はCTO(最高技術責任者)の高山とCCO(最高文化責任者)の川田に、今後の抱負などをうかがってみました。

f:id:devpixiv:20161130104917j:plain (※ 左: CCO 川田 寛、右: CTO 高山 温)

――まずはお二人の自己紹介をお願いします。まずは高山CTOから。

高山 このたびピクシブ株式会社CTOに就任しました、高山(@edvakf)です。僕はpixivに入る前はイギリスとカナダで物理を学んでいて、26歳で大学院中退という、かなり異色な経歴でした。当時は大学をサボってJavaScriptばかり書いていまして、Webプログラミングを仕事にしようと思い、2012年3月に入社しました。

――入社してからはどんなことを担当されていたのでしょうか。

高山 入社後はpixiv本体のPHPを書いたり、「pixivコミック」というWeb漫画サービスでRuby on RailsやScalaを書いたりする、いわゆるサーバーサイドWebエンジニアで、昨年「リードエンジニア」というエンジニアのスペシャリスト職に就いていました。ただ、ここ最近はエンジニアの組織づくりなどのマネジメントが主な仕事になっていましたので、その流れでCTOを任されることになりました。

――それでは続いて川田CCOお願いします。

川田 同じくピクシブ株式会社CCOに就任しました、川田(@_furoshiki)です。私もやや経歴は変わっていますね。高校卒業後はフリーターをしたり、カナダやアメリカあたりをブラブラしていたり。そんななかインターネットやエンジニアという仕事の可能性に惹かれまして、とっとと現場に入ろうと思い、IT系の短期の専門学校を経てNTT系SIerに入社しました。

――安定した職場から転職されたとうかがっていますが、どんなきっかけで?

川田 受託案件で技術を提供するだけというのはちょっと違うかなぁ、なんて。ビジネス領域にも踏み込んでサービスを作って育てていきたいと感じるようになり、6年ほど働いていたんですが一大決心して、2015年8月に入社しました。私は「創作活動をしている人の人生を変える!」という信念のもと、サービス作りから組織まで、さまざまなことに関わるようにしました。

――入社後のご担当は?

川田 職種としてはエンジニアですが、「BOOTH」という通販サービスで新規機能の企画を立てたり、グロースハックしたり、実際にコードを書いて実装したり。また、運営やサポートにも関わったり、チームの管理方針を変えたりと、サービスを良くするために必要なことは、エンジニアという枠にとらわれず、なんでもやっていました。最近は社内のほかのプロジェクトでもそんな協力をしていて、採用活動などにも深く関わったりしています。そんな流れもあって、このたびCCOを任されることになりました。

――高山さんは実態としてCTO的な業務が増えていたとのことでしたが。

高山 「リードエンジニア」という肩書は、技術的な挑戦についての自由度を大きく与えられていた立場です。ただ最近は、自分が立ち上げから携わっていた「pixivコミック」の技術責任者としての役割や、エンジニアの面談や評価制度を整備する仕事が増えていました。エンジニアの数も増えていくなか、片手間でやっていた組織づくりがこれまで以上に重要になってくると考えていたところでCTO就任のお話をいただいた形です。今後は特定のサービスに関わるよりは、会社全体を見ることが増えるはずです。

――組織づくりというお話ですが、CTOとしての抱負をお聞かせください。

高山 会社の技術的プレゼンスを高めることであったり、エンジニアの評価や働きやすさの向上などにコミットできればと考えています。まだあまり具体的に何をやるかは考えられていませんが、変化に強い組織というのをキーワードにしていきたいと思っています。pixivは生まれてまだ9年しか経っていません。今までの技術が次の10年に通用するかは怪しいと考えて、起こりうる今後の変化に対応できる状態にしておきたいという漠然とした思いがあります。

川田 インターネットを取り巻く環境も変わってきましたからね。PCもモバイルも、あるいは、デバイスそのものも、9年前とはまったく違う形で人々の生活に浸透しているように思えますし。今までと同じビジネスモデルも、いつまで通用し続けるのか……。

――そもそも川田さんの「CCO」って、ちょっと聞き慣れない肩書ですが。

川田 ネットで調べると「Chief Content Officer」とか「Chief Customer Officer」とか「志々雄真実」とか出てきますが(笑)。「Chief Culture Officer(最高文化責任者)」という意味になります。

――どういうミッションを担当される形でしょうか。

川田 たとえば高山のCTOなら、今後の世の中の変化に応えられるような新しい技術を組織として常に持ち続ける、そのために必要なことを担当することになりますが、私のCCOというのは、社員の「スキル」というより「マインド」に対する最高責任者ということになります。

pixivには「クリエイターやアーティスト、ものづくりをしたい人たちの活動を、もっともっと楽しくする」という大きなビジョンがあります。技術力だけでなく、ものを作っている人たちをもっと喜ばせたいとか、そうしたモチベーションを高めるため、組織の風土を変えたり、仲間を集めたり。そうした文化を醸成していくのがCCOの役割です。

――お二人とも執行役員ということで、経営的な側面でも会社にコミットしていくお立場なのかなと思いますが。

高山 CTOの役割って会社によって全然違っていると思いますが、「技術で経営を支える」というところは共通しているはずです。そういう意味で、経営的な観点で会社で採用する技術のことを考えますし、逆に技術的観点から経営に対して提案もしていければと考えています。

川田 CCOの役割で考えるなら、企業ビジョンを深く浸透させたり、そのための環境を整えたり、ビジョンに則した活動をしている人をきちんと評価できるようにしたり、同じビジョンを持つ仲間を増やすための企業ブランディングを進めたり。全社のリソースを大きく投入しなければできないことですし、失敗したらダメージは大きい。しかし、そういうリスクの大きな判断を、会社を継続成長させて価値を高めるために進めて行くことと捉えてます。

高山 ピクシブの社員には「クリエイターの活動を楽しくするために仕事をしている」という人がたくさんいて、みんなの目指しているものが一致していることが強みです。だからといってエンジニア組織として当たり前にやるべきことがおろそかになってはいけないので、そのバランスを取りながら会社もサービスも良いものにしていきたいです。

川田 私も同意見です。「クリエイターの活動を楽しくしたい」という同じ想いを持っている高い専門性を持った人たちが集まっている。日本のどこを探したってそんな集まりはなかなかないと思っています。実際にpixivのサービスにもたくさんのクリエイターがいて、しかもそれは日本にとどまらず世界中から集まっている。

高山 そういえば僕が1985年3月生まれなので、同級生かも。

川田 1985年の2月生まれです! 一緒にもっともっと面白いこと、できると思っていますよ。

――本日はありがとうございました!