任意の Ruby オブジェクトを YAML として書く

実際使うことはないだろうがメモ。 hoge: !ruby/object:ActiveSupport::Duration value: 7776000 parts: - - :months - 3 結果 hoge を取り出すと、ActiveSupport::Duration としての 3 months が 格納されている。 $ irb -r active_support/time -r yaml -r erb irb(main):001:0> YAML.load(ERB.new(IO.read('hoge.yml')).result) => {"hoge"=>3 months} irb(main):002:0> YAML.load(ERB.new(IO.read('hoge.yml')).result)['hoge'] => 3 months irb(main):003:0> YAML.load(ERB.new(IO.read('hoge.yml')).result)['hoge'].class => ActiveSupport::Duration 求め方 irb(main):007:0> print YAML.dump(3.months) --- !ruby/object:ActiveSupport::Duration value: 7776000 parts: - - :months - 3 => nil 参考情報 library yaml (Ruby 2.3.0) Rubyist Magazine - プログラマーのための YAML 入門 (中級編)

2016-12-19 (Mon) · masutaka

Ruby の $ERROR_INFO などの特殊変数は require 'English' が必要だったのか

先日会社の tech channel で話題になったのでメモ。Rubiest の方々にとっ ては常識なんですかね…? $ ruby -v ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin15] $ ruby -e 'raise "aaa" rescue p $!' #<RuntimeError: aaa> $ ruby -e 'raise "aaa" rescue p $ERROR_INFO' nil $ ruby -r English -e 'raise "aaa" rescue p $ERROR_INFO' #<RuntimeError: aaa> Ruby はグローバル変数の初期値が nil なのがたちが悪い。個人的にはも う $ERROR_INFO とかは使わないと思う。 C: Prefer $ERROR_INFO from the stdlib ‘English’ module over $!. RuboCop 先生がこのようにお怒りだったので、出来るだけ長い変数名を使 うようにしていましたが、行間を読む必要があったみたいです。 => require ‘English’ も必要。...

2016-12-19 (Mon) · masutaka

不惑の年に風呂の良さを知った

この記事は feedforce Advent Calendar 2016 の 14 日目の記事です。 13 日目はハッシーの『フィードフォースでの映像制作について 』でした。 彼らがつい二週間前にリリース(?)したシンゴジラのパロディムービーは、 密かに今までで一番のお気に入りです。社内限定で今までのムービー見ら れないかなー。 さて、私も表題の年齢になり、季節の変わり目はひどい肩こりや頭痛に悩 まされる日が出てきました。普段は気になりませんが、この時だけはたま らず整体に行きます。あまりにひどいと寝込んでしまうことも。 とは言え、昔から体だけは丈夫で、体調が悪くなることはそうそうありま せん。寝込むのは年に一度くらい。あと二日酔い。二日酔いツライ。 ただ、体が冷えるとあっさり風邪を引くことが分かってきたので、会社で は毛布モドキを被り、家では着ぐるみモドキ を履き、だいぶ気を付けてい ます。 10 月のあの日もそうでした。急に気温が下がり、肩がこり、こりゃ風邪 引くかなーと思っていたところ、何の気なしに湯船にお湯を張り風呂に入 りました。1年前に引っ越してから初めての風呂です(汚くはない)。 そしたらびっくり。肩こりがすーっと消え、体もポカポカです。その日を 境に、週に何度か風呂に入る日が始まりました。 どのようにして風呂に入るか 詳しく説明させて頂きます。 何はなくともまずは掃除です。今の部屋に引っ越してから、CaSy に月一 で来てもらっている [2015-12-27-1] ので、基本的にはきれいです。でも 入る前の掃除はもちろんします。 掃除が終わったらお湯を溜めます。10 月だと 44 度、今だったら 45 度 くらいを 10 分ですね。私は昔から熱い風呂は好きではないのですが、風 呂の蓋は買ってないので設定温度は熱めです。 未だにお湯張りタイマーの使い方が分かりません。一度、90 リットルの つもりが、90 度のお湯を溜めてしまい、泣きながら水で薄め続けました。 お湯が溜まったら速やかに風呂に入ります。iPhone をドアの外に置き、 静かな音楽をかけます。給水用のお茶や水も置きます。間違ってもついで の洗濯は止めましょう。静かな音楽が台無しです。 軽くお湯で体を流し、湯船にゆっくりと浸かります。歯磨きをするのも良 いでしょう。 適度に暖まったら体を洗います。朝の忙しい時間ではないので、ゆっくり 出来るのが良いですね。洗い終わったらまた湯船に浸かります。この辺で 給水するのも良いでしょう。 次は頭を洗います。最近は意識高いので、3日に一度はこちらで皮脂をズ ビっと落としています。リンスやコンディショナー必須。 それ以外はこちらを使っています。逆に皮脂を落としすぎないシャンプー です。リンスやコンディショナー不要です。前々職の先輩に教えてもらい ました。 どちらも安くないですが、一日あたりに換算すると大したことないので、 ここ数年使っています。 顔を洗いつつ髭を剃ったら、最後の湯船です。風呂で髭を剃る人って、ど のくらいいるのですかね? 出る時に潔くお湯を捨てます。以前は洗濯に使っていましたが、水道代が...

2016-12-14 (Wed) · masutaka

bundle install で Your Gemfile.lock is corrupt. と怒られる件

個人のいくつかのリポジトリで bundle install できないことがあり、困っ ていました。 $ bundle install Fetching gem metadata from https://rubygems.org/............ Fetching version metadata from https://rubygems.org/. Resolving dependencies... Using rake 11.3.0 Using concurrent-ruby 1.0.2 Using i18n 0.7.0 Using thread_safe 0.3.5 Using net-ssh 3.2.0 Installing minitest 5.10.1 Your Gemfile.lock is corrupt. The following gem is missing from the DEPENDENCIES section: 'ffi' loading... 結論から言うと $ bundle install --without development で回避できま した(当該リポジトリでは development group は使っていなかった)。 今回は Gemfile に gem ‘ffi’ を追加して回避できました。bundler は最...

2016-12-10 (Sat) · masutaka

yaml_vault が AWS での Rails 環境変数つらい問題を解決したと思う

※ 弊社 feedforce で毎週行っている、インフラ共有会を元にした記事で す。AWS で Rails を使っている方を想定していますが、数人規模のチー ムを意識した内容になっています。 こちらの記事で yaml_vault を知ったので、実際に試してみました。 yaml_vault+KMSでRailsアプリのconfig/secrets.ymlを暗号化してgitにコミットして管理する - Qiita 環境変数つらい SaaS の API Key などの秘匿情報をコードに埋め込まないために、Rails で dotenv を使っている方も多いかと思います。 しかし、README.md にあるように 作者の @bkeepers さんは production での利用は奨励していません。 dotenv was originally created to load configuration variables into `ENV` in *development*. There are typically better ways to manage configuration in production environments - such as `/etc/environment` managed by [[Puppet|https://github.com/puppetlabs/puppet]] or [[Chef|https://github.com/chef/chef]], `heroku config`, etc. とは言え、/etc/environment を Chef の Encrypted Data Bag 等で構成...

2016-11-05 (Sat) · masutaka

ZenPad 3S 10 (Z500M) から始まる廃人生活

8月に発表を知り、日本での発売を心待ちにして2ヶ月。10/19(水)にようやく日本で予約が始まりました。 loading... 速攻で予約し、同じ週の 10/22(土)にゲット出来ました。 ZenPad 3S 10 (Z500M) シルバー タブレットは親に iPad を買った時に一瞬所持したことはありますが、自分用を持つのは今回が初めてです。いやあ、タブレットいいですね(完全に時代から取り残されている人)。 さて、こんな理由から最近タブレットへの物欲が高まっていました。 Kindle Paperwhite に不満を感じ始めていた ボリュームある技術書読むのが辛い Kindle がなかったらもっと読めていなかったけど マンガを読むのには全く適していない 描画が遅い 見開きページを見るためには手動で回転が必要 カラーページも見られないので Kindle for Mac で見てた とは言え、Kindle Paperwhite は小説読むのにはすごく良いと思う MacBook Air を布団に持ち込んで、Netflix とか見てた テレビで見る時は PS4 使ってる。これは結構良い 実家に帰った時などの暇つぶし iPhone だと小さすぎるし、MacBook Air だと大げさだと思っていた 本を読むのも Kindle では捗らず 狭い居酒屋だと、MacBook Air をバーン開いて飲むのが憚られる 最近は家飲みばかりになったけど 正直今まで ASUS はネットブックかつ安物というイメージが強く、眼中にありませんでした。Lenobo はセキュリティ的に危なくて論外です。 でも iPad 以外のタブレットを調べていくと、ASUS 良いのでは?と考えが変わっていきました。Z500M が発表されたタイミングも良かったです。 iPad を選ばなかったのは、こんな理由からです。 9.7inch の iPad Pro は今回の用途では高すぎる 買うことになるであろう 128GB は ¥78,624 対する Z500M は ¥42,984 前世代の Z300M は ¥26,050 なので、想定より ¥5,000 ほど...

2016-11-01 (Tue) · masutaka

今さらながら Knife-Zero を使ってみた

個人と仕事のサーバはどちらも Knife-Solo で構成管理しています。 Chef がバージョンアップしたら、私はなるべく knife solo prepare し ていますが、このコマンドは単純実行すると、サーバの台数に比例して時 間がかかります。 Knife-Zero でそれを解決できるのかなと思い、Getting Started してみ ました。 結論 代替にはならない。knife zero bootstrap も knife solo prepare と同 様、Chef をインストールするのは同じ。 Home(ja) · Knife-Zero まずKnife-ZeroはKnife-Solo の乗り換え先ではありません。 仰る通りでした。 勘違い loading... 勘違いみたいですね。誰もツッコんでくれなかった…。( ;∀;) Knife-Solo は chef-solo gem ではなく chef-zero gem と依存関係があ るから、ずっと使えると思っていたけど、大きな勘違いだった。 そもそも chef-solo gem は存在しない。chef gem に含まれる chef-solo コマンドが存在するだけ。 Knife-Solo は chef-solo コマンドを使って Cook する。chef-solo コマ ンドはいずれ引退するので、いずれかに乗り換えが必要。 で良いよね?(まだ不安) 今後の予定 個人サーバは素振りも兼ねて Knife-Zero に移行する 静的サイトなので Docker 化しても良いけど、このサーバは仕事の...

2016-10-30 (Sun) · masutaka

最近使っている、仕事のタスク管理

以前、一日のタスク管理にタスクシュート を試した。 loading... 結局、息が詰まる気がして止めてしまったけど、このタスクシュートを意 識した今のタスク管理はなかなか自分に合っている。 loading... タスクシュートの特長である「予定より遅れているから、これでは間に合 わないな」という感覚を緩く知ることが出来ている。 一日のタスク管理 前の日の日報で「翌営業日にやること」を書く ミーティング含めて、全てのタスクを順番に書き、午前と午後に分ける 午前に全て終わってなければ焦るので、タスクを減らすか、実装を軽めにする 予定より早く終わりそうなら、次のタスクかちょっとした改善タスクをやる # <i class="fa fa-fighter-jet" aria-hidden="true"></i> 翌営業日にやること ## 午前 1. 朝会 1. 日報の草稿を書く 1. xxxx 運用作業 1. GitHub PR のレビュー 1. yyyy を実装する ## 午後 1. zzzz を実装する 1. 日報を書く ※ 実際に使っている markdown をマスキングしたものです 週のタスク管理 毎週の開発ミーティングで、次のイテレーションにやるタスクを決めて、 日報の「今回のイテレーション」に書く イテレーション終わりに近づいても、チェックが付いていないタスクが 多いと焦るので、タスクを減らすか、実装を軽めにする 予定より早く終わりそうなら、バックログにある次のタスクか改善タス クをやる ### 今回のイテレーション(10/21 金 〜 10/27 木、3.5 営業日) - [ ] xxxx を Slack に通知する - [ ] yyyy を調査する - [ ] ElastiCache のメンテナンスウィンドウに立ち会う(10/22 土 AM 3:00) - [ ] zzzz を実装する 追記(2018-12-08):...

2016-10-26 (Wed) · masutaka

ElastiCache for Redis のスケールアップメモ

先週 AWS ElastiCache for Redis を cache.m3.medium から cache.m4.large にスケールアップしました。今後のためにメモを残して おきます。 背景 cache.m3.medium を Multi-AZ + Replica 1 台構成で運用していた。主な 用途は Rails4 の Session Store サーバとして。 BytesUsedForCache が cache.m3.medium のメモリ 2.78 GiB を超え、 Evictions が発生し始めたため、cache.m4.large にスケールアップした。 タイムライン メンテナンスウィンドウをセットした AM 3:00 になるとすぐに、当該ク ラスターの Status が modifying になった。 AM 3:07 に Rails から接続できなくなり、Primary の CPUUtilization が 60% 〜 90% で推移。Replica は普段通り。 AM 4:16 にようやく復帰。Multi-AZ 構成で冗長性が担保されているため、 データは消失しない。 感想 よくある質問 - Amazon ElastiCache|AWS Q: 大きいノードタイプにスケールアップするにはどうすればよいですか?...

2016-10-24 (Mon) · masutaka

Slack API で mention 付き User Group を作る方法

Slack には任意のグループを作ることが出来る、User Groups という機能がある。 User Groups – Slack Help Center チャットで使う時は @happy-peeps などで普通に mention を飛ばせるが、API を経由する時は特殊な書き方が必要になる。 Basic message formatting > Variables|Slack 端的に書くと <!subteam^ID|handle> という書式が必要。 例えば S012345 という ID の @happy-peeps User Group の場合は <!subteam^S012345|happy-peeps> で良い。 ID が曲者で以下の手順で取得できる。 https://api.slack.com/docs/oauth-test-tokens からテスト用のトークンを取得 https://api.slack.com/methods/usergroups.list/test から当該 API のテストリクエストを行う。各グループの id フィールドがそれ ※ Mackerel の Slack 通知がうまくいかなくて、右上から質問して分かりました。thx! @a_know 追記(2017-02-07): 同様にリンク付き channel(例: #general)を作る方法もだいたい同じでした。 Basic message formatting > Linking to channels and users|Slack 例えば #general の Channel ID が C024BE7LR の場合は <#C024BE7LR|general> になります。...

2016-10-19 (Wed) · masutaka