RailsのEnumのi18n対応gemを作成しました

RailsEnumi18n対応gemを作成しました

Rails4.1に入ったEnumですがRails5.1になってもi18nに対応していなかったので gemのEnumelizeを使うこともあったと思いますが、 できればRails標準のEnumを使いたかったので、gemを作りました。

enum-i18n | RubyGems.org | your community gem host

f:id:mad-berry:20171008180612p:plain

動くサンプルもこちらに作っています。

github.com

特徴

  • ApplicationRecordにincludeする事により、enum設定してあるカラム全てに自動でi18nの翻訳を対応できるようにしています。
  • i18nのスコープが独自の階層で定義していてもscopを引数に渡すことで既存のi18n定義も呼び出せるようにしています。

その他

Contributingも募集していますのでお気軽にどうぞ

リモートワーク環境とツール

この記事は Wondershake Advent Calendar 2016 の6日目の記事です。

リモートワークについて3日目の記事です。 徐々にネタがかぶっていきそうなので先に書いたもん勝ちですね。

2日目は佐々木さんでした。サムネイルが最高ですね。

engineering.wondershake.com

今日話すこと

私はWondershakeの社歴が短いので、リモートを始めたきっかけから 仕事環境とツールについて話そうと思います。

はじめに

自己紹介

@amyroi

サーバーサイドエンジニア

フリーランスを5年経験後女性向けのサービスLocariの開発に参加するために最近Wondershakeに入社しました。

リモートワークのきっかけ

フリーランスを始めたのが2011年でした。

この2011年をきっかけに自宅作業の環境整備をしいられる企業が多くありました。

この年に完全リモートでシステム開発を請け負うエージェントの社長に出会い本格的にリモートワークを開始することになりました。

リモート環境整備

5年の間に自宅でのリモート環境の整備を二転三転させながら、今はとても快適な環境となってきたので紹介します。

デスク

最初はローテーブルに正座椅子、TVをディスプレイ代わりに開発をしていましたが、すぐに長時間での作業は難しくなり、 リビングに合うダイニングテーブルを購入しました。 テーブルの脚をセミオーダーでカットし、キーボードを打つ時に肩が上がらない高さにしました。

椅子

お店の人の勧めで最初にバロンチェアを購入しました。 エンジニアが好きそうなその椅子は購入時の満足感はあったものの、どちらかというと男性向けで 生地の反発力が強く、すぐに疲れるようになってしまい売却。

www.offinet.com

もう一つ悩んでいたCassicoチェアを購入しなおしました。 これは女性専用の椅子でCSの人達やOLさんの多いオフィスで使われているそうです。 www.itoki.jp

ツール

タイムログ

リモートで困るのが稼働時間が見えないこと。 特に稼働時間の提出が必要ない場合があると、自分もどれくらい稼働しているのか見えないのが不安になる時があります。 よく使っていたのがtogglです。

Toggl - Free Time Tracking Software

タスク管理

複数の案件が走ることも多かったので、各プロジェクトでのツールと別に 自分用のタスク管理ツールとしてHiTaskを使っていました。 各プロジェクトと事業用のタスクをまとめて管理していました。 hitask.com

最近Asanaを見つけたので今使うならこっちがオススメ。 asana.com

ビデオ会議

始業時間が決まっている会社の場合は毎日朝会と夕会をビデオ会議でしていました。 これがあるとリモートでも気持ちが引き締まるので結構好きでした。

hangouts.google.com

その他

意識

夜型の多い業界ですが、ここ数年は残業禁止の契約が多かったため、1日の働く時間を決めてその時間に100%集中して仕事を終えるということをしてきました。 そうすると、周りが勝手にそのリズムに合わせてくれるようになりました。帰ってしまう前に決める事はこの時間内に決めてしまおう。 早く帰る人がいるから俺たちももう帰ろう。リリース前や緊急時は別ですが、健全なサイクルが回り始めたりしました。

監視ツール

監視…されてますかね?#姐さんの為に働いてます

さいごに

明日はshirokuraさんのリモートワーク4日目の記事です。皆さんのリモート環境気になりますね!

Ruby on Rails Tech Meetupに行ってきた

Ruby on Rails Tech Meetup

Ruby on Rails Tech Meetupに行ってきました。 久しぶりのRails系の勉強会かも。 ただのメモですがそのうち綺麗にするかも。

「Upgrade Forkwell to Rails5 the faster」

@sinsoku_listy さん

qiita.com

7月のRails5リリース後すぐにプロダクトのRails5へアップデートしたのをよく覚えている。

対応内容として gem update rails5対応のgemへupdaate 定期的にgem updateしてPR送る自社システムを常に使っていた。 Rails Guide読んで対応 落ちたテストの対応 PR作った時点で、Rails4.2でもmergeできるものが有ることに気付き、は先にmergeをした。 APIモードActonCable未使用だったのも比較的悩むこともなかった要因かも。 Railsブランチの監視を常にしていた。 最速リリースをあえて目指してみた。 性能テストはちゃんとはしてないけど、バッチとか遅くなかった。あまり意識していなかった部分。

「まだRailsで消耗してるの?」

@h3_potetoさん
CWのエンジニア CWのRailsつらい.. 何も移譲してないのにポリモーフィック? elixirの話し いろいろRubyっぽいよ bundler + rake -> mix Gemfile -> mix.exs, deps.get, mix phoenix.server rails g model -> mix phoenix.gen.model ORM -> Ecto route -> router.ex erb -> eex 嬉しいこと:sprocketsがいない 非同期処理: そもそも軽量プロセス

「 The State of Sprockets 」

@_yasaichi さん

speakerdeck.com

Pixta Inc. compile assets Rackアプリで実装 sprocketsによりasset pipeline sprockets4.0.0.beta4 source maps devmodeで挙動が変わる application.jsとsource mapsだけ 本番と同じように圧縮して開発可能 ES6 support

Browserify/Webpackでビルドしてsporocketsから離れる

「巨人でない我々のためのバッチ基盤」

@joker1007 さん repro バッチで主にすること aggregate ogs settlement data deletion backup

依存性があって順番を考える必要がある 並行で実行できること retry any jobs 有効非巡回グラフ DAG (Dyrect Analytics Graph) library tsort トポロジカルソート Rukawa gem ワークフローエンジン 分散実行

github.com

依存関係をみながら、 全並行数をセットしながら動かせる creating DAG simple ruby class interface concurrent-rubyを使っている dig dagがリリースされる前に作っていた

感想

一番興味があったのがsporocketsの事とrukawaちょっと使ってみたい

Fashion Tech Night #01 Produced by Fashion People + 参加してきた

Fashion Tech Night #01 Produced by Fashion People +に参加してきた

eventdots.jp

参加動機

システム開発を日々生業にして追っていると自分の興味のあることよりも今までのキャリアの延長線上での仕事をすることが多くなってきて、 ふとアンテナを張っていた時にこのイベントを見つけて興味本位で参加

Fashion Tech業界の動向について

スタイラー小関氏。
グレーのTシャツにダークグレーのハーフパンツ!
amazonで解決できないことをやるためにスタイラー設立
FashionTech Summit
業界横断のイベントがなかなかない
日本は業種ごとに人材の流動性がなく、また業種ごとのハブが存在しない。
その為テクノロジーの活用が遅れている。

アジアのファッション業界について。
中国のVC投資はBATが投資合戦をしている。
ファッション市場は圧倒的にオフライン中心
アジアは会話型コマース(LINE)などで商取引が始まった

中国
PAZZO
https://www.facebook.com/PAZZO.tw Facebook上で顧客の質問をコメントで受けて店舗に流入。
またはAlipay等で決算後、messengerで住所送って発送してもらう。
デビッドカードでの決済が主で爆発的に普及

ファッション×テクノロジーで挑戦するサービス

スタイラー

styler.link 投稿するユーザーは1%程度
メディア要素が強い
15%ユーザーがリアル店舗に行き75%が購入している
社員10人

ターミナル

瀬戸氏

terminal-order.com 日本唯一ファッションブランド向けB2Bマーケットプレイス
ブランド側に利用料バイヤーは無料
外市場でJOOR 世界7拠点で事業展開 1500ブランド
ブランド:Theory, CLANE, AURALEE等
バイヤー:takashimaya, beams, ships
アナログ受発注業務の効率化
ブランド展示会は紙資料での運営が行われている
オンラインPR支援
社員10人(開発3名)

エアークローゼット

天沼氏
www.air-closet.com 9万人ユーザー
300ブランド
自社内製でシステム開発

情報・モノ*限られた時間 = 最適な出会い
表参道にリアル店舗10月オープン予定
会場には利用者はいなかった(残念)
社員は34名くらい(1/3がエンジニア)

シタテル

河野氏
sitateru.com AWSの洋服生産版
衣服の生産をオンラインで
社員14名
熊本と東京

Fashion Techの内情、ぶっちゃけトーク!

アパレルの人はITに抵抗ある?

知識がなかった部分と上の人間も理解が出てきたところ
ITが必要なのか?の発言など
Web業界からするとアパレル業界はまだIT進んでいないと思われているが他業者よりは危機意識があるほう。
生産部分について特に危機意識があるのでタブレット導入してみたり(使わないけど)

立ち上げから特に苦労したこと

資金調達(シタテル)
営業(airCloset) FBでファッション関連の友達が0だった
HR(スタイラー) 人材獲得

転職検討中社より社内にファッションブレインは居るのか

業界人いる(シタテル)
顧問にも業界の人がいる(aircloset)
エンジニア・法務意外はファッション出身社(terminal)
立ち上げ時はいなかったが重視して採用した。ただバランスが大事(スタイラー)

イベントと終えての感想

200人超えの大きなイベントでアパレル業界の人が多いかと思いきや、参加者中ファッション業界が一番少なく、IT関連の方が圧倒的に多かった。
しかし男性も女性もお洒落に際立っている方々が多く、香水の香りが充満してとても居心地のいい空間でした。
私の隣の席はなぜかおっさんロマンスグレーでした。 airClosetは会場に有料会員は皆無で残念そうだったのが印象的。
私は会員登録済みだが有料会員まではしておらず。
改めてライト会員月額6800円はお試しでも少しポチりにくい金額と感じたがディープユーザーにはレギュラープランでも十分お安いのかもしれない。
また、事前調査不足だったのだけど全社共システムにRubyOnRailsを使ったスタートアップベンチャーで ファッション業界でRailsを使っている会社があるとは驚きでした。
『情報・モノ*限られた時間 = 最適な出会い』という言葉がとても響いた1日でした。
またサンドイッチ美味しかった。

ransacker

Userにないカラムのsearchをransackerでカスタマイズ
Settings.target_user_idsに該当するmedical_idを持っているuserだけを対象にする(scope利用)
 
models
scope :ms_users, ->(v=true){
  if v && Settings.target_user_ids.present? 
    where("medical_id IN (?)", Settings.target_user_ids.split(/\s*,\s*/).map(&:to_i)) 
  end 
} 

ransacker :ms_users, 
  :formatter => proc {|v| 
    ms_users(v=='true').map{|m|m.medical_id}.uniq 
  }, :splat_param => true do |parent|
    parent.table[:medical_id] 
  end

 
#use
User.search(ms_users_in: true)
User.search(ms_users_in: false) 

grouping
 
q = MedicalUser.search
params = {m: 'or', logs_created_at_gt: '2013-01-01 00:00:00' ,logs_created_at_lt: '2013-03-01 23:59:59' }
q.build_grouping params
q.result.to_sql