ajec's BLOG

「ちょっとだけ、誰かに教えたくなる」がコンセプト。

AIにコードを書かせるだけでは足りない。Cursorを「AI開発チーム」にする方法

AIを使った開発は、かなり速くなりました。

Cursorに要件を渡せば、かなりの速度でコードを書いてくれます。
実装も進むし、エラーも直してくれる。少し前と比べると、開発体験は大きく変わりました。

でも、実際に業務システムを作っていると、別の問題が出てきます。

それは、

AIは、与えられた要件の中ではかなりよく実装するが、「そもそも何が抜けているのか」を十分に見つけてくれない

という問題です。

最近、ある業界向けの請求システムを作っていて、まさにこれを感じました。

「請求機能が完成した」と思っても、少し考えると疑問が次々と出てきます。

  • オプション料金はどうするのか
  • 食事や物品などの追加費用はどうするのか
  • 追加サービスの利用実績は誰が入力するのか
  • 利用者がタブレットから入力するのか
  • 個人ログイン画面から入力するのか
  • その両方がある場合はどう整合させるのか
  • そもそもその入力機能を使っていない拠点はどうするのか
  • スタッフが代理入力する必要はないのか
  • あとから訂正した場合はどう扱うのか
  • 請求確定後に修正があった場合はどうするのか

こういうものは、コードのバグではありません。

プロダクト設計上の抜けです。

そして今後のAI開発で重要なのは、単に「コードを書く速度」を上げることではなく、

人間が気づく前に、AI自身がこの抜けを発見すること

だと思っています。


「人間が間違いを指摘してAIが直す」は、そろそろ卒業したい

よくあるAI開発の流れはこうです。

人間
↓
要件を伝える
↓
Cursor
↓
実装
↓
人間が抜けに気づく
↓
Cursorに修正させる
↓
また人間が別の抜けに気づく

もちろん、これでも昔よりは圧倒的に速いです。

ただし、この構造では結局、

人間がProduct Manager、QA、Domain Expertを全部兼任しています。

AIはコードを書く役割にはなっていても、開発そのものの責任はまだ人間側に残っています。

これでは本当の意味で「AIに開発を任せた」とは言いにくい。

目指したいのは、こういう状態です。

人間
↓
大きな目的を伝える
↓
AIが制度・既存コード・UI・DB・業務運用を調査
↓
AIが要件を展開
↓
AIが抜けを自分で探す
↓
AIが実装
↓
別のAIが反証
↓
AIがテスト
↓
判断が必要なポイントだけ人間に聞く

この形に近づけたい。


Cursorを「AI開発チーム」にする

Cursorを使い続ける前提なら、単一Agentに全部やらせるより、

役割の違うAgentを分ける

のがよさそうです。

まずは4つに分けるのがシンプルです。

あなた
  │
  │「請求機能を完成させて」
  ▼
┌──────────────────────┐
│ ① Product Researcher │
│ 何を作る必要があるか調査 │
└──────────┬───────────┘
           ▼
┌──────────────────────┐
│ ② Devil's Advocate   │
│ 抜け・矛盾・例外を探す   │
└──────────┬───────────┘
           ▼
      PLAN / SPEC
           │
           ▼
┌──────────────────────┐
│ ③ Builder            │
│ 実装・テスト           │
└──────────┬───────────┘
           ▼
┌──────────────────────┐
│ ④ Completion Auditor │
│ 「未完成」を証明する    │
└──────────┬───────────┘
           ▼
        あなた
   判断事項だけ確認

重要なのは、

同じAIに全部やらせないこと

です。

自分で作った設計を、自分でレビューすると、どうしても前提を引き継いでしまいます。

なので、役割とコンテキストを分ける。


1. Product Researcher

最初のAgentは、コードを書かせません。

役割は、

「この機能を現実の業務で成立させるには、何が必要なのかを調査すること」

です。

例えば請求システムなら、

単に「請求データを作る」ではなく、

制度上必要な情報
↓
その情報はDBに存在するか
↓
存在しないなら、誰が入力するか
↓
どのUIから入力するか
↓
どう修正するか
↓
いつ確定するか
↓
請求データにどう反映するか

まで考える必要があります。

追加サービス料金を例にすると、

利用実績が必要
↓
現在DBにある?
↓ No
誰が入力する?
├ 利用者
└ スタッフ
↓
利用者が入力する場合
├ タブレット
└ 個人ログイン
↓
どちらも使っていない拠点は?
↓
スタッフ入力が必要?

というように掘らせます。

ここで重要なのは、

「現在存在する画面やDBの範囲だけで考えない」

ということです。

必要な情報がなければ、

「新しい入力経路が必要」

という結論まで出してほしい。


2. Devil's Advocate

次は、仕様を壊す役割です。

Product Researcherが作った仕様を見て、

「これは不完全である」と仮定して反証する

Agentです。

例えばこんな問いを投げます。

この仕様のまま本番導入すると何が起きるか?

以下を重点的に探す。

- 業務上必要だが未考慮のケース
- 現場運用で成立しないケース
- 入力経路が存在しないデータ
- スタッフ運用の抜け
- 利用者運用の抜け
- 訂正・取消
- 月跨ぎ
- 請求確定後の変更
- 権限
- 監査ログ
- 差し戻し
- 再請求

さらに、

最低10個の反証仮説を出す

くらい強制してもいいと思っています。

例えば、

  • 追加サービスを申し込んだが当日キャンセルした場合は?
  • 予定と実績は同じデータでよいのか?
  • 利用者本人が入力できない場合は?
  • スタッフがあとから代理入力した場合、誰が入力したか残るか?
  • 請求確定後に実績が変わった場合は?

などです。

ここを人間が考えるのではなく、AIにやらせる。


3. Builder

ここで初めて実装です。

大事なのは、

人間
↓
Builder

にしないこと。

Research
↓
Critic
↓
SPEC
↓
Builder

にします。

Builderは仕様に従って実装するだけにする。

さらに、

勝手に業務仕様を補完しない

というルールも入れます。

判断不能なものは、

DECISION_REQUIRED

として人間に上げる。

これによって、

AIが勝手に仕様を決めて実装してしまうリスクを減らせます。


4. Completion Auditor

最後がかなり重要です。

普通のレビューは、

「問題がないか確認してください」

と依頼します。

でも、このAgentには逆のことを言います。

「完成していない理由を探してください」

と。

例えば、

この機能は完成したと報告されています。

あなたの役割は完成を確認することではありません。

この機能が未完成であることを証明してください。

くらい強く指定する。

確認するレイヤーは、

業務ルール
↓
業務フロー
↓
UI
↓
API
↓
DB
↓
請求データ
↓
テスト

です。

そして逆向きにも確認します。

請求データ
↓
この値はどこから来た?
↓
誰が入力した?
↓
いつ確定した?
↓
修正可能?
↓
監査可能?

これをやると、単なるコードレビューでは見つからない問題を拾いやすくなります。


「完成」の定義をコードの完成から変える

AI開発で一番危険なのは、

コードが動いた=完成

と判断することだと思っています。

業務システムではそうではありません。

例えば「請求機能が完成した」というのは、

単に請求データを出力できることではない。

必要なのは、

入力
↓
保存
↓
確認
↓
訂正
↓
確定
↓
請求
↓
差し戻し
↓
修正
↓
再請求

までのライフサイクルです。

なので、Completion Gateを明文化しておくとよいと思っています。

例えばこんな感じです。

## FEATURE COMPLETE

- [ ] 業務要件を一次資料・既存仕様と照合済み
- [ ] 正常系を網羅
- [ ] 例外系を網羅
- [ ] 必要データの取得経路が存在
- [ ] 利用者入力で成立
- [ ] スタッフ入力で成立
- [ ] 各入力機能を使わない拠点でも成立
- [ ] 訂正・取消が成立
- [ ] 権限確認済み
- [ ] 監査可能
- [ ] 請求確定後の変更を処理可能
- [ ] 自動テストあり
- [ ] E2Eテストあり
- [ ] Product Researcher PASS
- [ ] Devil's Advocate PASS
- [ ] Completion Auditor PASS

1つでもFAILなら、

「完成」と報告してはいけない

というルールです。


高性能モデルは「コードを書くところ」より「抜けを探すところ」に使う

ここも重要だと思っています。

AI開発では、つい、

「一番高性能なモデルでコードを書かせよう」

と考えがちです。

でも、今の自分のボトルネックはそこではありません。

コードを書く速度ではなく、

何を作るべきかを考える速度

と、

何が抜けているかを発見する能力

です。

なのでモデル配分も変えます。

コードベース探索
→ 高速・低コストモデル

通常実装
→ コーディングが強いモデル

Product Research
→ 高性能Reasoningモデル

Devil's Advocate
→ 高性能Reasoningモデル

Completion Audit
→ 高性能Reasoningモデル

つまり、

賢いモデルを実装より前後に置く

という考え方です。


今後のAI開発は「コード生成」より「自律的な問題発見」

AIコーディングの初期フェーズは、

どれだけ速くコードを書けるか

が価値でした。

でも、これからは変わっていくと思っています。

人間が、

この追加料金の扱いは?

と指摘して、

AIが、

対応します

と答える。

これは便利ではあるけれど、まだ人間がレビューの中心です。

理想は、

AI側から、

請求機能について調査しました。

現状では以下が未対応です。

1. 追加料金の実績入力経路
2. タブレット未使用拠点の代替入力
3. 個人ログイン未使用拠点の代替入力
4. 請求確定後の訂正
5. スタッフ代理入力時の監査ログ

このため、現時点では完成扱いにできません。

仕様判断が必要なのは以下の2点です。

と出てくる状態です。

さらに理想を言えば、

業務要件73件を確認

68件
→ 実装済み・テストPASS

3件
→ 仕様判断待ち

2件
→ 未実装

したがって、本機能は未完成です。

までやってほしい。

ここまでいけば、

AIにコードを書かせているというより、

AI開発チームを管理している

と言える状態に近づきます。


まず既存の請求機能で試してみる

いきなり開発プロセス全体を変えるのではなく、

今作っている請求機能をテストケースにするのがよさそうです。

Cursorに、

.cursor/
  agents/
    product-researcher.md
    devils-advocate.md
    completion-auditor.md

  rules/
    feature-completion.mdc

のような構成を用意する。

そして重要なのは、

いきなり実装修正させない

ことです。

今ある請求機能に対して、

Product Researcher
→ Devil's Advocate
→ Completion Auditor

だけを実行します。

そして、

  • 追加料金
  • 利用実績の入力
  • タブレット利用
  • 個人ログイン
  • 各入力機能を使わない拠点

といった、自分がすでに気づいている論点を、

こちらから教えずにAIが発見できるか

を評価する。

これをベンチマークにするのがよいと思っています。


AI開発を効率化するというと、

  • より速いモデル
  • より安いモデル
  • よりコード生成が強いモデル

に目が行きがちです。

でも、実務で一番時間を取られるのは、

人間が「何か抜けていないか」と考え続けること

かもしれません。

なので、これからのAI開発で重要なのは、

「実装するAI」だけではなく、「疑うAI」「調査するAI」「完成を否定するAI」を持つこと

だと思っています。

Cursorを単なるコード生成ツールではなく、

Product Researcher / Critic / Builder / AuditorからなるAI開発チームとして使う。

これが、今自分が試してみたい開発スタイルです。

麻雀点数計算クイズをHTMLで作ってみた。設計・実装・ハマりポイント備忘録

麻雀点数計算クイズをバニラHTMLで作る ― 設計・実装・ハマりポイント備忘録

麻雀の点数計算は、競技者が日常的に接するにもかかわらず、正確に理解している人が意外と少ない領域だ。 副底・面子符・待ち符を積み上げ、10符単位で切り上げ、基本点から支払い点を算出する一連の手続きは、覚えるべきルールの組み合わせが多く、反復練習が必要になる。

そこで、クイズ形式で点数計算を練習できるWebアプリを、ビルドツールもフレームワークも使わないバニラHTMLの単一ファイルとして実装してみた。 麻雀点数計算クイズ

1. 全体設計の方針

単一ファイル構成の選択

GitHub Pagesは静的ファイルをそのままホスティングできるため、index.htmlひとつで完結する構成が最もシンプルだ。 Node.jsやビルドパイプラインへの依存を排除することで、プロジェクトの維持コストを最小化できる。 CSS・JavaScript・HTMLをすべて一ファイルに収める方針とした。

クイズの基本フロー

アプリの画面遷移は以下の4ステップで構成した。

・スタート画面 ― ゲームの説明と開始ボタン
・問題画面 ― 牌姿・局情報・選択肢の表示
・解答画面 ― 正誤判定・符計算・役の説明
・結果画面 ― 10問のスコア集計

各画面はscreenクラスを持つブロック要素をCSSのdisplay切り替えで制御する方式を採用した。 JavaScriptのSPA的なルーティングを実装するよりも、コードが平易で把握しやすい。

手牌ジェネレーターの役割分担

問題はランダム生成とした。出題形式ごとに独立したジェネレーター関数を用意し、10種を実装した。

- gPinfuTsumo ― 平和ツモ
- gPinfuRon ― 平和ロン
- gTanyaoMen ― タンヤオ門前
- gTanyaoOpen ― タンヤオ鳴き
- gYakuhai ― 役牌ポン
- gChiitoi ― 七対子
- gToitoi ― 対々和
- gHonitsu ― 混一色
- gMixedMen ― 複合符(門前暗刻+立直)
- gRichHan ― 高得点手(一気通貫含む)

各ジェネレーターは手牌のデータ構造(hand)と面子構造体(st)の両方を出力する。 st(struct)は役検出・符計算の専用入力として使用する。

2. 牌の表示:絵文字からテキストベースへ

最初の実装と問題点

当初、牌の表示に麻雀絵文字(🀄など)を使うことを検討した。 しかし絵文字のUnicodeコードポイントは環境依存が大きく、表示崩れのリスクが高い。 また一部牌のレンダリングが他と比べて著しく薄く見えるという問題が実際に生じた。

テキストタイル方式への移行

解決策として、CSSでスタイリングしたdivベースのタイルコンポーネントに切り替えた。 各牌は以下のように色分けされる。

・萬子(man) ― 赤系(#b00000)
・筒子(pin) ― 紺色(#000088)
・索子(sou) ― 緑色(#005500)
・字牌 ― 種類別(白:灰、發:緑、中:赤、風牌:ほぼ黒)

和了牌は金色のボーダーと背景色で強調表示し、鳴き面子は淡い緑系の背景で区別した。 ドラ牌は金色のリングハイライト(box-shadow)と右上に小さな金色マーカーを付与した。

※ 文字ベースのタイル描画は、Unicodeフォント依存を避けられる一方で、 横幅の計算やwrap制御を丁寧に行わないと折り返しが乱れる。 tiles-rowにflex+flex-wrapを用い、面子区切りは幅1pxの縦線要素(meld-sep)で代替した。

3. ドラシステムの設計と落とし穴

インジケーター先行方式の採用

ドラのカウントには「表示牌先行方式」を採用した。 手順は次のとおりだ。

1. ランダムに表示牌(インジケーター)を選ぶ
2. doraNext()関数で表示牌からドラ牌を導出する
3. 手牌の全牌から該当ドラ牌を数え、その枚数をdoraCountとする

この方式により、「表示されているインジケーターと実際のドラ枚数が必ず一致する」という整合性が保証される。 初期実装ではドラ枚数を先に決めてから表示牌を後から作るという逆方向の実装をしており、 手牌内のドラ該当数と表示牌から導かれるドラ数が一致しない不具合が頻発した。

doraNext関数の実装

表示牌→ドラ牌の変換ルールは種類によって異なる。

・数牌:9の次は1に循環(例:九萬→一萬)
・風牌:北(4z)の次は東(1z)に循環
・三元牌:白→發→中→白 の順に循環

これをif分岐でシンプルに実装した。逆方向(ドラ→表示牌)のdoraInd関数も対称的に実装している。

裏ドラの扱い

立直和了時のみ、裏ドラ表示牌を追加で表示する。 裏ドラのカウントも同様にインジケーター先行方式で計算し、doraCountに加算する。

※ 槓子(カン)が絡む場合は、カン成立のたびに表ドラ表示牌が1枚追加され、立直者には裏ドラ表示牌も追加される。 本実装のジェネレーターは槓子を含む手牌を生成しないため、現時点では対象外とした。 将来的に槓子ジェネレーターを追加する際には、この点を考慮する必要がある。

4. 役検出の統一化:最大の設計的反省

初期実装の問題:役のハードコード

最初の実装では、各ジェネレーター関数が自分で役リストをハードコードして返していた。 たとえばgYakuhai(役牌ジェネレーター)は「役牌1飜」だけを返していた。 しかしランダム生成の結果、その手牌に断么九や平和が偶然成立していても検出されず、 計算上の正解点数が実際より低くなる不具合が発生していた。

これは「ジェネレーターが手牌を生成しているが、成立役を正しく把握していない」という構造的な問題だ。 一見すると役を知っているように見えるジェネレーターが、実際には見落としを抱えていた。

解決策:detectYaku()による統一自動検出

リファクタリングの方針として、役の判定をジェネレーターから完全に分離した。 各ジェネレーターは「面子構造(st)」を正確に出力することだけに責任を持ち、 役の検出はdetectYaku()という独立した純粋関数が担う。

detectYaku()が検出する役の一覧は以下のとおりだ(食い下がりも対応)。

1飜
・立直、ツモ、平和、断么九、一盃口、役牌

2飜
・七対子、対々和、三暗刻、混老頭、三色同刻、小三元
・三色同順(食い下がり1飜)、一気通貫(食い下がり1飜)
・混全帯么九(食い下がり1飜)

3飜
・混一色(食い下がり2飜)、純全帯么九(食い下がり2飜)

6飜
・清一色(食い下がり5飜)

門前のみ
・二盃口(3飜)

複合役の排他処理

役同士の組み合わせには排他ルールが存在する。以下をコード内で明示的に処理した。

・混老頭が成立した場合、混全帯么九・純全帯么九は同時付与しない
・二盃口が成立した場合、一盃口は除外する
・清一色と混一色は数学的に共存しない(片方のみ付与)
・小三元は役牌2組分(各1飜)と合計して最低4飜になることを確認する

符計算の統一化(calcFu・buildFBD)

符計算も同様にジェネレーターから分離した。 例外的な固定符ルール(平和ツモ=20符、食い平和=30符、七対子=25符)を先行評価し、 それ以外はルールに従って積み上げ計算する。

buildFBD関数は解答画面の符計算テーブルを生成するためのデータを返す。 「副底・門前加符・ツモ符・面子符・対子符・待ち符」の内訳を、 ユーザーが学習できる形で可視化している。

5. UIの工夫と段階的な改善

役・ドラのヒント折りたたみ

初期の実装では役とドラ枚数を常時表示していた。 しかしこれでは問題を見た瞬間に役がわかってしまい、クイズとして機能しない。

改善として、役・ドラの表示部分を折りたたみ式のヒントボタンに変更した。 デフォルトでは非表示とし、ボタン押下時にのみ展開される。 問題が切り替わるたびに自動的に閉じた状態にリセットされる。

ドラ表示の整理

当初はドラ表示牌とドラ牌(表示牌の次の牌)の両方を表示していた。 しかし実際の麻雀では表示牌しか卓上に見えないため、表示牌のみの表示に変更した。 ドラ牌の特定はプレイヤー側が行う演習として位置づけている。

手牌内でドラに該当する牌には金色のリングハイライトとマーカーを表示し、 ドラ枚数の視認性を確保しながらも「どれがドラか自分で確認する」という構造を維持した。

選択肢の生成ロジック

4択の選択肢は以下の方針でダミー選択肢を生成した。

・飜数を±1、±2したケース
・符を1段階上下させたケース
・ロン/ツモを逆にしたケース
・親/子を逆にしたケース

同一の点数になるケースは重複排除し、必ず4択が成立するように補完する。 点数が近い選択肢を並べることで、単純な暗記ではなく正確な計算能力が試される構成とした。

6. 修正したバグの記録

開発を通じて発見・修正したバグを以下に記録する。同種の実装で同じ罠にはまる可能性があるため残しておく。

タイル枚数オーバー(gTanyaoOpen)

鳴きタンヤオジェネレーターで面子を4組生成した後、両面待ちの2牌と雀頭2牌を加えると合計14枚を超えていた。 副露面子の数を正しくカウントし、残り面子を閉塞面子として扱う設計に修正した。

么九牌の混入(タンヤオ系)

数牌のランダム生成でrand(9)+1を使うと1や9が含まれ、断么九の条件(2〜8のみ)を満たせなくなる。 rand(7)+2に変更し、生成される数牌の範囲を2〜8に限定した。

ドラ数と表示牌の不一致

前述のとおり、ドラ枚数を先に決めて表示牌を後から作る方式では整合性が保てない。 インジケーター先行方式に変更し、表示牌から実際のドラ牌を導出してカウントする方式に統一した。

役の検出漏れ(構造的問題)

ジェネレーターが役をハードコードする構造の根本的な問題として、 ランダム生成の結果として意図せず成立した役(断么九・平和・三色同順など)が点数に含まれなかった。 detectYaku()による自動検出への統一リファクタリングで解消した。

7. 今後の拡張課題

現時点の実装で対応できていない要素として、以下が挙げられる。

・槓子を含む手牌のジェネレーター(カンドラ・カン裏ドラの扱いが伴う)
・一発・偶然役(嶺上開花・搶槓・海底・河底)の出題
・ダブル立直の出題
・振り込み(ロン)点数と被ダメージの視点からの出題
・競技麻雀ルール(一発なし・赤ドラなし)への切り替えオプション

また、現在のジェネレーターはすべて同一の出現確率で選択されるが、 学習の進捗に応じて難易度を動的に調整するアダプティブな出題制御も有効な拡張候補だ。

おわりに

バニラHTMLの単一ファイルという制約は、最初は窮屈に感じることもあるが、 依存関係がゼロであること・デプロイが即座に完了することは開発のイテレーション速度を上げる。 特にプロトタイプ段階では過剰な技術スタックを避けるメリットが大きい。

今回の開発で最も学びが多かったのは役検出のリファクタリングの場面だ。 「ジェネレーターが知っている役」と「実際に手牌に成立している役」を混同した設計は、 一見動いているように見えながら誤った点数を返し続ける。 データ生成ロジックと計算ロジックを明確に分離することの重要性を改めて確認した。

完成したクイズアプリはVercelに公開し、index.htmlひとつで動作する。 麻雀点数計算クイズ 麻雀の点数計算を体系的に練習したい方には、繰り返しプレイすることで着実に計算力が身につく構成になっていると思う。

AIコーディング環境の選び方 ― Cursor・Claude Code・Codex・ローカルモデルの比較【2026年4月】





AIを使ったコーディング支援は2026年時点で大きく2つの流派に分かれている。クラウドAPIを前提としたサービス型ツール(Cursor・Claude Code・Codex)と、ローカルでモデルを動かすオープンソース型(Qwen・DeepSeek系+OpenCode等)だ。

本記事では、実際にMac Mini M4 Pro 24GB環境でローカルLLMの構築を試みた経験をベースに、各ツールの特性・コスト・実用性を比較する。「どれが最強か」という問いに単純な答えはないが、用途と環境に応じた合理的な選択肢は絞り込める。

※ 本記事の情報は2026年4月24日時点のものです。APIの料金・モデルのリリース状況は急速に変化するため、各公式ドキュメントで最新情報を確認してください。




1. サービス型3ツールの概要と現状

Cursor

VSCodeをフォークしたAI統合エディタ。バックエンドにClaude・GPT-4・Geminiを切り替えて使える。コードベース全体をインデックス化し、複数ファイルにまたがる編集(Composer機能)が可能なのが最大の強みだ。

- 月額20ドル(Proプラン)で主要モデルへのアクセスが含まれる

  • エディタとAIが密結合しているため、補完・インライン編集の体験が洗練されている
  • ただしモデル切り替えやコンテキスト管理がブラックボックスになりがちで、挙動の予測がしにくい側面もある

※ Cursorはクラウド経由でコードを送信する。プロプライエタリなコードやセンシティブなデータを扱う場合はPrivacyモードの有効化と利用規約の確認が必要。

Claude Code

Anthropicが2025年にリリースしたターミナル型のエージェントコーディングツール。エディタに依存せず、CLIからリポジトリ全体を操作できる。Claude Sonnet 4.6をバックエンドに使用し、tool callingを通じてファイル編集・テスト実行・コミットまで一気通貫で行える。

- コンテキスト管理が明示的で、何をモデルに渡しているかが把握しやすい

  • 大規模リファクタリングやリポジトリ横断の作業に強い
  • 料金はトークン従量課金。大量に使うと月額コストが予測しにくくなる点に注意

DeepSeek V4がリリース直後のX(旧Twitter)でのアナウンスで「Claude Code・OpenCodeとのシームレスな統合」を明示的に言及したように、エージェントコーディングの標準的なインターフェースとしてClaude Codeの影響力は業界全体に及んでいる。

Codex(OpenAI)

OpenAIが2025年後半にリリースしたクラウド型コーディングエージェント。GPT-4o・o3をバックエンドとし、Webブラウザから操作できる。GitHub連携とissueからのタスク自動化が特徴的で、CI/CDパイプラインとの統合も視野に入れた設計になっている。

- バックグラウンドでの非同期タスク実行に対応しており、「頼んで放置」ができる

  • ただし2026年4月時点では招待制の段階的展開が続いており、一般利用可能な機能に制限がある
  • 料金体系はまだ流動的で、大規模利用時のコストは見積もりにくい




2. ローカルモデル路線の現実

2026年4月時点のベストモデル

ローカルLLMのコーディング用途で現時点(2026年4月)の最有力候補は以下の3系統だ。

Qwen 3.6-27B(Alibaba・Dense)

2026年4月22日リリースの最新Dense(密結合)モデル。LiveCodeBench 2026年4月スライスで71.4%を記録し、同時期のGemma 4(64.7%)を上回った。エージェントコーディングに特化した設計でtool callingの精度が高く、OpenCodeとの親和性も高い。ただし27BのDenseモデルはVRAMを大量消費するため、24GB環境では実用的な速度が出ない。

Qwen 3-30B-A3B(Alibaba・MoE)

Mixture of Experts(MoE)アーキテクチャを採用したモデル。総パラメータ30Bに対してアクティブパラメータは3.3Bのみで、推論時のメモリ消費が大幅に少ない。24GB環境でも17〜18GB程度に収まり、20〜35 tok/sの速度が出る。コーディング品質はDenseの27Bより若干落ちるが、速度とのトレードオフとして多くのユーザーが選択している。

DeepSeek V4-Flash(DeepSeek・MoE)

2026年4月24日リリース。総パラメータ284B・アクティブ13BのMoEモデルで、API経由では非常に安価かつ高速に動作する。ローカル動作には数百GBのVRAMが必要であり、個人のローカル環境で動かす選択肢には現実的に入らない。APIとして使うものと割り切るべきだ。

Mac Mini M4 Pro 24GBでの現実

実際にMac Mini M4 Pro 24GB環境でQwen 3.6-27Bの動作を試みた結果、以下のことが判明した。

- モデル重み(17.5GB)+KVキャッシュ+macOSのシステムメモリ(3.5GB)でトータル21GB超となり、コンテキストを32Kに設定するとOOMエラーが発生する

  • コンテキストを8Kに下げれば起動はするが、OpenCodeのエージェント動作に必要な長コンテキストには明らかに不足する
  • MoEモデルのQwen 3-30B-A3Bでも同様の傾向があり、24GBは「試せる」水準だが「実務で使える」水準には届いていない

canIrun.aiのベンチマークデータを参照すると、24GBのApple Siliconで「Runs well」以上に分類されるコード系モデルはQwen 2.5 Coder 7B(4.1GB・43 tok/s)とQwen 3 14B(7.7GB・23 tok/s)が現実的な上限だ。30B以上はすべて「Barely runs」(メモリギリギリ・低速)または「Too heavy」(動作不可)に分類される。

ローカル完結で快適にコーディングするための現実的なハードウェア要件は、Mac系であれば64GB(最低ライン)から128GB(快適ライン)というのがコミュニティの一般的な評価だ。




3. 各ツールの比較整理

コスト構造

Cursor Pro:月額20ドル定額。使い放題の範囲内であれば最もコスト予測が立てやすい。

Claude Code:トークン従量課金。コンテキストが長くなるほど単価が上がる。軽用途なら安く、ヘビーなエージェント利用だと月額数万円になるケースもある。

OpenAI Codex:2026年4月時点では料金体系が固まっていない。招待制の段階。

ローカル(Qwen等):モデルダウンロードは無料。ただし快適に動かすためのハードウェア投資が必要。Mac Studio M4 Max 128GBは約52万円、RTX 5090搭載PCは約65〜75万円。電力コストも考慮が必要(RTX 5090は推論時に約575W)。

プライバシー・セキュリティ

クラウド型3ツールはいずれもコードをサーバーに送信する。オープンソースライセンスのコードや個人プロジェクトであれば問題は少ないが、業務システムや未公開のプロプライエタリコードを扱う場合はリスク評価が必要だ。各社のPrivacyモードやSOC 2対応状況を確認すること。

ローカルモデルはデータが外部に出ない点でプライバシー上の優位性がある。医療・福祉・金融など個人情報を扱う開発現場では、この点が導入判断の決め手になることがある。

モデル品質とコーディング精度

2026年4月時点の客観的なベンチマーク(LiveCodeBench)では以下のような序列になっている。

- Claude Sonnet 4.6・GPT-4o(クラウドトップ):最高品質・複雑な推論に強い

  • Qwen 3.6-27B Dense:71.4%(オープンソーストップクラス)
  • Gemma 4:64.7%
  • Qwen 3-30B-A3B(MoE):速度重視・24GBで動く上限モデル

ローカルの30B以下モデルとクラウドのトップモデルの間にはまだ明確な品質差がある。特に複雑なアーキテクチャ設計・多段階の推論を要するタスクでは差が出やすい。単純なコード補完・定型的なCRUD実装程度であれば、14B〜30Bでも十分実用的だ。

セットアップと運用コスト

Cursorはインストールして数分で使い始められる。Claude CodeもCLIのインストールとAPIキーの設定だけだ。これに対してローカルモデルは環境構築に相応の手間がかかる。LM StudioやOllamaのインストール、モデルのダウンロード(10〜20GB)、OpenCodeとの接続設定、コンテキスト長の調整など、一通り整えるまでに数時間を要することがある。また、新しいモデルが出るたびに入れ替え作業が発生する。




4. 結論:用途別の推奨構成

個人開発・スタートアップ(コスト最小化優先)

Cursor Pro(月額20ドル)一択が最もコスパが高い。定額でClaude・GPT-4oを切り替えながら使えるため、トークン消費を気にせず使えるのが大きい。ローカルモデルへのこだわりがないなら、これで大半のコーディング用途は賄える。

プライバシー重視・オフライン要件あり(医療・福祉・金融系)

ローカルモデル(Qwen 2.5 Coder 7B)+OpenCodeを24GB環境で試したうえで、業務投入するならMac Mini M4 Pro 64GBへの買い替えを検討する。24GBは「評価環境」として割り切り、実務ラインは64GB以上と考えるのが現実的だ。

大規模リポジトリ・エージェント動作重視

Claude Code + Claude Sonnet 4.6 APIが現時点で最も信頼性が高い。コンテキスト管理が明示的で、リポジトリ全体を横断する複雑なタスクへの対応力がある。コストは従量課金だが、単発の大型リファクタリング作業には特に有効だ。

速度とローカル完結を両立したい(予算あり)

RTX 5090搭載のWindows/LinuxPCが現時点でのベスト構成だ。32GB GDDR7・1,792GB/sの帯域幅により、30B MoEモデルで80〜120 tok/sが出る。macOS環境から離れられる場合に限るが、速度面ではMac Studio M4 Max 128GBを大きく上回る。日本での実勢価格は2026年4月時点で約40〜45万円(GPU単体)。

2026年後半以降の見通し

Apple Silicon側はM5 Max / M5 Ultraの登場が2026年後半に予定されており、メモリ帯域幅の改善が期待される。NVIDIA側はDRAM不足によるGPU単価高騰が続いており、RTX 5090の価格正常化はまだ時間がかかる見込みだ。DeepSeek V4-Flash APIは非常に安価なため、ローカルとAPIのハイブリッド運用(軽タスクはローカル・重タスクはAPI)が現実的なコスト最適解として定着しつつある。

いずれのルートを選ぶにしても、2026年時点で「ローカルだけで完全に賄う」か「クラウドAPIだけで賄う」かの二択より、用途に応じて使い分けるハイブリッド構成が最も合理的な結論になる。

※ 本記事中のベンチマーク数値・価格は執筆時点(2026年4月24日)のものです。モデルのリリースペースが非常に速いため、3〜6ヶ月後には状況が大きく変化している可能性があります。





Pixel11を前に、Tensorの変遷とチップについてイチから学んでみる。

本記事は、スマートフォン向けSoC(System on Chip)の基本知識を整理しつつ、GoogleのTensorチップがどのように進化してきたか、そしてPixel 11(2026年夏以降発売予定)で何が変わるのかを体系的にまとめた備忘録である。情報の大部分はリークおよび流出した内部文書に基づくものであり、正式発表前の時点では仕様が変更される可能性がある点に留意されたい。

クロック周波数・コア・プロセスノードとは何か

コアは「料理人」、クロック周波数は「手の速さ」

SoC内のCPUを理解する上で最も直感的な例えが「レストランのキッチン」である。コア(Core)は料理人1人に相当し、コアが多いほど同時に処理できるタスクが増える。クロック周波数(GHz)はその料理人が1秒間に何回手を動かせるかを表す指標で、たとえば4.11 GHzであれば1秒間に41億回の動作が可能になる。

ただし「料理人を増やせばよい」とはならない。チップの面積・消費電力には上限があり、速く動かすほど発熱も増える。そのトレードオフの中で設計者はコア数とクロックのバランスを最適化している。

3層コア構成という、役割分担による効率化

現代のスマートフォン向けSoCは、CPUコアを3種類に分けて役割分担させる設計が標準的である。

Prime Core(超高性能コア)
重い処理を瞬間的にこなす。構成例:1コア。消費電力は高いが最大性能を担う。

Performance Core(高性能コア)
通常の重い処理を並列でこなす。構成例:3〜5コア。

Efficiency Core(省電力コア)
通知確認や軽いバックグラウンド処理を低消費電力で担当。構成例:2〜4コア。

ゲームや写真処理はPrime/Performanceコアが担当し、LINEのメッセージ受信程度の処理はEfficiencyコアが省エネでこなす。この役割分担により、性能と電池持ちを両立させている。

プロセスノード(nm)は小さいほど優秀

「5nm」「3nm」「2nm」といった数字はチップの製造精度を示す。数値が小さいほど同じ面積により多くのトランジスタを詰め込めるため、性能が上がり消費電力・発熱が下がる。製造プロセスはSoC性能を規定する土台であり、設計以前の問題として競争力に直接影響する。

Google Tensor世代別変遷

世代別スペック概要

Tensor G1(2021年 / Pixel 6)
製造:Samsung 5nm|コア:2+2+4(8コア)|最高クロック:2.80 GHz|GPU:Mali-G78 MP20

Tensor G2(2022年 / Pixel 7)
製造:Samsung 4nm|コア:1+2+2+3(8コア)|最高クロック:2.85 GHz|GPU:Mali-G710 MP7

Tensor G3(2023年 / Pixel 8)
製造:Samsung 4nm|コア:1+4+4(9コア)|最高クロック:2.91 GHz|GPU:Mali-G715 MP7

Tensor G4(2024年 / Pixel 9)
製造:Samsung 4nm|コア:1+3+4(8コア)|最高クロック:3.10 GHz|GPU:Mali-G715 MP7

Tensor G5(2025年 / Pixel 10)
製造:TSMC N3E(3nm)|コア:1+5+2(8コア)|最高クロック:3.78 GHz|GPU:PowerVR DXT

Samsung依存の構造的限界

G1はGoogleが初めて自社設計したSoCだが、設計はSamsungとの共同作業であり、製造もSamsungファウンドリに依存していた。AI処理の優位性はあったものの、純粋なCPU性能では同世代のSnapdragonに大きく劣り、発熱問題も顕在化した。

G2〜G3はコア構成や採用コアの微調整を行ったが、製造プロセスはSamsung 4nmのまま変わらず、根本的な解決には至らなかった。G3で採用された9コア構成は業界標準を外れた異例の構成で、旧世代コアを1基追加した暫定的な対応とも評された。発熱問題はPixelの返品理由第1位になるほど深刻化していた。

G4ではCortex-X4を採用し最高クロックを3.10 GHzに引き上げたが、製造はSamsung 4nmのまま。設計上の改善はあっても、プロセスノードの限界を超えることはできなかった。G1〜G4を通じて共通する問題は「設計は自社でも、製造をSamsungに依存していたため、Samsungプロセスの限界がそのままTensorの限界になっていた」ことにある。

最大の転換点、Samsung決別とTSMC移行

G5はTensorの歴史における最大の転換点である。製造をTSMC N3E(3nm)に移行したことで、前世代までのSamsungプロセス由来の発熱・電力効率問題が大幅に改善された。さらにSamsungは設計にも一切関与しておらず、完全な自社設計チップとなった最初の世代でもある。

コア構成も1+5+2に変更し、省電力コアを4基から2基に減らして高性能コアに振り替えた。GPUはArm MaliからImagination TechnologiesのPowerVR DXTに切り替えており、グラフィックスのベンダー方針を根本から変更している。Google公称でCPU性能がPixel 9比34%向上し、実測でも単コアで約30%、マルチコアで34〜39%の向上が確認されている。

Tensor G6リークの概要

リークされた構成(2026年2月時点)

GeekbenchにコードネームKodiakとして出現したエントリから、以下の構成がリークされている。

- 1コア(Prime):ARM C1-Ultra @ 4.11 GHz
- 4コア(Performance):ARM C1-Pro @ 3.38 GHz
- 2コア(Efficiency):ARM C1-Pro @ 2.65 GHz
- 合計:7コア(1+4+2)

採用コアであるARM C1は2025年にARMが発表した最新世代のアーキテクチャであり、G5が採用していたCortex-X4(2023年設計)の後継にあたる。コアの「世代そのもの」が刷新されることで、クロック引き上げとは別次元の性能向上が期待される。最高クロックの4.11 GHzは、競合のSnapdragon 8 Elite(4.47 GHz)との差を大幅に縮める水準である。

7コア化の解釈と注意点

業界標準の8コアから1コア減らすことは、一見「劣化」に映る。しかしGoogleの設計思想は「コア数より質と速度を優先する」方向への転換と読める可能性がある。また、製造歩留まりの都合で不良コアを無効化した「ビン選別品」をPixel 11標準に充て、Pro向けに完全版を残すという可能性も否定できない。

※注意:今回のリークはGeekbenchプロトタイプ段階のエントリであり、ベンチマークスコアが異常に低いなど信頼性に疑問が残る。別ルートでは1+6+1の8コア構成というリークも存在しており、現時点でどちらが最終仕様かは不明である。Pixel 11正式発表(2026年夏以降予定)まで断定的な評価は避けるべきである。

Pixel 11で起きる全体的な変化

カメラ:最も大きな投資が集中するエリア

Ultra Low Light Video(超低照度動画)
現行のNight Sight Videoはクラウドサーバーに映像を送って処理するため、処理ラグがありオフライン環境では機能しない。Pixel 11ではこれが完全なオンデバイス処理に切り替わり、5〜10ルクス(ろうそく1本程度の照度)での動画撮影に対応する。プライバシー面でも、映像をGoogleのサーバーに送らずに処理できる点で意義がある。

シネマティックブラー動画の進化
Tensor G6の新ハードウェアブロックにより、シネマティックブラー動画が4K 30fpsで撮影可能になる見込み。また録画時の消費電力が最大40%削減されるとされており、バッテリー消耗の懸念から使用を避けていたユーザーへの実用的な改善となる。

Video Relight
撮影済み動画の照明条件を後から調整できる機能。逆光や暗所での失敗撮影を事後補正できる可能性を持ち、撮影後編集の概念を変えうる機能として注目される。

100倍ズーム(写真・動画)
機械学習を活用した100倍ズームが、写真だけでなく動画にも対応する方向で開発されている。SamsungのSpace Zoomは写真に限定されており、動画への対応は差別化要素となりうる。ただし「100倍」の大半はAIによる補完処理であり、光学ズームとは品質次元が異なる点には留意が必要である。

セキュリティ:ディスプレイ内蔵IRカメラによる顔認証の刷新

Pixel 4で採用されPixel 5以降廃止されたIRベースの顔認証が、ディスプレイ下埋め込み型として復活する見込みである。現行Pixelの顔認証は光量不足の環境では機能しないという制限を抱えており、AppleのFace IDとの比較で長年の弱点だった。Pixel 11世代でこれを解消する方向性は、Appleが同じく2026年モデルでディスプレイ下IR搭載を検討しているタイミングと重なる。

また、2021年から据え置かれてきたTitan M2セキュリティチップがTitan M3に刷新される見込みである。5年ぶりの更新となる。

クラウド依存からオンデバイスへの転換

nanoTPU:常時AIモニタリング
Tensor G6の低消費電力部に追加される「nanoTPU」により、常時オンで動作する機械学習機能が実装される見込みである。具体的には、無呼吸・咳・いびき・転倒検知・歩行分析・睡眠ステージ監視などの健康モニタリングが含まれる。Apple Watch的な健康追跡をスマートフォン本体で実現しようとする方向性といえる。なお、常時センサー処理に伴うプライバシーリスクについては批判的な視点も存在することを付記しておく。

Speak-to-Tweak
音声コマンドで写真を編集できる機能。「もう少し明るくして」といった指示で編集が完了するコンセプトであり、LLMベースの編集ツールとして開発されている。

Sketch-to-Image
手描きスケッチを画像に変換する機能。SamsungのGalaxy AIに類似した機能であり、Google側もこの領域への参入を進めている。

通信インフラ:モデムのMediaTek移行

Pixel 11ではモデムがSamsung製からMediaTek製5Gモデムへ切り替わる報告がある。Samsung製モデムはG1〜G4を通じて通信品質と発熱の問題を抱えており、G5でのTSMC移行と並行するインフラ刷新の一環と位置づけられる。5G通信の安定性と電力効率の改善が期待される。

デザイン:大きな変化は見込みにくい

カメラバーを持つPixel特有のデザインは維持される見込みである。Googleのデバイス担当SVP Rick Osterlohによれば、デザインの刷新は2〜3年サイクルで実施されるとのことであり、劇的な変更はPixel 12世代以降の可能性が高い。カメラバーのスリム化や新色展開は検討されているとされる。

※注意:リムーバブルバッテリー搭載の噂も一部に存在するが、信頼性の高いリーカーによる確認はなく、現時点では信憑性が低い情報として扱うのが適切である。

Pixel 11をどう位置づけるか

Tensor G5(Pixel 10)でGoogleはSamsung依存から脱却し、チップの土台を作り直した。Pixel 11(Tensor G6)はその土台の上で、AIとカメラの実用性を上積みする世代と位置づけるのが妥当である。

- G1〜G4:Samsung製造の限界とアーキテクチャ世代遅れが競争力を制約
- G5(Pixel 10):TSMC移行という製造革命で土台を再構築
- G6(Pixel 11):最新ARMコア採用と高クロック化で性能競争に本格参入、AI・カメラ機能で差別化

ただし、Tensorの立ち位置はSnapdragonやApple A-Seriesとの純粋な性能競争ではなく、GoogleのAIサービスとPixelハードウェアの統合体験を最大化することにある。この点でPixel 11がどの程度「実際の使用感」として差別化を打ち出せるかが、発表後の評価の焦点となるだろう。

Pixel 9・Pixel 10からのアップグレードを検討しているユーザーにとっては、カメラ機能の拡張とセキュリティ刷新が主な評価軸になるが、Pixel 10から1年でアップグレードする合理性は現時点のリーク情報のみでは判断しにくい。正式発表後のベンチマーク・実機レビューを待つことを推奨する。

※本記事の情報は2026年4月時点のリーク・報道を元に作成。正式発表前であり仕様は変更される可能性がある。

松本卓也『斜め論:空間の病理学』概念メモ|垂直・水平・斜めで読む心の臨床

松本卓也『斜め論:空間の病理学』(筑摩書房、2025年)を斎藤環の書評をきっかけに読み始めた。 精神病理学・精神分析の文脈で「空間」というメタファーを軸に、ケアと臨床の理論を再構築しようとする野心的な試みである。

基本構造:三方向の空間メタファー

本書の骨格は、心や臨床を語る際に無意識に使われてきた「空間的方向」の問い直しにある。 松本は大きく三つの方向を設定する。

垂直(↕):高さ・深さ・上昇・墜落の次元。
水平(↔):横のつながり・他者との共存・平準化の次元。
斜め(↗):垂直と水平の緊張を保ちながら横断する次元。

このメタファーは単純に見えるが、本書の射程は思想史・臨床実践・時間論にまで及ぶ。

垂直性の系譜:「ハイデガー主義」という命名

松本は垂直方向を特権化してきた思想家を以下のように整理する。

・ヘーゲル:精神の高次上昇という垂直的プロセス
・フロイト:意識から無意識へ掘り下げる深化の運動
・ハイデガー:上昇と墜落への絶対的な特権付与
・ラカン:歴史・父の名という垂直的審級の特権化
・ビンスワンガー:垂直と水平の均衡を欠いた「思い上がり」の病理を指摘

松本はこれらをまとめて「ハイデガー主義」と命名し、批判の対象とする。 20世紀の精神論は全体として垂直方向に偏っていた、という診断である。

水平性の系譜:ケアと回復の場

対して、水平方向に回復の可能性を見出した実践者・理論家を松本は評価する。

・中井久夫:統合失調症患者が「共人間的世界(身近な他者との関係)」の再構築において回復に向かうとした
・上野千鶴子:一度限りの切断ではなく「そのたびごとの生き延び」を重視
・信田さよ子:日々の回復過程を中心に置く臨床実践

ただし松本は水平性を無条件に称揚するわけではない。 水平方向には平準化・横並びへの埋没という危険が潜む。 ここが重要な留保点である。

「斜め」とは何か:第三の方向か、動的プロセスか

本書のタイトルでもある「斜め」の概念は、一見するとシンプルだが、その実質は慎重に読む必要がある。

幾何学的に考える

斜めは幾何学的には、垂直成分と水平成分の合成ベクトルに過ぎない。 独立した第三の軸ではなく、二つの力の比率を意識的に調整し続ける運動そのものが「斜め」の実質ではないか。

この理解に立つと、「斜め」は到達点ではなく維持すべき緊張である。 垂直に引っ張られたときに水平を意識し、水平に流されたときに垂直を意識する。 その往復運動を止めないことが「斜め」の内実だということになる。

ガタリの「斜め横断性」との接続

松本はガタリ(Felix Guattari)がラ・ボルド病院の実践において提唱した「斜め横断性(transversalité)」の概念を重ねる。 これは、垂直的ヒエラルキーでも水平的な無秩序な平準化でもない、制度の組み換えを指す概念だ。

※注意:ガタリの「斜め横断性」はラ・ボルドという特定の制度的文脈から生まれた概念である。 これを普遍的な臨床理論に昇格させることができるかどうかは、別途検討が必要な論点だ。

「ちょっとした垂直性」という概念

中井久夫が指摘したように、水平的回復においても治療者による「ちょっとした垂直性」が必要とされる場面がある。 松本はこれを引き継ぎ、水平的関係を維持するために機能する限定的な垂直介入として再定式化する。

例として挙げられるのは、暴力関係からの離脱を促す介入だ。 「逃げてください」という言葉は垂直的だが、その目的は水平的な安全な関係を回復することにある。

注意:「ちょっとした垂直性」は概念的な洗練度において課題が残る。 「どのくらいが『ちょっと』か」の判断基準が明示されていない点は、臨床実践への応用において問われるべき論点である。

空間から時間へ:第三章の重要な転換

斎藤環が本書で最も感銘を受けたと述べる第三章では、空間的メタファーが時間論に接続される。 ここが概念的に最も重要な跳躍点だ。

垂直的時間性と水平的時間性

垂直的時間性:「一度限り・決定的になされる切断」。トラウマ、死、決定的な喪失などが該当する。
水平的時間性:「そのたびごとになされる反復」。日々の生き延び、継続的なケアなどが該当する。

従来の精神分析・精神療法は垂直的時間性、すなわち「決定的な一度」を重視してきた傾向がある。 例えば「洞察」「転換点」「治癒の瞬間」という語彙はすべて垂直的時間性に属す。

上野・信田の実践の再評価

これに対して松本が評価する上野千鶴子・信田さよ子の実践は、 「そのたびごとに日々を生き延びる」という水平的・反復的な時間性を臨床の中心に置く。

松本は信田の臨床を「最良の反ハイデガー主義」と評価する。 ここで「ちょっとした垂直性」は、暴力から逃げるための介入のように、水平的な関係を守るために必要とされる補助的なものとして位置づけられる。

概念的問い:時間次元への転換は論理的に必然か

空間メタファー(垂直・水平・斜め)から時間論(切断・反復)への接続は、本書の最も野心的な部分である。 同時に、この転換が比喩的な跳躍にとどまっているのか、論理的な必然性を持つのかは、本書全体を読んだ上で判断すべき論点だ。

批判的検討:概念の射程と限界

以下は本書の概念的な弱点として検討に値する点である。

「斜め」は弁証法の隠れた再演ではないか

垂直(正)→ 水平(反)→ 斜め(合)という構造は、 松本が批判したヘーゲル的弁証法の構造を概念レベルで繰り返している可能性がある。 「斜め」が第三の止揚として機能するなら、それ自体が垂直的・上昇的思考の再演になりかねない。

実践的指針としての空虚さ

「垂直でも水平でもなく斜めを目指せ」は、メタレベルの指針としては理解できる。 しかし具体的な臨床場面で「今の自分は垂直に偏りすぎているか、水平に流れすぎているか」を判定する基準が示されていない。 概念の精度と実践的有用性は別問題であり、この点は今後の議論が必要だ。

「ハイデガー主義」という命名の公平性

ハイデガーの思想は垂直性の特権化に還元できるほど単純ではない。 この命名が批判のための操作的なレッテルになっていないか、原典に即した検討が求められる。

まとめ:本書の意義と残された問い

松本卓也『斜め論:空間の病理学』は、精神病理学・精神分析という専門領域の議論を、ケア・当事者研究・フェミニズム的実践と接続する点で重要な試みだ。 「垂直か水平か」という二項対立を乗り越えようとする姿勢は、臨床実践を俯瞰する上で有用な視点をもたらす。

一方で概念的な課題も残る。
・「斜め」が独立した概念なのか調整的メタファーなのかの曖昧さ
・「ちょっとした垂直性」の判断基準の未定義
・空間論から時間論への転換の論理的根拠
・「ハイデガー主義」という命名の操作性

本書を読む上では、これらの論点を意識しながら、各章の具体的な議論を追うことを勧める。 概念の射程と限界を同時に把握することで、本書の真の貢献が見えてくるはずだ。

書誌情報
書名:斜め論 空間の病理学
著者:松本卓也
出版社:筑摩書房
発売日:2025年8月7日
ISBN:978-4-480-84333-3

TailscaleとCursorでリモート開発環境を構築する方法

TailscaleとCursorでリモート開発環境を構築する方法

自宅のMac Miniをリモート開発サーバーとして使いたい、あるいは外出先のMacBookから自宅マシンに安全に接続したい、という場面は開発者であれば珍しくない。本記事では、VPN構築ツール「Tailscale」とVS Codeベースのエディタ「Cursor」を組み合わせて、どこからでも自宅サーバーに接続できる開発環境を整備する手順を解説する。

対象環境はmacOS同士の接続を想定しているが、基本的な考え方はLinuxやWindowsにも応用できる。

構成の全体像

今回の構成はシンプルである。

- クライアント(MacBook Air / MacBook Pro):Cursorを動かす側
- サーバー(Mac Mini):コードやランタイムが置かれる側
- Tailscale:両者をVPN経由で繋ぐネットワーク層

TailscaleはWireGuardベースのVPNであり、NATを越えてデバイス間を直接接続できる。固定IPやルーターのポート開放が不要で、同一アカウントに登録したデバイス同士が100.x.x.x系のIPアドレスで相互に通信できるようになる。CursorはVS CodeのRemote SSH拡張機能をそのまま利用できるため、Tailscaleが通っていればリモートマシン上のファイルをローカルと同様に編集できる。

ステップ1:Tailscaleのセットアップ

全デバイスにTailscaleをインストールしてログイン

公式サイト(tailscale.com)からインストーラーを取得し、全マシンで同一アカウントにログインする。ログイン後、以下のコマンドで接続状況を確認できる。

tailscale status

出力例:

100.87.225.14 mini-m4 macOS -
100.90.238.101 air-m5 macOS -
100.99.14.100 pro-m1 macOS -

自分のIPアドレスを確認するには以下を使う。

tailscale ip -4

※ tailscale status --self の表示では、どのエントリが自分自身かが明示されないことがある。tailscale ip -4 で返ってきたIPとリストを照合して自分のノードを特定するとよい。

デバイス名の変更

デバイス名はTailscaleの管理画面(https://login.tailscale.com/admin/machines)から変更できる。対象デバイスの三点メニューから「Edit machine name」を選択する。CLIからの変更には対応していないため、ブラウザでの操作が必要となる。

ステップ2:サーバー側(Mac Mini)の設定

スリープを無効化する

サーバーとして常時稼働させるMac Miniは、スリープを完全に無効化しておく必要がある。以下のコマンドをMac Mini上で実行する。

sudo pmset -a sleep 0
sudo pmset -a disksleep 0
sudo pmset -a womp 1
sudo pmset -a powernap 1

設定が正しく反映されているかは pmset -g で確認できる。SleepDisabled が 1 になっていれば完全にスリープが無効化されている状態である。

SSHを有効化する

macOS 26(Tahoe)以降では従来のsystemsetupコマンドが廃止されているため、以下の方法でSSHを有効化する。

sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

あるいは、システム設定 → 一般 → 共有 → リモートログイン をオンにする方法でも同様の結果が得られる。

Tailscale SSHの扱いに注意

TailscaleにはSSHを仲介する機能(Tailscale SSH)が存在するが、ユーザー名の解決に失敗するケースがある。通常のSSHで接続したい場合は以下のコマンドでTailscale SSHを無効化する。

sudo tailscale up --ssh=false --accept-routes

※ tailscale up に非デフォルトのフラグが既に設定されている場合、--reset または全フラグの明示が必要になる。エラーメッセージに従って対応すること。

Tailscaleの自動起動を確認する

再起動後もTailscaleが自動的に起動するよう設定されているか確認する。

launchctl list | grep tailscale

PIDが付いているエントリがあれば起動中である。自動起動が無効になっている場合は以下を実行する。

sudo launchctl enable system/com.tailscale.ipn.macsys

ステップ3:クライアント側(MacBook)の設定

SSH鍵の作成と登録

クライアントマシン(MacBook)にSSH鍵がない場合は作成する。

ssh-keygen -t ed25519

全てのプロンプトにEnterで進んでよい。作成後、公開鍵をサーバーに登録する。

ssh-copy-id ユーザー名@サーバーのTailscale IP

Tailscale SSHが有効な状態ではこのコマンドが失敗することがある。その場合は公開鍵の内容を手動でコピーし、サーバー側の ~/.ssh/authorized_keys に追記する。

echo "公開鍵の内容" >> ~/.ssh/authorized_keys

authorized_keys は複数の公開鍵を1行ずつ並べる形式であるため、複数のクライアントから接続する場合は追記(>>)で対応する。上書き(>)は既存のエントリを消してしまうため注意が必要である。

~/.ssh/config の設定

接続先の設定をconfigファイルに記述しておくと、毎回IPアドレスを入力する手間が省ける。クライアントの ~/.ssh/config に以下を追記する。

Host mini-m4
  HostName 100.87.225.14
  User k-eight
  IdentityFile ~/.ssh/id_ed25519
  ServerAliveInterval 60
  ServerAliveCountMax 3

※ User はサーバー側のmacOSユーザー名を指定する。whoami コマンドで確認できる。ハイフンを含むユーザー名(例:u-ser)でも問題なく動作する。

設定後は ssh mini-m4 だけで接続できるようになる。

ステップ4:CursorでRemote SSH接続

Cursorを開き、以下の手順で接続する。

1. Cmd + Shift + P でコマンドパレットを開く
2. 「Remote-SSH: Connect to Host」を選択
3. 設定した接続先(例:mini-m4)を選択
4. 新しいウィンドウが開いたら File → Open Folder でサーバー上のフォルダを開く

接続後はターミナル(Ctrl + バッククォート)もサーバー側のシェルとして動作する。拡張機能はリモート側に個別にインストールが必要なものもあるため、拡張機能タブから「Install on SSH: mini-m4」を実行する。

なお、macOS 26以降ではDocumentsディレクトリへのSSHアクセスにフルディスクアクセス権限が必要になる場合がある。システム設定 → プライバシーとセキュリティ → フルディスクアクセス から sshdを追加することで解決できる。

MacBookのスリープ問題と運用上の注意

Mac MiniのようなデスクトップマシンはACアダプター接続かつスリープ無効化の設定が可能であるため、常時接続のサーバーとして安定して運用できる。一方、MacBook系はスリープ(特に蓋を閉じた状態)になると即座にTailscaleが切断され、外部からのアクセスが不可能になる。

Wake on Networkの設定(womp 1)はイーサネット接続時には有効であるが、WiFi環境のMacBookでは機種によって動作しないケースが多い。したがって、MacBookを外部からアクセスするサーバーとして使うのは現実的ではない。

実用的な運用方針としては、常時稼働サーバーはMac Mini等のデスクトップに限定し、MacBookは手元のクライアントとして使うという分担が安定性の観点から適切である。

まとめ

TailscaleとCursorを組み合わせることで、固定IPやVPNサーバーの構築なしに、複数Macをまたいだリモート開発環境を実現できる。ポイントをまとめると以下の通りである。

- Tailscaleで全デバイスを同一ネットワークに接続する
- Mac Mini(サーバー)はスリープ無効・SSH有効・Tailscale自動起動を設定する
- Tailscale SSHとOpenSSHが競合することがあるため、Tailscale SSH(--ssh=false)を無効化して通常SSHで接続する
- クライアント側は ~/.ssh/config を整備しておくと運用が楽になる
- MacBookはスリープ時に切断されるため、常時接続サーバーとしての運用は避ける

環境構築の過程でユーザー名の不一致やフルディスクアクセス権限の問題など、macOSのセキュリティ機能に起因するトラブルが複数発生した。特にmacOS 26以降はセキュリティポリシーが強化されているため、コマンドが期待通りに動かない場合はOSバージョンを踏まえた確認が必要である。

アジャイル・スクラムの歴史を紐解く

1. アジャイルとは何か

「アジャイル(Agile)」とは、「不確実性に対処するための、反復的・適応的なソフトウェア開発の哲学」です。

従来のウォーターフォール開発が「最初に全部決めて、順番に作る」方式だったのに対し、アジャイルは「少しずつ作りながら、都度修正する」アプローチを取ります。

ウォーターフォール:要件定義 → 設計 → 実装 → テスト → リリース(一方通行)
アジャイル:計画 → 実装 → 確認 → 改善 → 計画 → …(ループ)

アジャイル宣言の4つの価値観(2001年)

2001年に17人の開発者がユタ州に集まり署名した「アジャイルソフトウェア開発宣言」が原点です。

・プロセスやツール より 個人との対話
・包括的なドキュメント より 動くソフトウェア
・契約交渉 より 顧客との協調
・計画に従うこと より 変化への対応

注意:「左側を軽視する」ではなく、「右側をより重視する」という宣言です。ドキュメントもプロセスも必要、ただしそれ自体が目的化してはいけない、ということです。

2. スクラムの主要用語

スクラム(Scrum)はアジャイルを実現するためのフレームワークの一つです。ラグビーのスクラムから着想を得た名称で、チームが一丸となって目標に向かうイメージが由来です。

3つの役割(Roles)

Product Owner(PO):「何を作るか」の責任者。ビジネス価値を最大化し、バックログの優先順位を決める。

Scrum Master(SM):チームの障害を取り除くプロセスの番人。管理職ではなく、サーバントリーダー。

Developers:実際に作る人たち。自己組織化・クロスファンクショナルが理想。

Scrum Masterは「スクラムを守る人」であり、チームを管理する役割ではありません。権限ではなく影響力でチームを支援するのが本来の姿です。

3つの成果物(Artifacts)

Product Backlog:やりたいこと全部のリスト。POが管理し、常に優先順位が付いている。
Sprint Backlog:今のSprintでやること。チームが自分たちで選ぶ。
Increment:Sprint終了時の「動く成果物」。毎回リリース可能な状態であること。

5つのイベント(Events)

Sprint:1〜4週間の固定期間。開発の基本サイクル。
Sprint Planning:Sprint開始時。何をどう作るか計画する。
Daily Scrum:毎日15分。進捗共有・障害確認。
Sprint Review:Sprint終了時。ステークホルダーへデモ。
Sprint Retrospective(レトロ):Sprint終了時。チームの改善点を話し合う。

その他の頻出用語

User Story:「〇〇として、〜したい。なぜなら…」の形式で書く要件記述。
Story Point:タスクの相対的な複雑さを表す単位(時間ではない)。
Velocity:1Sprintで消化できるポイント数。チームの速度指標。
Definition of Done(DoD):「完成」の共通定義。チーム内で合意された完了基準。
Burndown Chart:残タスクの減り具合を可視化するグラフ。
Spike:技術調査・不確実性解消のための専用時間枠。

3. 歴史的変遷

前史:ウォーターフォールの時代(〜1990年代)

「最初に全部決めて、順番に作る」ウォーターフォール方式が主流でした。リリース直前に「作ったものが違う」と判明するケースが頻発し、変更コストはフェーズが後になるほど指数的に増大するという根本的な問題を抱えていました。

萌芽期(1986〜2000年)

1986年:野中郁次郎・竹内弘高(一橋大)が論文「The New New Product Development Game」を発表。スクラムの概念的起源。

1995年:Jeff SutherlandとKen Schwaberがスクラムを正式発表。

1999年:Kent BeckがXP(eXtreme Programming)を発表。TDD・ペアプログラミングの原型が登場。

確立期(2001〜2010年)

2001年:アジャイル宣言。17人の開発者がユタ州スノーバードに集結し署名。アジャイル運動の公式スタート。

2002年:Scrum Allianceが設立。CSM(Certified ScrumMaster)資格がスタートし普及が加速。

2005年頃:Google・AmazonなどがアジャイルおよびCI/CDを積極採用。大規模組織への適用が次の課題に。

2009年:SAFe(Scaled Agile Framework)の前身が登場。複数チームをまたぐアジャイル適用への需要が生まれる。

普及・拡大期(2010〜2018年)

2011年:「Lean Startup」(Eric Ries)が出版。MVP・ピボットの概念がスタートアップ界に浸透。

2012年:Spotifyがスクワッド・トライブ・ギルドによる組織設計「Spotifyモデル」を発表。一世を風靡する。

2013年頃:DevOpsとの融合が本格化。開発と運用の壁を壊す動きが広がる。

2015年頃:カンバン(Kanban)がスクラムと並ぶ選択肢として定着。一方で「アジャイル導入」自体が目的化し形骸化する組織が続出。後に「Dark Agile(暗黒アジャイル)」として批判される。

成熟・見直し期(2018〜2022年)

2018年:ストーリーポイントによる見積もり自体を疑う「#NoEstimates」ムーブメントが登場。

2020年:COVID-19によるリモートワーク急拡大で対面前提のスクラムが揺らぐ。Scrum Guideも再改定。「開発チーム」→「Developers」へ、よりシンプルな内容に。

2021年:Basecamp(37signals)の「Shape Up」が注目。6週間サイクルのスプリントとは異なるアプローチが話題に。

2022年〜:大企業でのアジャイル失敗事例が表面化。SAFeへの批判も強まり「アジャイルは万能ではない」という再認識が広がる。

Spotifyモデルは世界中で模倣されましたが、Spotify自身はすでにそのモデルを使っていません。「成功事例の輸入」には文脈の違いへの注意が必要です。

4. 2023〜2026年 最新トレンド

2026年現在、アジャイル・スクラムは「成熟期を越えた問い直し」のフェーズにあります。AIの台頭が、これまでの開発プロセスの前提を根本から変えつつあります。

① AI・LLMとの統合
GitHub Copilotなどの普及でコーディングタスクの見積もり前提が変わりつつある。Story Pointの意味が薄れる一方、技術調査(Spike)の重要性が増加。AIエージェントがバックログ整理やテスト自動化を担い始めている。

② 成果(アウトカム)重視へのシフト
DORA Metrics(デプロイ頻度・変更失敗率・リードタイム・復旧時間)による定量評価が定着。スクラムの儀式を「こなすこと」より、実際のビジネス成果で評価する文化が浸透してきた。

③ 大規模フレームワークへの懐疑
SAFe(Scaled Agile Framework)は「重すぎる・実質ウォーターフォールの再来」という批判が増加。より軽量なLeSS(Large-Scale Scrum)やNexusが注目を集めている。

④ Team Topologiesの主流化
「認知負荷」と「チームトポロジー(ストリームアラインド・イネーブリング・コンプリケイテッドサブシステム・プラットフォーム)」でチームを設計する考え方が組織設計の定番になりつつある。

⑤ 日本固有の動向
IPAがアジャイル開発の公共調達ガイドラインを整備。デジタル庁の影響で政府・自治体系でのアジャイル採用が本格化。一方、「形だけスクラム・実質ウォーターフォール」という偽アジャイル問題は依然深刻。

5. まとめ・客観的評価

用語の関係性を整理する

アジャイルはあくまで哲学・価値観であり、スクラムはそれを実現するための手段の一つに過ぎません。

アジャイル = 哲学・価値観(WHY・WHAT)
スクラム = アジャイルを実現するフレームワーク(HOW)
カンバン = 別の実現手段(HOW)
XP = また別の実現手段(HOW)
Shape Up = さらに別のアプローチ(HOW)

アジャイルが有効な条件

要件が変化しやすい領域
・小〜中規模チーム(7±2人が理想)
・ステークホルダーが継続的に関与できる
・心理的安全性が確保されている

限界・よくある誤解

大規模組織への適用は本質的に難しい。Spotifyモデル自体、Spotifyではもう使われていない。
ハードウェア・規制産業など変更コストが高い領域には不向き。
「スクラムをやっている」ことと「アジャイルである」ことは別物。形骸化したスクラムは単なる会議の増加でしかない。

覚えておきたいポイント

・アジャイル宣言(2001)が全ての出発点。12の原則も合わせて読む価値あり。
・スクラムとカンバンは競合しない。スクラムバン(Scrumban)のような組み合わせも有効。
・「Spotifyモデル」はSpotifyでも使われていない。文脈なき模倣は危険。
・DORA Metricsで測るのが現代の成熟したアプローチ。
・AI時代のアジャイルは「実装速度」より「判断品質」が問われる方向へ。

2026年現在のトレンドを一言で言えば、「形式(スクラムの儀式)より成果(DORA Metrics等)」「プロセスよりエンジニアリング力」へのシフトです。AIの台頭により、アジャイルの次の形がまた問い直されている過渡期と言えます。

アクセスカウンター