ビジュアルノベルやアドベンチャーゲームを作りたい。でもUnityやGodotはちょっと重い。そんなときの選択肢が Ren'Py だ。
Ren'Pyは Python ベースのゲームエンジンで、テキスト主体のゲーム制作に特化している。コードを書ける人なら、ステータス管理やマップ探索のようなカスタム機能もPythonで自由に実装できる。DDLC(Doki Doki Literature Club!) をはじめ、数多くの商用タイトルがRen'Pyで制作されている。
この記事では Ren'Py 8.5.2(2026年1月リリース)の環境構築から、最初のゲームをビルドして配布ファイルを生成するところまでを一通り解説する。
Ren'Pyとは
Ren'Pyは ビジュアルノベル・テキストアドベンチャー向けのオープンソースゲームエンジン だ。2004年に初版がリリースされ、20年以上の歴史がある。
他のゲームエンジンと比較すると、立ち位置がわかりやすい。
| エンジン | 得意分野 | 学習コスト |
|---|---|---|
| Ren'Py | ビジュアルノベル、テキストADV | 低い(Pythonベース) |
| Unity | 2D/3Dゲーム全般 | 高い(C#、エディタ操作) |
| Godot | 2D/3Dゲーム全般 | 中程度(GDScript) |
| RPGツクール | RPG特化 | 低い(GUI操作中心) |
Ren'Pyの強みは テキスト表示・選択肢分岐・セーブ/ロード・バックログ といったノベルゲームの基本機能がすべて最初から組み込まれていること。これらを一から実装する必要がない。
SDKのダウンロードとインストール
Ren'Py公式サイト からSDK(開発キット)をダウンロードする。2026年3月時点の最新安定版は 8.5.2 だ。
ダウンロードページ から renpy-8.5.2-sdk.7z.exe(約116MB)をダウンロードする。
インストール手順:
- ダウンロードした
.7z.exeをダブルクリックして展開する - 展開先フォルダを指定する(例:
C:\renpy\renpy-8.5.2-sdk) - 展開が完了したら
renpy.exeをダブルクリックしてランチャーを起動する
ランチャーが起動すれば成功だ。
SDKのディレクトリ構造
展開後のSDKフォルダには以下のものが含まれている。
renpy-8.5.2-sdk/
├── renpy.exe / renpy.sh # ランチャー起動ファイル
├── lib/ # プラットフォーム別Python環境
├── renpy/ # Ren'Pyエンジン本体
├── launcher/ # ランチャーアプリケーション
├── tutorial/ # 公式チュートリアルゲーム
└── the_question/ # サンプルゲーム "The Question"
tutorial/ と the_question/ はサンプルプロジェクトで、ランチャーから直接起動して遊べる。操作に慣れるために一度触ってみるといい。
コードエディタの設定
Ren'Pyのスクリプト(.rpy ファイル)はテキストエディタで編集する。VS Codeを使うなら、公式のRen'Py拡張を入れるとシンタックスハイライトや補完が効くようになる。
手順:
- VS Codeの拡張機能パネルを開く(
Ctrl+Shift+X/Cmd+Shift+X) - 「Ren'Py」で検索する
- Ren'Py Language (Official) をインストールする(マーケットプレイス)
この拡張で以下の機能が使えるようになる。
.rpyファイルのシンタックスハイライト- キーワードのオートコンプリート
- 定義へのジャンプ(
F12) - インデント違反の検出
ランチャーの「preferences」→「Text Editor」でVS Codeのパスを指定しておくと、ランチャーから直接 .rpy ファイルを開けるようになる。
最初のプロジェクトを作る
ランチャーから新規プロジェクトを作成する。
- ランチャーの 「Create New Project」 をクリック
- プロジェクト名 を入力する(例:
mygame) - 解像度 を選択する(1280x720がおすすめ。フルHDにしたい場合は1920x1080)
- カラースキーム を選ぶ(アクセント色と背景色。後から
gui.rpyで変更可能)
数秒で mygame フォルダが生成される。
プロジェクトの構造
mygame/
└── game/
├── audio/ # BGM・効果音を置くフォルダ
├── gui/ # GUI用画像(自動生成済み)
├── images/ # 背景・立ち絵を置くフォルダ
├── tl/ # 翻訳ファイル
├── gui.rpy # GUI設定(フォント、色、レイアウト)
├── options.rpy # ゲーム設定(タイトル、解像度、ビルド設定)
├── screens.rpy # スクリーン定義(メニュー、セーブ画面など)
└── script.rpy # メインスクリプト(ここにゲームを書く)
ゲームのコードは基本的に script.rpy に書く。ファイルが大きくなったら複数の .rpy ファイルに分割できる。Ren'Pyは game/ フォルダ内のすべての .rpy ファイルを自動で読み込む。
最初のシーンを書く
game/script.rpy を開くと、デフォルトのコードが入っている。これを以下のように書き換えてみよう。
# キャラクターの定義
define s = Character("さくら", who_color="#c8ffc8")
define y = Character("ゆうき", who_color="#c8c8ff")
# ゲーム開始
label start:
# 背景を表示
scene bg room
with fade
# セリフ
s "やっと完成したね、このゲーム。"
y "長かったな...。でも動いてるぞ。"
# 選択肢
menu:
s "次はどうする?"
"機能を追加する":
jump add_feature
"まずは休む":
jump rest
label add_feature:
y "よし、マップ探索機能を実装しよう。"
"二人はさらに開発を続けた。"
return
label rest:
s "今日はここまでにしよう。"
"二人は明日に備えて休むことにした。"
return
このコードのポイントを順に説明する。
キャラクターの定義
define s = Character("さくら", who_color="#c8ffc8")
define はゲーム全体で変わらない定数を宣言する。Character はキャラクターオブジェクトを作る組み込み関数で、名前と表示色を指定できる。ここで定義した s を使って s "セリフ" と書くと、名前付きのセリフとして表示される。
ラベルとジャンプ
label start:
...
label add_feature:
...
return
label はスクリプトの区切りポイントだ。label start: はゲーム開始時に最初に実行されるラベルで、Ren'Pyの予約名になっている。jump でラベル間を移動し、return でゲームを終了する。
背景の表示
scene bg room
with fade
scene は画面をクリアして背景画像を表示する。with fade はフェードイン効果を付ける。Ren'Pyは game/images/ フォルダから画像名に一致するファイルを自動で探す。この場合、bg room.png という名前のファイルが使われる(ファイル名のスペースがイメージ名のスペースに対応する)。詳しくは 公式の画像表示ドキュメント を参照。
選択肢と分岐
menu:
s "次はどうする?"
"機能を追加する":
jump add_feature
"まずは休む":
jump rest
menu: ブロックで選択肢を表示する。各選択肢の下にインデントしたコードが、その選択肢を選んだときに実行される。jump で別のラベルに飛ぶことで、ストーリーを分岐させる。
変数を使ったフラグ管理
選択肢の結果を記録したい場合は default で変数を宣言する。
# ゲーム中に変化する変数は default で宣言する
default motivation = 0
label start:
menu:
"頑張る":
$ motivation += 1
jump next
"休む":
jump next
label next:
if motivation > 0:
"やる気に満ちている!"
else:
"少し疲れているようだ。"
return
default はセーブ/ロードで正しく保持される変数を宣言する。$ はPythonの1行コードを実行する記法だ。
テスト実行
ランチャーに戻り、作成したプロジェクトを選んで 「Launch Project」 をクリックする。ゲームが起動し、書いたシーンが再生される。
背景画像がない場合は scene bg room の行で黒い画面になるが、セリフと選択肢は正常に動作する。開発中は画像なしでスクリプトの動作確認をして、後から画像を追加するのが一般的なワークフローだ。
ビルドして配布する
ゲームが動くことを確認したら、配布用ファイルを生成する。
ビルド前の設定
game/options.rpy を開き、以下の項目を確認する。
# ゲームタイトル(ウィンドウタイトルに表示される)
define config.name = _("My First Game")
# バージョン番号
define build.name = "MyFirstGame"
build.name はファイル名に使われるので、スペースや日本語を含めない こと。
ビルドの実行
- ランチャーでプロジェクトを選択する
- 「Build Distributions」 をクリックする
- ビルド対象を選択する(デフォルトで全プラットフォームが選択されている)
- 「Build」 をクリックする
- 完了後、出力フォルダが自動で開く
ビルドが完了すると、以下のファイルが生成される。
| ファイル | 対象 |
|---|---|
MyFirstGame-1.0-win.zip | Windows |
MyFirstGame-1.0-mac.zip | macOS(Intel / Apple Silicon両対応) |
MyFirstGame-1.0-linux.tar.bz2 | Linux |
このZIPファイルをそのまま配布すれば、受け取った人はRen'Pyをインストールしなくてもゲームを起動できる。itch.io にアップロードして公開するのが一般的だ。
まとめ
この記事で行ったこと:
- SDK導入: 公式サイト から8.5.2をダウンロードして展開
- エディタ設定: VS Code + Ren'Py Language拡張 でシンタックスハイライトと補完を有効化
- プロジェクト作成: ランチャーから新規プロジェクトを作成し、ディレクトリ構造を理解
- スクリプト記述: キャラクター定義、背景表示、セリフ、選択肢分岐、変数によるフラグ管理
- ビルド: 配布用ファイルを生成し、ZIPファイルとして出力
ここまでできれば、Ren'Pyの基本的な開発サイクルが回せるようになる。次のステップとしては、画像と音声を追加してゲームの見た目を整える、あるいはPythonコードで ステータス管理 やマップ探索のような高度な機能を実装する方向に進むことになる。
公式リソース:
- Ren'Py公式クイックスタート —
define/default/label/menuのさらに詳しい解説 - Ren'Py公式ドキュメント — 全機能のリファレンス
- r/RenPy — コミュニティ。つまづいたときに質問できる