Cursorで作る心理学研究環境 (文化進化からLLM実験まで)
yamanori99 (YAMAMOTO, Takanori) です。広島修道大学大学院人文科学研究科の修士1年です。専攻は社会心理学です。学部は経済学部で、いろいろあって今の研究室にいます。文化進化を扱っていて、現在は不平等な慣習についてのシミュレーション研究を行っています。社会にどういった慣習のパターンが成立しやすいか、といったことを考えるのが好きです。
構成
- 前半: 研究とCursorの話 (昔話)
- 後半: シミュレーション開発の覚書
Cursorの記事といえば、だいたいWeb系だったりする印象があるので、この記事は研究でもどんどんCursor使っていきましょーやという話になると思います。こういうことをやっている人もいるんだなと、温かい目で見ていただきたいです。
そうそう。ちょうどこのアドベントカレンダーの枠をとった後くらいに、GoogleのAntigravityが公開されたように、AIツールの入れ替わりは激しい。自分の現在のスタンスは、あまり各々の環境にチューニングしすぎず (それは環境構築も、態度としても)、リラックスしてツールを使っています。結局、研究ができたらいいんです。とはいいつつ、ツールは好きなのでだいぶこだわるときもあります。どっちやねん。
研究とCursorの話
社会心理学も、そのシミュレーション研究も、そこまで一般的な話ではないので少し説明します。人は協力して生きていますが、なぜ協力しているのだろう、どのように協力しているのだろうと考えたとき、いろんな角度から議論できます (参考: 亀田, 2017; 2022)。神経的に説明したり、認知システムから考えてみたり、はたまた生物進化の系統から検討したり。生物進化という長いタイムスパンでなくても、社会で安定しやすい人々の行動というものを検討したりもできます。僕も社会で安定しやすい、成立しやすい行動を探っていて、とりわけ不平等とされるような慣習がどう成立するのかを、シミュレーションを通じて検討しています (不平等な慣習の文化進化の話: O'Connor, 2019)。
社会心理学では集団における協力の成立などを、調査、実験のみならずシミュレーションを用いた検討もされています。調査や実験だけでは理論的にも再現性の面でも諸々限度があるという話もあり、それでシミュレーションをするわけです (参考: Muthukrishna & Henrich, 2019)。
研究を始めた頃、僕はPythonくらいは読めましたが、先行研究にはJavaやC++、はたまたMatlabなどいろいろありました。とりあえずモデルのコア部分は自分で読めて書けてこそなので、Pythonで実装してみるかと。それでChatGPTを使い始めたのが、AIを使ったコーディングを始めたきっかけです。まあ、それっぽいものができたのですが、それを見て指導教員が「手抜きをするな!」というのでもなく、「やるじゃん!」という感じで褒めてくれました。使えるものは使っていこう、と。そこから積極的にAIを利用するようになります。
2024年春頃) ただ、ChatGPTは文脈を読んでくれません。複雑なプロジェクト構造にはどうしようもなかったんです。それで、いっぺんに読んでくれるような便利なAIツールはないか、いや、僕が思いつくくらいだからあるだろうと思って発見したのがCursorです。すべてのコードファイルを読み込ませて検討させるみたいなバカなことをやらなくて良くなりました。
ちょうど今年の初め、Cursorでの開発がぐっとやりやすくなった印象があります。もう人間がシミュレーションコードを書かなくていいのか、いつかは消えてなくなる分野かもなと思いました (実際はまだまだですが)。
まだまだモデルもそこまで賢くなかったんです。やたらとパラメータをハードコードするとか、勝手にモジュールを組み立てるとか。シミュレーションといえば、勝手に社会的ジレンマみたいな典型的なシミュレーションを実装し始めたり。何かしらうまく制御できる方法はないかと探して、それで行き着いたのがkinopeeeさんのカスタムルールです。同時に、AIAUの存在もそこで知りました。
ちょっと話が逸れますが、C++で実装していたものをJuliaに切り替えたのがこの4月初め。これも研究、そしてAIを使ったシミュレーションコーディングがとても楽になったイベントでした。JuliaはPythonに似た構文で、人間 (僕) がPythonからプログラミングを始めたというのもあり、読みやすいですし、コードの量も少ない。パッケージ管理もしやすいです。これはAI、Cursor内のAIについても同じでした。飛躍的に開発速度が上がりました。これでもう人間がシミュレーションを書かなくていいのか (いや、やっぱりそうはなりませんでした)。
院生になって (今年度に入って) からは、学部生の研究指導に関わる機会が出てきて、開発の幅が広がりました。Cursorを用いながら、学部生にシミュレーションの指導をしたりしています。学生にとってもCursorは味方です。また、プログラミング未経験者にとって設定ファイルをいじるのはとっつきづらいので、デモ的にシミュレーションのCLIツールを実装したりもしています。
![]() |
![]() |
![]() |
|
また、関連して、もともと別件でCursorを使ってオンラインチャット環境を作っていたので、それを応用してollamaを使ったAIチャット実験環境を実装し、実験をやってみようかとなりました。実装しました。早かったです。AIとCursorのおかげ。下の画像のような実験環境 (開発途中のもの、一部だけ) が、ものの数か月でできるのだから、うーん。人間いらない。いや、やっぱり今のところ必要なのですが (4回目)。
心理学も実験環境と一緒に発展してきたという話もあるくらいですし、CursorなどのAIエージェントのついたコーディング環境は、大いに貢献してくれると思います。RStudioもいいですけどね (もごもご)。
シミュレーション開発の覚書
生成AIを使った追試・拡張で時間とトークンを極力溶かさないために。シミュレーション研究にも先行研究があるのだから、追試・拡張を行うことになります。一から組むこともあるでしょうけど。ここには、1年前くらいに書き留めておいたTipsを一部置いておきます。
AIを使ったとありますが、そもそもシミュレーション開発一般に言えることかもしれません。
追試・拡張のときにやること
先行研究のコードを追試・拡張するとき、まず土台を整えます:
- seed値固定: 再現性の確保が最優先
- 出力の比較を簡単に: どのデータを参照したか明示されていると良い
- バージョン管理: 過去の仕様に戻れるようにする
- ロガーの導入
- 古いコードなら言語機能のアップデート (C++14→C++20など)
コアは自分で、周辺はAIと
コア (自分で書く):
-
src/- シミュレーションのロジック - 理論的に正しいかは自分で検証する必要があります
周辺 (AIと一緒にやる):
- パラメータスウィープ
- 分散処理
- プロットの調整
- 実験の自動化
プロジェクト構造の例
この分離を意識して整理するとこんな感じになります:
.
├── Project.toml # パッケージ依存関係 (Julia)
├── README.md # プロジェクト概要
├── demo.jl # 実験のための実験 (まず動かしてみる用)
├── docs/ # ドキュメント
├── experiments/ # 実験ごとに分離
│ ├── common/ # 実験間で共通の処理
│ ├── main/ # メイン実験
│ │ ├── README.md
│ │ ├── analysis/ # 分析スクリプト
│ │ ├── configs/ # パラメータ設定 (json, csvなど個別に残す)
│ │ ├── results/ # 出力結果 (タイムスタンプ・パラメータを明示)
│ │ └── scripts/ # 実行スクリプト
│ └── replication/ # 追試実験
│ └── ...
├── scripts/ # ユーティリティ
│ └── distributed/ # 分散処理用
├── src/ # コア (シミュレーションロジック)
└── test/ # テスト
パラメータ設定は、jsonでもcsvでも個別に残します。結果にはファイル名でもデータ内でも、タイムスタンプやパラメータなど、どの実験・実行のデータかを分かりやすく残しておきます。
人文系の研究だと、テストコードを実装しているケースがそんなに多くない気がしますが、AIがあります。とりあえず書いてもらいましょう。
あと、demo.jl みたいなのも重要です。シミュレーション全般に言えるでしょうが、「実験のための実験」という感じが必要です。まずデモでとりあえず実装して動かしてみて、次に網羅的な検討をします。
注意点
- 「もっとこうできるかも」みたいな曖昧な「もっとこう」が時間を無意味に溶かします。楽しいですけど。必要なものを実装しましょう (もっとも、AIモデルが賢くなればできることはさらに拡大します)。
- 他言語に移植するタイミングはどこだろうか、という問題もあります。少なくともモジュール化前が良さそうです。AIにとって整理されていない状態だと、あまり良くない気がします (そもそも移植する必要性も検討しましょう)。
- 追試するにしろ何にしろ、パラメータスウィープをなるべく早く導入しましょう。結局、アウトプットを検証することがバグ探索と実験に役立つので、早めに導入したいところです。上の例みたく、別のスクリプト、実行コードでいいかもしれません。コア部分を分けることで、AIによる勝手な修正も回避できます。
今年よく使ったAIモデル
ちょうど昨日、Cursorの2025年振り返りページできていたので共有します。
自分の開発で使ったもの:
研究室で自分が使ったもの:
Claude系はとてもお気に入り。一時期、Gemini 2.5 Proのコスパがいいと感じていたので利用していた時もあります。最近は、Composer-1やGPT-4.5 Codex Maxも利用することも。でも、コアな修正はだいたいClaude Opus 4.5になってますね。
参考文献
亀田達也 (2017).『モラルの起源——実験社会科学からの問い』岩波新書.
亀田達也 (2022).『連帯のための実験社会科学——共感・分配・秩序』岩波書店.
Muthukrishna, M. & Henrich, J. (2019). A problem in theory. Nature Human Behaviour, 3(3), 221–229. https://doi.org/10.1038/s41562-018-0522-1
O'Connor, C. (2019). The Origins of Unfairness: Social Categories and Cultural Evolution. Oxford University Press. (中西大輔 (監訳) (2021).『不平等の進化的起源——性差と差別の進化ゲーム』大月書店.)





