トレタ開発者ブログ

飲食店向け予約/顧客台帳サービス「トレタ」、モバイルオーダー「トレタO/X」などを運営するトレタの開発メンバーによるブログです。

「トレタ Advent Calendar 2017」やります

こんにちは。サーバーサイドエンジニアの芹沢です。
去年に引き続き、今年もトレタ Advent Calenderを開催します。

qiita.com

トレタのエンジニア・デザイナーがそれぞれの知見を語る様子をぜひごらんください。

ちなみに去年2016年の開催告知はこちらです。(数学検定2級には公約通り今年リベンジして合格しました)

tech.toreta.in

お約束ですが、トレタはエンジニア・デザイナーを広く募集しておりますのでこちらも何卒よろしくお願いします。

www.wantedly.com

www.wantedly.com

www.wantedly.com

www.wantedly.com

www.wantedly.com

www.wantedly.com

www.wantedly.com

Rails Developers Meetup #7を開催しました #railsdm

f:id:m_nakamura145:20171127143220j:plain

サーバサイドエンジニアの中村です。 11月16日(木) に弊社のカフェスペースにてRails Developers Meetup#7 を開催しました。

イベントの詳細はteckplayのページからご覧ください。 techplay.jp

Rails Developers Meetupは今回の第7回で定期開催が最後ということで、最終回に弊社のオフィスを会場に選んで頂いてありがたく思っています。今後は規模を大きくしたMeetupを行うとのことなので非常に楽しみですね。

本記事では当日の発表内容を簡単にレポートします。

RailsでECサービスをゼロから作ってみて

発表者: 株式会社spice life 赤松さん(@ukstudio)

赤松さんは、オリジナルTシャツ販売サービス「STEERS」でプロダクトマネージャー兼アプリケーションエンジニアを担当されており、新規サービス開発でプロダクトマネジメントを行いつつうまく開発を行うためにやったことについてお話していただきました。

スタートアップでのRails開発/運用でやってよかったこと

発表者: 株式会社トレタ 沢田(@swdyh)

スタートアップでのRails開発/運用でやってよかったこと

弊社の沢田からは、スタートアップでの開発におけるログの集め方や定期処理のやり方についてお話しました。トレタはリリースから約4年間運用されており、その経験から迅速に機能開発を行いながら、運用面で問題になる部分をどうやって整備していくかをまとめてもらいました。

グローバルサービスを作る時に考えておくこと

発表者: 株式会社トレタ 中村(@m_nakamura145)

私からはグローバルサービスを作る時に考えておくこととして、タイムゾーンの話やトレタにおけるグローバルサービスとして大事な要素である祝日とSMS機能についてお話しました。

クックパッドでの Webアプリケーション開発 2017

クックパッド株式会社 鈴木さん(@eagletmt)

鈴木さんからは、マイクロサービス化を進めてきたクックパッドさんの現在のWebアプリケーション開発についてお話していただきました。

コンテナは友だち! in Rails Developers Meetup

発表者: GMOペパボ株式会社 近藤さん(@udzura)

近藤さんからはGMOペパボさんの新卒研修でも用いられた、プロセスをはじめとしたシステムプログラミングについてお話していただきました。

ちなみに近藤さんは福岡からこんな感じでリモート登壇されてました。

f:id:m_nakamura145:20171127143254j:plain

おわりに

Rails Developers Meetupは私も何度か参加させていただいてるのですが、毎回実践的なRails開発の知見が共有されており、素晴らしいMeetupだなと思っていました。そのような場で自分も発表出来て非常に良い経験になりました。

次回開催のRails Developers Meetup 2017 では弊社CTOの増井も登壇予定です。参加予定の方はぜひ懇親会で増井にトレタというプロダクトについて色々聞いてみてください!

techplay.jp

RubyKaigi2017参加報告

サーバーサイドエンジニアの中野です。

大分期間が空いてしまいましたが、9/18〜9/20に広島で開催されたRubyKaigi2017のレポートです。3日目のBundler2のセッションの紹介をしたいと思います。

1系は1.16.xxが最後になる予定

1.16は現在開発中でまだstableではないですが、1系では1.16.xxが最後にバージョンになります。
もし1.15を使用している場合にbundle installコマンドを実行すると↓のようなワーニングが出力されます。

$ bundle install
The latest bundler is 1.16.0.pre.3, but you are currently running 1.15.4.
To update, run `gem install bundler --pre`

このワーニングの必要性に関しては個人的にも気になっていたのですが、開発中のバージョンを使ってもらうことでバグを洗い出したり仕様の問題などを見つけたいなどの理由があるようですが、意図せずバージョンを上げてしまう危険性もはらんでいる等の意見もあったりでこの問題を扱ったissueで活発に議論されました。
ちなみに、bundle config disable_version_check trueをすればでこのワーニングは表示されなくなります。

Bundler2について

興味深かったものをいくつか紹介していきます。
Bundler2のRFCの草稿はこちらで見ることができます。

コマンドを指定しないでbundleを実行するとhelpが出力される

1系では、コマンドを指定しないでbundleを実行するとbundle installが実行されていたのですが、2系からはhelpが出力されるように変更されます。個人的には便利で多用してたので少し残念な変更です。issueはこちら

Gemfile、Gemfile.lockがそれぞれgems.rb、gems.lockに変更される

この変更は話題にもなったためご存知の方も多いと思います。
2系でもGemfileとGemfile.lockはそのまま使用できますが、bundlerのバージョンが2系でrails newをした場合にはgems.rbとgems.lockが作成されるようになります。
名前変更の経緯を知りたかったのでissueをあさってみたところ、2010年にUNIXのLOCK拡張子があるのに異なる用途で同じ拡張子を使用するのはどうなの?というissueが立てられており、結果としてファイル名を変更することになったようです。

Gemfile内のgemをすべてアップデートする bundle update--all オプションの指定が必須になる

2系からGemfileのgemをすべてアップデートするために--allが必須になります。
理由としては、Gemfileに新たなgemを追加した時に bundle install すべきところにbundle updateしてしまう例が多かったためらしいです。自分もrailsを触り始めたばかりの頃にbundle updateしてしまって関係のないgemまですべてアップデートしてしまうことがあったので有り難い仕様変更だと思います。issueはこちら

githubやbitbucketなどに置いてあるgemをインストールするためのショートカットが使用できなくなる

gemにパッチをあてて使用してる場合にGemfileでそのgemを置いてあるサービス名をキーにしてuser/repoを指定するとインストールできてたのですが、これができなくなります。ただrailsの場合、5.0.1移行でrails newした際に作成されるGemfileには

git_source(:github) do |repo_name|
  repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
  "https://github.com/#{repo_name}.git"
end

が追加されておりgithubだけはショートカットが使えるようになってます。他のサービスも↑のように書くことでショートカットが使用できるようになります。

Bundle Plugin

Bundlerにはpluginという機能があり目的に応じた機能を追加することが可能となっています。
pluginの機能が用意されたのは、bundlerが大きくなるに連れ機能の要望が増え、開発、そしてメンテナンスしていくことが困難になってきたので、pluginという形で機能追加をする場を用意することで開発者各々が独自機能をbundlerのリリースを待たずに追加できるようにしたかったという経緯があります。バージョン1.13から用意されているのですが、まだドキュメント無くほとんど知られてないためドキュメント含め一緒にpluginを開発してくれる人大歓迎!とのことでした。

pluginの作り方

作り方はgemのそれとほとんど同じで、違いは一番上の階層にplugins.rbというファイルを用意しpluginのコードを書きます。
例としてbundle hogeと入力するとHogeと出力されるpluginの作り方を簡単に紹介します。hogeというgemを作成し↓のようなplugins.rbを用意します。

module Hoge
  class Plugin < Bundler::Plugin::API
    command "hoge"

    def exec(command, args)
      puts "Hoge"
    end
  end
end

これを通常と同じくrubygems.orgにアップすると、bundle plugin install hogeのようにして作成したpluginをインストールすることができるようになります。インストールが完了するとpluginが使用できるようになります。

$ bundle hoge
Hoge

おわりに

簡単ではありますがBundler2についての紹介をさせていただきました。
11月に開催されるRubyConfでは、Bundlerを初期から長くメンテをしているAndré Arkoがbundlerの歴史についてのセッションを行うので個人的にとても楽しみです。

なお、弊社では国内外のカンファレンス参加費用の補助制度があり、今回のRubyKaigiは会社の経費で参加させて頂きとても感謝しています。来年の仙台で開催されるRubyKaigiに参加したい方は是非ご応募下さい。

www.wantedly.com

© Toreta, Inc.

Powered by Hatena Blog