CircleCIのビルドがトリガーされない誤制限について問い合わせた

ここ数日 CircleCI でトリガーが効かなくなって困っていたので問合せをサポートにリクエストをした。 今後、似た問題に当たった人が現れたとき自力解決は難しいと思うのと "CircleCI Maintenance" と検索しても、当然 CircleCI のメンテナンス情報しか出てこず良く分からないと思うので書き残しておく。

当初ビルド上限に引っかかったかと思ったけれど、見てみたらそんなことはなく、自分のアカウント以外ではビルドが動いているので疑問に思っていた。ちなみにここ数日は CircleCI について、OSS 活動のみで使っているというコンテキストだった。気になったのは以下の画面の文言。

f:id:koic:20210318104554p:plain

"⚠️We have detected an anomaly that violates the CircleCI Terms of Service." とスクリーンに表示されているが、心当たりがないのでもしかするとこれは誤制限では、、、と思い以下の窓口から問合せを送ってみた。

support.circleci.com

問合せは以下のようなもの。カテゴリに関しては "Build Failure / Configuration Help" というカテゴリも選択肢にあって悩んだけれど、気持ちとしては失敗より前段の CI がトリガーされないことから "Service Issue" にした。

Please choose your issue below

"Service Issue"

Subject

Unable to trigger CircleCI on my account

Description

I'm developing RuboCop (https://github.com/rubocop) , an open source software and CircleCI hasn't run for the last few days.

  • Side navigation "Status" remains "Maintenance".
  • "We have detected an anomaly that violates the CircleCI Terms of Service." is displayed on the screen.

(I have attached a screenshot.)

I have no idea about violations, could you please confirm it? In addition, it seems that CircleCI can be triggered except for my account (https://github.com/koic) .

Thank you for your support.

 Is this ticket about CircleCI hosted on your own infrastructure?

No

 GitHub and/or Bitbucket organization name(optional)

https://github.com/rubocop

 GitHub/Bitbucket Username(optional)

https://github.com/koic

 URL(s) of Issue on CircleCI

問題になっている管理画面の URL を貼って、スクリーンショットを添付した。

シュッと辿った先が英語だったので、URL に en-us が入っているので日本語もあるかもと思いながら問い合わせを出したが、実際日本語でも問合せできるようだった。このあたりはおまけ情報として。

support.circleci.com

真夜中の JST に送ったイシューだったのが幸いしてか、タイムゾーンとしては海の向こうのサポートエンジニアの方が即対応してくれてビルドできるようになった。感謝。

結果としては CircleCI が誤って制限をかけてしまっていたようで、それを解除してもらったというもの。自力での解決は難しいものだったので、今回の問題はサポートに問い合わせるのが正攻法で良かったっぽい。

ディレクトリの一括作成とブレース展開に関する豆知識

RuboCop で直した「おっ」と思ったバグ。シェルのブレース展開 {...} を使って複数ディレクトリを一括で作成する手法がある。業務で連番でのディレクトリ作成とか必要だったりするときに使えたりする。

% mkdir {a,z}
% ls 
a z

% mkdir {a..c}
% ls 
a b c 

% mkdir {1..10}
% ls 
1 10 2 3 4 5 6 7 8 9

% mkdir {01..10}
% ls
01 02 03 04 05 06 07 08 09 10

ではディレクトリ名の指定なしで {} とするとどうなるか?

% mkdir {}

{} という名前のディレクトリができる (なるほど?) 。

% ls
{}

で、この {} という名前のディレクトリについて RuboCop が処理をしようとしたら、エラーになったという問題が報告されたので直しておいた。

% rubocop
(snip)

File name too long - /tmp////////////////////////////////////////////// (続く)

github.com

Windows でも禁則文字に入っていなさそうなので、同様かもしれない (持っていないのでよくわからない) 。 docs.microsoft.com

移行アシスタントでMacBook Proを移行後に画面共有できない問題の解決

先日、移行アシスタントを使って MacBook Pro を移行したのだが、Web 会議や勉強会でオンライン画面共有できない問題が起きていた。

具体的に問題になった Web 会議ツールとしては Zoom アプリケーションと Google Chrome を使った Google Meet のふたつ。

Web 会議で画面共有をしようとすると、警告ダイアログが表示されて「セキュリティとプライバシー」の「画面収録」に導かれる。しかし、本来は画面共有したいアプリケーションが一覧になっているべき領域がどうみても空。アプリケーションを再起動して、再び画面共有を試みても結果変わらずだった。

f:id:koic:20210307133955p:plain:w320

念のため「アクセシビリティ」でアプリケーションにチェックが入っていることを確認したり、NVRAM / PRAM のリセットをしたり、Google Chrome を最新版にしても依然として解決しない。

f:id:koic:20210307140031p:plain:w320

インターネットを見てもいまいちだったので、Apple の電話サポートにコンタクトして聞いてみた。結果としてはアプリケーションの再インストールで解決した。

Google Chrome の再インストールは不要で、Zoom アプリケーションのみ再インストールすれば解決した (Zoom の再インストールの方が手間が少なそうだったので、先に試しでやってみたらすべて解決した) 。

f:id:koic:20210307134027p:plain:w320

蓋を開けてみれば何て事のない解決方法ではあったが、なまじ他の操作が期待しているとおり動いている環境だと盲点で忘れたりもあるかもなので、今後誰か現象にあたった人への参考まで。Apple のサポートに感謝。

社内向けに「ソフトウェアの契約と見積り勉強会」を行った

5年くらい前に XP 祭りで登壇した内容を、当時と組織メンバーの顔ぶれも変わっていることもあり社内向けに話した。

www.slideshare.net

参加メンバーからは「3秒見積りは良くないのを知れた」「ハイブリッド契約という手法を知った」など、見積りや契約まわりに関する知見を伝えることができて良かったのではと思う。あと『誰と重要』

スライド中にも引用しているスティーブ・マコネルの『ソフトウェア見積り』は、後半はともかく前半は「見積りとは、何であり、何ではないのか?」を知る意味でも読んでおいた方が良い。これは受託開発とかサービス開発とか一切関係なくオススメどころか、ソフトウェアの開発に掛かる見積りの基礎的な考え方を語る上で必読だと思っている。

時間がない人は、最初は要所要所にある箱書きのポイントだけ流してみても関心を引く構成になっていると思う。

f:id:koic:20210304200807p:plain

『達人プログラマー』然り、『時を超えた建設への道』然りの良書構成、おすすめ。

RuboCop Performance 1.10 をリリースした

RuboCop Performance 1.10 をリリースした。

JST で 3月1日に 1.10.0 をリリースして、3月2日に 1.10.1 をバグフィックスリリースした。以下、2つの新 Cop が目玉です。

Performance/RedundantSplitRegexpArgument cop

機能リクエストがあがっていた Cop をコントリビュータが実装してくれました。split メソッドの引数について正規表現ではなく文字列で十分というケースを検出する Cop です。

# bad
'a,b,c'.split(/,/)

# good
'a,b,c'.split(',')

1.10.0 の時点だと 'oneSplittwo'.split(/split/i) といった ignore case オプションも警告する偽陽性があったため、1.10.1 で修正リリースしています。

Performance/RedundantEqualityComparisonBlock cop

こちらは Rails コミッターの kamipo さんからのフィードバック。

Enumerable#all?, Enumerable#any?, Enumerable#one?, Enumerable#none? に関して、ブロックで ===, ==, is_a?, kind_of? を使っている以下のようなケースを、Ruby 2.5 で追加された引数渡しにする Cop です。

# bad
items.all? { |item| pattern === item }
items.all? { |item| item == other }
items.all? { |item| item.is_a?(Klass) }
items.all? { |item| item.kind_of?(Klass) }

# good
items.all?(pattern)

いちおう引数渡しにした際に内部で呼び出される ===== と同じ振る舞いなケースのこともあれば、 組み込みの Regexp のようにサブクラスで再定義されている可能性があることから安全でない Cop としてマークしています。 (より安全側に倒して、=== の場合は LHS でブロック引数と異なる値が使われているときに限定するか悩んだ気がする。)

どちらの Cop も good ケースのコードとしてもシンプルになって良いのではと思います。それでは。

RuboCopのGitHubオーガニゼーションがrubocopになった

「RuboCopのGitHubオーガニゼーションがrubocopになった」とか、どういうタイトルだと思うけれど、表題のまま。

歴史的には、bbatsov/rubocop だったものが、RubyKaigi 2018 のときに rubocop-hq/rubocop になって、今回念願の rubocop/rubocop に至ったという流れ。

お察しのとおり、長らく rubocop オーガニゼーションが他に取得されていたため rubocop-hq になっていたわけです。その後、rubocop というオーガニゼーションを、去年の 10 月くらいに譲渡してもらっていたところ、以下の GitHub Discussions を皮切りに移行に踏み切られました。

github.com

従来の rubocop-hq オーガニゼーション経由でのアクセスでも、GitHub の方で良きにリダイレクトしてくれるのでユーザー影響はあまりないと思いますが、無駄なリダイレクトを挟むこともないので rubocop-hq になっている箇所があれば rubocop に指定し直すと良いです。

また、オーガニゼーションのリネームではなくリポジトリ個々の引越しだったため、このエントリを書いている時点ではいくつかのリポジトリは旧来の rubocop-hq に配置されたままのものがあります (だいたい移行されていてメジャーなところだと rubocop-rspec が残っているくらいだと思う) 。

github.com

遠くないうちに rubocop オーガニゼーションに引越しすると思いますが、念のため。

社内向けに「スローテスト勉強会」を行った

スローテスト対策への熱が再燃してきていたので、Ruby関西 勉強会で以前に使ったスライドをベースにオンライン社内勉強会を行った。

www.slideshare.net

やっぱりどのプロジェクトでも Feature テストが Rails アプリケーション開発でのスローテストの要因になっていることが多いようで、このあたりミドルウェアレベルでスピードアップするようなエポックメイキングなソリューションが誕生することを願っている (他力本願) 。

最後は「スローテスト対策への銀の弾丸はないけれど、金の弾丸はある」というので締め括った🍵