⛺️

Productivity Weekly (2023-05-10号)

2023/05/17に公開

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

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

2023-01-25 号から、基本的に隔週で連載することとしました。たまに単独でも投稿するかもしれません。
今週は 2023-05-10 単独号です。

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

news 📺

More secure private attachments | GitHub Changelog

https://github.blog/changelog/2023-05-09-more-secure-private-attachments/

GitHub の Issue や Pull Request などに添付したファイルは、今まで URL さえ知っていれば無期限でアクセスできました。
企業などは機微情報を載せないよう気をつけながら運用していたように思います。

それが、このブログが公開された 5 月 9 日以降に添付されたファイルへのアクセスには認証が必要になりました。

具体的には次のような変更があります。

  • ウェブブラウザから Issue や Pull Request を閲覧する際に表示される画像の URL には jwt のパラメータが付与されており、5 分で失効して以降は 404 が返ります。

    • 次のような形で jwt が入っています
      • https://private-user-images.githubusercontent.com/xxx.png?jwt=xxx
    • 有効な jwt 付きの URL は誰でも開けるので注意が必要です
      • 試した感じ、添付画像が含まれる private リポジトリのページを開くと、添付画像の URL には jwt パラメータが含まれるようになってるので、これで認証してるようです。
        jwt パラメータ付きの URL はログインなしでも開けるので、認証がかかると思って誤って共有しないように注意。
        https://twitter.com/miyajan/status/1655914766102298629

  • プライベートリポジトリに関する電子メールには Issue や Pull Request で添付されたファイルは直接載らないようになり、代わりに URL が載るようになりました。

なお、今回の変更は過去に遡っては適用されないため、注意が必要です。

組織によっては機微情報を含むファイルを載せても良くなるかもしれず、便利になりそうですね。

本項の執筆者: @defaultcf、本項の編集者: @korosuke613

GitHub Actions: All Actions will run on Node16 instead of Node12 | GitHub Changelog

https://github.blog/changelog/2023-05-04-github-actions-all-actions-will-run-on-node16-instead-of-node12/

以前より告知されていた通り、GitHub Actions において、5/18 より GitHub Actions で動作する全ての JavaScript アクションは Node.js v16 で動作するようになります。

元々 JavaScript アクションで指定できる Node.js のバージョンは v12 のみでした(node12)が、一昨年末から Node.js v16 も指定できるようになりました(node16)[1][2]

5/18 以降は node12 を指定しても Node.js v16 で動作するようになります。
(もとより Node.js v12 自体は 2022 年 4 月にサポートが終了しています。)

JavaScript アクションを開発している方でまだ node12 を指定している方は node16 でも動くようにアクションを更新しましょう。

そういや Node.js 16 は 2023 年 9 月にサポート終了予定ですが、まだ node18 は出ていませんね。

Secret scanning's push protection is available on public repositories, for free | GitHub Changelog

https://github.blog/changelog/2023-05-09-secret-scannings-push-protection-is-available-on-public-repositories-for-free/

GitHub の Secret scanning において、push protection がすべてのパブリックリポジトリで利用可能になりました。

push protection は、push しようとしたコミットに GitHub の PAT などのシークレットが含まれていた場合、push を拒否する機能で、2022 年 4 月にリリースされました

既存の Secret scanning はリモートリポジトリ上のシークレットを検知してくれますが、push protection はリモートリポジトリへの push 前にシークレットを検知してくれるため、漏洩を未然に防止できます。

これまでは GitHub Advanced Security を契約している場合に利用可能でしたが、今回の変更により、すべてのパブリックリポジトリで利用可能になりました。

実際に有効化した上で、シークレットをコミットして push しようとすると、以下のようなエラーが出て push が拒否されます。

※ 今回は GitHub の PAT(削除済み)をコミットしました。github_pat_hogehogehogehoge...

GitHub の PAT(削除済み)をコミットして push しようとした場合の例
❯ git push
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 10 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 722 bytes | 722.00 KiB/s, done.
Total 4 (delta 3), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (3/3), completed with 3 local objects.
remote: error GH009: Secrets detected! This push failed.
remote:
remote:             GITHUB PUSH PROTECTION (beta)
remote: ——————————————————————————————————————————————————————
remote:  Resolve the following secrets before pushing again.
remote:
remote:  (?) Learn how to resolve a blocked push
remote:  https://docs.github.com/code-security/secret-scanning/pushing-a-branch-blocked-by-push-protection
remote:
remote:
remote: —— GitHub Personal Access Token ——————————————————————
remote:  locations:
remote:    - commit: 1cb6f4aa448dd3938335a681a3929697d93e6f70
remote:      path: articles/productivity-weekly-20230510.md:72
remote:
remote:  (?) To push, remove secret from commit(s) or follow this URL to allow the secret.
remote:  http://github.com/korosuke613/zenn-articles/security/secret-scanning/unblock-secret/hogehoge
remote:
remote:
remote:
To https://github.com/korosuke613/zenn-articles
 ! [remote rejected] pw-20230510 -> pw-20230510 (push declined due to a detected secret)
error: failed to push some refs to 'https://github.com/korosuke613/zenn-articles'

push がちゃんと失敗してますね。push protection によるものであることも明記されてて親切です。
また、どのコミットでどのファイルの何行目が何に引っかかったかも教えてくれます。

To push, remove secret from commit(s) or follow this URL to allow the secret.
remote: http://github.com/korosuke613/zenn-articles/security/secret-scanning/unblock-secret/hogehoge

さらに、push をバイパスするためのリンクも表示されています。リンクをクリックすると次のような画面が表示されます。


テスト用途や誤検知した時に引っかかった文字列をバイパスして push することもできる

  • It's used in tests
    The secret poses no risk, and if anyone finds it, they cannot do any damage or gain access to sensitive information.
  • It's a false positive
    The detected string is not a real secret.
  • I'll fix it later
    The secret is real, I understand the risk, and I will need to revoke it. This will open a security alert and notify admins of this repository.

テスト用途だから、誤検知だから、後で直すからといった理由を選択し、Allow me to push this secret をクリックすることで検知された文字列を含んだまま push が可能になるようです。


https://github.com/settings/security_analysis から自分がオーナーの全リポジトリに一括設定できる

push protection、うっかりコミットをだいぶ減らせてくれそうですね。
各リポジトリへ個別設定もできますが、ユーザの設定画面から一括設定&新規リポジトリに自動設定も可能です。基本的に有効化して損しない機能だと思うので、ぜひ有効化しましょう。

GraphQL improvements for fine-grained PATs and GitHub Apps | GitHub Changelog

https://github.blog/changelog/2023-04-27-graphql-improvements-for-fine-grained-pats-and-github-apps/

GitHub において fine-grained Personal Access Token および GitHub Apps で GraphQL API が叩けるようになりました。

fine-grained PAT が登場した段階では GitHub の GraphQL API には対応していなかったため、GraphQL API を利用するためには classic PAT の利用が必要でした。

また、GitHub Apps に関しても改良がされており、user-to-server トークン[3]を使用する場合、デフォルトでパブリックリソースへの GraphQL での read アクセスが可能になりました[4]
REST API に関しては一昨年似たような対応がされています[5]

ようやく fine-grained PAT で GraphQL が叩けるようになったなという感じです。使いやすくなりましたね。ただ、いまだに有効期限を必ず設定しないといけない仕様であるため、個人的には fine-grained PAT はまだまだ使わないかなという感じです[6]

Introducing Actions on the Repository view on GitHub Mobile | GitHub Changelog

https://github.blog/changelog/2023-05-09-introducing-actions-on-the-repository-view-on-github-mobile/

GitHub Mobile で GitHub Actions の情報が見られるようになりました。ワークフローの再実行もできます。

リポジトリのトップ画面に Actions への導線が用意されており、そこからワークフロー一覧に飛ぶことができます[7]

https://twitter.com/Shitimi_613/status/1655958448176259072?conversation=none

色々見たところ、次のようなことが可能でした。

  • ワークフロー一覧の表示
  • ワークフローラン一覧の表示
  • ワークフローランの詳細表示
    • 再実行(失敗したジョブのみ再実行も可能)
  • ジョブのログの表示

逆に、次のようなことはできませんでした(確認できてないだけ説も)。

  • workflow_dispatch の実行
  • $GITHUB_STEP_SUMMARY の表示

これで外出先でも CI の再実行や落ちた原因を調べやすくなりますね(?)
単純にモバイルでも確認できるのは嬉しいです。

Terraform Cloud no-code provisioning is now GA with new features

https://www.hashicorp.com/blog/terraform-cloud-no-code-provisioning-is-now-ga-with-new-features

Terraform Cloud にて、ノーコードで簡単にモジュールをデプロイできるようになりました。

Terraform Cloud の Business tier である必要があります。

通常のモジュール開発と違って、ノーコードモジュールは次の特徴があります。

  • provider を宣言する必要がある
  • Terraform やインフラに不慣れな人のために次を意識する
    • 変数の数は少ないほど良い
    • 組織の要件に合わせて、予めハードコーティングしておくと良い

なお、モジュールに変更を加えても、作成済みのノーコードワークスペースにその変更を適用できません。変更済みのモジュールで新しくワークスペースを作り直す必要があります。
ここは不便なような気がします...

しかし社内のエンジニアがあらかじめモジュールを作成しておき、それを使って社内の誰でもインフラ含め量産できると考えると、それなりに需要のある機能のように思います。

本項の執筆者: @defaultcf

Slack、さまざまなAIをSlackに統合する「Slack GPT」発表 - Publickey

https://www.publickey1.jp/blog/23/aislackslack_gpt.html

未読スレッドの要約、メールの文面生成などなどができるようになるとのことです。

  • OpenAI の ChatGPT や Anthropic の Claude を使ったアプリなど、好みの学習モデルを統合して自動化できます。
    • 今年後半には Workflow Builder でステップの 1 つに AI の処理を追加できるようになる
  • AI による会話要約や文章作成機能などが Slack に組み込まれます。
    • 未読メッセージや下書きを要約してくれたりする機能が予定されているそうです。
  • Salesforce Customer 360 と Data Cloud と連携して、AI を活用した顧客インサイトを見られる Enstein GPT app が登場します。
    • 自動でチケットを作ってくれたりするそうです。

Anthropic の Claude は ChatGPT と競合の汎用チャット bot です。
ユースケースに合わせて学習モデルを変更できるのは嬉しいですね。

それに要約機能はとても便利そうですね!今後が待ち遠しいです。

本項の執筆者: @defaultcf

know-how 🎓

Technology Radar | An opinionated guide to technology frontiers | Thoughtworks

https://www.thoughtworks.com/radar

半年に一度ほど更新される、Thoughtworks 社の Technology Radar の最新版 Vol.28 が公開されました。
眺めてみると知っているものもあれば知らないものもあり、勉強になります。

以下に私が個人的に気になったものを挙げます。

  • Adopt(企業が取り入れるべき技術)
    • CI/CD の SaaS
      • 新しいテクノロジーだろうか、とちょっと驚き
    • Dependency Pruning(刈り込み)
      • ビルド時間の短縮は勿論のこと、セキュリティ的にも攻撃対象を減らすことは重要であるとのこと、確かに
  • Trial(追いかける価値のある技術)
    • Helm
  • Access(探求すべき技術)
  • Hold(注意を払うべき技術)
    • WebHook がカジュアルに保管されている件
      • WebHook URL は機密情報として扱うべし、確かにという感じです

探求ネタに困ったら、ここの技術を追いかけてみると良いかもしれません。

本項の執筆者: @defaultcf

read more 🍘

Productivity Weekly で出たネタを全て紹介したいけど紹介する体力が持たなかったネタを一言程度で書くコーナーです。

  • news 📺
    • The new code search and code view is now generally available | GitHub Changelog
      • GitHub の新しい code search が GA になりました
        • 2 月よりパブリックベータとなっていました
      • 僕はよく使っていますが、やっぱり正規表現を使えるのがとても嬉しいです
    • Codespaces Settings Sync Updates | GitHub Changelog
      • GitHub Codespaces を VSCode for Web で利用する際に設定の同期を双方向でできるようになりました
        • これまでも設定を変えたら双方向にはできたようですが、それについてはよくわかっていません
      • これまでは VSCode for Web 上ではデフォルトで片方向の設定同期がされるようになっていました
      • これからは Settings Sync を有効にすることで Web 上でも双方向の同期ができるようになります
  • know-how 🎓
    • GitHub Actionsにおける設定ミスに起因したGitHubスタッフのアクセストークン漏洩
      • GitHub Actions のセルフホストランナーを開発している public repo において、E2E テスト時のワークフローの不備で GitHub スタッフのアクセストークンを悪用できたという話です。著者の報告により既に修正済みです
      • もし悪用されていたら大変なことになっていましたね。GitHub Actions の権限には気をつけましょう
        • パブリックリポジトリで PAT を使うなという話でもあると思う

あとがき

みなさん GW[8]はいかがお過ごしでしたか?
僕は野球見に行って 1 日中カタンで遊んで富士山の麓でバーベキュー的なことをしてきました。
去年の GW は暇すぎて船橋のららぽーとまでチャリ漕いで行って、マック食べて帰ってきたくらいだったので、天と地の差がありますね。

今週号は、手伝いたいとのお声をいただいたため、実験的に生産性向上チームメンバーにもいくつかのトピックを紹介していただきました。
今後も続けていくと思います。

また、サイボウズエンジニアサマーインターン 2023 において、生産性向上コースのエントリーが始まりました。興味ある方はどしどしご応募ください。

エントリー期間:5 月 15 日(月) 10:00 〜 5 月 29 日(月) 10:00

https://cybozu.co.jp/company/job/recruitment/intern/improvement.html

サイボウズの生産性向上チームでは社内エンジニアの開発生産性を上げるための活動を行なっています。そんな生産性向上チームが気になる方は下のリンクをクリック!
https://note.com/cybozu_dev/n/n1c1b44bf72f6

脚注
  1. JavaScript Actionsをnode16で動かすようにする - Kengo's blog ↩︎

  2. Actions can now run in a Node.js 16 runtime | GitHub Changelog ↩︎

  3. GitHub Apps の権限を使いつつ、ユーザとして操作したことにする場合の話(だと思います)。https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-user-access-token-for-a-github-app ↩︎

  4. GitHub Apps から GraphQL を叩くこと自体は結構前から対応されています。GraphQL API support for GitHub Apps | GitHub Changelog ↩︎

  5. GitHub App user-to-server REST API requests now have read access to public resources | GitHub Changelog ↩︎

  6. 特に中の人を交えた議論もされてなさそう。https://github.com/orgs/community/discussions/36441#discussioncomment-3908900 ↩︎

  7. ちなみに日本語だと「アクションアクション」となぜか 2 回繰り返されています。多分そのうち直ると思います。https://twitter.com/Shitimi_613/status/1655958441784143875 ↩︎

  8. ゴールデンウィークの略です。グループウェアではありません。 ↩︎

GitHubで編集を提案
サイボウズ 生産性向上チーム 💪

Discussion