💻

Productivity Weekly (2021-10-13号)

9 min read

こんにちは。サイボウズ株式会社 生産性向上チームの平木場です。

僕たち生産性向上チームは毎週水曜日に Productivity Weekly という「1 週間の間に発見された開発者の生産性向上に関するネタを共有する会」を社内で開催しています。
本記事はその時のネタをまとめたものです。

今回が第 47 回目です。過去の記事はこちら

news 📺

GitHub Actions: Workflows triggered by Dependabot PRs will respect permissions key in workflows | GitHub Changelog

https://github.blog/changelog/2021-10-06-github-actions-workflows-triggered-by-dependabot-prs-will-respect-permissions-key-in-workflows/

GitHub において、Dependabot によって引き起こされる GitHub Actions ワークフローが permissions を尊重するようになりました(デフォルトは Read のままです)。また、Dependabot が持つシークレットを利用できるようになりました。これらの変更により、Dependabot 由来のワークフローの権限を詳細にコントロールできるようになります。さらに、3 月の変更で動かなくなったワークフローを再び容易に動かせるようになります(後述)。

今年の 3 月から、Dependabot のプルリクエストによって発火するワークフローは GITHUB_TOKEN の権限が読み取り専用となりました。また、GITHUB_TOKEN 以外のシークレットは渡されないようになっていました。しかし、これら 3 月の変更により、write 権限がなくなったことやユーザ定義のシークレットを利用できなくなったことから、一部ワークフローが動かなくなるといった問題を引き起こしていました[1]。回避策もありました[2]が、なかなかに面倒なものでした。

これからは、必要な write 権限は permissions で設定し、必要なシークレットは Dependabot が持つシークレットに設定することで、3 月の変更で動かなくなってたワークフローを再び Dependabot のトリガーで動かすことができるようになります。

しかし、もともとデフォルトで厳しい制限をかけた理由を考えると、各スコープが Read 権限のみ、シークレットを渡さないことが一番セキュリティの観点からすると最良であることは間違いありません。write 権限の付与はシークレットを渡すことが本当に必要か再度考え、必要最低限の権限のみ渡すようにしましょう。


Dependabot が持つシークレットとはおそらく Settings -> Secrets -> Dependabot から設定できる項目のこと(ドキュメント

GitHub Actions: Granular personal access token scopes for self-hosted runners in enterprises | GitHub Changelog

https://github.blog/changelog/2021-10-11-github-actions-granular-personal-access-token-scopes-for-self-hosted-runners-in-enterprises/

GitHub Actions において、Enterprise 所属セルフホストランナー管理に特化した権限である manage_runners:enterprise スコープが追加されました。これにより admin:enterprise スコープの権限が必要なくなりました。これからは代わりにもっとスコープの狭い manage_runners:enterprise を使うことが推奨されています。

GitHub Actions のセルフホストランナーはリポジトリ、Org だけでなく、Enterprise に対して所属させることができます。WebUI からランナーを管理する場合は良いのですが、API を使ってランナー管理を自動化しようとすると、API を叩くためのトークンに対して admin:enterprise を付与する必要がありました。しかし、admin:enterprise 権限は強力な権限[3]であるため、あまり付与したくない存在でした。

manage_runners:enterprise が登場したことにより Enterprise 所属セルフホストランナー管理を自動化しやすくなりました。

しかし、残念ながら Enterprise 関連の権限は GitHub App に付与できない(そもそも GitHub App を Enterprise に対してインストールできない)ため、パーソナルアクセストークンを利用せざるを得ません。CI 等で個人に紐づくシークレットは極力使用したくないため、ここら辺をなんとかしてほしいところです。

GitHub Universe 2021

https://www.githubuniverse.com/

GitHub Universe が 10/28-29(JST)に開催されます。GitHub Universe は GitHub の新機能や GitHub を活用した事例などが紹介される一年に一度のイベントです。今年もオンラインで開催されるため、無料で視聴できます。

今年もこの季節がやってきました。と思ったのですが、去年は 12 月に開催されたため、去年よりもまあまあ早い開催となります。去年の Universe ではダークモードやオートマージ、GHES3.0 の話題で盛り上がりましたね。今年も楽しみです。

know-how 🎓

Terraform Platform in Quipper - Speaker Deck

https://speakerdeck.com/szksh/terraform-platform-in-quipper

Quipper 社の Terraform プラットフォーム事例です。様々な Terraform 運用ノウハウが紹介されています。

モノレポでパイプラインを共通化、state は細かく分割、plan ファイルから apply を行う、tfcmt[4] で差分を見やすくする、CI による fmt ・ lock ファイルの修正・tfmigrate の実行、Renovate による諸々のアップデート(更新は No Change であることをテストする)などです。

全編英語ですが、詳細はこれまでのブログ記事にあるとのことです(登壇動画もあります)。

https://quipper.hatenablog.com/entry/2021/10/13/080000

Terraform 運用時のつらみを解消するためのノウハウが揃っており、活用度合いがすごいです。とても参考にできると思います。

EC2 でリザーブドインスタンス(RI)と Savings Plans (SP)のどちらを選ぶべきか?基準とするための最強の比較表を作ってみた | DevelopersIO

https://dev.classmethod.jp/articles/ec2-reserved-instances-savings-plans-comparison/

AWS のディスカウントの仕組みである Reserved Instances(RI) と Savings Plans(SP) について EC2 に関する部分の比較表を作ってみたという記事です。

Amazon EC2 を決まったタイミングで使うなり、大量に使うなりする際は、少しでも安く抑えるために RI や SP の利用を検討します。ですが、それぞれにメリットデメリット、できることできないことが複雑に存在し、正直どちらが適切かの判断がとても難しいです。

この記事では、わかりやすい比較表[5](複数バージョン)、メリットデメリット、観点ごとの解説が書かれており、とてもよく分析された様子が目に浮かびます。

「考慮すべき項目が多いため「どちらが良いのか」を判断するのは難しいかと思います」と本文に書かれている通り、どちらが適切かの判断は非常に難しいですが、これから EC2 を本格利用する方も、すでに本格的に利用している方にとっても、この記事はとても良い判断材料となりそうです。

tool 🔨

HTTPIE FOR TERMINAL

https://httpie.io/

httpie は HTTP(HTTPS) リクエストをシンプルに送るための CLI ツールです。HTTP リクエストを送るためのツールとしては curl が代表格ですが、httpie には API や HTTP サーバ、Web サービスのテストとデバッグを容易にするための機能が揃っています。

  • 直感的な構文
  • JSON サポート
  • colorized
  • API 向けのデフォルト設定(ステータスコードやヘッダの常時表示など)
  • セッションの維持
  • offline モード(リクエストの表示)
  • その他諸々

確かに開発時や手軽に API を叩くために便利そうな機能が備わっており、役立ちそうです。手軽に試したい人向けに online デモがあります。
(CI や本番環境で利用する際は curl や wget を使うことになると思うので、curl や wget の代替とはならないでしょう[6]。)

余談ですが、Go 実装のクローンである httpie-go が第三者によって開発されています。本家は Python で実装されているので、軽量なシングルバイナリとして使いたい方はこっちの方がいいかもしれません。

koneta 🍘

Productivity Weekly で出たネタを全て紹介したいけど体力が持たない、または、そんなに言うことがなかったネタを一言程度で書くコーナーです。

あとがき

土日は Fig の autocomplete を充実させる[8][9][10]おじさんと化していました。Fig、なかなか便利です。あと競プロのコンテストに出てました。

生産性向上チームでは毎週こういったネタを共有する会を行っています。そんな生産性向上チームが気になる方は下のリンクをクリック!

https://blog.cybozu.io/entry/2020/08/31/080000

omake

今週のおまけです。

速報:アップル発表イベントは19日午前2時~。新型MacBook Proや第3世代AirPodsなど新製品予想まとめ - Engadget 日本版

https://japanese.engadget.com/apple-november-19-new-macbookpro-airpods3-162117990.html

パワー全開...ですね。本日の 26 時(2021/10/18 26 時)から Apple Event が開催されます。9 月にも開催されましたが、その時はモバイル端末や iPad mini などが発表されました。

今回はおそらく Mac 関係の新製品が来るだろうと言われています。個人的には MacBook Pro の次世代機が来てほしいです。特にメモリ 32GB 以上搭載可能 Apple Silicon 搭載 MacBook Pro 16 インチに来てほしいです。

従来の M1 MacBook Pro は 13 インチまででメモリの上限は 16GB だったため、買うのをためらっていました。M1 の開発環境も整ってきたことだと思いますし、そろそろ使いたいですね。多分次に交換してもらう会社 PC は新発表された MacBook Pro にしてもらうと思います。Apple さん頼む〜〜〜!

脚注
  1. Dependabot triggered Actions cant access secrets or use a writable token · Issue #3253 · dependabot/dependabot-core ↩︎

  2. [GitHub Actions] Secrets や書き込み権限が必要な Workflow を Dependabot からも使えるようにする – もばらぶエンジニアブログ ↩︎

  3. Full control of enterprises とされている。Audit log を見られたり Actions の利用を許可したり、Org 作成なんかができたはず。強すぎる。Enterprise のページを詳細な権限をドキュメントで探したが、一覧で載っているものを見つけられなかった。うーん。 ↩︎

  4. mercari/tfnotify を fork したもので、tfnotify と比べて様々な変更が取り入れられています↩︎

  5. とてもよくできており相対的にわかりやすいですが、やはり理解は難しいです。 ↩︎

  6. そう考えると curl コマンドへのエクスポート機能がちょっと欲しくなる。 ↩︎

  7. 正直あまり自信ないです。詳しくは調べてください。 ↩︎

  8. feat: add limactl completion spec by korosuke613 · Pull Request #673 · withfig/autocomplete ↩︎

  9. feat: add asdf completion spec by korosuke613 · Pull Request #677 · withfig/autocomplete ↩︎

  10. feat: add direnv completion spec by korosuke613 · Pull Request #681 · withfig/autocomplete ↩︎

Discussion

ログインするとコメントできます