くりにっき

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

chatwork-ruby 0.12.2とpixela 1.4.1をリリースした

それぞれfaraday v1.0対応です。

https://github.com/asonas/chatwork-ruby/blob/master/CHANGELOG.md#v0122

https://github.com/sue445/pixela/blob/master/CHANGELOG.md#v141

実はfaraday v1.0対応自体は1月くらいにはできていてfaraday_middleware v1.0.0が出るのを待っていたのですが、なかなかリリースされないしv1.0.0.rc1があるしまあいいかくらいの軽いノリで出しました。

どっちのgemもfaraday 0系と1系両方対応してますがメンテつらくなったタイミングで0系のサポートをきります

wgetでPOSTする

tl;dr;

wget --post-data="key1=value1&key2=value2" https://example.com/webhook -O /dev/null

経緯

  • CIの実行中に通知用のwebhookをPOSTして通知をやりたかったんだけど、CIで使ってるDockerイメージに curl が入っていなくて困った
  • 素直に curl 入れればよかったんだけど、パッケージのインストールはスロービルドの原因になるのでなるべくインストールしたくなかった
  • curl はなかったけど wget は入ってたので wget でPOSTしてみた

解説

冒頭のコマンドが全てなのですが、特筆するとしたら最後の -O /dev/null 辺りです。

wgetするとPOSTであってもカレントディレクトリに webhook みたいなファイルを書き出すのですが、その状態でもう一度同じURLに対して wget すると( つまり1回のCIで同じwebhookを2回叩くと *1

wget: can't open 'webhook': File exists

のようなエラーになるので、2回目エラーにならないように出力を /dev/null に捨てています。

*1:自分の場合terraform applyの前後で通知をしようとしたらapply後の通知でエラーになった

#プリッカソン でprismdb-rubyとfaker-pretty_seriesを作った

prismdb-ruby

PrismDBAPIクライアント

github.com

  • スピード重視で使い慣れたREST APIを使ったけど、GraphQLの方を使った方がよかったかもしれない

faker-pretty_series

Rubyでダミーのテストデータを作るライブラリ「faker」のプリティーシリーズ版

github.com

gitpanda v0.8.0をリリースした

リリースノート

https://github.com/sue445/gitpanda/blob/master/CHANGELOG.md#v080

v0.8.0について

社内GitLabのnginx周りの設定を変えた時にAWSからGitLabのAPIが叩けなくなってgitpandaが使えなくなったので、それをちゃんと検知できるようにするためにSentry対応しました

gitpandaについて

inside.pixiv.blog

地域.rbカレンダーのバックエンドをリプレイスした

見た目は変わらないですがバックエンドを変えてます

sue445.github.io

今までの運用

  1. カレンダーに追加したいconnpassやDoorkeeperのグループを condo3 でics取得
  2. 自分のGoogleカレンダーにインポート
  3. https://calendar.google.com/calendar/embedhelper?gsessionid=OK&hl=ja で埋め込み用のスニペットを生成して貼り付け

今までの運用の問題点

自分のGoogleカレンダーにインポートする関係上グループ追加時のみ自分がSPOFになってました。ただし、一度やってしまえばあとは全自動で最新のイベント情報が表示され続けるので問題ではなかったです。

しかしある時いつものように新しい地域.rbのグループを追加した辺りでカレンダーに表示されなくなりました。

公式情報がないので憶測なのですが、上記埋め込みツールで表示できるカレンダーが60個までという制約のため表示できなくなっていました。

たくさんカレンダーを追加しすぎた図

f:id:sue445:20200213011142p:plain

そのためグループの追加方法を変えました

解決方法

すごいシンプルですが、大量のカレンダーを埋め込むのがダメなので複数のグループを1つのicsにまとめることで解決しました。

具体的にはcondo3のAPIを叩いて巨大なicsを生成するウェブアプリをGoogleカレンダーにインポートしています

f:id:sue445:20200213012303p:plain

今はconnpassとDoorkeeperでicsを1つずつ作っているけど、量が増えすぎてタイムアウト起きるようになればさらに分割するかも。

技術的なこと

このウェブアプリ自体はGoogle App Engine/Rubyで作りました。

ソースコードは地域.rbカレンダーと同じリポジトリにあります。

github.com

appengineを採用した理由は今までHeroku + RubyがメインでGoogle App EngineRubyは使ったことがなくて慣れておきたかったためです。*1

新しい運用方法

https://github.com/sue445/regional-rb-calendar のREADMEに書いてますがリポジトリにある設定ファイルとindex.htmlを修正してPRを投げるだけで新しいグループが追加されるようになりました。

PRをアクセプトする部分が自分がSPOFなのは変わらないけど、自分しかできない作業が減ったのは地味に嬉しい。

*1:appengineのJavaとGoは経験済

RubyKaigi 2020のCFPに採択されました

昨年 に続き、今年も登壇させてもらえることになりました!

rubykaigi.org

今回は「Ruby on CI」というタイトルで、CIマニアがRuby製のgemやアプリのCIについて延々と話します。

https://rubykaigi.org/2020/presentations/sue445.html#apr10

CFPはここにありますがネタバレ情報満載なので現段階では限定公開にしておいて発表後に全公開します。

www.pixiv.net

2020/6/4 20:00追記

RubyKaigiが中止になったのでCFP全公開しています(´;ω;`)

circleci-ruby-orbs v1.5.0をリリースした

https://circleci.com/orbs/registry/orb/sue445/ruby-orbs

リリースノート

https://github.com/sue445/circleci-ruby-orbs/blob/master/CHANGELOG.md#v150

Ruby 2.7でbundler 2.1.2が入りましたが、bundler 2.1で bundle install --path などの引数がdeprecate*1されてcircleci-ruby-orbsの中でdeprecate warningが出ていたのを対応しています。

ついでに bundle_withoutbundle_with などの引数も追加しています。

1/28 21:00追記

リリースしたもののキャッシュがうまく効かない現象があったのでrevertしたのを1.5.2としてリリースしてますorz