くりにっき

フルスタックキュアエンジニアです

プリッカソン#5に参加した #prickathon

プリパラを見ていた時期に面白そうなハッカソンがあったので参加しました。*1

prickathon.connpass.com

第一印象

成果物

プリティーオールフレンズ誕生日カレンダー

f:id:sue445:20180924131200p:plain

github.com

下記のプリティーシリーズ版です。

sue445.hatenablog.com

発表資料

esa-pages.io

雑にスライド作るのにesa便利。*2

*1:現時点ではプリティーリズム、キンプリ、プリパラ全て視聴済

*2:Qiitaでもいいんだけど技術以外のことは書きづらい

fog-aws v3.3.0が出た

しばらくv3.0.0で止まっていたのですが、ここ数日で立て続けにv3.1.0, v3.2.0, v3.3.0と出たのでメモ

前提

fog-core v2.1.1のリリースにより Fog::Compute::AWS って書いてると「Fog::AWS::Compute を使え」ってdeprecation warningが出るようになった。

https://github.com/fog/fog-core/blob/master/changelog.md#211-09042018

fog-coreでdeprecation warningを出すようになったのでfogファミリー全部に対応が必要になった。

自分のアプリでも出るようになったんですが、rake叩く度にむっちゃwarning出るようになってノイズになってつらかったので直した。

v3.1.0

https://github.com/fog/fog-aws/compare/v3.0.0...v3.1.0

今年の4月以降リリースされずに溜まってたPRが一気にリリースされた感じ。

deprecation warning対応以外で自分のアプリで影響範囲調べるのならこのdiff見るのがよさそう

v3.2.0

https://github.com/fog/fog-aws/compare/v3.1.0...v3.2.0

私ですo^

コミットログ見ると本当にきれいなsed芸ですね(熱い自画自賛

github.com

github.com

github.com

ちなみにこの辺のPRはOSSパッチ会での成果でした。(PR出せたのは3連休だけど)

blog.agile.esm.co.jp

本当はこのバージョンでdeprecation warningが解決されてるはずだったんだけど、僕のPRより前に出てた https://github.com/fog/fog-aws/pull/467 がマージされ忘れてたのでdeprecation warning対応は不完全。

v3.3.0

https://github.com/fog/fog-aws/compare/v3.2.0...v3.3.0

https://github.com/fog/fog-aws/issues/466#issuecomment-422165748https://github.com/fog/fog-aws/pull/467 のマージし忘れを指摘されてv3.3.0ががリリースされた。

ここでようやくdeprecation warning完全対応。

#技術書典 5で「Packer with mitamae」という本を出します

技術書典5 まで残り1ヶ月切りましたが一通り執筆終わったので告知です

スペース

か75

techbookfest.org

f:id:sue445:20180911081340p:plain:w300

本の内容について

これはPackerのビルドを行う時にmItamaeでレシピを適用し、Serverspecでテストを実行するための本です。

本書のゴールはmitamaeでプロビジョニングしたサーバに対してServerspecでテストを行い、PackerでAMIを作成することです。 AMI作成だけでなくVagrantやCircleCIの設定を整えることでmItamaeを利用した実践的なレシピ開発も視野に入れています。

おそらく日本初のmitamae本じゃないかと思ってます。(要出典)

サンプル

表紙と目次です

f:id:sue445:20180908231114p:plain

f:id:sue445:20180908231123p:plain

f:id:sue445:20180908231129p:plain

目次だけですが何について書いているかはだいたい分かるかと思います。

2018/9/16追記:「はじめに」の章を公開

f:id:sue445:20180916192826p:plain

キーワード

画像だとググラビリティがないので使っている技術に関してざっとキーワードを挙げておきます

  • Itamae
  • mitamae
  • Vagrant
  • Packer
  • Serverspec
  • AWS
  • CircleCI
  • mitamaeとServerspecを用いたインフラTDD

FAQ

Q: 進捗どうですか?

A: 進捗最高です!(もう一通り執筆は終わって、今は知り合いにレビュー依頼している)

Q: 頒布形式は?

A: 当日の頒布物はPDFをDLするためのシリアルコードのみです。

見本用に1〜2部印刷するかもしれないですが、基本は電子版のみです。

Q: 技術書典に行かないと買えないの?

A: 後日 BOOTH で電子版の販売を予定しています。

その他

当日は プリ☆チャン のフォロチケ交換も受け付けていますぷり。

ChromeでTwitterを開くと重すぎてまともに見れない事象

表題の件についてググっても同じ事象が出てこなかったのでメモ

tl;dr;

Chrome拡張のNorton Safe Webが悪さしてた

事象

  • Chromehttps://twitter.com/ を開いたらくっそ重くてまともに閲覧できない。
    • どれだけ重いのかというとスクロールはできるんだけどクリックがなんも反応しない
    • デベロッパーツールで見ても重すぎて通信されない
  • WindowsMacの両方で再現
  • 重かったサイトは自分が見た範囲ではTwitterのみ
  • 他ブラウザでTwitterを開くのは問題なし

Chromeのタスクマネージャで見るとTwitterのタブが常時CPU 100%に張り付いてる('A`)

f:id:sue445:20180905000715p:plain

調査方法

Chromeの拡張のどれかが悪さしてるだろうとあたりをつけて、試しに拡張を全部無効にしてTwitterを開くと激軽。

それから1つずつ拡張を有効にしていったらNorton Safe Webにぶつかった。

f:id:sue445:20180905001502p:plain

再度Norton Safe Webをオフにした時のタスクマネージャ

f:id:sue445:20180905001522p:plain

rspec-time_stop を作った

github.com

モチベーション

前職の spec/support/ によくあったテスト系の便利ヘルパを現職でも使いたくなったので記憶からサルベージしてgem化しました

使い方

itdescribe:time_stop をつけるだけで現在時刻を止めた状態でテストを実行します

実装はたったこれだけです

https://github.com/sue445/rspec-time_stop/blob/v0.1.0/lib/rspec/time_stop.rb

READMEからコピペ

RSpec.describe Rspec::TimeStop do
  context "with :time_stop", :time_stop do
    it "current time is freezed" do
      before_time = Time.now
      sleep 1
      after_time = Time.now

      expect(after_time).to eq before_time
    end
  end

  context "without :time_stop" do
    it "current time is not freezed" do
      before_time = Time.now
      sleep 1
      after_time = Time.now

      expect(after_time).to be > before_time
    end

    it "current time is freezed when :time_stop is granted", :time_stop do
      before_time = Time.now
      sleep 1
      after_time = Time.now

      expect(after_time).to eq before_time
    end
  end
end

備考

原状対応してるのは ActiveSupport::Testing::TimeHelpers だけです。

(timecop対応も一応考えたんだけどCI込みだと両方対応するのがちょい面倒だった)

プリキュアハッカソン NewStageを開催した #cure_hack

開催してました

cure-hack.connpass.com

togetter.com

文字通りNewStage(新天地)での開催でした。

現職での勉強会主催が初な上に今までの会場と勝手が違って慣れてなかったですが、先輩キュアエンジニア達に助けられて無事に終わることができました。

やったこと

秋映画の オールスターズメモリーズ をrubicureで対応しました

irb(main):001:0> Precure.all_stars(:memories).count
=> 55
irb(main):002:0> Precure.all_stars(:memories).map(&:precure_name)
=> ["キュアブラック", "キュアホワイト", "シャイニールミナス", "キュアブルーム", "キュアイーグレット", "キュアドリーム", "キュアルージュ", "キュアレモネード", "キュアミント", "キュアアクア", "ミルキィローズ", "キュアピーチ", "キュアベリー", "キュアパイン", "キュアパッション", "キュアブロッサム", "キュアマリン", "キュアサンシャイン", "キュアムーンライト", "キュアメロディ", "キュアリズム", "キュアビート", "キュアミューズ", "キュアハッピー", "キュアサニー", "キュアピース", "キュアマーチ", "キュアビューティ", "キュアハート", "キュアダイヤモンド", "キュアロゼッタ", "キュアソード", "キュアエース", "キュアラブリー", "キュアプリンセス", "キュアハニー", "キュアフォーチュン", "キュアフローラ", "キュアマーメイド", "キュアトゥインクル", "キュアスカーレット", "キュアミラクル", "キュアマジカル", "キュアフェリーチェ", "キュアホイップ", "キュアカスタード", "キュアジェラート", "キュアマカロン", "キュアショコラ", "キュアパルフェ", "キュアエール", "キュアアンジュ", "キュアエトワール", "キュアマシェリ", "キュアアムール"]

https://github.com/sue445/rubicure/blob/master/CHANGELOG.md#v117

あとは 技術書典5 の原稿を書いてました。

ChatWorkMentionTaskでoffline_accessに対応した

前置き

以前ChatWorkMentionTaskというアプリを作った時に

sue445.hatenablog.com

ChatWorkのAPIのリフレッシュトークンの有効期限は2週間なので、リフレッシュトークンが切れる3日前にリマインド用にタスクを作るようにした

って書いたのですが、ChatWork本家でリフレッシュトークンの有効期限が無期限に設定できるようになったということなので小躍りして対応しました。ヒャッホウ!

参考

creators-note.chatwork.com

対応方法

OAuthクライアントの設定に「永続的なAPIアクセスの許可」が増えているのでこいつをチェックして保存

f:id:sue445:20180808003628p:plain

omniauth-chatwork であれば scopeoffline_access を足すだけ。

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :chatwork, ENV["CHATWORK_CLIENT_ID"], ENV["CHATWORK_CLIENT_SECRET"],
           scope: ["users.profile.me:read", "rooms.tasks:write", "rooms.info:read", "offline_access"]
end

https://github.com/sue445/chatwork_mention_task/blob/1be48105ca9c0c43f9a1a1dc98146c4609608e89/config/initializers/omniauth.rb#L1-L4

ChatWorkMentionTaskの本番に適用する前に試したけど、offline_access を有効にした後も既存のアクセストークンやリフレッシュトークンは問題なく使えたのでサクッと変更していいんじゃないかと思います。

ChatWorkMentionTaskの仕様変更について

リフレッシュトークンの有効期限がなくなったので、リフレッシュトークンが切れる3日前のリマインド用にタスク作成はなくします。

(現状リフレッシュトークンが14日間のままのユーザがまだ何人かいるので機能の削除自体はもうちょい先になりますが)