はじめに
以前の記事で Windows への Ollama のインストール方法 と、PowerShell で Windows Forms を使った GUI の作り方 を紹介しました。
今回はこの2つを組み合わせて、ローカル LLM によるタスク分解機能付きのタスク管理アプリを PowerShell で作ります。
完成したアプリのソースコードは以下のリポジトリに置いています。
アプリの概要
作成するアプリの主な機能は次のとおりです。
- タスクの追加・削除・完了切替
- タスクデータを JSON ファイルに保存・読み込み
- Ollama の REST API を呼び出し、自由記述メモからタスクを自動抽出してインポート

Ollama API 連携
モデル一覧の取得
Ollama は /api/tags エンドポイントでインストール済みモデルの一覧を返します。
function Get-OllamaModels {
param([string]$Endpoint = 'http://localhost:11434')
$uri = "$($Endpoint.TrimEnd('/'))/api/tags"
$response = Invoke-RestMethod -Method Get -Uri $uri
return @($response.models | ForEach-Object { $_.name })
}
「一覧取得」ボタンを押すと取得したモデル名をコンボボックスに登録します。

テキストからのタスク抽出
メモ欄に会議の議事録やアイデアメモを貼り付けて「タスク抽出」ボタンを押すと、Ollama の /api/generate にプロンプトを投げてタスクを箇条書きで返させます。
$body = @{
model = $Model.Trim()
stream = $false
prompt = "あなたはタスク管理アシスタントです。次のテキストから、実行すべきタスクをすべて抽出し、1行に1つずつ「-」で始まる箇条書きで列挙してください。各タスクは40文字以内の日本語で、動作が明確な短文にしてください。タスク以外の説明文は一切不要です。テキスト:`n$($PromptText.Trim())"
} | ConvertTo-Json -Depth 4
$uri = "$($Endpoint.TrimEnd('/'))/api/generate"
$response = Invoke-RestMethod -Method Post -Uri $uri -ContentType 'application/json; charset=utf-8' -Body $body
stream = $false を指定することで、ストリーミングではなく完全なレスポンスを一括で受け取ります。
返ってきたテキストを行に分割し、- や ・ などの箇条書き記号で始まる行のみ抽出してタスク候補とします。
$tasks = $text -split "`r?`n" |
ForEach-Object { $_.Trim() } |
Where-Object { $_ -match '^[-・\*\d]' } |
ForEach-Object { $_ -replace '^[-・\*]\s*', '' -replace '^\d+[.\)]\s*', '' } |
Where-Object { -not [string]::IsNullOrWhiteSpace($_) } |
ForEach-Object { $_.Trim('"').Trim() }
インポートダイアログ
抽出されたタスク候補は CheckedListBox で一覧表示され、登録する項目を選択できます。全選択・全解除のトグルボタンも付けています。

チェックを入れたタスクのみ $script:Tasks に追加され、JSON に保存されます。
使い方
以下のリポジトリにソースコードを置いています。READMEに使用方法を記載しているので、そちらを参照してください。
まとめ
Ollama の REST APIを使うと、ローカルで使用するアプリに簡単にLLMの機能を組み込むことができます。 アイデア次第で様々な応用が考えられるので、ぜひ試してみてください。


コメント