なんでも書く

できる限り記録する

Codex Game Studioで3D避けゲーを作る

はじめに

いざCodexをインストールしてなにをしようかと思っていたところ、Game Studioというプラグインが公式から用意されていることを知った。
ゲームを作るのは分かりやすいので早速使ってみることにした。

Game Studioとは

Webで動くゲームを作るためのOpen AI公式のプラグイン。
実際に使ってみた人のブログを見るとちゃんとしっかりとしたゲームが作れるらしい。
note.com
note.com

面白そうなので早速使ってみる。

インストール

Codex CLIの場合は以下のコマンドでインストールできる。

codex plugin add game-studio@openai-curated

デスクトップアプリの場合はプラグインを検索してインストールできる。

何か作ってみる

実際に使っている人の例を見るとやはり曖昧な指示ではなく、ゲームデザインも含め明確にドキュメント化しないとクオリティの高いものにはならないらしい。
さすがに「なんか面白いゲーム作って」と投げるわけにもいかないが、特にこれといったものが思いついてない状態でガチガチにドキュメント化するのもやりにくいな。。。
まあとりあえず投げてみた。
なんとなく3Dゲームかな、だとしたら一人称視点がいいなと思い一旦聞く。

うおおおお、作れるらしい。 というわけでちょっと深堀りしてまた雑に投げた。

そこから何度かやりとりをして最初の要件を出してもらう。

最初の要件定義

# 一人称視点3D避けゲーム 実装要件

以下の要件で、ブラウザで動作する一人称視点の3D避けゲームを実装してください。

## 技術構成

- TypeScript
- Vite
- Three.js
- 必要なら軽量な物理・衝突判定ライブラリを使用してよい
- UIはHTML/CSSのDOMオーバーレイで実装
- PCブラウザを対象とする
- 不要に複雑なフレームワークは導入しない
- ゲーム状態とThree.jsの描画処理を分離する

## ゲーム概要

プレイヤーが一人称視点でフィールド内を移動し、四方八方から転がってくる木の丸太をジャンプで越えて得点する、短時間で遊べるエンドレス避けゲームを作る。

## 基本操作

- `WASD`:前後左右への移動
- マウス:視点操作
- `Space`:ジャンプ
- `Esc`:ポーズ/マウスロック解除
- 画面クリックでPointer Lockを開始
- ゲームオーバー画面でボタンまたはキー入力によりリスタート

## プレイヤー

- 一人称カメラを使用する
- 地面上を自由に移動できる
- 重力とジャンプを実装する
- 空中で連続ジャンプできないようにする
- フィールド外へ出られないようにする
- 移動速度、ジャンプ力、重力は定数として調整可能にする
- フレームレートに依存しない移動・物理計算にする

## フィールド

- 正方形または円形の平坦な競技場
- 周囲に壁、柵、森などを配置し、プレイ範囲を視覚的に分かりやすくする
- 丸太はフィールド外周付近から中央方向へ出現する
- 初期版はプリミティブ形状だけで構わない
- 地面、空、照明、影を設定し、状況を見やすくする

## 丸太

- 木の丸太は円柱形の3Dオブジェクトとして表現する
- 木らしい色と簡単な質感を付ける
- 横向きの状態で地面を回転しながら移動させる
- 外周のランダムな方向から出現し、フィールドを横切る
- 見た目の回転速度を移動速度と自然に一致させる
- プレイヤーまたは他の丸太の真上に突然出現させない
- プレイヤーが対処できる最低予告時間を確保する
- フィールドを通過した丸太は確実に破棄する
- 長時間プレイしてもオブジェクトやメモリが増え続けない設計にする

## 衝突とゲームオーバー

- 丸太とプレイヤーの当たり判定を実装する
- 丸太に接触したらゲームオーバー
- 明らかにジャンプで越えている場合は接触扱いにしない
- 見た目と当たり判定が大きくずれないようにする
- ゲームオーバー時はゲーム進行を停止する
- 最終スコアとハイスコアを表示する

## 得点判定

単に丸太を避けただけでは得点にしない。以下の条件を満たした場合に「ジャンプで越えた」と判定して加点する。

- プレイヤーが空中にいる
- 丸太がプレイヤーの足元付近を通過する
- プレイヤーと丸太が衝突していない
- 同じ丸太から得点できるのは一度だけ

基本点は1本につき100点とする。判定が成功した瞬間に、短い効果音、画面表示、軽い視覚エフェクトでフィードバックする。

## 難易度

ゲーム開始直後は簡単にし、経過時間またはスコアに応じて段階的に難しくする。

調整対象:

- 丸太の移動速度
- 出現間隔
- 同時に存在できる丸太数
- 丸太の大きさ
- 出現方向の多様性

理不尽な配置を避けること。回避不可能な同時出現や、着地地点を完全に塞ぐ生成はできるだけ防ぐ。

## UI

プレイ画面を邪魔しない最小限のHUDにする。

表示項目:

- 現在スコア
- ハイスコア
- 中央の小さな照準
- ゲーム開始案内
- ポーズ表示
- ゲームオーバー画面
- リスタート操作

ハイスコアは`localStorage`へ保存する。

## 演出と音

- 丸太の接近が分かる転がる音
- ジャンプ音
- 着地音
- 得点音
- 衝突音
- 得点時の短いポップアップ
- 衝突時の軽いカメラシェイク
- 音声ファイルがない場合はWeb Audio APIによる簡単な効果音でもよい
- 音量を抑え、ユーザー操作後に音声を開始する

## ゲーム状態

少なくとも以下の状態を明示的に管理する。

- `ready`
- `playing`
- `paused`
- `gameOver`

状態遷移を一か所で管理し、描画コードの中にゲームルールを散在させない。

## コード構成

役割ごとにファイルを分割する。

例:

- ゲーム初期化
- レンダリング
- プレイヤー制御
- 入力管理
- 丸太の生成と更新
- 衝突・得点判定
- 難易度管理
- UI管理
- 音声管理
- ゲーム状態管理
- 設定定数

すべてを単一ファイルへ詰め込まないこと。

## デバッグ機能

開発時に切り替えられる簡単なデバッグ表示を用意する。

- FPS
- プレイヤー座標
- 現在の丸太数
- 難易度レベル
- 当たり判定の可視化
- 無敵モード

本番表示では無効にする。

## 完了条件

以下を実際に確認すること。

1. 依存関係をインストールできる
2. 開発サーバーが起動する
3. ブラウザでゲームを開始できる
4. WASD移動とマウス視点操作が機能する
5. ジャンプと着地が安定している
6. 丸太が複数方向から転がってくる
7. 衝突するとゲームオーバーになる
8. ジャンプで丸太を越えると一度だけ得点する
9. 時間経過で難易度が上昇する
10. リスタート後に状態が正しく初期化される
11. ハイスコアが保存される
12. コンソールに重大なエラーがない
13. 長時間動かしても丸太が無限に蓄積しない

まず既存ディレクトリの内容を確認し、既存ファイルを壊さない形で実装してください。

実装後はビルド、型チェック、可能な範囲のブラウザ動作確認を行い、修正したファイル、実行方法、確認結果、残っている課題を簡潔に報告してください。

それをもとに実装してもらったところ、実際にゲームプレイできるものができた。
これくらいのカジュアルなものだと約30分ほどで最初の形ができた。
その後何度か修正をして最終的に以下のようなものができた。

以下のページでプレイできる。

Timberline

おわりに

ほんの数時間で頭の中に浮かんだものが形になり、しかもちゃんと遊べるものが出力されて驚愕している。
しかもこれはプロンプトをそこまで凝らずに出力したものであり、細部を詰めていけばもっとクオリティが上がっていくはずなので、テクノロジーの進化がすごすぎる。
これを実務にどう生かすかとかプロンプトの作り方どうするかとか色々あるが、そんなことより実装のハードルが極端に下がったことを利用しておもちゃ感覚で好きに生成させて遊ぶのがいいんじゃないかなと思いました。

今更ながらCodexを使ってみる

はじめに

結局Codexってなにができるんだと思い、使ってみなければわからんということで使ってみる。

前提

WSL2のubuntuにCodex CLIをインストールする。

インストール

公式の手順でインストールできる。
learn.chatgpt.com

インストール

curl -fsSL https://chatgpt.com/codex/install.sh | sh

Codexにログイン

codex login

Codex起動

codex

AIがPC上でコマンドを実行する際のセキュリティ対策としてbubblewrapもインストールする。

sudo apt install -y bubblewrap

良く使うMCPもインストールする。

  • Context7
    ライブラリやフレームワークの最新ドキュメント参照用。
codex mcp add context7 -- npx -y @upstash/context7-mcp
  • OpenAI Developer Docs
    OpenAI API / Apps SDK / Codexなどの公式ドキュメント参照用。
codex mcp add openaiDeveloperDocs --url https://developers.openai.com/mcp
  • Playwright
    ブラウザ操作・画面確認・E2Eテスト補助用。
codex mcp add playwright -- npx -y @playwright/mcp@latest

/mcpでインストールされているMCPの確認ができる。

使い方

とりあえず触ってみたときによく使ったもの。

  • /init
    現在のプロジェクト配下にAGENTS.mdを作成してくれる。

  • /model
    現在の使用モデルの確認、切り替えができる。

  • /status
    現在のセッション状態や使用量を確認できる。

  • /plan
    実装をさせずに計画を出力させる。

  • /review
    コード差分やコードレビューをさせる。

  • /mcp
    MCPの確認ができる。

とりあえず使ってみる

Codexのベストプラクティスとかよく分かっていないがざっと調べた感じ、Codexが標準でサポートしているプロジェクト指示ファイル名はAGENTS.md(CLAUDE.mdみたいなもの)。
~/.codex配下に作成するとどのプロジェクトでも共通で適用させることができる。
プロジェクトごとに適用させたい場合は各プロジェクト配下に作成する。
AGENTS.mdに記載されているルールが競合した場合はより深い階層のものが優先して読み込まれるらしい。

とりあえずこんな感じで作成している。
~/.codex/AGENTS.md

# Repository Guidelines

## Language
- ユーザーとのやり取り、作業報告、設計メモは日本語で行う。
- コードコメントは必要な箇所のみ日本語で書く。冗長なコメントは避ける。

## Workflow
- 実装前に必ず既存構成を確認する。
- 複雑な変更では、まず計画を出してから実装する。
- 既存の仕様・UI・命名を尊重し、不要な大改造をしない。
- 依存パッケージ追加前に、理由と代替案を説明する。
- 大きな変更は小さいステップに分ける。

## Security & Configuration Tips
Do not commit secrets, API keys, or machine-specific configuration. Use `.env.example` to document required variables, and keep real `.env` files ignored. Prefer least-privilege credentials for local development and CI.

~workspace/hogeProject/AGENTS.md

# Repository Guidelines

## Project
- このプロジェクトは、スマホから入力しやすい「ひとこと日記Webアプリ」です。
- フロントエンド、認証、DB、デプロイはAzure利用を前提にする。

## Rules
- スマホ縦画面を優先する。
- まずMVPを作る。
- 大規模リファクタは事前に説明する。
- 認証・DB・クラウド設定はAzure公式ベストプラクティスを優先する。
- 実装前に `docs/requirements.md`、`docs/design.md`、`docs/tasks.md`、`docs/decisions.md` を読み、MVP範囲・未決事項・直近タスクを確認する。
- 未決事項を実装判断で決める場合は、理由と代替案を `docs/decisions.md` に追記する。

## Verification
- 変更後は可能な範囲で `npm run lint` と `npm run build` を実行する。
- 実行できない場合は理由を報告する。

## Review guidelines
- 実装後は、可能な限り `/review` または差分レビューを行う。
- レビューでは、重大度を P0 / P1 / P2 で分類する。
- P0 はビルド不能、データ破壊、セキュリティ問題、主要機能停止。
- P1 は仕様不一致、主要なUX問題、テスト不足、エラーハンドリング不足。
- P2 は改善提案、軽微なリファクタ、命名改善。
- レビュー時は、要件 docs/requirements.md と設計 docs/design.md との矛盾を確認する。
- 指摘だけを行うターンと、修正するターンを分ける。

## Testing guidelines
- 新しい振る舞いを追加した場合は、可能な範囲でテストを追加する。
- テストは実装詳細ではなく、外から見た振る舞いを検証する。
- バグ修正時は、可能なら回帰テストを追加する。
- テストが書きにくい場合は、テスト容易性を高める最小限の責務分離を行う。
- E2Eテストは主要フローに絞り、大量に増やしすぎない。
- 変更後は可能な範囲で以下を実行する。
  - npm run lint
  - npm run typecheck
  - npm test
  - npm run build

それでAGENTS.mdに色々とルールを書いて進めていくのまでは大体把握したが、AGENTS.mdが長くなってきたら別途ファイルを作りAGENTS.mdにそれらのファイルを参照させるよう指示を書くのが良いらしい。
そのやり方は色々あってPLAN.mdを作るのが良いとかdocsディレクトリを作成してドキュメント類は全てそこに入れるのが良いとかいろいろあるらしい。

おわりに

AIエージェントに読ませるAGENTS.mdやドキュメントのノウハウについては他人が公開しているものも参考にしつつ探っていきたいが、それ以上に自分で試してみるのが大事なので引き続き使っていきたい。

機動戦士ガンダム GフレームFA 09 Ξ(クスィー)ガンダム

食玩のGフレームFAの新作にΞガンダムが追加されたので購入した。

www.bandai.co.jp

79Aの内容物。

ランナーはタッチゲートっぽい。

パーツが小さいので指が痛くなるが普通にもげる。
断面気になるならニッパーやデザインナイフを使うのもありかも。

フレームから外した図。
正確にはもっと外せる箇所があったがパーツの嚙み合わせがしっかりしていて外しにくく断念。

フレーム。  

合わせ目は段落ちモールドになっていて目立たない。

全ての合わせ目が見えなくなっているわけではないが、正面から見える箇所は以下のようにパーツをかぶせることで合わせ目が見えないようになっている。

フロントアーマーは独立稼働する。

腕に関しては、二の腕はパーツをかぶせるだけ、前腕は一部合わせ目が目立つもののパーツ分割が工夫されている。

顔の造形は素晴らしい。 

組み上げたところ。

79Oの内容物。

先ほどの79Aと合わせることでΞガンダムが完成。

79Fの内容物。

フレームなのでランナーが多め。

パーツが小さいので指が痛い。

可動域は非常に素晴らしい(アーマー被せると干渉して動かしにくくなるが)。

ビームライフルとシールドも持たせる。

アーマーがだいぶ干渉するがちゃんと可動する。
非可動フレームはスタンドにもなる。

パーツ差し替えでフライトフォームの再現も可能。

砂漠の背景で劇中っぽく。

初めて見た時の異物感はすごかったが、映画で動いているところ見るうちにめちゃくちゃカッコよく感じた機体。
HG買ってもデカすぎて置くところないなと思っていたので今回GフレームFAでΞガンダムが出て良かった。
全長14cmくらいなのでまだ飾りやすいサイズだと思う。

環境構築メモ: WSLのアップデート

はじめに

普段の個人開発や学習ではWSL上のUbuntuを使っている。
WSLについては初期設定をしてからほぼ触っていなかった。
その間にもWSLのバージョンが上がっており、久しぶりにPCの環境設定周りを見直していたところ、GUIのWSL Settingsが起動できなくなっていたのでWSLのアップデートをしてそのエラーを解消した。

前提

  • 実施時の環境
    Windows 11
    WSL2(2.4.x)
    Ubuntu 24.04

事象

初期設定移行、WSL側は特に何も触った覚えがなかったが、以下のようにWSL Settingsを起動させることができなかった。

WSLのリポジトリを確認したところ、最新のリリースバージョンが2.6.xになっていたため、まずは最新までアップデートしようと思った。

Power Shellで以下のコマンドを実行する。

wsl --update

その後、再度WSL Settingsを起動したところ、無事起動できた。

おわりに

環境設定周りは定期的に見直していきたい。

AZ-204学習メモその3: Azure CLI [az webapp]

はじめに

AZ-204のMicrosoft Learnで実際にAzureを触って動かす演習を実施した際の忘備録その3。
その2は以下から。

kohey94.hateblo.jp

前提

書いた本人は、実務でAzureを利用した開発経験ありだがAzure PoralでのGUI操作が主。
現在AZ-204取得に向けて学習中。
そのため、Azure CLIでの操作初心者、 AZ-204学習者向け。

今回実施した演習

learn.microsoft.com ラーニングパス: Azure App Service Web アプリを実装する
モジュール: Azure App Service デプロイ スロットについて詳しく知る

演習の該当リンクは以下から。

microsoftlearning.github.io

Azure CLIコマンド

az webapp

Web アプリを管理する。
learn.microsoft.com

az webapp up

Web アプリを作成し、ローカル ワークスペースからアプリにコードをデプロイする。

az webapp up -g $resourceGroup -n $appName --sku P0V3 --html

パラメーター

オプション
  • --app-service-environment
    省略形: -e
    デプロイ先の (既存の) App Service Environmentの名前またはリソース ID。
    Isolated V2 SKU が必要。

  • --basic-auth
    ベーシック認証を有効または無効にする。

  • --dryrun
    実際にデプロイせずに、作成されるアプリの概要を表示する。

  • --enable-kudu-warmup
    trueの場合、Linux Webアプリのデプロイを実行する前にkuduがウォームアップされる。

  • --html
    HTMLアプリとしてデプロイする。

  • --ids
    1つ以上のリソースIDを指定する。

  • --launch-browser
    省略形: -b
    既定のブラウザーを使用して、デプロイしたアプリを起動する。

  • --location
    省略形: -l
    リージョンを指定する。

  • --logs
    Webアプリを起動した直後にログ出力を有効にする。

  • --name
    省略形: -n
    Webアプリの名前。
    指定しない場合はランダムに生成される。

  • --os-type
    アプリのOSを指定する。

  • --plan
    省略形: -p
    App Serviceプランを指定する。

  • --resourse-group
    省略形: -g
    リソースグループの名前。

  • --runtime
    省略形: -r
    Framework:Version形式の正規化されたWebランタイム(例: "PHP:7.2")。

  • --sku
    価格レベル。

  • --subscription
    サブスクリプション名またはID。

  • --track-status
    true の場合、デプロイ中のWeb アプリの起動状態は、Linux Webアプリに対して追跡される。

az webapp deployment slot create

デプロイスロットを作成する。

az webapp deployment slot create -n $appName -g $resourceGroup --slot staging

パラメーター

必須
  • --name
    省略形: -n
    Webアプリの名前。

  • --resourse-group
    省略形: -g
    リソースグループの名前。

  • --slot
    省略形: -s
    スロットの名前。

オプション
  • --configuration-source
    構成を複製するソーススロット。

  • --container-image-name
    省略形: -c
    コンテナーのカスタムイメージ名と、必要に応じてタグ名。

  • --container-registry-url
    省略形: -r
    コンテナーレジストリーサーバーのURL。

  • --container-registry-user
    省略形: -u
    コンテナーレジストリーサーバーのユーザー名。

az webapp deploy

指定された成果物をAzure Web Appsにデプロイする。

az webapp deploy -g $resourceGroup -n $appName --src-path ./stagingcode.zip --slot staging

パラメーター

オプション
  • --async
    trueの場合、非同期的にデプロイする。

  • --clean
    trueの場合、デプロイする前にターゲットディレクトリをクリーンアップする。

  • --enable-kudu-warmup
    trueの場合、Linux Webアプリのデプロイを実行する前にkuduがウォームアップされる。

  • --ids
    1つ以上のリソースIDを指定する。

  • --ignore-stack
    trueの場合、スタック固有の既定値は無視される。

  • --name
    省略形: -n
    Webアプリの名前。

  • --resourse-group
    省略形: -g
    リソースグループの名前。

  • --restart
    trueの場合、デプロイ後にWebアプリが再起動する。

  • --slot
    省略形: -s
    スロットの名前

  • --src-path
    デプロイする成果物のパス。

  • --src-url
    デプロイする成果物のURL。
    WebアプリはこのURLから成果物をプルする。

  • --subscription
    サブスクリプション名またはID。

  • --target-path
    成果物をデプロイするパス。
    既定値は"home/site/wwwroot/"。

  • --timeout
    デプロイ操作のタイムアウト。
    "--src-url" を使用する場合は無視される。

  • --track-status
    true の場合、デプロイ中のWeb アプリの起動状態は、Linux Webアプリに対して追跡される。

  • --type
    デプロイされる成果物の種類をオーバーライドするために使用される。

おわりに

az webappはAzure App Service を操作するためのコマンドなため、種類もオプションも多い。
しかし、ざっと見た感じオプションに関しては同じオプションが多く、コマンドも使用頻度に差がありそうなので、使いそうなものを重点的に把握していきたいと思った。

WSLからVisual Studio Codeを起動する

個人的メモ。

kohey94.hateblo.jp

過去に上記の記事通りにvscodeとwslのセットアップをしていた。
この記事によればWSLという拡張機能を入れていればWSL側からvscodeを起動できるとのことだったが、起動できなくなっていた。
調べたところ、Remote Developmentという拡張機能を入れる必要があるらしい。

以下、公式ドキュメント。   learn.microsoft.com

見たところ、WSL拡張機能も含めた必要なものをまとめてインストールしてくれるパックのようなので、これからWSLで開発環境構築する際は「Remote Development」をインストールすればよさそう。

AZ-204学習メモその2: Azure CLI [az role]

はじめに

AZ-204のMicrosoft Learnで実際にAzureを触って動かす演習を実施した際の忘備録その2。
その1は以下から。

kohey94.hateblo.jp

今回実施した演習

learn.microsoft.com ラーニングパス: Blob Storage を使用するソリューションを開発する
モジュール: Azure Blob Storage の使用

演習の該当リンクは以下から。

microsoftlearning.github.io

Azure CLIコマンド

az role

Azure ロールベースのアクセス制御 (Azure RBAC) を管理する。 learn.microsoft.com

az role assignment create

ユーザー、グループ、またはサービス プリンシパルに対して、新しいロール割り当てを作成する。
以下の例は、$userPrincipalに対して$resourceIDのストレージBlobデータ所有者ロールを付与している。

az role assignment create --assignee $userPrincipal \
    --role "Storage Blob Data Owner" \
    --scope $resourceID

本筋からズレるが$userPrincipalと$resourceIDは以下のスクリプトによって取得している。

userPrincipal=$(az rest --method GET --url https://graph.microsoft.com/v1.0/me \
    --headers 'Content-Type=application/json' \
    --query userPrincipalName --output tsv)

resourceID=$(az storage account show --name $accountName \
    --resource-group $resourceGroup \
    --query id --output tsv)

パラメーター

必須
  • --role
    ロール名または ID。

  • --scope
    ロールの割り当てまたは定義が適用されるスコープ。

オプション
  • --assignee
    ユーザー、グループ、またはサービス プリンシパル。

  • --assignee-object-id
    担当者のオブジェクト ID。
    '--assignee' の代わりにこの引数を使用すると、ログインしているアカウントに権限がない場合や、マシンに Microsoft Graph をクエリするためのネットワークアクセスがない場合に、Microsoft Graph クエリをバイパスできる。

  • --assignee-principal-type
    --assignee-object-id と共に使用して、Microsoft Graph の伝達待機時間によって発生するエラーを回避する。

おわりに

az roleはAzureの管理者やクラウドインフラを担当するようになればよく使いそうなコマンドだと思った。
開発者向けの資格であるAZ-204でどれくらい深く出てくるかは分からないが覚えておくべきところだろう。

miseを使ったdotnet環境構築

はじめに

現在Azure資格のAZ-204取得に向けてMS Learnを使って学習している。
その中で実際に手を動かす演習もあるのだが、ローカル環境でプロジェクト作成を求められることもある。
例えば、Azure Functionsについての演習は以下のような感じ。

microsoftlearning.github.io

今まではVisual StudioのGUI頼りにやってきていたが、実際の試験では選択肢問題だけではなく、サービスを作成するための手順を選んだり自分で操作する問題もあるらしい。
そこでCLIでのdotnetやazureの操作に慣れるため、自分のPCにCLIの環境構築をした。

前提

環境はWSL2上のubuntu24.04。
miseインストール済み。
miseのインストールについての記事は以下から。

kohey94.hateblo.jp

.NET SDKのバージョンを確認する

基本は最新のものを入れればいいと思うが、バージョンを選んで入れたい場合は以下のコマンドを実行してバージョンを確認する。

mise ls-remote dotnet-core

インストールする

前回miseを使ったときに勘違いしていたこととして、mise installだと指定verをインストールするだけで、それを有効化するにはmise use(グローバルで有効化するには-gもつける)が必要だった。

kohey94.hateblo.jp

mise useをすれば未インストールならインストールをし、有効化してくれるので単に以下のコマンドを実行する。

mise use -g dotnet-core@10.0.103

以下のコマンドでインストール済みのバージョンを確認できる(すでに8をインストール済みだったので8も表示されている)。

mise ls dotnet-core

これでdotnetの環境構築が完了した。

dotnet --version

おわりに

Windowsでdotnet開発する場合はVisual Studioをインストールするのが一番楽ではあるが、Windows以外のOSだったりWSLに環境構築する場合は.NET CLIをインストールすることになると思う。
その際にもmiseを使って環境構築するのが簡単で楽だと感じた。

AZ-204学習メモ: Azure CLI

はじめに

AZ-204のMicrosoft Learnで実際にAzureを触って動かす演習を実施した際の忘備録。

今回実施した演習

learn.microsoft.com
メッセージベースのソリューションを開発するというラーニングパスで、その中でDevelop solutions for Microsoft Azureというリンクの、Send and receive messages from Azure Queue storageとSend and receive messages from Azure Service Busを実施した。

microsoftlearning.github.io

microsoftlearning.github.io

Azure CLI

learn.microsoft.com 演習では基本的にAzure CLIを使ってリソースの作成を行っていく。
コマンドは「az」で始まる。

az group

リソースグループとテンプレートのデプロイを管理する。 learn.microsoft.com

az storage account

ストレージアカウントを管理する。 learn.microsoft.com

az rest

Azure用のcurl。
learn.microsoft.com

Microsoft Graph APIを叩く場合はaz restを使うほうが楽。

# curlの場合
# Azureからアクセストークンを取得
token=$(az account get-access-token --resource-type ms-graph --query accessToken --output tsv)
# curlを叩く
curl -X GET https://graph.microsoft.com/v1.0/me \
     -H "Authorization: Bearer $token" \
     -H "Content-Type: application/json"

# az restの場合
# ログイン済みならこれで叩ける
az rest --method GET --url https://graph.microsoft.com/v1.0/me

--query

azコマンドのオプション。jqっぽく使える。
以下のようにユーザー情報からuserPrincipalNameのみ取得するときなどに使える。

userPrincipal=$(az rest --method GET --url https://graph.microsoft.com/v1.0/me \
    --headers 'Content-Type=application/json' \
    --query userPrincipalName --output tsv)

JMESPathというクエリ言語らしい。
learn.microsoft.com

おわりに

Microsoft公式が演習用意してくれるのはありがたい。 試験でもリソース作ったり、コード書いたりする問題もあるらしいので手を動かして覚えていこうと思う。

Googleドライブから完全削除したファイルを復元する

スマホのデータ整理をしており、Googleドライブの容量に空きはあるものの不要ファイルを削除したくなったので、その流れでGoogle Oneストレージ管理ツールで不要データを削除していた。

その際に誤って削除してはいけないファイルを削除してしまった。
以下のダイアログが表示されるのだが完全に削除した後に、「あれ削除しちゃいけないやつだったわ」と思い出し、後の祭りに。
もちろんゴミ箱にはない。

ビジネスアカウントであれば連絡すれば復元できそうだが、個人アカウントなのでまあ無理だろうなと思いつつ助けてGeminiマンをしたところ、ファイルの復元リクエストができるらしい。

というわけでGoogleドライブの[ヘルプとフィードバック]>[Googleドライブで削除したファイルを復元する]と進み、

[ファイルの復元リクエストをする]を選択する。

ブラウザが開き本人確認をしてログインする。
Googleドライブ内にファイルが残っていないか確認する手順もあるが、ドライブから完全削除しているため、いいえを選択して[次へ進む]を選択する。

復元できるファイルは過去25日以内のGoogleドライブから削除されたファイルのみ。
他にも復元できる条件はあるが今回は特に問題ないため、そのままファイルの復元をリクエストする。

リクエスト完了後はメールが来るのを待つ。

しばらく経ったらメールが来たので、削除前のドライブを見に行くとファイルが復元されていた。

ありがとうGoolge、ありがとうGemini。