🐑

Productivity Weekly (2023-10-04号)

2023/10/17に公開

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

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

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

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

news 📺

GitHub Actions: Apple silicon (M1) macOS runners are now available in public beta! - The GitHub Blog

https://github.blog/changelog/2023-10-02-github-actions-apple-silicon-m1-macos-runners-are-now-available-in-public-beta/

GitHub Actions でやっと Apple Silicon(M1)のランナーが利用可能になりました。ただし Larger runner なので通常の macOS ランナーとは異なり無料枠はありません。値段を見ると従来の macOS の Larger runner であった Intel 12 コアより割高な値段設定に見えるのですが、実はこのタイミングで Intel 12 コアの値段が下がっているので[1]新しい M1 は Intel 12 コアの従来の価格設定と比べると半額の$0.16/分になっています。

通常の macOS ランナーと比べると割高ではありますが、Apple Silicon のアーキテクチャになったことで Xcode ビルドなどにかかる時間が短縮されれば課金される時間も短くなるため、実際に使ってみてコスト検証してみると良いでしょう。

ちなみに細かい注意点として新しい Larger runner が Apple Silicon アーキテクチャであることに由来してコミュニティ製の action が動く保証はなかったり、ネストされた仮想化は不可能といった制限があるようです。
https://docs.github.com/en/actions/using-github-hosted-runners/about-larger-runners/about-larger-runners#limitations-for-macos-larger-runners

弊チームの @miyajan が Arm アーキテクチャの docker が使えることを期待して試したのですが、残念ながら使えなかったことを discussion にて報告したところ返信の中で仮想化の制約について言及されていました。

本項の執筆者: @Kesin11

How GitHub uses GitHub Actions and Actions larger runners to build and test GitHub.com - The GitHub Blog

https://github.blog/2023-09-26-how-github-uses-github-actions-and-actions-larger-runners-to-build-and-test-github-com/

GitHub 社自身の CI に Larger Runner を活用するためにどのような機能を追加していったかの記事です。その中で GitHub 社の CI の要件に合うようにいくつかの機能を追加したという内容ですが、自分の知る限りでは一般向けには初出の機能がいくつか存在したので面白い記事でした。

VM のカスタムイメージ

ランナーには元々様々なツールがプリインストールされていますが、足りないツールを追加でインストールする必要がある場合は CI の時間を消費してしまいます。そこで GitHub の CI に必要なツールや、ソースコードやビルドアーティファクトをキャッシュとして初めから追加済みのカスタム VM イメージを用意しておくことで今まで 50 分かかっていたワークフローを 12 分まで短縮できたようです。

このカスタム VM イメージに関しては、公開ロードマップの issue として一般向けにも公開されていました。
https://github.com/github/roadmap/issues/826

前ビルドの結果を使ってスキップ

前回のビルドからファイルの中身が変わっていない場合、再度ビルドしても同じ結果になるはずであることから前回ビルドで生成された内容を再利用することで実際の CI 実行をスキップさせたようです。これにより 1 日あたり 300 から 500 のワークフロー実行が節約されたとのことです。

これについて自分の感想としては、最近のビルドツールに搭載されているファイルのハッシュ値などを見て変化がなければ自動でスキップする機能と同様だと思いました。今でもこれらのビルドツールを利用すれば同様のことは可能ですが、もしも GitHub Actions 自体にこういった機能が組み込まれたら相当に便利だと思います。自分の記憶では今回が初出の機能ですが、ぜひ一般向けにも公開されることを期待したいです。

OIDC でプライベートネットワークに接続

Larger runner は GitHub 社の社内ネットワークとは隔離されたところで動いているため、社内ネットワークへ疎通させるために GitHub Actions 内で生成した OIDC トークンを使って社内ネットワークへのゲートウェイ認証しているとのことです。これを実現するためのサンプルリポジトリも公開されてます。

本項の執筆者: @Kesin11

Release 6.0.0: Introducing Renovate Community Edition and Renovate Enterprise Edition · mend/renovate-ce-ee

https://github.com/mend/renovate-ce-ee/releases/tag/6.0.0

Renovate Community Edition(CE)、Renovate Enterprise Edition(EE) が新たにリリースされました。
Renovate CE は Renovate On-Premises の後継であり、リリースバージョンも継続され、無償のままです。Renovate EE は水平スケーラビリティ、エンタープライズサポート、Mend 社の Smart Merge Control 機能が利用可能な新しい有償製品です。

New features として、administration API が使えるようになったこと、Renovate CE ではイメージ名が変更され、デフォルトで slim バージョンになっており、-full サフィックス付きのイメージ名を指定するとサードパーティツールがプリインストールされたイメージを利用できることとあります。(プリインストールされるツールはこちら)

Renovate On-Premises から Renovate CE への移行はマイグレーションドキュメントが用意されています。完全後方互換性を謳っていますが注意点として、新規追加やリネームされた環境変数があるので、それらの再設定をする必要があります。

開発者の方が Issue や PR で即レスしてくれるので、Renovate に関する質問や要望がある方はぜひ GitHub で Issue を立ててみてください。

本項の執筆者: @r4mimu

Release v1.3.0 · actions/create-github-app-token

https://github.com/actions/create-github-app-token/releases/tag/v1.3.0

先日、GitHub 公式で GitHub Apps のトークンを払い出すアクション actions/create-github-app-token が公開された件を紹介しました。その際、アクションを実行しているリポジトリのオーナーに関する権限しか取得できない話をしました。

ただ、v1.2.1 時点だと、アクションを実行しているリポジトリのオーナーに関する権限しか取れないようです。トークンを取得したいオーナーが異なる場合は、機能追加されるまで 3rd party アクションを利用するのが良さそうです。

しかし、v1.3.0 で対象 owner を変更できるようになりました。また、対象リポジトリも指定することで、権限に制限をかけられるようになりました。
新たに追加された inputs は ownerrepositories です。

  • owner
    • App のインストール先の owner を指定する
    • 空の場合は、現在のリポジトリの owner が指定される
  • repositories: Optional: Comma-separated list of repositories to grant access to. If empty, defaults to all repositories. If owner is set and repositories is empty, access will be scoped to all repositories in the provided repository owner's installation. If owner and repositories are empty, access will be scoped to only the current repository.
    • App にアクセス権限を与えるリポジトリを指定する
    • owner が指定されており、repositories が空の場合は、owner の全てのインストールされたリポジトリが対象になる
    • ownerrepositories が空の場合は、現在のリポジトリのみが対象になる

詳しくは v1.3.0 の README.md を参照ください。

他の owner のトークンが払い出せるようになったりリポジトリの制限ができるようになったりと、かなり便利になりましたね。
ちなみに、本項目執筆時点では v1.4.0 と v1.5.0 がすでにリリースされています。

  • v1.4.0
    • inputs.skip_token_revoke でジョブ終了時にトークンを revoke するかの制御ができるようになりました
  • v1.5.0
    • inputs の各パラメータ名で - 区切りが推奨になりました(例: skip-token-revoke
    • _ 区切りも引き続き使えますが、非推奨のメッセージが出るようです
    • 気づいたら - 区切りにするのが良さそうです

皆さんもどんどん公式アクションに置き換えていきましょう。

本項の執筆者: @korosuke613

npm provenance general availability - The GitHub Blog

https://github.blog/changelog/2023-09-26-npm-provenance-general-availability/

半年前に public beta として登場した npm provenance が GA になりました。また、登場当初は GitHub Actions のみ対応されていましたが、他の CI サービスとして GitLab CI/CD でも対応されました。

GitHub Actions、GitLab CI/CD から npm に publish している人は npm publish --provenance していきましょう。

本項の執筆者: @korosuke613

Amazon Bedrock Is Now Generally Available – Build and Scale Generative AI Applications with Foundation Models | AWS News Blog

https://aws.amazon.com/jp/blogs/aws/amazon-bedrock-is-now-generally-available-build-and-scale-generative-ai-applications-with-foundation-models/

生成 AI アプリケーションを構築するためのフルマネージドサービス Amazon Bedrock が GA になり、東京リージョンで利用可能になりました。
Bedrock は AI21 Labs、Anthropic、Cohere、Stability AI、Amazon から提供される高性能な基盤モデルを API から利用できるサービスです。

主な特徴は以下のとおりです。

  • 任意の基盤モデルを独自のデータでカスタマイズしたり、ビジネスタスクを実行するエージェントを作成できる
  • サーバレスなので、インフラストラクチャの管理やスケーリングを意識する必要がない
  • Amazon CloudWatch や AWS CloudTrail と連携しているため、モニタリングとガバナンスのニーズをサポート

モデルごとに料金計算方法が異なっており、例えばテキスト生成モデルは処理された入力トークンと生成された出力トークンごとに、画像生成モデルは生成された画像ごとに課金されるそうです。

AWS News Blog では Python (Boto3) でのアプリケーション開発例が紹介されており、実際に手を動かして学ぶことができるので気になる人はチェックしてみてください。

本項の執筆者: @r4mimu

know-how 🎓

Technology Radar Vol.29 が公開

https://www.thoughtworks.com/radar

PDF へのリンク: https://www.thoughtworks.com/content/dam/thoughtworks/documents/radar/2023/09/tr_technology_radar_vol_29_en.pdf

毎度おなじみ、Thoughtworks 社の Technology Radar、最新の Vol.29 が公開されました。

Technology Radar の読み方を知らない人は次の記事が参考になります。

全部紹介すると時間がないので、平木場が気になったものをピックアップします。

  • Technique
    • Trial(追求する価値はある)
      • New) Automatic merging of dependency update PRs
        • 適切な状況下(あらゆるテストが実行されている、広範なカバレッジを得ている、セキュリティスキャンを経ている、など)では Renovate や Dependabot による依存関係の更新 PR は自動的にマージされるようにしよう
      • New) Provision monitors and alerts with Terraform
        • Splunk や Datadog などのモニタリングツールの設定を Terraform で管理しよう
      • New) Unit testing for alerting rules
        • アラートルールをユニットテストしよう。Prometheus はユニットテストツールをサポートしてるよ
        • きば)アラートルールのユニットテストツールなんてあるんすね
      • Moved in) Zero trust security for CI/CD
        • CI/CD パイプラインにおいて、ゼロトラストセキュリティを適用しよう。OIDC のような統合された ID メカニズムを通じてパイプラインとクラウドプロバイダを認証するや、神ユーザーアカウントを使わずに適切な権限を与えるなど。内部ネットワークの CI/CD パイプラインでは忘れられがちだから注意
        • きば)こいつは Adopt でもいい気がする
  • Platforms
    • Adopt (採用しよう)
      • Moved in) Colima
        • macOS 上の Docker Desktop 代替ツール
        • きば)Colima、そんなに成熟してたのか。登場当時は単なる ShellScript だったのに
  • Tools
    • Adopt (採用しよう)
      • Moved in) Mermaid
        • 独自のマークアップ言語から図を生成するツール。GitHub や GitLab などでネイティブサポートされ始めた
        • きば)GitHub が採用して以来、だいぶエコシステムが拡充された気がする
    • Trial(追求する価値はある)
      • New) Container Structure Tests
        • コンテナイメージの構造をテストするツール。Google 製(ただし公式にはサポートされてないらしい)。ファイルの有無や内容、特定のコマンド内の出力やエラーの確認ができる
        • きば)こんなツールが出てたとは。便利そう
      • New) IntelliJ HTTP Client plugin
        • エディタ内で HTTP リクエストを作成、編集、実行できる JetBrains IDE 向けプラグイン
        • きば)便利そう
      • Moved in) mob
        • モブプログラミングにおいてシームレスに git を引き渡すためのコマンドラインツール
        • きば)どうやらモブが終わった際に自動で Co-authored-by が付くらしい。これ欲しかったかも
  • Languages & Frameworks
    • Adopt (採用しよう)
      • Moved in) Playwright
        • ブラウザを使った E2E テストツール
        • きば)とうとう Adopt 入り

本項の執筆者: @korosuke613

aqua CLI Version Manager 入門

https://zenn.dev/shunsuke_suzuki/books/aqua-handbook

CLI Version Manager ツールの aqua の作者の方が aqua の入門本を公開されました。
チュートリアルとして基本的な使い方を解説から、Tips や Renovate の設定といった実践的な内容まで書かれており、これから使いたい人にも既に使っている人にも参考になるかと思います。
本の後半では、Registry の作り方や Standard Registry へのコントリビューション方法が解説されており、流石作者の方といった感じです。

似たような CLI Version Manager ツールとして asdf などが有名ですが、asdf や他のツールと比較した際に、aqua ができること・できないことも述べられており、選定の参考にもなります。

aqua を始めたいけれど、英語ドキュメントを読むのがつらい方は、この本から始めるのが安心でオススメかと思います。

本項の執筆者: @r4mimu

read more 🍘

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

本項の執筆者: @korosuke613

あとがき

今週号でした。実は 10/12(木)から kintone 開発チームへ体験入部に行ってます。前々からプロダクト開発は経験しておきたかったのですが、生産性向上チームのメンバも増えて余裕がだいぶ出てきたので「行くか、体験入部」となりました。
全く時間がないわけではないので Weekly は(今の所)引き続き書いていますが、やはり歴史の長いプロダクトであるため、コードベースもチームの規模もめちゃデカく、生産性向上チームの比ではないです。知っておかなければいけないことが多すぎてパンクしそうですね😇 なるほどこれが中途の気分かとなっていますが、色々持ち帰れたらと思います。

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

Engineering Productivity Meetup #1 in Tokyo - connpass

https://cybozu.connpass.com/event/298452/

サイボウズの東京オフィスで開発者の日々の生産性を高めるための知見や技術を語り合うイベントを開催されます(宣伝)。
発表・質問・交代含む 10 分程度の LT 形式です。簡単な自動化でもなんかすごい改革でも、「開発生産性の向上」に関する内容であればなんでもいいので、みなさんどしどし参加してください。

脚注
  1. 値段変化の diff: https://github.com/github/docs/commit/76f7e40122db0ba541ce6729596287ab08b22d0a ↩︎

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

Discussion