紙一重の積み重ね

35歳のエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【エンジニア勉強会】「サービスを Ruby / Rails で成長させるためにやったこと」に参加してきました

f:id:yokoyantech:20180120153051p:plain

はじめに

先週、みんなのウエディングさんと、メドピアさん主催で行われたエンジニア勉強会に参加してきました。

感想

  • MobaSifという存在を初めて知った
    • モバゲータウンのFrameworkだったんですね
  • 新卒社員の方がLTしてて偉い
  • 自社のサービスの開発手法は、他社と比べても悪くないことが分かった
    • テストコードは絶対書くべき
    • CIの仕組みも必要
  • どの会社も技術的負債があり、黒歴史がある
    • 黒歴史が一番共感が得られた。
  • 改善するためには、継続的な勉強が必要
  • いつか自分も自社でエンジニア向けのイベントを企画したい

とても楽しいイベントで、参加してよかったです。 主催者の方々ありがとうございました!

勉強会概要

みんなのウエディングさんの第一印象

  • オフィスがものすごくきれい!
    • 窓から東京タワーと六本木ヒルズが見える
  • MacBook率100%(に見えた)

勉強会のテーマ

  • 最初からRails使ってましたか?
  • 新しい技術に触れる
  • 学び合い、サービスに生かす
  • 新卒エンジニアの加入
  • サービスをもっと「よくする」

ライトニングトークメモ

以下、LT中にとったメモです。 走り書きのため乱文ご容赦ください。

サービス説明:みんなのウエディング

  • 結婚式場選びを口コミ・費用明細から選べるサービス

Vision

  • みんなの「大切な日」を増やす

サービス

  • 一生に一度だけ使うウェブサービス
  • 婚活カレンダー
  • Brides UP!
  • Partynote(1.5次会口コミサイト)

ツール

  • MacBookPro15インチ支給!
  • そのほかは写真参照

組織・人

  • ウェブエンジニア、インフラエンジニアがいる
  • エンジニア勉強会を年3~4回やってる
  • 社外コミュニティ活動
    • ginza.rb主催
    • RubyKaigiスポンサー
    • Rails ガールズ

サービス説明:メドピア

ミッション

  • 医師を支援すること。そして患者を救うこと

Vision

  • 集合知により医療を再発明する

特徴

  • 社長が現役の医師
  • 日本の医師の3人に1人が会員
  • ダイナミックな事業展開
    • ヘルスケア×医療

現状

  • PHPからRubyへ移行中
    • 35%くらい
  • Railsやりたい人大募集!

新卒がみんなのウェディングでMobaSifをRailsに移行してみた-テーブル設計編-

発表者

  • 黒沢さん
    • 新卒1年目
    • Railsトレーニング中

背景

  • 基礎研修
    • Railsチュートリアル
    • DB設計
    • オブジェクト指向
  • OJT
    • みんなのウエディングのRails移行
    • リニューアルではなく、移行
    • 「みんなのウェディングの相談広場」が移行対象

やったこと

  • 意味不明なDBカラムがたくさんあった(useful_good_numや、useful_num、good_total_numなど)
  • 地道に調査
    • 既存のテーブルはあきらめた
    • テーブルの再設計をする方針
      • 影響範囲は小さいので許可された
      • 影響が出る範囲はMobaSiFで修正
  • RailsのRailに載る
    • テーブル名、カラム名に略語は使わない
    • テーブル名は複数形する
    • 主キーはidにする
    • created_atとupdated_atを追加する
  • カラムのダイエット+正規化
    • 使ってないカラムは消す。
    • マルチカラムアトリビュートアンチパターンを解消
      • SQLアンチパターンの1つ
  • テーブル設計のレビュー
    • 36カラムから11カラムになった
  • データ移行
    • Githubでデータ移行を行ったIssueを探す
      • 無かった
    • データ移行のスクリプトを作成
      • Railsでやるか?SQLでやるか?
      • データ移行は1回のみの予定
    • Ruby+SQLでデータ移行
      • select,insertはSQL
      • 値の変更、マルチカラムアトリビュートパターンはRubyで処理
  • ステージングで検証
    • AWS
  • 新たなテーブルで開発できるようになった
  • まとめ
    • 常に調べる→やってみるの繰り返し
    • 聞いても仕様が分からないという現実
    • DB設計がアプリ設計の土台なので念入りに!
    • ActiveRecordを使ったバッチ処理の実装も検討

Webpacker導入時におさえておきたい設定

発表者

  • メドピア 村上さん
    • 自己紹介がJSONwwww
    • 毎週Vue.jsもくもく会やってます!

Webpackerとは

  • Railsでwebpackが使える
    • JSやCSSの依存関係を解消してくれる

やっておきたい設定

  • CommonsChunkPlugin
    • Vender-bundle.js経由でライブラリを読み込む
    • 各ライブラリのサイズが軽くなる(300K→1.4Kくらい)
  • 古いブラウザ対応
    • babel-polyfill
      • 新しいブラウザで使えて、古いブラウザでは使えない機能を使えるように変換してくれる
      • 一部、グローバル汚染する
      • 毎回import必要
    • transform-runtime
      • babel-polyfillと同じ機能
      • グローバル汚染しない
      • 毎回importは不要
      • インスタンスメソッドが変換できない
    • 古いブラウザサポートするなら、どちらかは入れよう
  • rails-ujs
    • Ajax通信のget以外をよしなにやってくれる(リクエストヘッダにCSRFトークン仕込むとか)
    • webpackerから使う手順
      • Assetspipelineから削除
      • パッケージ入れる
      • webpackerでrails-ujs起動
      • ajaxのリクエストヘッダにCSRFトークンを埋め込む

メドピアの輪読会

メドピアの現状

  • RailsとPHPの独自Frameworkが共存してる
    • Nginxで処理を振り分けている
    • 技術ブログ参照
  • Railsへの移行スタートは1.5年
    • Rubyエンジニアが10人中2人
    • 移行のためにRubyを学んだり、未経験者が入ったり
    • 成長のための取り組み
      • 福岡Ruby会議でも話しました
  • 成長のための主な取り組み
    • コードレビュー
    • 開発合宿
    • KPT内で気になるレビューの振り返り
    • 読書会(輪読会)

どうやっているか

  • 輪読会とは
    • 同じ本を読んで、意見を交わす
  • メドピアでは?
    • 1人1項目、音読する
    • 読んだところの質問や議論
    • 当番制で発表者が先に内容まとめる

良かった本の事例

  • RailsGuide(WEBサイト)
    • Railsを体系的に紹介
    • 未経験者もとっつきやすい
    • 出た議論
      • Action Controllerの概要
        • only、exceptどっちを使うか?
        • 安全側に倒す
  • Everyday Rails
    • テストでRSpec書いてたが、粒度が違ったり、正しい書き方なのか疑問だった
    • チーム内で意識合わせできた
    • ふわっとしてたところも話し合えた
  • オブジェクト指向設計実践ガイド

読書会を続けられる環境

  • 時間
    • 業務時間内。水曜10:30~11:30
  • 本代
    • 会社経費。1人1冊。電子でも実物でもOK。
  • 会社の理解があってこそ
    • 本読むのが業務なの?と、エンジニア以外が疑問を感じるかも
  • 議事録
    • あったほうがいい
    • 欠席者が次に参加しやすいように
    • 忘れないように
    • 未来のメンバーに向けて
    • ブログネタにもなる
  • 参加メンバー
    • お題に対して経験者が多いほうがいい
    • メドピアは技術顧問が参加
  • いい本
    • 予習なくても理解できる本
    • サンプルコードがメインではない本
      • 短くて理解しやすければOK
    • 毎回内容が完結するもの
    • その時必要なもの
      • 理解しないとまずい->理解したい!!

課題

  • 人が増えると怪しい(今は10人)
    • 自分が読む順番が減る

仮)Rails 移行のレキシ

発表者

  • 松久さん
    • 名刺の裏は大切な日の写真になっている
  • 話すこと
    • 2016年12月以降からのRails移行の歴史
  • MobaSiFからRailsへ移行
    • 2008年サービス開始
    • 2015年移行開始

Rails選択理由

  • MobaSiFに詳しい人を見つけるのが大変
    • Perl
    • DeNAで作られたフィーチャーフォン向けのFramework
    • 2013年ごろにはDeNAでも使ってないらしい
  • Railsに詳しい人が来た

Railsに移行することで

  • 1日のデプロイが5回程度だったのが、7~12 回になった
  • 言語やライブラリのアップデートができる

課題

  • Rubyっぽい書き方が分からない
    • MobaSiFはオブジェクト指向での実装があまりされていない
    • Rubyっぽい、Railsっぽい、というのが手探り
      • 未経験者が多い
        • Effective Ruby、パーフェクトRuby読む
        • 最近なら、「プロを目指す人のためのRuby」入門がいい
        • Rubocopを導入して指摘をもらう
  • テストは書ける環境はあるが、カバレッジが低い
    • テストを書かないと辛いことができた
    • 全画面を手動でテスト
    • ブラウザで全画面をテストするのは当たり前だと思っていた
      • Codecovを導入して、カバレッジを常に計測した
      • 今は92%くらい
  • テーブル設計に悩む
    • SQLアンチパターンのサンプルのようなテーブル設計だった
    • テーブルは無法地帯
      • 知識をつける、レビューする
      • テーブル設計はithubでレビューすることにした
      • 新卒研修でテーブル設計研修をした
  • オブジェクト指向で設計と実装ができない
    • Fatなcontroller、Modelがある
      • 知識をつける、レビューをもらう
      • 正しい知識をつける
        • 公式ドキュメント、書籍、第一人者のブログ等

まとめ

  • Rails移行で生まれた課題だったのか?
    • 違う。
    • 技術的負債
  • 現状の技術的負債の中身を確認しないと、負債は減らせない