Productivity Weekly (2021-06-16号)
こんにちは。サイボウズ株式会社 生産性向上チームの平木場です。
僕たち生産性向上チームは毎週水曜日に Productivity Weekly という「1 週間の間に発見された開発者の生産性向上に関するネタを共有する会」を社内で開催しています。
本記事はその時のネタをまとめたものです。
今回が第 30 回目です。過去の記事はこちら。
news 📺
Codecov Bash Uploader 関連セキュリティインシデントの続報
約 2 ヶ月前に Codecov Bash Uploader のセキュリティインシデントがあったことはまだ記憶に新しいと思います。先日 Codecov はこの問題に関する情報をいくつか公開しました。
Post-Mortem / Root Cause Analysis (April 2021) - Codecov
[1]です。
今回のインシデントのポストモーテム攻撃者はオンプレ版 Codecov の Docker イメージの中間レイヤーから Google Cloud Storage の HMAC キーを取得して Bash Uploader を書き換えたとのことです。
Bash Uploader を廃止し、新たにシングルバイナリで配布することや、イメージの中間レイヤーに機密情報が残らないようにマルチステージビルド、スカッシュビルド[2]を利用することなどといった対策が記されています。また、共有すべきいくつかの教訓も載っています。
同じ轍を踏まないように参考にしたいですね。
Validating the Bash Script on CI - Codecov
Bash Uploader のハッシュ値検証方法です。検証するためのコードスニペットが載っています。また、最新の GitHub Action、CircleCI Orb にはスクリプトの検証が含まれているとのことです。
Introducing Codecov's New Uploader - Codecov
Bash Uploader の代わりとなる新しいアップローダーについての情報です。curl | bash 方式だとセキュリティ問題が多いことから、Node.js で書かれたシングルバイナリで配布されるアップローダーが新たにベータ版としてリリースされました。
これまでのアップローダーは 9/1 からブラウンアウト(定期的に動かない時間帯を設ける)が始まり、来年 2/1 には完全に動作しなくなるとのことです。
Toward Vagrant 3.0
HashiCorp 社は仮想環境構築ツール Vagrant のバージョン 3.0 へ進むにあたっての計画を発表しました。
Vagrant 3.0 では実装が Ruby から Go へ移行されます。2.3、2.4 にかけて段階的に移行され、3.0 からは完全に Go 実装の Vagrant となるようです。また、HCL(HashiCorp Configuration Language)[3]ベースの新 Vagrantfile がサポートされます。Ruby ベースの従来の Vagrantfile やプラグインを使用するためにはホスト PC に Ruby をインストールする必要があります。他にも新機能の搭載や性能改善が計画されています。
従来の Vagrantfile から HCL ベースの Vagrantfile に移行するのは大変そうですが、3.0 でさらに使いやすくなりそうです。楽しみですね。
Manual pipeline run button - CircleCI Changelog
ついに CircleCI で GUI からパイプラインを手動実行できるようになりました。GitHub Actions の workflow_dispatch
に近いものだと思いますが、リリース情報以外の場所での情報がまだないようなので[4]、詳細はわかりません。
すでにクラウド版では使えるようになっており、実行しようとすると以下のようなダイアログが出てきて実行できます。
「Run pipeline」をクリックすると、そのブランチに設定されているワークフローが実行されます。もしパラメータを渡せれば、手動実行時のみ動かすワークフローを設定できるかもしれません。詳細が明らかになるのが楽しみですね。
Private Orbs for All Paid Plans - CircleCI Changelog
CircleCI の全ての有料プランで Private Orbs が使えるようになりました。これまでは Scale Plan でのみ Private Orb が利用可能でしたが、これからは Performance Plan でも 3 個まで Private Orbs が使えるようになりました[5]。
Private Orbs は組織内で共有できます。頻繁に登場する共通する処理などを一元管理できるようになって良いですね。Performance Plan を利用している方は要チェックです。
know-how 🎓
Google Testing Blog: How Much Testing is Enough?
「どれだけテストを行えば十分なのか」を明確にするためのヒントを紹介した Google Testing Blog の記事です。
この記事では、テスト戦略を定義するのに役立つ考慮事項や経験則か以下の tips として紹介されています。
- プロセスや戦略を文書化する
- ユニットテストの強固な基盤を持つ
- 統合テストにも手を抜かない
- クリティカルなユーザージャーニーのエンドツーエンドのテストを行う
- 他の層のテストを理解し、実施する
- コードや機能のカバレッジを把握する
- 現場からのフィードバックを活用し、プロセスを改善する
テスト戦略を考える上で参考にできそうです。
GitHub Actionsに「強い」AWSの権限を渡したい ~作戦3 - AssumeRole with Google ID Token ~ - KAYAC engineers' blog
以前、「GitHub Actions に「強い」AWS の権限を渡したい / AWS credentials on Actions - Speaker Deck」というスライドを取り上げました。そのスライドでは GitHub Actions 上で terraform apply
するために強い AWS の権限を渡す方法が紹介されていました。新しいこの記事では、3 つめの新たな作戦を紹介しています。
作戦 3 のコンセプト自体は作戦 1(MFA トークン使うやつ)と同じですが、MFA トークンではなく Google ID Token を使うことで 1 分間しかなかった有効期限を 1 時間にでき、作戦 1 と比較して実用性が増しています。また、作戦 2(CloudShell を使うやつ)と比べて外部サービスを経由しない分セキュリティが向上しています。
この記事では作戦 3 の具体的方法も紹介されており、同じことをできそうですが、設定が複雑で大変そうなので、設定するには体力が必要そうです。
tool 🔨
Strykerを使ってTypeScriptでMutation Testingする
JavaScript/TypeScript 向けのミューテーションテストフレームワーク StrykerJS の紹介記事です。
ミューテーションテストではテスト対象コードを変更することで意味のあるユニットテストであるかを測定できます。StrykerJS を使うことで、テスト対象コードの変更とミューテーションテストの実施、結果の出力ができます。
この記事では StrykerJS の使い方を説明しつつ、ミューテーションテストがなぜ嬉しいかを解説してくれているので、JS/TS でミューテーションテストをしたい人だけでなくミューテーションテストをよく知らない人にもおすすめです。僕もちょっと触ってみようと思います。
koneta 🍘
Productivity Weekly で出たネタを全て紹介したいけど体力が持たない、または、そんなに言うことがなかったネタを一言程度で書くコーナーです。
-
古くなった AMI にフラグを立てる新しい AMI プロパティが Amazon EC2 に追加
- AMI の廃止(非推奨)タイミングを設定できるようになりました
- 非推奨になると AMI 所有者以外にはデフォルトで表示されなくなります
- クラメソさん記事:[アップデート]AMI に非推奨となるまでの有効期限を設定できるようになりました
-
API Testing Tools in JavaScript - DEV Community
- JavaScript の API テストツール比較記事です
- それぞれのツールで何ができて何ができないかが表になっています
- ただ、この記事を書いた人はツールの 1 つである PactumJS のメンテナーなのでバイアスがかかっていそうです
あとがき
東京大阪にある新型コロナウイルスワクチンの大規模接種センターでとうとう 64 歳以下の人も接種できるようになりましたね。僕も来週ワクチン打ってきます。早くアフターコロナが来ないものか...
生産性向上チームでは毎週こういったネタを共有する会を行っています。そんな生産性向上チームが気になる方は下のリンクをクリック!
omake
今週のおまけです。
Microsoftは2025年までにWindows 10のサポートを終了する予定 - GIGAZINE
Microsoft は次世代 Windows を発表するようですが、その前に Windows 10 のサポート終了が発表されました。Windows 10 は Windows の最後のバージョンだと聞いていたのでこれには驚きました。もし Windows11 みたいなのが次世代 Windows として登場するなら「Windows 10 が Windows の最後のバージョンになる」は嘘になります。もしくは Windows の名前を捨てて全く新しい OS が発表されるのでしょうか?気になる...
そんな中、次世代 Windows と思われる Windows 11 のリーク情報が出てきましたね。本当かどうかわかりませんが、見た感じあんま Windows10 と変わっていませんね(個人の感想)。僕は新しい物好きなのでガッツリ変えてくれた方が個人的には嬉しいです。(ていうか Linux ベースにしてほしい)
サポート終了の話が出た以上 Windows10 は本当に終わるようです。次世代 Windows の発表は日本時間で 2021 年 6 月 25 日 0 時からあります。楽しみですね。
-
インシデントの事後分析や再発防止策などを記した文書です。参考:Google - Site Reliability Engineering ↩︎
-
squash オプションのこと知りませんでした。Dockerfile が描きやすくなって便利ですね。2,3 年前にはすでにあった機能のようですが、まだ experimental なのが気になります。参考:Docker Experimental Features を有効化すると使える docker build の --squash オプション - kakakakakku blog ↩︎
-
Terraform を書くときの言語です。 ↩︎
-
探したのですが見つけられませんでした... ↩︎
-
Scale Plan は今まで通り無制限で使えます。 ↩︎
Discussion