Claude Code on the Webを使ってみた

ブラウザ上でClaude Codeを利用できる Claude Code on the Webを試してみた。

code.claude.com

よかったところ

特に何も準備せずに使い始めることができるので楽。簡易Devinのようなイメージか。 普段は手元のClaude Codeを利用して開発を進めつつ、Claude Code on the Webを利用するときにはセットアップ済のCLAUDE.mdなどの資産を利用できるのはうれしい。

雑に指示してPR作成までやってくれるので細かい修正などをここでやるのはあり。

いまいちなところ

GitHub連携が不完全。具体的にはGitHub Issueを参照できないし、PRのコメントやCIエラーも確認できない。このため、これを人手で実施する必要がある。
IssueのXXに対応して、とかCIエラーに対応して、みたいな指示ができず全部自分が伝言ゲームする必要がある。一応、セットアップスクリプトでghコマンドをインストールし、環境変数(ただしシークレットの利用は非推奨)にPATを設定すればできるらしい。が、環境変数のセキュリティの問題もあるので試していない。

github.com

github.com

ということで、単純なClaude Code on the Webは今のところ使えないという判断。

一方で、リモートコントロールだと実際の動作はローカルなので話は別になる。当然、事前にローカルでclaudeを実行しておく必要があり、1つのセッションを使い回す必要があるのは懸念点。とはいえ、Web上で動作するClaude Codeに比べれば活用の余地はありそう。

Here Stringsには改行が必ず含まれる

コマンドの標準入力に文字列を渡す方法として Here Stringsがある。

$ cat <<< "test"
test

この記法の注意点として必ず改行が含まれる。

The result is supplied as a single string, with a newline appended, to the command on its standard input

改行を含めたくなければ echo -n がてっとりばやい。

$ echo -n "test" | cat
test$

Terraformのmoduleではnested block構文が使えない

Terraformのresourceやdata sourceではnested block構文を利用できるが、 module定義ではnested block構文を利用できないし、resourceなどにおいても現在は非推奨であることを知ったのでメモ。

resourceでのnested block構文

resourceのような top-level block type 内において利用するblock構文をnested blockと呼ぶらしい。

例えば aws_instance resourceでは、ebs_block_device blockを複数回指定できる。 この ebs_block_device がnested block構文。これは attribute ではないので ebs_block_device = {...} のような構文になっていないことに注意。

resource "aws_instance" "example" {
  ami           = "ami-12345678"
  instance_type = "t3.micro"

  ebs_block_device {
    device_name = "/dev/sdf"
    volume_size = 10
  }

  ebs_block_device {
    device_name = "/dev/sdg"
    volume_size = 20
  }
}

Block構文は詳細にはList Nested, Set Nested, Single Nestedの3種類が存在する。これはterraformのplugin開発者向けのドキュメントで解説されている。 実際のところ、 ebs_block_device の場合は順番が考慮されない Set Nested Block Typeであることが、実装などからもわかる。

moduleにはblock構文が利用できない

module呼び出しでは同様のblock構文を利用できない。

module "example" {
  source = "./modules/example"

  # これは不可能
  ebs_block_device {
    device_name = "/dev/sdf"
    volume_size = 10
  }

  # これは可能
  ebs_block_device = {
    device_name = "/dev/sdf"
    volume_size = 10
  }
}

moduleの入力変数はすべてattributeとして扱われるため、blockを指定することはできない。 あまり意識したことが無かったのでmodule block referenceを確認したが、特に block構文についての説明は無かった。

resourceにおけるblock要素の非推奨化について

参考に、resourceのlifecycleのようなmeta-argumentはnested block構文で定義されている。 一方で、AWS providerなどで定義されているresourceやdata sourceにおいてはblock構文は非推奨化されている。前述のaws_instance resourceでいえば ebs_block_deviceのようなblock構文は非推奨で、互換性のためにサポートされている。代替としてattributeを利用することを推奨している

Tip

Use nested attribute types instead of block types for new schema implementations. Block support is mainly for migrating legacy SDK-based providers.

もちろん、awsなどのproviderを利用する上では関係無いが、providerを開発する上では block構文は非推奨でattributeを利用すればよいこと、block構文は基本的にはmeta-argumentで利用するものと考えておいてよさそう。

aqua本体の更新エラーをSLSA無効化で回避する

aquaの更新エラー

aqua upaでaqua本体をアップデートしようとした際、SLSA検証で以下のエラーが発生した:

Verifying artifact /tmp/996689781: FAILED: matching bundle entry with content: unexpected tlog entry type: expected intoto:0.0.2, got dsse:0.0.1
FAILED: SLSA verification failed: matching bundle entry with content: unexpected tlog entry type: expected intoto:0.0.2, got dsse:0.0.1

実際には5回のリトライ後に失敗し、アップデートが完了しなかった。 アップデートは v2.31.0からv2.53.9に更新しようとしていた。

SLSA検証を無効化してアップデート

SLSA証明書の形式変更による互換性の問題によるエラー。一時的にSLSA検証を無効化してアップデートを実行する。 以下のように実行することで正常に更新できるようになった。

AQUA_DISABLE_SLSA=true aqua upa

アップデート後にシェルキャッシュをクリア

aqua upaが成功してもaqua versionを実行すると古いバージョンが表示された。which aqua でインストール先を確認すると確かに更新されているようだった。

これは、シェルのコマンドキャッシュが原因の様子。シェルが実行効率のためにキャッシュしているコマンドのフルパスをhash -rで全てクリアすることで解消できる。 バイナリが更新された際に新しいバージョンを確実に実行するために必要。

# コマンドハッシュテーブルをクリア
hash -r

# バージョン確認
aqua version

go fmtとgofmtの違いと使い分け

goのフォーマッタとしてgofmt と go fmtがあることを知った。

go fmt

go fmtはgoのサブコマンドとして実装されているフォーマッタ。 その実態は gofmt -l -w を指定パスに対して適用してくれる。

$ go help fmt 
usage: go fmt [-n] [-x] [packages]

Fmt runs the command 'gofmt -l -w' on the packages named
by the import paths. It prints the names of the files that are modified.

gofmt

pkg.go.dev

フォーマッタの実態。 差分表示(-d)やコード簡略化(-s)など、go fmtでは指定されていない細かなオプションなどを指定できる。

$ gofmt -h
usage: gofmt [flags] [path ...]
  -cpuprofile string
        write cpu profile to this file
  -d    display diffs instead of rewriting files
  -e    report all errors (not just the first 10 on different lines)
  -l    list files whose formatting differs from gofmt's
  -r string
        rewrite rule (e.g., 'a[b:len(a)] -> a[b:]')
  -s    simplify code
  -w    write result to (source) file instead of stdout

何が違うのか、どう使い分けるのか

go fmt 実行時に指定されるオプションの -l-w なので、デフォルトルールでフォーマットの修正を適用した上で修正したファイル一覧を出力してくれる。 なので基本的な動作は同じ。

基本的にはフォーマッタを適用して欲しいので、普段使いとしては go fmt ./... でよさそう。 CIで差分検知だけして書き換えまでは行いたくないときや、書き換えルールをカスタマイズしたいような特別なケースで gofmt を使えばよさそう。

Google Cloud release notes キャッチアップ 2025-02-08 - 2025-02-14

cloud.google.com

Kubernetes Engine

[CHANGE] (2025-R06) Version updates

GKEパッチリリース。 Rapid/Regular/Stable/Extended/No Channel のすべてで新しいバージョンがリリースされている。 特に、Regular Channelでは 1.31.5-gke.1023000 がデフォルトバージョンとして設定される。

github.com

BigQuery

[FEATURE] BigQuery data preparation provides context-aware join operation recommendations from Gemini

data preparationはGemini in BigQueryを使用してデータのクリーニング・変換・拡充を行う機能。 data preparationではGeminiが提案するデータ整形に加えて、手動でステップを追加することができる。このステップ追加において結合オペレーションがサポートされるようになった。

cloud.google.com

Cloud CDN

[FEATURE] Cloud CDN supports invalidation by using cache tags with faster performance and higher rate limits in Preview

Cloud CDNにおけるキャッシュ無効化のための機能として、invalidation by cache tagsがプレビューリリースされた。 従来のキャッシュ無効化の方法としてパスパターンを指定するがあるが、1分間に1回しかリクエストできず、反映に1-3分掛かる。cache tagを用いたキャッシュ無効化は1分間に500回までリクエストでき、反映に10秒程度で済む。

cloud.google.com

Cloud NAT

[FEATURE] Cloud NAT gateways for Public NAT support IPv6 to IPv4 network address translation in Preview

Public NATにおいて IPv6からIPv4に変換するNAT64機能がプレビューリリースされる。 NAT64を利用するためにはDNS64が必要で、DNS64は1月30日に先行してプレビューリリースされている。

cloud.google.com

Cloud Run functions

[FEATURE] Cloud Run functions created with the Cloud Functions (v2) API (cloudfunctions.googleapis.com) can now be detached so that they can only be managed through the Cloud Run Admin API (run.googleapis.com)

Cloud Run functionsは現在はCloud Runの機能の一部として構成されているが、従来はCloud Functionsとして別機能として構成されていた。このなごりで、Cloud Runを制御するAPIであるCloud Run Admin APIとは異なり、Cloud Run functionsはCloud Functions v2 APIで制御する。 このCloud Run functionsのAPI制御をCloud Functions v2 APIからCloud Run Admin APIに切り替えるためのdetach操作がリリースされた。 Cloud Run functionsに対してdetach操作を実行すると、今後はCloud Functions v2 APIではなく、Cloud Run Admin APIで制御するようになる。この機能はプレビューリリースされる。

cloud.google.com

AlloyDB

[CHANGE] The extension vector, which includes pgvector functions and operators, is updated to version 0.8.0

AlloyDB for PostgreSQLがサポートする拡張のうち、vectorがアップデートされた。 PostgreSQLにおいてベクトルデータを扱うための拡張として pgvector があり、これをAlloyDB for PostgreSQL向けにカスタマイズしたものがvector拡張として利用できる。このベースとなっているpgvectorがv0.8.0にアップデートされた。

Cloud SQL

[FEATURE] You can now use a custom DNS name to connect to your Cloud SQL instances by adding a custom subject alternative name (SAN) to your Cloud SQL instances.

Cloud SQLインスタンスにアクセスするためにIPではなくカスタムDNS名を利用できるようになる。 この機能はCustomer-managed CAを選択して構築したインスタンスでのみ利用可能。またこの機能はプレビューリリースされる。

cloud.google.com

[FEATURE] Cloud SQL for PostgreSQL now supports the tds_fdw extension

Cloud SQL においてPostgreSQL拡張の tds_fdwがサポートされた。 tds_fdw拡張はTabular Data Stream (TDS) プロトコルをサポートして外部へのアクセスを実現するための拡張で、これを用いて Microsoft SQL Serverなどと接続できるようになる。

cloud.google.com

Cloud Monitoring

[FEATURE] You can now use a variable to control the visibility of a dashboard widget

Cloud Monitoringのダッシュボードにはデータの表示を制御する仕組みとしてフィルタと変数があり、変数を用いてウィジェットレベルで表示を制御できるようになった。

cloud.google.com

Cloud Asset Inventory

[FEATURE] The following resource types are now publicly available through the ExportAssets, ListAssets, BatchGetAssetsHistory, QueryAssets, Feed, and Search (SearchAllResources, SearchAllIamPolicies).

アセットの操作対象として Essential Contacts API のリソースがサポートされた。

VPC Service Controls

[FEATURE] VPC Service Controls feature: Support for using third-party identities (both single identities and groups) in the ingress and egress rules to allow access to resources protected by a service perimeter is generally available

VPC Service ControlsはSecurity機能の一部で、 Google Cloudに対するAPI リクエストのアクセス元を制御する。 アクセス制御を実現する上では、IDグループを仕様することでユーザ集合を定義して制御できるが、このIDグループにWorkforce IdentityWorkload Identityを通してサードパーティIDを利用できる。この機能がGAリリースされた。

上り(内向き)ルールと下り(外向き)ルールで ID グループとサードパーティ ID を構成する  |  VPC Service Controls  |  Google Cloud

Organization Policy

[FEATURE] Custom organization policies are now generally available for Spanner / Identity-Aware Proxy / Developer Connect / Dataproc Serverless / Cloud DNS / security posture

組織ポリシーのカスタム制約を用いてSpanner / Identity-Aware Proxy / Developer Connect / Dataproc Serverless / Cloud DNS / security postureのリソースを柔軟に制御できるようになった。

Google Cloud release notes キャッチアップ 2025-02-01 - 2025-02-07

Cloud Billing

[CHANGE] Google Cloud Marketplace now uses the agency model for marketplace services for UK, FR, and DE customers.

Google Cloud Marketplaceは代理店が販売する形態(agency model)とGoogleが直接販売する形態の2つのトランザクションモデルをサポートしている。 代理店モデルを利用するためにはいつくかの要件を満たす必要があるが、アメリカに加えてUK、FR、DEの顧客は代理店モデルが採用されるようになった。これに伴い請求書の分割などが生じる。 (日本は対象外なのでこれらの条件は適用されない)。

cloud.google.com

Kubernetes Engine

[CHANGE] Starting on February 3, 2025, GKE will create a new service agent named service-{PROJECT_ NUMBER}@gcp-sa-gkenode.iam.gserviceaccount.com that the GKE system workloads that run on your worker nodes can use.

Google Cloudが提供・管理するサービスアカウントの一種であるサービスエージェントとして、GKEは新しいサービスエージェントを2025年2月3日以降に提供する。 現時点では、このサービスエージェントはデフォルトではGKEがノードを管理する上で必要最小の権限しか保持していない。GKEが管理して実行するワークロードをユーザのワークロードと区別するために利用される。 また、今後のGKEバージョンによって新しいGKE管理のワークロードが提供されるようになる。具体的な内容は今後のリリース待ち。

[FIXED] A bug in the image streaming feature caused authentication-related failures in specific scenarios when the workload tried to access container image data.

GKEにはコンテナイメージ全体をpullして利用するのではなく、必要なデータのみを取得して実行するための仕組みとしてイメージストリーミングがある。 イメージストリーミングを利用することでpull時間を短縮して素早くコンテナを起動することができる。

このイメージストリーミングの認証機能について一部のワークロードで正常に動作しない不具合があり、これが解消された。

[SECURITY] A security vulnerability was discovered in the Google Secret Manager Provider for Secret Store CSI Driver.

Google Secret Manager Provider for Secret Store CSI Driver において脆弱性が検出された。 この脆弱性CSI driverのサービスアカウントトークンを不正に取得できる可能性がある。

cloud.google.com

[FEATURE] GKE cluster notifications have the following new capabilities:

GKEクラスタの通知機能において以下の機能がサポートされた。

  • GKEクラスタに関するイベント通知をPub/SubではなくCloud Logging経由で取得することができる
  • 実行中のマイナーバージョンがEOS(end of support)を迎えているか近くEOSを迎える場合に、新しく通知するようになった
  • 実行中のGKEクラスタのアップグレードが完了したときに新しく通知するようになった。アップグレード完了は SUCCEEDED FAILED CANCELED の3つのステータスがある。

[CHANGE] (2025-R05) Version updates GKEパッチリリース。 Rapid/Regular/Stable/Extended/No Channel のすべてで新しいバージョンがリリースされている。 特に、Regular Channelでは 1.31.4-gke.1372000 がデフォルトバージョンとして設定される(1.31系が初めてデフォルト化された)。

[FEATURE] Weighted load balancing for GKE External LoadBalancer Services is now generally available on GKE clusters running version 1.31.0-gke.1506000 or later.

外部ロードバランサにおいて重み付きロードバランシングがサポートされる。 従来のロードバランサは稼動しているpod数にかかわらずリクエストをルーティングしていた。重み付きロードバランサは稼動しているpod数に応じてリクエストの割り当てを分散してくれる。

cloud.google.com

Cloud Service Mesh

[ANNOUNCEMENT] A new version of the data plane for Gateway API is now generally available (GA) as a part of managed Cloud Service Mesh for clusters on GKE Rapid channel.

Gateway APIKubernetes公式のプロジェクトの1つで、L4/L7ネットワークの構築の仕組みを共通化してくれる。GKEにおいてもCloud Service Meshの構築を簡単に実現可能となる。 Gateway APIがGAとして、Rapidチャンネルで利用できるようになった。

cloud.google.com

[ANNOUNCEMENT] Managed Cloud Service Mesh starts using Envoy.1.33 for Gateway API on GKE clusters with rapid channel.

GKE rapid channelにおいて、Envoy 1.33の利用が開始した。 これは前述のGateway API提供の一環としてアップデートされた様子。

Config Connector

[ANNOUNCEMENT] Config Connector version 1.128.0 is now available. Config ConnectorはOSSとしても提供されており、v1.128.0がリリースされた。 この変更内容が以下のリリースノートとしても記載されている。

[FEATURE] New Beta resources (direct reconciler)

Config Connectorには直接APIを叩いてリソースを構築するdirect reconcilerという方式がある。 このdirect reconcilerにて新しく ApigeeEnvgroupおよびKMSAutokeyconfigのリソースがサポートされた。

[FEATURE] New Fields

SpannerIsntanceリソースに対して、spec.autoscalingConfig および spec.edition の機能を指定して利用するためには direct reconcilerのアノテーションタグを利用する必要がある。 direct reconcilerのアノテーションタグについては次のReconcilation Improvementsを参照。

[CHANGE] Reconciliation Improvements

direct reconcilationをオプトイン形式でAPI変更なしに利用する方法をサポートする。 alpha.cnrm.cloud.google.com/reconciler: direct アノテーションを対応するオブジェクトに付与することで利用可能となる。この方式は現在 AlloyDBInstance および SpannerInstance のリソースにてサポートされている。

[CHANGE] New Alpha resources (direct reconciler)

direct reconcilerにて新しく IAPSettings, SecureSourceManagerInstance, SecureSourceManagerRepositoryのリソースがサポートされた。

[FIXED] DataformRepository fields validation error.

DaformRepositoryリソースにおけるフィールドのバリデーションフォーマットが正しくない問題が解消された。

Cloud Storage

[ANNOUNCEMENT] Announced billing changes for accessing Cloud Storage through BigQuery take effect Feb 21, 2025.

2025年2月21日以降、BigQueryを通してGCSを利用した場合に利用料が発生するようになる。 従来は不具合により請求されていなかった。この変更は2025年2月1日以降適用される予定だったが、この予定が変更された。

cloud.google.com

BigQuery

[CHANGE] The BigQuery ML ML.BUCKETIZE and ML.QUANTILE_BUCKETIZE functions now support formatting of the function output.

BigQuery MLはBigQueryに対するクエリでMLのモデルの作成と実行ができる機能。 このBigQuery MLにおける2つの関数 ML.BUCKETIZEML.QUANTILE_BUCKETIZE (いずれも分類タスクを実施する関数)において出力フォオーマットが指定できるようになった。

cloud.google.com

cloud.google.com

[FEATURE] You can now use the BY NAME and CORRESPONDING modifiers with set operations to match columns by name instead of by position

BigQueryで用いられるSQLシンタックスである GoogleSQL for BigQueryに BY NAME および CORRESPONDING 修飾子が追加された。 これにより、集合をカラム位置ではなくカラム名で一致させることができる。

cloud.google.com

また、この内容については以下のブログ記事がわかりやすかった。

dev.classmethod.jp

[FEATURE] You can create a JavaScript user-defined aggregate function by using the CREATE AGGREGATE FUNCTION statement.

SQLによるユーザ定義集計関数(UDAF)と同様に、JavaScriptによるユーザ定義集計関数を作成できるようになる。 この機能がGAリリースされる。

cloud.google.com

Cloud Run

[FEATURE] When deploying a function in Cloud Run, you can now specify an Artifact Registry image repository to store the container (Preview).

Cloud Run functionをデプロイするとき、作成した関数はGoogle Cloudが管理するArtifact Registryにイメージとして保存される。 この保存先のリポジトリとして、ユーザが作成・管理するリポジトリを指定できるようになった。 この機能はプレビューとして提供される。

cloud.google.com

AlloyDB for PostgreSQL

The AlloyDB Omni Kubernetes operator version 1.3.0 is generally available (GA).

AlloyDB Omniはダウンロードして利用可能なAlloyDB互換のソフトウェア。AlloyDB Omni Kubernetes operatorはAlloyDB OmniKubernetesクラスタにデプロイするためオペレータ。 このAlloyDB Omni Kubernetes Operatorの v1.3.0がGAリリースされた。

cloud.google.com

Cloud SQL for PostgreSQL

[ANNOUNCEMENT] All Cloud SQL for PostgreSQL 9.6, 10, 11, and 12 instances are running community end-of-life (EOL) major versions and are now enrolled in Cloud SQL extended support.

Cloud SQL for PostgreSQLの 9.6, 10, 11, 12がEOLとなり、Extended supportが適用される。

cloud.google.com

[FEATURE] You can now migrate a subset of databases from an external server to a destination Cloud SQL instance.

外部のPostgreSQLサーバからCloud SQLへのマイグレーションを実施するとき、一部のデータベースのみ対象とすることができるようになった。

cloud.google.com

[FEATURE] You can now configure customer-managed CA (CUSTOMER_MANAGED_CAS_CA) as the server certificate authority (CA) mode when you create a Cloud SQL instance.

Cloud SQL for PostgreSQLインスタンスを作成するとき、顧客管理のCAで署名されたサーバ証明書を利用できるようになった。

cloud.google.com

Cloud Logging

[FEATURE] You can now create and manage your log views by using the Google Cloud console.

ログビューを利用することでログの一部のみユーザにアクセス権限を付与して参照可能とすることができる。 従来このログビューはgcloud CLIを用いてのみ作成管理することができたが、今回のリリースによりコンソールから作成管理できるようになった。

cloud.google.com

Cloud Monitoring

[FEATURE] You can now create custom organization policies on alerting policies, notification channels, and snoozes.

組織ポリシーのカスタム制約を用いてCloud Monitoringのリソースを柔軟に制御できるようになった。

[FEATURE] When you create a snooze from the Incident details page, you can now apply the snooze to other incidents that have one or more of the same resource labels.

Cloud Monitoringには監視基準を満たさない状況をインシデントとして検知・管理することができる。 インシデントが継続的に検知されているとき、繰り返し同じインシデントが作成・通知されないようにする仕組みとしてスヌーズ(snooze)がある。スヌーズを作成することでインシデントの作成と通知を一時的に防止することができる。

スヌーズは基本的に1つの種類のインシデントと紐付くが、指定したリソースラベルが付与された別のインシデントも同じスヌーズで制御できるようになった。

cloud.google.com

Resource Manager

[FEATURE] You can now create custom organization policies for Cloud Monitoring alerting policies, notification channels, and snoozes.

Cloud Monitoringに記載の内容と同様。

[FEATURE] You can now create custom organization policies for Workflows.

組織ポリシーのカスタム制約を用いてWorkflowのリソースを柔軟に制御できるようになった。

cloud.google.com