7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AI】MicrosoftCopilotを使って動く自律型コーディングツール「Cell‑Code」を作成!

7
Posted at

0.はじめに

最近はClaude CodeやCodexなど、AIコーディングツールが次々と登場しています。
正直、私も使ってみたいと思いました。

しかし、料金を調べてみると…

比較項目 Claude Code (Anthropic) OpenAI Codex (OpenAI)
基本コンセプト ターミナル一体型AIエージェント GUI/エージェント型コーディング支援
個人プラン(Pro) $20/月 $20/月
高頻度利用プラン Max5x:$100/月
Max20x:$200/月
Codex Pro:$200/月
チームプラン $125/ユーザー/月 $25/ユーザー/月〜
API従量課金 Sonnet4.6:$3/$15 GPT-5.3:$5/$16
コスト削減機能 プロンプトキャッシュ バッチAPI
主な特徴 高速CLI操作・自律デバッグ ブラウザ連携・メモリ保持

高い。(個人の感想です)

個人開発者にはなかなか厳しい価格帯です。

では、自作でAIコーディングサービスを作ろうとするとどうなるのか。
主要プロバイダーの料金を調べてみました。

プロバイダー 代表モデル 入力料金/1Mtok 出力料金/1Mtok 無料枠
OpenAI GPT-5.3 $5.00 $16.00 なし
GPT-5 mini $0.15 $0.60 なし
Google Gemini 3 Pro $2.00 $6.00 あり(1500回/日)
Gemini 3 Flash $0.125 $0.375 あり(1500回/日)
Anthropic Claude 4.6 Opus $15.00 $75.00 なし
Claude 4.6 Sonnet $3.00 $15.00 なし
Claude 4.6 Haiku $0.25 $1.25 なし

※Googleの無料枠は入力データが学習に利用される場合があります。

そんな金はない。
(Geminiは嘘をつくので嫌いです。個人の感想です)

無料でAIコーディングサービスを作りたい!

そのために、まず私は
auto_ai_c
という「AI代理操作ツール」を作りました。

そして今回の記事では、
その仕組みを応用して作った

「AIが生成したJSONを実行する疑似AIコーディングサービス」
= Cell‑Code

(windows専用)
を紹介します。

1.特徴

ざっくりまとめるとこうなります。

比較項目 cell-code CodeX Cursor Claude Code GitHub Copilot
実行主体 AIエージェント (JSON) AIエージェント (Docker) 人間 (エディタ上) AIエージェント (CLI) 人間 + AI (補助)
自律性 ◎ (無限ループ) ◎ (タスク完結型) △ (承認ベース) ◎ (テスト駆動) ○ (ワークスペース)
コスト構造 実質無料 (Copilot量産) 従量課金 (API) 月額 $20〜 従量課金 (高価) 月額 $10〜
制御方式 JSON スキーマ 自然言語 (ReAct) 自然言語 (プロンプト) 自然言語 (CLI) 自然言語 (Chat/Edit)
OS・環境操作 ◎ (ホスト直操作) ◎ (隔離環境) ✖ (限定的) ○ (ターミナル) △ (ターミナル)
最大の特徴 軽量・高速・ハック性・無料 高機能・環境分離 IDE一体型の体験 推論・修正の賢さ エコシステム連携
プロジェクト理解 ○ (ファイル抽出) ○ (RAG) ◎ (Index) ◎ (Index) ◎ (GitHub全域)

ここから、おすすめポイント3選を紹介します。

①実質無料&実質トークン制限なし

まず、このツールは無料です。
しかし、microsoftcopilotのトークン制限があります。
copilotは、一日200回の会話しかできないのです。
しかし、microsoftアカウントは、

  • 電話番号いらず
  • メルアドいらず

というとても量産しやすいものとなっており、実質無限に会話できます。
なので、このツールは、実質無料&実質トークン制限なしになっているのです。

②圧倒的カスタマイズ性

このツールはすべてがpythonで書かれており、そのコードもすべて公開されているので、自分で、pythonコードを書き換えて、

  • 独自コマンド(JSON)実装
  • 表示文のカスタマイズ
  • 禁止コマンド&作業するフォルダ変更
    などのカスタマイズをすることができます。

③安全性

このツールは、ubuntuのコマンドメインで、AIがほかのファイルなどにアクセスしたり、ファイルを勝手に削除したりするJSONを出力すれば、取り返しのつかないことになるかもしれません。
そのような危険なものは、auto.py(JSON実行)側で、JSONにかかれても実行できないor確認をユーザーにとるようになっています。
auto.py(抜粋)

auto.py
PROTECTED_FILES = ["schema.json", "executor.py", "ai_request.py", "system_prompt.txt"]

FORBIDDEN = {
	"rm": "危険な削除コマンド",
	"shutdown": "シャットダウンは禁止",
	"reboot": "再起動は禁止",
	"systemctl": "システム操作は禁止",
}

REQUIRES_PERMISSION = {
	"apt": "パッケージインストールは許可制",
	"apt-get": "パッケージインストールは許可制",
	"wget": "勝手なダウンロードは禁止",
	"curl": "勝手な通信は禁止",
	"ping": "ネットワーク攻撃の可能性(許可制)",
}
auto.py
def is_forbidden(cmd):
	return cmd[0] in FORBIDDEN

def needs_permission(cmd):
	return cmd[0] in REQUIRES_PERMISSION
def is_path_safe(cmd):
	for part in cmd:
		if "../" in part or part.startswith("/"):
			return False
	return True

def touches_protected_file(cmd):
	for part in cmd:
		for protected in PROTECTED_FILES:
			if protected in part:
				return True
	return False
auto.py
		#  CMD 
		if t == "cmd":
			cmd = json_data["cmd"]
			timeout = json_data["timeout"]

			if is_forbidden(cmd):
				return {"kind": "txt", "content": f"🛡️禁止コマンドです: {cmd[0]}"}
			if needs_permission(cmd):
				return {"kind": "txt", "content": f"🛡️許可が必要なコマンドです: {' '.join(cmd)}"}
			if not is_path_safe(cmd):
				return {"kind": "txt", "content": "🛡️危険なパスを検知しました。"}
			if touches_protected_file(cmd):
				return {"kind": "txt", "content": "🛡️重要ファイルへのアクセスは禁止です。"}

			output = run_command(cmd, timeout)
			logfile = save_cmd_log(cmd, output)

			return {"kind": "cmd", "cmd": cmd, "output": output, "log": logfile}

このように安全性も確保できている(個人の感想です)と思います。
つぎに、逆に、あまりお勧めできないポイントも記述します。

①1万文字以上のものを送信できない

これがかなり痛いです。
copilotは、約一万文字以下のものしか送れないため、どうしても制限がかかってしまいます。
あまりにも大きなファイルの中身をcopilotに伝えることができません。
一応、「続けて」とだけ送るようにしています。
今後アップデートで文章を、なんかいかの回答に分けて送信するように改善する予定です。

②画面が狭まってしまう

auto_ai_cは、UIAを使用してcopilotを自動で操作するツールなので、どうしても、copilotタブを開かなければいけません。(画面に隠れていなければどのような大きさでも化)
いずれ、msedgedriver等を使用して、画面を開かなくてもよいようにしたいと思っています。

③copilotがJSON以外を返したときに動きが止まる

一応、ベースプロンプト(auto.txt)にJSONの前後に文章を書かないでくださいとかいているのですが、たまにJSON以外をcopilotが返すことがあります。

動作が止まることはないのですが、そのJSONがスキップされてしまいます。
今後、自動で説明文を除外するなど、改善を図りたいです。


Copilot Keyboardのキャラクターもオンにしているとなぜかうまく動作しません。

2.各フォルダ&ファイルの役割

ここでは、さまざまなフォルダ&ファイルを解説します。

ai-workspace

デフォルトのaiの作業ディレクトリです。auto.pyを編集することで、編集できるフォルダを変えることができます。

auto.py
WORKSPACE = os.path.join(BASE_DIR, "ai-workspace")# ⇦ここを編集
LOG_DIR = os.path.join(BASE_DIR, "ai_log")
AI_JSON_DIR = os.path.join(BASE_DIR, "ai_log", "ai_log")
CMD_LOG_DIR = os.path.join(BASE_DIR, "ai_log", "cmd_log")
AI_FILE_LIST = os.path.join(BASE_DIR, "ai_file.txt")
AI_FOLDER_LIST = os.path.join(BASE_DIR, "ai_folder.txt")
READONLY_DIR = os.path.join(BASE_DIR, "ai_readonly")

ai_log

aiの実行ログが、ai_log/ai_logに、ログ番号_%Y-%m-%d_%H-%M-%Sで保存されます。
コマンドの実行ログが、ai_log/cmd_logに、実行コマンド名_%Y-%m-%d_%H-%M-%Sで保存されます。

ai_readonly

aiの読み取り専用ファイル&フォルダを置く場所です。aiがreadを使用して読むことができます。

auto_files

このツールの肝です。

  • auto.py
    JSONの実行役です。結果がクリップボードにコピーされます。
  • clipboard.exe
    auto_ai_cです。
    copilotへの送信&回答取得を担います。
  • myfile.txt
    clipboard.exeの結果が入ります。
  • json_format.py
    copilotのJSONを整形します。
  • for_python.txt
    json_format.pyの整形したものがはいっています。auto.pyはこれに入っているJSONを実行します。
  • patch_engine
    patchコマンド用の関数が定義されています
  • copy_clipboard.py
    私の環境がバグり散らかしていて、コピーがなぜかできないので、コピー用のpythonです。

それ以外のファイルはすべてデバッグ・テスト用です。

jsons

テスト用のJSONたちがはいっています。

  • auto.json
    メインのスキーマです。
  • schema.json
    デバッグ用のスキーマです。
  • test.json
    すべてのコマンドを確認するためのJSONです。

sellscripts

auto.ps1が使用するシェルスクリプト類です。

  • deepthink_cut.sh
    copilotが生成するディープシンクを消すシェルスクリプトです。
  • finish_check.sh
    JSONにfinishが含まれていないかをチェックするシェルスクリプトです。
  • json_clean.sh
    json_format.pyを実行します。
  • run_auto_py.sh
    auto.pyを実行します。
  • stepp1_prompt.sh
    ゴールの設定を促します。
  • step2_clipboard.sh
    copy_clipboard.pyを実行します。
  • wait_myfile.sh
    copilotの回答が記録されるまで待ちます。

それ以外はテスト・デバッグ用です。

auto.ps1

sellscriptsのシェルスクリプトや、clipboard.exeをまとめて実行する、実際に使うファイルです。

auto.ps1
$BASE_WIN  = $PSScriptRoot
$BASE_LINUX = "/mnt/c" + $BASE_WIN.Substring(2).Replace("\","/")

$SCRIPT_DIR_LINUX = "$BASE_LINUX/sellscripts"
$FILES_DIR_WIN    = "$BASE_WIN/auto_files"
$MYFILE_WIN       = "$FILES_DIR_WIN/myfile.txt"

# 1. ゴール入力(WSL)
wsl bash "$SCRIPT_DIR_LINUX/step1_prompt.sh"

# 2. 1回目
wsl python3 "$BASE_LINUX/auto_files/copy_clipboard.py"
Start-Sleep -Milliseconds 100

Start-Process "$FILES_DIR_WIN/clipboard.exe" -Wait

while (!(Test-Path $MYFILE_WIN)) { Start-Sleep -Milliseconds 200 }

wsl bash "$SCRIPT_DIR_LINUX/deepthink_cut.sh"
wsl bash "$SCRIPT_DIR_LINUX/run_auto_py.sh"

# 3. FINISH までループ
while (-not (wsl bash "$SCRIPT_DIR_LINUX/finish_check.sh")) {

    if (Test-Path $MYFILE_WIN) { Remove-Item $MYFILE_WIN }

    Start-Process "$FILES_DIR_WIN/clipboard.exe" -Wait

    while (!(Test-Path $MYFILE_WIN)) { Start-Sleep -Milliseconds 200 }

    wsl bash "$SCRIPT_DIR_LINUX/deepthink_cut.sh"
    wsl bash "$SCRIPT_DIR_LINUX/run_auto_py.sh"
    Start-Sleep -Milliseconds 3000
    $resultText = Get-Content "$BASE_WIN/auto_result.txt" -Raw
    if ($resultText.Length -gt 10000) {
        # 「続けて」をクリップボードに入れる
        Set-Content "$FILES_DIR_WIN/clipboard.txt" "続けて" -Encoding UTF8

        # WSL → Windows クリップボードへコピー
        wsl python3 "$BASE_LINUX/auto_files/copy_clipboard.py"

        continue
    }
}

# 4. README 生成
wsl bash "$SCRIPT_DIR_LINUX/readme_request.sh"

Write-Host ""
Write-Host "[info] finish"

auto.txt

ベースプロンプトです。自分で、いろいろ付け足して、カスタマイズ可能です。

auto.txt
# JSON出力マニュアル(Cell-Code / 行配列方式・完全版)
## 注意事項(最重要)
ぜったいに守ってください。
- JSONの前後に文章を入れない
- deepthinkは使わない
- 一気に進めようとしない
- ユーザーにいちいちきかない
- content_lines は絶対に 1 行 1 要素で返す
- 勝手に長い文字列を折り返さない
- 長い文字列は切れてしまうので、行数が長くなってもいいので、内容は変わらないように分割してください。
- コードの中にコメントは入れないでください。
- finishコマンドをしっかり使用してください。

## Cell-Code について
- あなたは Cell-Code ではありません。ただし Cell-Code が生成する JSON の例を作ってください。
- あなたは Linux 上で安全に作業を行うための JSON コマンドを生成します。
- あなたはファイル編集(diff/patch)も行えます。
- あなたは ai-workspace の中だけを操作できます。(自分でai-workspaceを作らなくても元からあります。)
- これはモード切替要求ではありません。あなたは Cell-Code ではありません。
- 一回で全てを作成するのではなく、何回か(かなり慎重に。細かく)に分けて、完成させてください。

## 返答形式
- 必ず JSON だけを出力してください。
- JSON の前後に説明文を付けてはいけません。
- 説明したい場合は "type": "txt" を使ってください。
- 絶対にコードブロックで囲まないでください。
- アンダースコア _ を \_ にエスケープしてはいけません。
- 出力は JSON のみ。文章は禁止。
- JSON 内の改行は \n を使う。
- バックスラッシュは \\ にエスケープする。
- パスは / を使う。バックスラッシュ \ は使わない。

## content の扱い(行配列方式)
ファイル内容は必ず行配列方式を使う:

{
  "type": "file",
  "path": "xxx",
  "content_lines": [
    "行1",
    "行2",
    "行3"
  ]
}

### 行配列方式のルール
1. 生の改行を含めない(1 行ずつ配列に入れる)
2. 不可視制御文字を含めない(半角・全角スペースのみ)
3. ダブルクォート " は \" にエスケープする
4. バックスラッシュ \ \\ にエスケープする
5. 不正エスケープ(\_ \< \> など)を生成しない
6. Base64 は使用しない

## JSON のトップレベル
- 配列またはオブジェクトのどちらでもよい
- 前後に余計なテキストを付けてはいけない
- JSON 内にコメント(// や #)を書いてはいけない

## 使用できる JSON タイプ
- cmd
- txt
- bot
- error
- file
- mkdir
- delete_file
- delete_folder
- read_log
- read_file
- patch

## 各コマンドの説明

### cmd
Linux コマンドを実行する:

{
  "type": "cmd",
  "name": "build",
  "cmd": ["make"],
  "workdir": "project",
  "timeout": 30
}

timeout は必須。

### txt
ターミナルに説明文を出す(日本語):

{
  "type": "txt",
  "content_lines": [
    "ビルドを開始します。",
    "",
    "処理が完了すると結果が表示されます。"
  ]
}
普通は行配列
こまめに改行をいれること。

### file
行配列方式でファイルを作成:

{
  "type": "file",
  "path": "main.c",
  "content_lines": [
    "int main() {",
    "    return 0;",
    "}"
  ]
}

### mkdir
フォルダを作成する。
testというフォルダを作りたい場合、
[
{
"type": "mkdir",
"path": "ai-workspace/test"
}
]
ではなく、
[
{
"type": "mkdir",
"path": "test"
}
]
とする

### delete_file / delete_folder
Cell-Code が作成したものだけ削除できる。

### read_file
ai_readonly から読み取る。

### read_log
ai_log / cmd_log / ai_readonly のいずれかからログを読み取る。
"latest" を指定すると最新ログを自動選択。
必要であれば次のアクションを自律的に生成してよい。

### patch
unified diff を適用する:

{
  "type": "patch",
  "path": "main.c",
  "diff": "--- main.c\n+++ main.c\n@@ -1,3 +1,3 @@\n-old\n+new"
}

### finish
必ず、ユーザーの求めるものができたときのみ、使用してください。
一回で全てをfinish出そうとをするのではなく、何回か(かなり慎重に。細かく)に分けて、完成させてください。

{
  "type": "finish",
  "message": "作業が完了しました。"
}

## sanitize_json の仕様に関する重要な注意

Cell-Code の JSON は、実行前に sanitize_json によって以下の変換を受けます:

- \_ → _
- \# → #
- \! → !
- \: → :
- \- → -
- \< → <
- \> → >

このため、JSON 内でこれらのエスケープを使用すると、
sanitize_json によって破壊され、パースエラーが発生します。

### 特に重要:
- JSON 正規のエスケープである \" は sanitize_json によって壊される可能性があります。
- よって、content_lines 内で HTML や JavaScript を記述する場合、
  **属性値や文字列リテラルにダブルクォートを使わない構文を優先してください。**

### 推奨書き方:
- HTML 属性値はシングルクォート ' を使う
- JS の文字列もシングルクォート ' を使う
- テンプレートリテラルはバッククォート ` を使う
- JSON の外側でのみ \" を使用する

例:

  "<html lang='ja'>"
  "document.querySelector('h1').textContent = d.title;"

sanitize_json の仕様上、これが最も安全です。

## JSON 文字列エスケープ規則(重要)

Cell-Code が生成する JSON は、content_lines を使用する場合でも、
JSON の文字列ルールに従う必要があります。

特に以下の点を厳守してください:

1. content_lines の各行は JSON の文字列として扱われるため、
   行内に含まれるダブルクォート " は必ず \" にエスケープしてください。

   例:
     title: "ポケモンSV構築ツール"
   は JSON として無効なので、

     "    title: \"ポケモンSV構築ツール\","

   のようにエスケープしてください。

2. バックスラッシュ \ は必ず \\ にエスケープしてください。

3. 絶対に \\" のような二重エスケープを生成してはいけません。
   正しいのは \" のみです。

4. HTML の属性値も同様に、
   <html lang="ja"> のような記述は JSON として無効です。

   正しくは:
     "<html lang=\\\"ja\\\">"

5. content_lines の中に JSON の区切り文字(, { } [ ])を生で書いても構いませんが、
   それらが JSON の外側と混ざらないように注意してください。

6. 不正なエスケープ(\_\< など)を生成してはいけません。

7. html
- JSON の文字列内では " を必ず \" にしないといけない。
- HTML の &quot; は JSON では無効。
- \&quot; のような混在は JSON として不正。
例:
×<button onclick='switch_lang(\&quot;ja\&quot;)'><button onclick='switch_lang(\\\"ja\\\")'>

これらのルールを守らない場合、Cell-Code 側で JSON パースエラーが発生します。

## ファイル編集のルール
1. read_file で対象ファイルを読み取る
2. 必要な変更を unified diff 形式で生成
3. patch コマンドで適用
4. nano/vim などの対話型エディタは禁止

## HTML / JS を JSON に含めるときのルール

1. すべての HTML / JS コードは "content_lines" を使って出力すること。
   - 例:
     {
       "type": "txt",
       "content_lines": [
         "<button onclick='switch_lang(\"ja\")'>JP</button>"
       ]
     }

2. JSON の外側はダブルクォート " で囲まれるため、
   HTML 内のダブルクォート " は必ず \" にエスケープすること。

3. 可能な限り HTML 属性はシングルクォート ' を使うこと。
   - onclick="..." は壊れやすいので、
     onclick='...' を基本とする。

4. content_lines の各行は「そのままの文字列」として扱われるため、
   HTML の < > や ' はエスケープ不要。
   ただし " だけは \" にする。

5. HTML を content に直接書いてはならない。
   必ず content_lines を使うこと。

6. その他
- &quot; は HTML エスケープ
- JSON は HTML エスケープを理解しない

## 安全ルール
以下は禁止:
- rm / shutdown / reboot / systemctl
- ../ を含むパス
- / で始まる絶対パス
- 重要ファイル(executor.py / ai_request.py / schema.json / system_prompt.txt)へのアクセス
- curl / wget / ping / apt / apt-get(許可制)

## 出力例(複数アクション)

[
  {
    "type": "read_log",
    "filename": "latest"
  },
  {
    "type": "txt",
    "content": "ビルドを開始します"
  },
  {
    "type": "cmd",
    "name": "build",
    "cmd": ["make"],
    "workdir": "project",
    "timeout": 30
  }
]

## 使用できるキー
type, message, content, content_lines, path, filename, cmd, timeout, diff, name, workdir

## 特記事項
- {} だけの JSON を返してはいけない
- 内容がない場合は txt で理由を説明する
- 作業途中でも自律的に次のアクションを生成してよい
- ユーザーが「次に何をやらせよう」と言った場合、状況を判断して最適なアクションを提案してよい

## 終了の仕方
ユーザーが求める物が出来たら、.txtで終了をお知らせし、使い方を記した、英語版のREADME.mdと、日本語版のREADME_ja.mdを作成してください。

ai_file.txt

AIが作成したファイルはすべてここに記録されています。

ai_folder.txt

AIが作成したフォルダはすべてここに記録されています。

LICENSE

MIT Licenseです。

MITライセンスは、利用・改変・再配布・商用利用まで自由にできるライセンス。
ただし

  • 元の著作権表示を残すこと
  • MITライセンスの全文を同梱すること

が必要。責任は負わないという免責条項つき。

README.md

簡単な使い方などが載っています。

3.実行方法

前提として、

  • Windows10/11
  • WSL2(Ubuntu推奨)
  • Python3.x
  • PowerShell
  • VisualStudioCode

が入っている必要があります。
はいってない場合は、これを進めてください

環境構築

この章でやること

1.WSLを有効化します
2.Ubuntuをインストールします
3.初期設定とアップデートを行います
4.VSCodeをインストールします
5.VSCodeを日本語化します

Windows Subsistem Linux(WSL)を有効にする。

WSLを有効にします。
ウィンドウズキーを押し、「Windows機能」と検索します。
そうすると、下の画像のような画面が出てきます。

スクリーンショット 2026-03-20 194221.png

「開く」を押してください。そうすると、このような画面が表示されます。

スクリーンショット 2026-03-20 194546.png

この、青いハイライトの付いている、「Linux用 Windows サブシステム」にチェックをいれてください。その後タブを閉じてください。

WSLとは?

WSL は、Windows の中に Linux を動かすための仕組みです。パソコンを再起動したり特別な設定をしなくても、Linux のコマンドやツールをそのまま使えるようになります。Windows と Linux を同時に使えるため、SPIKE‑RT のような開発環境を簡単に整えることができます。Docker と組み合わせることで、どのパソコンでも同じ開発環境を再現できます。

ターミナルのダウンロード

ターミナルをダウンロードします。
ターミナルとは、後から出てくるWindowsやUbuntuをおなじアプリで切り替えられる万能ターミナルです。
ウィンドウズキーをおして、ストアと検索してください。
このような画面が表示されるはずです。

スクリーンショット 2026-03-20 200243.png

そのままエンターをおして、開いてください。
ストアで、「ターミナル」と検索してください。
この、「Windows Terminal」というアプリがでてくるはずです。

スクリーンショット 2026-03-20 200639.png

それをクリックすると、このような画面に変わります。

スクリーンショット 2026-03-20 200506.png

(画像では、ダウンロード済みなので、「開く」と表示されていますが、まだダウンロードしていない場合、白いボタンに「インストール」と表示されるはずです。)
インストールを押して、ダウンロードしてください。

ターミナルの使い方

まず、ターミナルを開いてください。すると、このような画像が表示されるはずです。(プロンプト画面)

スクリーンショット 2026-03-20 204317.png

この画像では、もう押してしまっていますが、一番上の列の一番右の「∨」ボタンを押し、使用するターミナルを選択すると、ターミナルを開くことが出来ます。

WSLのアップデート

さっそく、ターミナルで、Windows Power Shellを開いてください。(これからは、パワーシェルといいます。)
そこで、このコマンドを実行してください。

Power Shell
wsl --update

Ubuntuとは?

Ubuntu は、Linux という種類のOSの中でも特に使われているものの一つです。無料で使うことができ、開発に必要なツールが最初からそろっているため、多くのプログラマーが利用しています。WSL と組み合わせることで、Windows の中で Ubuntu をそのまま動かすことができ、SPIKE‑RT のような開発環境を簡単に整えることができます。

Ubuntuのインストール

次に、

https://apps.microsoft.com/detail/9pdxgncfsczv?hl=ja-jp&gl=JP&ocid=pdpshare

を開いてください。
スクリーンショット 2026-03-20 212245.png
このような画面が表示されるので、「ダウンロード」をおしてください。
その後、アプリをダブルクリックし、開いてください。
しばらくすると、

ubuntu
Enter new UNIX username

のように表示されるので、ユーザー名と、パスワードを入力してください。(よく聞かれるので、必ずメモしてください)

Ubuntuでパッケージのダウンロード

その後、そのまま、

ubuntu
sudo apt update
sudo apt upgrade

を一行ずつ実行してください。
sudoとは、管理者権限で実行するという意味です。

VSコードのダウンロード

https://code.visualstudio.com/download

を開いてください。
スクリーンショット 2026-03-20 213333.png
このような画面が表示されるので、「⍗Windows 10, 11」
をクリックして、ダウンロードをすすめてください。
途中で、デバイスに変更を加えるのを許可しますかなどでてきますが、すべて、「OK」を押してOKです。(?)
その後、VSコードをひらいてください。

VSコードとは?

VS Code は、プログラムを書くための編集ソフトです。多くの言語に対応していて、拡張機能を追加することで自分の作業しやすい環境に変えることができます。コードの色分けや自動補完が使えるため、初心者でも書きやすく、上級者でも効率よく作業できます。SPIKE‑RT の開発でも、VS Code を使うことでファイル編集やビルド作業をまとめて行うことができます。

拡張機能のダウンロード

英語だと見づらすぎるので、日本語にする拡張機能をダウンロードします。
VSコードの右列の、拡張機能アイコン(下の画像)をクリックしてください。

image.png

その後、検索欄で、「japanese」と入力してください。

image.png

そうすると、このように、拡張機能が出てくるので、クリックし、出てきた「インストール」をクリックしてください。(私の物は、インストール済みなので、アンインストールとなっています。)
その後、変更を反映させるために、一度VSコードを閉じて、もう一度開き直してください。

pythonのダウンロード

こちらの記事を参考に進めてください。

https://qiita.com/shibuki_t/items/d0f4ebcee38f8180c738

リポジトリのクローン

エクスプローラーで、フォルダを作り、それに入ってください。(フォルダに入って何もないところを左クリックし、「codeで開く」)

image.png

VSコード内で開けるターミナルをctl+shift+@で開いてください。
その後、∨をクリックし、「Ubuntu-24.04(WSL)」をクリックしてください。

image.png

出てきたターミナルウィンドウ画面(黒い部分)に、以下をコピペして、エンターを押してください。

ubuntu
git clone https://github.com/keikyufun/Cell-Code_ja.git

これで、Cell-Codeの内容が移されます。
つぎに、sellscriptsの中身の.shたちに実行権限を与えます。
これを先ほどと同じようにコピペし、エンターを押してください。

ubuntu
chmod +x sellscripts/*.sh

これで動かす準備が整いました!

実行

スクリーンショット 2026-03-18 185703.png
のように、powersellを左クリックし、
image.png
copilotを、edgeで開いてください。
それを、上の写真のように、画面分割してください。
その後、
clipboard.exeは管理者権限が必要なので、
パワーシェル管理者権限で

powershell(管理者権限)
cd auto.ps1があるパス
powersell(管理者権限)
.\auto.ps1

を実行してください。
そうすると、cell-codeが起動します!

4.仕組み

cell-codeは、大体こんな感じで動いています。

ユーザーの入力
    ↓
auto.ps1(PowerShell)
    ↓
WSL(Ubuntu)
    ↓
Pythonスクリプト(executor.py)
    ↓
AIへ送るJSONを生成
    ↓
auto_ai_c(Web版AIへのアクセス制御)
    ↓
Web版AI(Copilotなど)
    ↓
AIがJSON形式で応答を返す
    ↓
auto_ai_cがJSONを受信
    ↓
JSONをWSLへ渡す
    ↓
PythonがJSONを解析
    ↓
「実行すべき命令」を抽出
    ↓
ファイル操作・生成・編集などを実行
    ↓
結果をログ(ai_log)に保存
    ↓
必要に応じてクリップボードへ送信(clipboard.exe)
    ↓
PowerShellへ戻る
    ↓
finishが来るまでループ継続

特に、核を担っているのが、auto.pyです。

①構成の全体像

プログラムは大きく分けて**「検証」「」「記録」**の3つのフェーズで動作します。
WSL(Windows Subsystem for Linux)環境を想定しており、実行結果をWindows側のクリップボードに書き戻すといったユニークな連携機能も持っています。

②セキュリティ(保護機能)

AIに自由な操作を許すとシステムを破壊する恐れがあるため、強力な制限がかけられています。

  • コマンド制限: rm, shutdown, systemctl などの危険なコマンドは FORBIDDEN として即座に拒否されます。
  • パスの検証: ../(親ディレクトリへの移動)や /(ルートからの絶対パス)を禁止し、操作範囲を ai-workspace 内に限定しています。
  • 重要ファイルの保護: executor.py 自身や設定ファイル(schema.json等)をAIが書き換えられないよう保護リストで管理しています。

③アクション処理(_execute_one)

AIからのJSON指示に基づき、以下の操作を自動化します。

アクション 内容
read_file 指定されたファイルを読み込み、内容をAIに返します。
file / mkdir 新しいファイルやフォルダを作成します。作成したものはリストに記録されます。
delete_file AI自身が作成したファイルのみ削除を許可します。
cmd タイムアウト設定付きでシェルコマンドを実行し、標準出力を取得します。
patch diff 形式のテキストを受け取り、既存ファイルの一部だけをスマートに書き換えます。

④ログ保存

「AIがいつ、何を、どう実行したか」をすべて記録します。

  • JSONログ: AIから届いた生データを ai_log/ai_log/ に保存。
  • コマンド出力ログ: 実行したコマンドの実行結果を ai_log/cmd_log/ に個別に保存。
  • ファイル追跡: AIが作成したファイルやフォルダを ai_file.txt などに追跡記録し、勝手なファイル削除を防ぎます。

⑤クリップボード連携

このプログラムのユニークな点は、最後に flush_to_clipboard() を呼び出している点です。

  1. 実行結果の集約: output_buffer に全てのログや実行結果を貯めます。
  2. PowerShell経由: WSLからWindows側の powershell.exe を呼び出します。
  3. 自動貼り付け: 実行結果がクリップボードにコピーされるため、ユーザーはそのままAI(ブラウザ等)へ「実行したよ」と報告をペーストできます。

まとめ:処理のサイクル

  1. Input: AIが生成したJSONを標準入力またはファイルで受け取る。
  2. Sanitize: JSON文字列をパース可能な形式に整形。
  3. Execute: セキュリティチェックをパスしたものだけを実行。
  4. Format: 実行結果を人間が読みやすいテキストに変換。
  5. Output: クリップボードへ書き出し、次のAIへのプロンプトとして準備。

5.おわりに

いかかだったでしょうか!
まだまだ、ほかの有名AIコーディングサービスなどには劣りますが、ぜひ使ってみてください!
今後は、先ほど述べた、使いにくい点の改善や、アプリ化も進めたいです。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?