プログラミングが苦手で構築運用屋になったヘタレエンジニアから見た、「AIはプログラミングが出来るが、それでも人はプログラマで無ければならない」という話

要約3行

  • 現在の簡易AIでも、単一動作の運用スクリプト程度であれば、高い精度で成果が得られる

  • しかしその成果物を実行する判断を下すのは人間である

  • プログラマという職とスキルは、今しばらく人間でしか出来ない




前提という名の泣き言

 もともと、プログラミングは下手です。
 それでもとトライし続けた時期もありましたが、関数化/オブジェクト化という切り出しがどうしてもできず、延々と手続き型でフローを記述し続けてしまうため、出来の良いプログラムを見て凹む事数年。
 さっぱり諦めてインフラ屋に行ったのが20数年前。
 以降、運用スクリプトは書けども、言語に触る事はほぼありませんでした。

 とはいえ、その運用スクリプトを書くのも遅い。
 書く頻度が高ければまだしも、年数件程度で書くとなると、この歳では前の事をすっぱり忘れてる始末。
 そして文献調べたりWeb検索してサンプルっぽいものを漁ったりそれをカスタマイズしたり。
 パフォーマンスの悪さを考えると、100件程度のデータ修正であれば、命令をエディタでコピペして必要な部分を書き換えて逐次実行するくらいには、避けていました。

 そんな勘所の悪いおっさんにミッション。
 「EntraID/Intuneに登録されている古いデバイス情報を整理しろ」
 …いやいやいや、まてや、実デバイス数10000越え、廃棄台帳はあれど誰も整理しなくて実体の無いデバイスが1000越えてるコイツの整理??

  1. EntraID/Intuneに登録されているデバイスを「デバイス名」「オブジェクトID」「最終更新日付」でリストアップ

  2. 謎に管理されている廃棄台帳のデバイス名と突き合わせ

  3. 最終更新日付と廃棄台帳をきちんと突き合わせて削除候補をリストアップ

  4. リストアップしたデバイスの登録削除を実行

 スクリプトが苦手とか言ってる場合じゃねぇ!
 2.や3.はスプレッドシートとテキストエディタ/正規表現調整で何とかなるにしても、1.と4.は無理無理!

簡易なAI導入と日本語指示だけで必要なスクリプトが沸いてきた

 とりあえずEntraID/Intuneを操作するCUIは"Microsoft Graph"ベースでなんとかなる。
 ただコイツ、2022年~2023年(AzureAD -> EntraID)を境にモジュールが全く別物になっていて、コマンドも権限取得方法も全部変化しているので、参照系ならまだしも修正・削除系の命令は、常に最新の情報を公式で確認しないと拾い物をそのまま使う訳にはいかない。
 最近はWeb検索も精度が落ちていて、こりゃ目的のスクリプトに近いものすら、どこかに転がっているかどうか怪しい。

 そんな中、以下の記事を見かけた事を思い出した。

GitHub Copilot Chatを使ってコーディングを効率化。導入方法から活用シーンまで解説します
https://giginc.co.jp/blog/giglab/github-copilot-chat

 (いや…まさか会話ツールでスクリプトが沸いてくるなんてことは…)
 なんて思っていたものの、1カ月試すだけならタダという卑しい根性で環境を入れて、GitHub Copilot Chat君に聞いてみたわけです。

「Microsoft Graph を使って、CSVファイルに記載されたPC名のデバイスをIntune管理から削除するスクリプトを教えて」

 いや、まんまこの日本語をチャット窓に放り込んだだけなんです。
 正直、何が返ってくるのか、全く期待してなかった。

 速攻で返ってきた内容がこれ。

以下の手順に従って、CSVファイルに記載されたPC名のデバイスをIntune管理から削除するスクリプトを作成します。

手順
Microsoft Graph PowerShell SDKのインストール:
Install-Module -Name Microsoft.Graph -Scope CurrentUser

Microsoft Graphにサインイン:
Connect-MgGraph -Scopes "DeviceManagementManagedDevices.ReadWrite.All"

CSVファイルの読み込み:
(CSVファイルの記述形式サンプル)

デバイスをIntune管理から削除するスクリプト:
--------
# Microsoft Graph PowerShell SDKのインストール
Install-Module -Name Microsoft.Graph -Scope CurrentUser

# Microsoft Graphにサインイン
Connect-MgGraph -Scopes "DeviceManagementManagedDevices.ReadWrite.All"

# CSVファイルのパス
$csvFilePath = "path\to\your\file.csv"

# CSVファイルの読み込み
$devices = Import-Csv -Path $csvFilePath

foreach ($device in $devices) {
    # デバイスのIDを取得
    $deviceId = (Get-MgDeviceManagementManagedDevice -Filter "deviceName eq '$($device.DeviceName)'").Id

    if ($deviceId) {
        # デバイスをIntune管理から削除
        Remove-MgDeviceManagementManagedDevice -ManagedDeviceId $deviceId
        Write-Output "Device $($device.DeviceName) removed successfully."
    } else {
        Write-Output "Device $($device.DeviceName) not found."
    }
}
--------
このスクリプトを実行することで、CSVファイルに記載されたデバイスをIntune管理から削除することができます。$csvFilePathにはCSVファイルのパスを指定してください。

 は?は???
 嘘やろ??
 俺日本語で「てにおは」も怪しいクレクレ君文章投げただけやぞ??
 何そのままズバリ使えそうなシロモノが返ってくるの…?

 5分ほどPCの前で固まり、その後社内自販機でコーヒー買って1口飲むまで、目の前に出されたものを信じておりませんでした。
 そうかぁ…AIでこういう仕事ができる時代なんだな…と納得する儀式みたいなモノです。

 恐らくは、この時点まで自分の認識は2,3年遅れているはずです。
 20代30代の頃であれば、この程度であれば出来るという認識を最低1年は早く認識出来たはずで、まぁこれが老いという話なのでしょう。

会話ベースで修正も追加も出来た

 ここまでくればあとは使い方になるわけです。
 以下、GitHub Copilot Chat君に投げた質問

「OK、では、削除せず対象となるPCのオブジェクトIDをすべてファイルに出力するように修正してほしい」

「このスクリプトを、同じ名前のPCが複数あるケースに対応できるように修正して」

「このスクリプトを、IntuneデバイスではなくEntraIDデバイス削除に対応するよう修正して」

「このスクリプトで得られたCSVを元に、EntraIDデバイスを削除するスクリプトを教えて」

 上の質問に対して、GitHub Copilot Chat君はほぼ100%の回答を寄こしてくれました。
 そう、この会話の中で、自分が知りたい事は、
 「最新のモジュールベースによるコマンド名」
 「スクリプトの骨になるループと複数同名デバイスの配列化による処理方法」
 だったと気づかされ、それがたった5回のあやしい日本語ベースの質問ですべてすんなり解決してしまったのです。
 マジ、AI、有能。Chatを使うための月の支払いなんか軽いもんです。

出来上がったスクリプトを"実行する"のは誰?という話

 AIが「質問に対して、かなり完璧なスクリプトを生成してくれる」ことが、今回の一件でよく分かりました。
 恐らく今後、私は運用スクリプトを作る事をためらわず、巧く立ち回ることが出来ます。
 ありがとうAI。

 では、本来の目的を果たしに行きましょう。
 私に与えらたタスクは、
 「EntraID/Intuneに登録されている古いデバイス情報を整理しろ」
 です。
 そしてその言外には、

  • 「絶対に」今使われているPCの登録が削除されるような事が起こらない事

  • 削除してよいのは「廃棄台帳に記載され、EntraID/Intuneとの通信が数カ月行われていないPC」である事

  • 実施した結果をエビデンスとして確認出来るよう記録し、それを保管する事

 という、インフラ技術者の前提が隠れています。

 結果として、AIと私(人間)の作業は以下のようになりました。
 (まぁ、ちゃんとスクリプトを作りこめば、あと2,3項目は消せる内容であることはご愛敬で…)

[AI]廃棄台帳に載っているデバイス名と一致する、EntraID/Intuneそれぞれのデバイス一覧をCSV出力するスクリプトを生成
[人間]AIに出力させたスクリプトに対して、「最終更新日付入り」リストを生成するよう修正して実行
[人間]CSVを項目ソートして最終更新日が近いレコードを数件削除
[人間]削除してよいデバイスであることをサンプルピックアップで業務記録から再確認
[AI]修正されたCSVベースのデバイスレコードを元に、EntraID/Intuneデバイスを削除するスクリプトを生成
[人間](削除作業前情報として)EntraID/Intune全デバイスリストをコマンドベースで取得
[人間]AIが作成したスクリプトを、実行結果が残るよう修正して実行
[人間](削除作業後情報として)作業後EntraID/Intune全デバイスリストをコマンドベースで取得
[人間]スクリプト実行前後のデバイスリストにDiffを掛けて結果を再確認
[人間]実施結果を報告、エビデンスを保管
[人間]経緯と技術情報を周囲に共有

AIはプログラムを作れる。が…

 ここまでダラダラと書いた内容を、流しでも読んでいただいた方には、既に結論も見えていると思います。
 そう、結果として、
 「AIはプログラミングが出来る。但し、プログラマの需要は絶対に無くならない」
 訳です。

 かなりうまくいった今回のケースであっても、スクリプトをそのまま使うことはあり得えませんでした。
 他のタスクでも同様の事を何件が行ってみましたが、AIに出力させたスクリプトが怪しいケースもあれば、実行自体が危険なモノを回答されることもありました。

 結局、

  • AIが出力したものを正しいかどうか判断する工程

  • 必要であればエラー処理を追加したりといった修正の工程

  • 「業務をこなす」上で必要な業務対応の工程

  • AIが生成したプログラム(スクリプト)を実行することに対するリスク評価

 という部分について、現状AIがそれを肩代わりすることはありません。
 
また、この認識が変る未来はかなり遠いと考えられます。
 むしろ、正しいプログラミングの経験とスキルを持っていなければ、AIを使うことはそのままリスクにしかならないと評するべきなのでしょう。
 もちろん、これは「本番データを修正する」ような事象に限ったケースであり、データは参照するのみとなるプログラミングには当てはまらない部分がありますが、考え方としては間違っては無いでしょう。

 それでも自分にとっては、これが自分の時間コストを圧縮してくれる大変ありがたいツールではあると認識出来た事。
 そして、自分の職が奪われることは無いと再確認させてもらえた事。
 いやぁ、長くこの業界にいて、こんな面白い技術転換期がもう一度味わえるとはなぁ…というのが、今回の実感でした。


この記事が気に入ったらサポートをしてみませんか?