Start Debugging

Aspire 13.5 はダッシュボードの中に本物のターミナルを載せる

WithTerminal() はリソースに対話的な PTY セッションを与え、ダッシュボードから直接入力したり、自分のシェルからアタッチしたりできます。実験的機能であり、デバッガーは自動接続されず、以前あった Shell オプションは削除されました。

Aspire 13.5 は 2026 年 8 月 18 日にリリースされ、ダッシュボードの刷新、TypeScript AppHost の GA、そして 12 件の破壊的変更を伴いました。しかし開発ループを実際に変えるのは、それらより小さな機能です。WithTerminal() は、コンソールログを眺めるだけだったリソースに、ダッシュボードから直接入力できる生きた疑似ターミナルを与えます。

呼び出し 1 つでリソースに PTY が付く

#pragma warning disable ASPIRETERMINAL001
var agent = builder.AddExecutable("agent", "my-agent", ".")
    .WithTerminal();
#pragma warning restore ASPIRETERMINAL001

この API は実験的なので、呼び出すと ASPIRETERMINAL001 が発生し、上記の pragma か <NoWarn> への ID 追加で明示的に承認するまで AppHost はビルドできません。有効にすると、ダッシュボードのリソースの Console Logs ページに、通常のログストリームと並んでターミナルビューが追加され、実行中のリソースは既定でそのビューで開きます。

オプション付きのオーバーロードはグリッドの寸法を扱います。

.WithTerminal(options =>
{
    options.Columns = 200;  // 既定値 120
    options.Rows = 50;      // 既定値 30
});

どちらも 1 以上である必要があり、0 や負値は ArgumentOutOfRangeException を投げます。3 つ目のオプション ShowTerminalHost(既定 false)は実装を有用な形で露出させます。これは「レプリカごとの隠しターミナルホストリソースを、ダッシュボードと CLI のリソース一覧に表示するかどうか」を制御します。各レプリカは自分専用の隠しホストリソースの背後に独立したセッションを持つため、.WithReplicas(3).WithTerminal() は 3 つのセッションを生み、ダッシュボードで切り替えられます。この 2 つの呼び出しの順序は問いません。同じリソースに対して WithTerminal() を 2 回呼ぶと例外になります。

自分のシェルからアタッチする

CLI 側は機能フラグの後ろにあります。

aspire config set features.terminalCommandsEnabled true
aspire terminal ps
aspire terminal attach agent --replica 1

セッションは同時に複数の閲覧者をサポートするので、ブラウザーのタブとローカルシェルが同じプロセスを操作しても、どちらかがセッションを切ってしまうことはありません。

2 つの鋭い角

1 つ目はデバッガーです。ドキュメントによれば、「WithTerminal を適用すると、Aspire はそのリソースを素のプロセスとして実行し、デバッガーを自動的にアタッチしません」。つまり、いまステップ実行している最中のプロジェクトには向かず、TUI や REPL、手で操作したいマイグレーションスクリプトに向いています。Aspire はこれを一時的な制限としています。

2 つ目は 13.4 のプレビューで試した人を刺します。起動するシェルを選ぶ方法はありません。Shell オプションは削除されました。理由は「下層の疑似ターミナルに一度も配線されておらず、何の効果もなかったため」です。TerminalOptions.Shell を設定していたコードは 13.5 でコンパイルできなくなります。13.4 では何もしていなかったのに、です。

試す前にアップグレードの注意を 1 つ。リリースノートは、13.4 と 13.5 のパッケージを混在させると実行時に MissingMethodException または TypeLoadException で失敗すると警告しています。SDK とすべての Aspire.Hosting.* パッケージを、同じコミットで揃ったバージョンに上げてください。複数の AppHost を並べて動かしているなら、13.2 の --isolated フラグとの相性が良く、分離された実行ごとに独自のポートに加えて独自のターミナルセッションが得られます。

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< 戻る