PowerShell
イベント
該当するコンテンツが見つかりませんでした
マガジン
該当するコンテンツが見つかりませんでした
技術ブログ
はじめに こんにちは、XI本部リーディングエッジテクノロジーセンターの佐藤太一です。 このエントリでは、複数のワークツリーでClaude Codeを並行稼働させる開発環境の作り方を紹介します。 Claude Codeには -w ( --worktree )というフラグがあり、 git worktreeを使って1つのリポジトリから複数の作業ディレクトリを切り出せます。 これを使うと、あるブランチでClaude Codeに実装を任せている間に、 別のブランチで別の機能を開発するという並行作業ができるのです。 ところが同じアプリケーションを複数同時に起動するには、それぞれポート番号を分ける必要があります。 各ポート番号ごとに動作確認すべきことが違うのですから、混乱しがちになります。 そこで、この記事ではportlessというツールを使って、複数のワークツリーを単一のポートでアクセスできるようにします。 端的に言うと、 claude -w feature-a というコマンドで起動した開発環境に https://feature-a.myapp.localhost:1355 でアクセスできる環境を作ります。 はじめに 完成イメージ DevContainerのセットアップ .devcontainer/devcontainer.json .devcontainer/postCreateCommand.sh 最小限のWebアプリケーション package.json src/index.ts git リポジトリとして初期化 portless で単一ポート・複数サブドメインルーティング portless を使ってサーバを起動する Claude Code 用の環境を整える .claude/hooks/session-init.sh .claude/settings.json statusline にホストURLを表示する .claude/statusline.sh まとめ 完成イメージ 最終的にできあがる環境は以下のようなものになります。 DevContainer ├── portless proxy (:1355) │ ├── myapp.localhost:1355 → worktree: main │ ├── feature-a.myapp.localhost:1355 → worktree: feature-a │ └── feature-b.myapp.localhost:1355 → worktree: feature-b │ ├── /workspaces/myapp/ (メインリポジトリ) ├── /workspaces/myapp/.worktrees/feature-a/ (worktree) └── /workspaces/myapp/.worktrees/feature-b/ (worktree) portlessが1つのポート(1355)で待ち受けていて、Hostヘッダのサブドメインを見て対応するworktreeのdevサーバーに振り分けます。 DevContainerのセットアップ この記事では再現可能な開発環境としてDevContainerを使います。事前にvscodeをインストールしておいてください。 .devcontainer/devcontainer.json WORKSPACE_FOLDER という環境変数は、コンテナ内においてコマンドを実行すべきパスを確定するために定義しています。 PORTLESS_HTTPS を 1 に設定すると、portlessが常にHTTPSモードで動作します。 portlessは自前でCA証明書とサーバー証明書を自動生成するので、mkcertなどの外部ツールは不要です。 PORTLESS_STATE_DIR でportlessの状態ディレクトリを明示的に指定しています。 加えて、いくつかの名前付きボリュームを設定しています。 claude-config-dir は複数回のコンテナ作成をまたがってClaude Codeの設定を永続化するために使っています。 portless はportlessの状態ディレクトリを永続化するためのボリュームです。 ここにCA証明書やルーティング情報が格納されます。 npm-cache と myapp-node_modules も同じように永続化されるものですが、どちらかというとパフォーマンス改善とトラブル回避のために設定しています。 最後に forwardPorts でportlessが使うポート1355番を設定しています。 portlessを使わずに動作確認をするためのポートとして3000番を使います。 portlessが動くようになったら削除してください。 { " name ": " myapp ", " image ": " mcr.microsoft.com/devcontainers/base:ubuntu ", " features ": { " ghcr.io/devcontainers/features/node:1 ": {} } , " postCreateCommand ": " /bin/bash .devcontainer/postCreateCommand.sh ", " waitFor ": " postCreateCommand ", " containerEnv ": { " WORKSPACE_FOLDER ": " ${containerWorkspaceFolder} ", " PORTLESS_HTTPS ": " 1 ", " PORTLESS_STATE_DIR ": " /home/vscode/.portless " } , " mounts ": [ { " type ": " volume ", " source ": " portless ", " target ": " /home/vscode/.portless " } , { " type ": " volume ", " source ": " claude-config-dir ", " target ": " /home/vscode/.claude " } , { " type ": " volume ", " source ": " npm-cache ", " target ": " /home/vscode/.npm " } , { " type ": " volume ", " source ": " myapp-node_modules ", " target ": " ${containerWorkspaceFolder}/node_modules " } ] , " forwardPorts ": [ 1355 , 3000 ] } .devcontainer/postCreateCommand.sh コンテナ作成後に実行される初期化スクリプトです。 ここでは、名前付きボリュームの権限を調整しつつ、jqとClaude CLIのインストールを行っています。 Node.jsは devcontainer.json の features で追加しているため、このスクリプトでのインストールは不要です。 #!/bin/bash set -eu sudo apt-get update sudo apt-get install -y jq # ボリュームの権限を修正 sudo chown -R "$(id -gn):$(whoami)" /home/vscode sudo chown -R "$(id -gn):$(whoami)" "${WORKSPACE_FOLDER}/node_modules" # git safe directory git config --global --add safe.directory "$WORKSPACE_FOLDER" # Claude CLI curl -fsSL https://claude.ai/install.sh | bash 最小限のWebアプリケーション ここからは、動作確認用として node:http だけの最小限のWebアプリケーションを用意します。 package.json { " name ": " myapp ", " type ": " module " } src/index.ts ここで実行するサンプルのアプリケーションでは、環境変数として渡された PORT を使ってHTTPサーバをホストします。 import { createServer } from "node:http" ; const port = process .env.PORT ? Number ( process .env.PORT) : 3000 ; const server = createServer(( req , res ) => { res.writeHead( 200 , { "content-type" : "text/plain" } ); res.end( `Hello from ${ port } ` ); } ); server.listen(port, () => { console .log( `Server running at http://localhost: ${ port } ` ); } ); node ./src/index.ts でサーバを起動した後、 http://localhost:3000 にアクセスすれば応答が得られます。 git リポジトリとして初期化 いくつかリソースを作成したので、git リポジトリとして初期化してきます。 まず、 .gitignore には以下を追加しておきましょう。 .claude/worktrees node_modules/ .portless/ 次はリポジトリを初期化して、最初のコミットを作ります。 git init git add .gitignore .devcontainer package.json src/ git commit -m "initial commit" portless で単一ポート・複数サブドメインルーティング portless はローカル開発用のリバースプロキシです。 portless を使ってサーバを起動する では、アプリケーションをportless経由で起動できるようにスクリプトを追加しましょう。 { " name ": " myapp ", " type ": " module ", " scripts ": { " dev ": " npx portless run node ./src/index.ts " } } portless run を実行すると、portlessは以下のことを行います。 プロキシが未起動なら自動でバックグラウンド起動する CA証明書がなければ、PORTLESS_STATE_DIR に証明書を生成する package.json の name からサブドメイン名を推論する git worktreeを検知したらブランチ名をプレフィックスに付与する 空いているポートを見つけて $PORT 環境変数に設定する 指定されたコマンドをそのポートで起動する サブドメインからアプリケーションへのルーティングを登録する まずはメインリポジトリでサーバを起動してみましょう。 # メインリポジトリ npm run dev 初回は証明書のエラーが出力されます。 Starting proxy... Ensuring TLS certificates... Adding CA to system trust store... Could not add CA to system trust store. Permission denied. Try: sudo portless trust これは、SSL証明書をOSに登録できるのはrootユーザのみだからです。 以下のコマンドでコンテナ内のOSに証明書を登録します。 sudo env PATH="$PATH" npx portless trust ホストOSのブラウザでもHTTPS警告が出ないように、CA証明書をホストOS側にインストールしましょう。 portlessの状態ディレクトリは名前付きボリューム上にあるので、ワークスペースにコピーします。 cp -r ~/.portless . ホストOSでもMacやLinuxなら以下のコマンドを実行してください。 PORTLESS_STATE_DIR=".portless" npx portless trust Windowsなら、PowerShellを管理者権限で起動して以下のコマンドを実行します。 $env:PORTLESS_STATE_DIR = "$($PWD.Path)\.portless" npx portless trust Windows では、証明書をインストールする際に確認ダイアログが出力されます。 気を取り直して、もう一度サーバを起動するコマンドを実行します。 その後、ブラウザで https://myapp.localhost:1355 にアクセスしてみましょう。 次は、ワークツリーを作成してから、そのディレクトリ内でサーバを起動するコマンドを実行しています。 もし、まだgitリポジトリになっていないようなら、 git init で初期化してください。 # linked worktree(ブランチ feature-a) git worktree add .worktrees/feature-a cd .worktrees/feature-a npm run dev # → https://feature-a.myapp.localhost:1355 サーバが起動したら、ブラウザで https://feature-a.myapp.localhost:1355 にアクセスしてみましょう。 ホスト側のブラウザからアクセスするポート番号は同じままですが、画面に表示されるポート番号は新しいものに変わっているはずです。 Claude Code 用の環境を整える まずは、 claude コマンドを実行して、テーマの設定やログインを実施しておいてください。 Claude Codeにはhooksという仕組みがあり、 特定のイベントが発生したときにシェルスクリプトを実行できます。 今回は SessionStart フックを使います。 これは、Claude Codeのセッションが開始されるときに実行されます。 .claude/hooks/session-init.sh このフックの役割は、セッション内で必要になる資源を整えることです。 今回は説明を簡易化するために npm install だけを実施しています。 例えば、.envrc を作成したり、DBの初期データを投入すると便利ですよ。 #!/bin/bash set -eu cd "${CLAUDE_PROJECT_DIR:-$(pwd)}" npm install >&2 .claude/settings.json フックの登録はsettings.jsonで行います。 { " hooks ": { " SessionStart ": [ { " hooks ": [ { " type ": " command ", " command ": " bash \" $CLAUDE_PROJECT_DIR \" /.claude/hooks/session-init.sh " } ] } ] } } claude -w を実行してワークツリーが作成されるか確認してください。 statusline にホストURLを表示する 最後の仕上げとして、Claude Codeのプロンプト下部に常時表示される情報行を追加します。 現在のworktreeに対応するURLを常時表示しておくと、セッションと紐づくサーバがすぐに分かるので便利です。 .claude/statusline.sh #!/bin/bash input=$(cat) _url=$(NO_COLOR=1 npx --yes portless get myapp 2>/dev/null) [ -z "$_url" ] && exit 0 _routes="${PORTLESS_STATE_DIR:-$HOME/.portless}/routes.json" _host=$(echo "$_url" | sed 's|.*://||; s|:.*||') if [ -f "$_routes" ] \ && jq -e --arg h "$_host" \ 'any(.[]; .hostname == $h)' "$_routes" \ > /dev/null 2>&1; then printf '\033[38;5;75m%s\033[0m' "$_url" # blue else printf '\033[38;5;245m%s\033[0m' "$_url" # gray fi printf '\n' サーバが停止中ならグレー、起動中なら青色で表示されるようにしてみました。 これを組み込んだ後の settings.json です。 { " hooks ": { " SessionStart ": [ { " type ": " command ", " command ": " bash \" $CLAUDE_PROJECT_DIR \" /.claude/hooks/session-init.sh " } ] } , " statusLine ": { " type ": " command ", " command ": " bash \" $CLAUDE_PROJECT_DIR \" /.claude/statusline.sh ", " padding ": 0 } } Claudeのセッション中に !npm run dev とすることでサーバを起動できます。 まとめ この記事では、Claude Codeのworktreeを使った並行開発を快適にするための環境を構築しました。 構成要素をまとめると以下のとおりです。 コンポーネント 役割 DevContainer 再現可能な開発環境 claude -w worktreeの作成と自動初期化 portless 単一ポートのリバースプロキシ statusline 現在のworktreeのURLを常時表示 この構成では、 claude -w feature-a とセッションを開始すると、 https://feature-a.myapp.localhost:1355 でアクセスできます。 引数を渡さなければランダムなワークツリー名が付与されますが、portlessが適切なホスト名になるよう丸めてくれます。 また、statuslineにURLを表示しているので、もう迷うこともありません。 実際の開発では、ここに認証サーバやS3モックなどのサービスを追加していくことになるでしょう。 基本的な部分は実現できているので、追加のサーバ導入はAIがうまくやってくれますので、お任せしていきましょう。 執筆: @sato.taichi レビュー: @handa.kenta ( Shodo で執筆されました )
本記事は 2025 年 8 月 14 日 に公開された「 How to use 3ds Max with service-managed fleets on AWS Deadline Cloud 」を翻訳したものです。 AWS Deadline Cloud のマネージドインフラストラクチャを活用しつつ、 Autodesk 3ds Max をワークフローで使い続けたいスタジオやアーティストにとって、両立は難しい課題となる場合があります。本記事では、 設定スクリプト(host config script) を使ってサービスマネージドフリート ( SMF ) 上で 3ds Max を有効にする方法を紹介します。これによってマネージドインフラストラクチャの利便性と 3ds Max の機能を組み合わせ、レンダーノードを自前で管理する負荷を軽減しながら、レンダリングパイプラインの柔軟性を高めることができます。 前提条件 開始前に、以下を準備してください。 AWS Deadline Cloud を使用するための AWS アカウント。 Windows インスタンスを使用する SMF が 1 つ関連付けられたキューを持つ Deadline Cloud ファーム。既存環境への影響を避けるため、3ds Max 専用のキューを新規作成することを推奨します。 Deadline Cloud モニター がインストール済みで、ファーム用のプロファイルが作成済みであること。 Autodesk からダウンロードした 3ds Max 2024 のインストールファイル (フォルダのルートに Setup.exe があることを確認してください)。 3ds Max 2024 がインストールされた Windows ワークステーション 3ds Max 用 Deadline Cloud サブミッター 注意 : Autodesk 3ds Max には AWS とは別のライセンス要件があります。作業を進める前に、適切なライセンスを保有していることを確認してください。詳細は Autodesk Cloud Rights for 3ds Max を参照してください。 3ds Max インストールパッケージの準備 まず、フリートワーカーにデプロイするための 3ds Max インストールファイルを準備します。 3ds Max 2024 のインストールフォルダを 3ds_max_2024_full.zip という名前の zip パッケージに圧縮します。 図 1: 3ds Max インストールフォルダを zip ファイルに圧縮する。 AWS Deadline Cloud コンソールに移動し、 Farms and other resources に進みます。 ファーム を選択し、次に キュー を選択します。 キューの詳細ビュー で、 Job Attachments を選択します。 バケット名 をクリックして S3 コンソールでバケットを開きます。 バケット内に resources という新しいフォルダを作成します。 作成した resources フォルダに 3ds_max_2024_full.zip ファイルをアップロードします。 図 2: 3ds Max インストール zip ファイルを S3 バケットにアップロードする。 S3 バケットの権限設定 設定スクリプトはフリートの IAM ロール で実行されます。フリートワーカーが 3ds Max インストールファイルにアクセスできるよう、フリートの IAM ロールに適切な S3 バケット権限を付与する必要があります。 AWS Deadline Cloud コンソール に移動し、ファームおよび他のリソース( Farms and other resources ) に進みます。 ファーム を選択し、次に フリート を選択します。 フリートの詳細画面内から 、 Fleetサービスロールへのリンク をクリックします。 ロールの許可ポリシーに以下のインラインポリシーを追加します。<your-bucket-name> と <your-account-id> 部分の記述を実際の値に置き換えてください。 { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::<your-bucket-name>", "arn:aws:s3:::<your-bucket-name>/resources/*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "<your-account-id>" } } }] } 図 3: フリート IAM ロールに S3 権限を追加する。 ワーカー設定スクリプトの作成 次に、フリートワーカーの起動時に 3ds Max をインストールするワーカー設定スクリプトを作成します。 AWS Deadline Cloud コンソールに移動し、ファームおよび他のリソース(Farms and other resources)に進みます。 ファーム を選択し、次に フリート を選択します。 フリートの詳細画面内 で、 設定 ( Configurations) タブを選択します。 「ワーカー設定スクリプト(Worker configuration script)」セクションで、 スクリプトを作成(Create) または 編集(Edit) をクリックします。 図 4: フリート設定でワーカー設定スクリプトにアクセスする。 スクリプトエディタに以下の PowerShell スクリプトを貼り付けます。 <your-bucket-name> を S3 バケット名に置き換えてください。 mkdir C:\3dsmax_setup Write-Host " --- Downloading from S3 --- " aws s3 cp --no-progress s3://<your-bucket-name>/resources/3ds_max_2024_full.zip C:\3dsmax_setup\3dsmax.zip Write-Host " --- Expanding Archive --- " Expand-Archive C:\3dsmax_setup\3dsmax.zip C:\3dsmax_setup\ Write-Host " --- Starting Install --- " Start-Process -FilePath "C:\3dsmax_setup\3dsMax2024\Setup.exe" -ArgumentList "-q" -Wait -PassThru Write-Host " --- Post install setup --- " [Environment]::SetEnvironmentVariable("Path", "C:\Program Files\Autodesk\3ds Max 2024;" + [Environment]::GetEnvironmentVariable("Path", "Machine"), "Machine") & "C:\Program Files\Autodesk\3ds Max 2024\Python\python.exe" -m ensurepip & "C:\Program Files\Autodesk\3ds Max 2024\Python\python.exe" -m pip install deadline-cloud-for-3ds-max [Environment]::SetEnvironmentVariable("3DSMAX_EXECUTABLE", "C:\Program Files\Autodesk\3ds Max 2024\3dsmaxbatch.exe", "Machine") [Environment]::SetEnvironmentVariable("PYTHONPATH", "C:\Program Files\Autodesk\3ds Max 2024\Python;C:\Program Files\Autodesk\3ds Max 2024\Python\Scripts", "Machine") [Environment]::SetEnvironmentVariable("Path", "C:\Program Files\Autodesk\3ds Max 2024\Python;C:\Program Files\Autodesk\3ds Max 2024\Python\Scripts;" + [Environment]::GetEnvironmentVariable("Path", "Machine"), "Machine") 図 5: 3ds Max インストールコマンドでワーカー設定スクリプトを編集する。 重要: 3ds Max のインストールが完了するまで十分な時間を確保するため、スクリプトのタイムアウトを 1200 秒 (20 分) に更新してください。 スクリプトを作成(Create)、または保存(Save) をクリックして変更を適用します。 図 6: スクリプトのタイムアウトを 1200 秒に設定する。 注意: スクリプトはフリートワーカーの起動時に実行されます。フリート内に既に実行中のワーカーがある場合、新しく設定したスクリプトは実行しないでください。 キュー環境(Queue environments)の設定 デフォルトのキュー環境は、サブミットされたジョブに必要なソフトウェア依存関係をインストールする仕組みです。サブミッターはデフォルトのキュー環境の定義を認識し、いくつかのソフトウェア依存関係を自動設定します。3ds Max の場合、Condaのサポートがないため、サブミッターが利用できないソフトウェア依存関係を誤って設定してしまいます。 設定スクリプトが必要な依存関係のインストールを処理するため、これ自体は問題ありませんが、ジョブ定義が存在しないCondaなどの依存関係を要求すると、ジョブが失敗します。 この問題を回避するため、デフォルトのキュー環境(Conda)を削除します。 フリートの詳細 ビューで、 Associated queues タブを選択し、 キュー を選択します。 キューの詳細 ビューで、 Queue environments タブを選択します。 デフォルトのキュー環境が存在する場合、 デフォルトのキュー環境(Conda) を選択して 削除(Delete) をクリックします。 図 7: デフォルトのキュー環境が存在する場合は削除する。 注意: デフォルトのキュー環境が必要な場合はそのまま引き続き使用できますが、サブミッターの値が自動で設定されるため、 サブミッター内の Conda Packages プロパティを手動で上書きします 。これはジョブをサブミットするたびに操作が必要です。 3ds Max レンダリングジョブのサブミット フリートが 3ds Max をサポートするよう設定できたので、レンダリングジョブをサブミットできます。フルレンダリングジョブをサブミットする前に、設定が正しく動作しているか検証することを推奨します。 ワークステーションで 3ds Max を開き、最小限の 3ds Max シーン (基本的なシーンの 1 フレームをレンダリングするなど) でテストジョブを準備します。 3ds Max 用 Deadline Cloud サブミッターを使用して、設定済みのフリートに関連付けられた キュー にジョブをサブミットします。 図 8: 3ds Max から Deadline Cloud にレンダリングジョブをサブミットする。 Deadline Cloud モニターを開き、ジョブモニター( Job Monitor) 画面に移動してジョブの進捗を確認します。 図 9: Deadline Cloud モニターで 3ds Max レンダリングジョブを監視する。 メリット 設定スクリプトを使って AWS Deadline Cloud で 3ds Max レンダリングを実装すると、クラウドのスケーラビリティと既存の 3ds Max ワークフローを両立できます。パフォーマンス、コスト効率、運用の効率化をバランスよく実現でき、現在のプロセスを大きく変更する必要はありません。 AWS Deadline Cloud の柔軟性を活かし、マネージドサービスの恩恵を受けながら、レンダリング環境を要件に合わせてカスタマイズできます。 このアプローチのメリットは以下のとおりです。 レンダーノードを自前で管理する運用負荷が削減。 需要に応じたレンダリングキャパシティの自動スケーリング。 既存の 3ds Max ワークフローとの互換性の維持。 トラブルシューティング 3ds Max レンダリングジョブで問題が発生した場合の一般的なトラブルシューティング手順を紹介します。 インストールの失敗 : Deadline Cloud コンソールの ワーカーログを確認 し、3ds Max のインストールプロセスでエラーが発生していないか確認してください。 依存関係の不足 : 3ds Max のプラグインや機能によっては、追加の依存関係が必要な場合があります。ワーカー設定スクリプトを変更して、必要な依存関係をインストールします。 タイムアウトの問題 : タイムアウトによりインストールが繰り返し失敗する場合は、スクリプトのタイムアウトを 1200 秒以上に増やしてください。失敗しなくなるか、1 時間の上限に達するまで 300 秒ずつ増やしてみてください。 権限エラー : フリートの IAM ロールに S3 バケットと 3ds Max インストールファイルへのアクセスに必要な権限が正しく設定されているか確認してください。 まとめ 本記事では、設定スクリプトを使って AWS Deadline Cloud のサービスマネージドフリートで Autodesk 3ds Max を有効にする方法を紹介しました。このアプローチにより、マネージドインフラストラクチャの利便性を活かしつつ、レンダリングパイプラインで 3ds Max を使用できます。 ビジネスの加速を支援する方法については、 AWS の担当者 にお問い合わせください。 関連リソース 3ds Max 向け設定スクリプトの最新の活用方法は、 Deadline Cloud Samples リポジトリ で確認できます。 さらに詳しく知りたい場合は、以下のリソースを参照してください。 AWS Deadline Cloud ドキュメント SMF の設定スクリプト Autodesk 3ds Max ドキュメント Deadline Cloud for 3ds Max GitHub リポジトリ Jair Ruiz Jair Ruiz is a Software Engineer building products for digital content creation at AWS. 参考リンク AWS Media Services AWS Media & Entertainment Blog (日本語) AWS Media & Entertainment Blog (英語) AWS のメディアチームの問い合わせ先: awsmedia@amazon.co.jp ※ 毎月のメルマガをはじめました。最新のニュースやイベント情報を発信していきます。購読希望は上記宛先にご連絡ください。 翻訳は Visual Compute SSA 森が担当しました。原文は こちら をご覧ください。
生成AIの進化により、アプリケーション開発の在り方が大きく変わり始めています。 AIがコードを書くという世界も、もはや遠い未来の話ではなくなってきました。 本記事では、Codexを活用し、Javaアプリケーション開発をAIがどこまで実践できるのかを検証していきます。 想定読者 AIでアプリケーション開発をしたい人 Codexの基本を理解している人 JavaでのWebアプリ開発の経験がある人 Tomcat,PostgreSQLの基本知識がある人 環境構築編 全体構成 全体構成は以下になります。 Codexは現状Linux環境のほうが動作が安定するため、Windows環境上に
動画
該当するコンテンツが見つかりませんでした








