kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

Microsoft Ignite 2025初日の感想など

まとめて書くなら現地よりも日本で見ていたほうがいいような気もします😉。徹夜同然で頑張って書いていただけている方もたくさんいるので。

マイクロソフト Ignite 2025 ニュースブック

私は今回機会をいただいて、USで現地参加しています。現地じゃないとわからないこととしてはこの辺。

  • セキュリティ厳しくなった
  • 現地のデモ
  • 移動は大変
  • 直接会えるのはいいね

セキュリティ厳しくなる

前回のBuildの時と同じようですが、環境保護団体?によるデモや活動により、会場入るときにPhoto ID(外国人だとパスポート)を見せて、バッグを開けて見せないといけないのはなかなか手間でした。キーノート会場でもあって、私は一番乗りでしたが、セキュリティチェックのためにゆっくり(8時くらいとか?)に来た人は多分キーノート開始に間に合ってないと思います。

動画配信で入っているかわかりませんが、最後のAdobeの人との対談の時にデモ団体が会場入り口を超えて入ってきたらしく、外で声がしていました。キーノート終わった後も別のビルへの移動時にデモ団体が声を上げていて、遠回りすることになりました。直接的な人的被害が起きそうな感じはしませんでしたが、ちょっとびっくりした出来事でした。

オフィシャルなパーティないのもこの辺が理由なのかなぁ、とはなんとなく思っていました。パートナー主催の小規模パーティはいくつかあるので、そこでただ飯(違)、食いつないでいこうと思っています。サンフランシスコ高い。バーでビール小瓶よりももうちょっと小さいの飲んだら$12って…。酒税が高い日本と変わらないどころではない値段でした。

移動大変

会場は四つ、MosconeのNorth, South, WestとMariottです。シアターセッションも分かれているので、なかなか大変。休み時間は多いので、移動できなくはありませんが、計画的に移動しないと間に合わないですね。入場も長蛇の列になっているし。

私は「録画で見える奴は知っている製品グループやPMの人がしゃべるやつ以外は無理にいかない」、「録画がないラボやシアターセッション中心」で行こうかなということで計画建てたら…まぁ割と時間が重なる。もともとLabは2時間くらいあるのでオーバーラップしています。そうなるとラボ中心の時間割になっちゃいますね。

直接会いましょう

昨日参加するセッション終わった後、何気にHubに行ったらGitHubのブースにMartinがいたので、写真撮ってもらいました。すぐに話したいことがあっていったわけじゃなく、なんとなくよったらいたのですが、こういうのは現地ならではですね。

各種アクティビティも時間ある範囲で楽しめました。SurfaceのIntel Coreモデル(日本だと法人も出るしかないうえに英語キーボードはない)が15% offなのがなー日本でもちょうどブラックフライデーセールで17-20% offやってますが、英語キーボードが買えるのがなぁ。Core i7 32GB RAM /512GB SSDモデルが$2000くらいだそうです。

キーノートやセッションから

Agent FactoryやAgent 365はいろいろ面白いですね。なんちゃら(いろいろ)IQでコンテキストの話とか、出てきて順当進化、という感じでした。そのあと「Agent増えると前のローコードとかマクロみたいに野放図にできて困るけど、どうすれば」みたいな感想を同行者から聞いたのですが、決定的に違うのは「管理をやろうと思ったらできる」点。クラウドでちゃんとコントロールやる気があるならばできるネタはあるので、あとは底をどうやって行くかの話が大きく違います。

使われていないエージェントはちゃんと見える(はずな)ので、そこは運営側がモニタリングしていくしかないですね。

AnthropicのモデルがMicrosoft Foundryで使えるようになるというのはかなり驚きました。先日OpenAIのモデルがAWSで使えるようになったときは、各種事前報道から「まぁそうなるかなぁ」という印象でしたが、こちらはやるとは思ってなかったというか、成立すると思ってなかった。

キーノートはこういう優先席あるのありがたいですね。

セッションもいくつか見たのですがBuildでもあったAzure DevOps + GitHubのコラボレーションの話。苦しいながらもDanからAzure BoardsからCoding Agent実行させる話ちゃんと説明聞けたのはよかった。ライセンス的には費用負担はない(GitHub Enterprise Cloudを持っている場合の話)ので、管理Boardのほうが、という向きにはいいと思います。だいぶissueも近づいてきましたけどね。

シアターセッションでSRE Agentの話を聞いてきたのですが、ようやく使えるところが見えてきたな、という機能強化でした。これでAOAI Dev Dayの話しようかな(使えるかな?)。

キーノートのAzureとかWindowsとかの成分もっと…Scott Guも出番ちょっとで寂しい。あのデータセンター日本に持ってきてくれよ。

おまけ

こんな風にMVP Wallに名前があるとモチベが上がります。

でっかいSurface Pen。

ぱーりー

Day-0でMVP ConnectというイベントをGitHub本社でやってくれたので参加しました。Universeの縁台がまだ残ってたw。まんま倉庫みたいな本社でした。

Azure DevOps 2025/11/4の更新

Azure DevOps Sprint 264リリースノートの翻訳を行いました。オリジナルはこちらからご覧ください。

learn.microsoft.com

ようやくGHAzDoのアラートにWork Itemのリンクができるようになりました。これGitHub Advanced Security for Azure DevOpsリリースの時から製品グループに要望していたのですが、長かった…。私はあらゆるところでWork Itemをリンクしたい人なので、これで一つ心残りが消えました。

依存関係スキャンのワンクリック有効化もありがたいですね。何も考えなくても入るのは素晴らしい。

Azure DevOps MCPサーバー(ローカル)が一般提供です。まぁこれは本来はリモートサーバーを使うのがいいと思います。切断された環境とか特別な場合だけでしょうね。

Pipelinesの承認タイムアウトってやる人いるのかと思ったら、結構いるみたいでびっくりしました(そういう相談を受ける)。これに関してはまた記事を書いてみようと思います(カレンダーネタ)。

パイプラインパラメータが見えるのはいいですね。選択肢とか、割と見やすくて助かります。

このリリースノートには載っていないですが、ようやく私のAzure BoardsにもCoding Agentのプライベートプレビューがオンボードされました。これに関しては別途アドベントカレンダーで書いてみようと思います。

qiita.com

ご参加お待ちしています。ではまた三週間後。

translate to Japanese to Azure DevOps release not…

Azure DevOps 2025/10/15の更新

Azure DevOps Sprint 263リリースノートの翻訳を行いました。オリジナルはこちらからご覧ください。

learn.microsoft.com

今回はさらに小幅…Azure DevOpsのAgent Modeが遅れに遅れているということもあるのでしょうか。

Service Principalの有効期限がわかるようになるのはいいですね。ついでにWebhookで通知とかできればいいんですが。

AzureAppServiceManageV0タスクで拡張機能インストール時にバージョンを明示できるようになったのもいいですねというかできなかったのか…bicepでやることになっていたんでしょうが。

リリースパイプラインを一時的に止められるようになるそうです。あれ、今リリースパイプラインってあったっけ…クラッシックリリースですよね。まだ使っているところあるんだな…あるよなぁ。

実はこんなに遅れたのはリリースノートをチェックするシステム用意しているんですが、Microsoft側がちょっとやり方を変えたみたいでうちのリリースチェックに引っかからなかったからでした。自分でもそんな見ているわけではない(htmlの構造も変わっていて気づかなかった)ので、だいぶ遅くなりました。

次は3週間…もしない間に出ると思います。Azure DevOpsアドベントカレンダーも作りました。ぜひ書いてください。

qiita.com

translate to Japanese to Azure DevOps release not…

Hyper-VにUbuntuのVMを(ほぼ)自動で作る

ローカルのサーバー環境がよくなったので、ローカルでAzure Pipelines / GitHub Actionsのセルフホストランナーを作ろうとしています。最初はpackerでactions-runnerのレポジトリの内容を書き換えてローカルで動くようにしようと思っていたのですが、Ansibleでやったほうがよくないか?ということで(hclはほとんどCopilotに書き換えてもらった)、AnsibleのためにHyper-VのVMをほぼ自動でやるために環境を用意したのでそのメモです。大半はCopilotに書いてもらいましたがテストは自分でやりました。

必要なものは Windows Server 2025(2022でもたぶん大丈夫) と WSL2のみです。WSL2の入れ方はこちらを見てください。

learn.microsoft.com

cloud-initにはmeta-datanetwork-configuser-dataの3つのファイルが必要です。meta-dataはこのPowerShellスクリプト内で作るので不要です。

実行のためのPowerShellスクリプト

# 初期化作業
$seeddata = <cloud-initで使うファイルひな形を置いているところ>
$suffix = [system.datetime]::Today.Year.tostring()+[system.datetime]::Today.Month.ToString("00")+[system.datetime]::Today.Day.ToString("00")
$vmName   = "ubuntuagent"+$suffix
$workDir  = Join-Path "D:\HyperV\agent" -ChildPath $suffix
$vSwitch  = <Hyper-Vの仮想スイッチ名>
$cpu      = 4
$memoryGB = 16
$seediso = Join-Path $workDir -ChildPath "seed.iso"

#metadata作成
New-Item -ItemType Directory -Force -Path $workDir | Out-Null

$metadata = Join-Path $workDir -ChildPath "meta-data"
new-item $metadata -ItemType File -Force  | Out-Null
$utf8NoBom = [System.Text.UTF8Encoding]::new($false)
"instance-id: ubuntu-agent-"+$suffix, "`nlocal-hostname: agent-" + $suffix+"`n"  | Set-Content -Path $metadata -Encoding $utf8NoBom

# workfolderにコピー
$userdata = Join-Path $seeddata -ChildPath "user-data"
copy-item $userdata -Destination $workDir -Force
$networkconfig = Join-Path $seeddata -ChildPath "network-config"
Copy-Item $networkconfig -Destination $workDir -Force
Set-Location $workDir

wsl.exe -e bash -lc "sudo apt update && sudo apt install -y qemu-utils cloud-image-utils"

# ubuntu
$imgUrl = "https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-amd64.img"
Invoke-WebRequest -Uri $imgUrl -OutFile "$workDir\ubuntu-24.04-amd64.img"

$disk = $vmName + "-amd64.vhdx"
wsl.exe -e bash -lc "qemu-img convert -p -f qcow2 -O vhdx ubuntu-24.04-amd64.img $disk"
$vhdx = Join-Path $workDir -ChildPath $disk
Resize-VHD -Path $vhdx -SizeBytes 64GB

# このフォルダに user-data  / network-config を保存済みとする
wsl.exe -e bash -lc "cloud-localds -v --network-config=network-config seed.iso user-data meta-data"

# VM 作成
New-VM -Name $vmName -MemoryStartupBytes ${memoryGB}GB -Generation 2 -SwitchName $vSwitch | Out-Null
Set-VM -Name $vmName -ProcessorCount $cpu

Get-VMHardDiskDrive -VMName $vmName | Remove-VMHardDiskDrive
Add-VMHardDiskDrive -VMName $vmName -Path $vhdx

# Secure Boot: Linux(Microsoft UEFI CA)
Set-VMFirmware -VMName $vmName -EnableSecureBoot On -SecureBootTemplate "MicrosoftUEFICertificateAuthority"

Add-VMDvdDrive -VMName $vmName -Path $seediso | Out-Null
$disk = Get-VMHardDiskDrive -VMName $vmName
Set-VMFirmware -VMName $vmName -FirstBootDevice $disk

# ゲストサービス(Guest Service Interface)を有効化
## 英語版OSはこちら
Enable-VMIntegrationService -VMName $vmName -Name "Guest Service Interface"
## 日本語版OSはこちら
Enable-VMIntegrationService -VMName $vmName -Name "ゲスト サービス インターフェイス"

network-config

version: 2
ethernets:
  any:
    # Hyper-V でインターフェイス名が変動しても拾えるようにワイルドカードでマッチして eth0 にリネーム
    match:
      name: "e*"
    set-name: eth0
    addresses: [IPアドレス]
    nameservers:
      addresses: [DNSサーバー]
    routes:
      - to: default
        via: <デフォルトゲートウェイ> 

IPアドレスはお好みで。最初使っていないやつ一覧から取得して…とか考えていましたがやめました。

#cloud-config
locale: en_US.UTF-8
ssh_pwauth: false

hostname: <ホスト名>

users:
  - name: agent
    gecos: Azure Pipeline Agent
    groups: [sudo]
    sudo: "ALL=(ALL) NOPASSWD:ALL"
    shell: /bin/bash
    ssh_authorized_keys:
      - 公開鍵

package_update: true
package_upgrade: true

apt:
  sources:
    ansible-ppa:
      source: "ppa:ansible/ansible"
    git-core-ppa:
      source: "ppa:git-core/ppa"

package_update: true
packages:
  - linux-virtual
  - linux-cloud-tools-virtual
  - linux-tools-virtual
  - curl
  - git
  - python3-venv
  - python3-pip
  - software-properties-common
  - ansible

# ルートパーティションとファイルシステムを自動拡張(64GB VHDX に合わせて)
growpart:
  mode: auto
resize_rootfs: true

runcmd:
  - systemctl enable --now hv-kvp-daemon.service || true
  - systemctl enable --now hv-fcopy-daemon.service || true
  - systemctl enable --now hv-vss-daemon.service || true
  - bash -lc "git config --system init.defaultBranch main"
  - bash -lc "mkdir -p /etc/ansible && printf '[defaults]\nhost_key_checking = False\n' > /etc/ansible/ansible.cfg"
  - bash -lc "curl -LsSf https://astral.sh/uv/install.sh | sh"
  - bash -lc "~/.local/bin/uv tool install ansible-core"
  - bash -lc "~/.local/bin/uv tool install ansible-dev-tools --with-executables-from ansible-core,ansible-lint,ansible-navigator"
  - systemctl restart ssh

ホスト名はスクリプトで直せば(書き換えれば)よかったですね。これはめんどくさがらずにやるべきだった…。

start-vm $vmnameでVMが起動するので、指定したIPアドレスでssh接続できるはずです。WSLでsudoするときにパスワード聞かれるので、まぁそこだけうまいことやってください。

これでVMが作成できたので、次はansibleでactions-runner相当のものを入れてみます。