世界を動かす技術を、日本語で。

LÖVE: Lua用2Dゲームフレームワーク

概要

  • LÖVE はLuaで2Dゲームを開発できる無料・オープンソースのフレームワーク
  • Windows, macOS, Linux, Android, iOS に対応
  • ドキュメントやサポート はWiki、フォーラム、Discord、Redditで提供
  • 開発や貢献 はGitHubリポジトリ、Issue Tracker、Discordなどで実施
  • ビルドや依存関係 も多様なプラットフォームに対応し、詳細なガイドあり

LÖVEの概要

  • Lua言語 を用いた2Dゲーム開発フレームワーク
  • 無料 かつ オープンソース で公開
  • 対応OS はWindows、macOS、Linux、Android、iOS
  • 公式Wiki によるドキュメント整備
  • フォーラム、Discord、Reddit でのユーザーサポート体制

リポジトリ運用

  • mainブランチ は次期メジャーリリースの開発用で 安定版ではない
  • 各メジャーバージョン用のブランチ も存在し、パッチリリース向け修正を管理
  • 全リリースはタグ付け され、バイナリもダウンロード可能
  • 実験的変更 はlove-experimentsリポジトリで管理

ビルドと配布

  • リリースファイル はGitHubのリリースセクションで配布
  • 最新リリースのダウンロードリンク や各プラットフォーム向けコンテンツも提供
  • 不安定版/ナイトリービルド もあり、GitHub CIや各種パッケージ管理システムで利用可能
    • Ubuntu: ppa:bartbes/love-unstable
    • Arch Linux: AURのlove-git

テストスイート

  • testing/ ディレクトリにて全APIを網羅するテストを実施
  • 開発者と同様の方法でAPIをテスト
  • テストカバレッジ はGitHub Actionsから確認可能
  • ローカル実行例: love testing
  • 詳細はtestingフォルダのreadme 参照

コントリビューションガイド

  • Issue Tracker、Discord、IRC で貢献受付
  • コード貢献 はPull Requestやパッチで歓迎
  • ソースコードスタイルガイド の遵守必須
  • 新機能や変更提案 はIssue TrackerやDiscord、フォーラムで事前議論
  • LLM/生成AIによるPRやバグ報告は非受付

各プラットフォームでのビルド方法

  • Windows
    • megasourceリポジトリページ の手順に従う
  • Unix系 (Linux, etc.)
    • インツリービルド不可、ビルド用ディレクトリ作成が必要
      • 例:
        • cmake -B build -S. --install-prefix $PWD/prefix
        • cmake --build build --target install -j$(nproc)
      • CMake 3.15以前--install-prefix未対応、-DCMAKE_INSTALL_PREFIX=を使用
  • macOS
    • リポジトリを取得 し、macOS/Frameworksサブフォルダをplatform/xcode/macosxに配置
    • Xcodeプロジェクトlove-macosxターゲットをビルド
  • iOS
    • macOSとXcodeが必須
    • love-apple-dependencies の該当バージョンをダウンロードし、必要なサブフォルダを配置
    • Xcodeプロジェクトlove-iosターゲットをビルド
    • 詳細はreadme-iOS.rtf 参照
  • Android
    • Android buildリポジトリ のビルド手順を参照

依存ライブラリ一覧

  • SDL3
  • OpenGL 3.3+ / OpenGL ES 3.0+ / Vulkan / Metal
  • OpenAL
  • Lua / LuaJIT / LLVM-lua
  • FreeType
  • harfbuzz
  • ModPlug
  • Vorbisfile
  • Theora

Hackerたちの意見

LÖVEが大好き!自分にとっては、高レベルと低レベルの抽象化のちょうどいい交差点にあるんだよね。残念ながら、最新のリリース版はちょっと古くなってきてて、多くの開発者はリポジトリの最新のHEADを使ってる。パフォーマンスと互換性が良いからね。いつか、神話の12.0が本当にリリースされる日が来るといいなぁ…。

MonoGameが好きかもしれませんよ。同じレベルの抽象化ですが、C#で作られています。https://monogame.net

LÖVEでの一番好きなゲームは、ポータル付きのマリオだね! https://stabyourself.net/mari0/

stabyourselfが大好き!ortho robotは最高だった。そうだ、もう一回インストールしてみるよ…今夜はこれで決まりだ。

なんで任天堂に訴えられてないんだろう?

最近のインディーゲームの大ヒット作、BalatroはLöveで作られたんだ!めっちゃ好きで、初心者にとって開発体験がすごくスムーズなんだよ。zipをexeにドラッグするだけで始まるし、APIも覚えやすくて、クールなレンダリングもできるんだ。

ちなみに、Balatroには完全に難読化されてないLuaのソースが同梱されてるよ。カードに書いてある確率が間違って実装されてるか確認したことがあるけど、実際はそうじゃなかった。コードはちゃんとしてた、ただ運が悪いだけなんだ。

興味があれば、Linuxで他のシステム用のBalatroをプレイ可能にするNixの派生物をここに置いとくよ: https://github.com/NixOS/nixpkgs/tree/master/pkgs/by-name/ba... 派生物を作ったときに半分ブログ記事を書いたんだけど、いつかそれを完成させてここに投稿しようと思ってる。

10年近く使ってないけど、当時の問題点の一つは、Unityみたいにexeを開いてもIDEが開かないことだった。なんかダミーのウィンドウが出るだけ。あと、WindowsからMac用にビルドするのが地獄だった。エンドユーザーが技術に詳しくなかったから、向こうではそのまま動かなかったし。多分、Mac特有の問題だと思うけど。

実際、多くのインディー開発者は逆コンパイルやソースコードの閲覧に対して問題ないんですよね。STS2の開発者たちも全然気にしていないと思います。これは素晴らしいことで、インディー開発者コミュニティにとって助けになります。これを見て、ゲーム開発に対する興奮が高まって、自分でもやり始めようとしているところです。

ちなみに、Love2DはSDL2をベースにしてるよ。Luaが嫌いだけど、同じクロスプラットフォーム機能が必要なら、他の言語でSDL2のバインディングを使ったり、自分で作ったりできるよ。

SDL3

なんでLuaを嫌うのか全然わからないんだけど?

Love2DにはSDLだけじゃなくて、もっといろんな要素があるよ。音声や画像の読み込みなどのために他のライブラリもたくさん使ってるし、luajitを使ってるからLuaがすごく速く動いて、CのFFIもめっちゃ簡単なんだ。

SDL3はもっと注目されるべきだと思います。SDL3のGPU APIは、WebGPUが登場する前からクロスプラットフォームのGPU APIを提供していました。Rustでは、winit/wgpuの良い代替品です。だから、先週areweguiyet.comに追加したんですが、そこには以前はリストされていなかったみたいです。今は、オリジナルのBBC Eliteにインスパイアされた宇宙ゲームを開発するために使っています。ウェブに出すためにemscriptenを使って、ネットワーキングにはQUIC/Webtransportを利用しています。

俺の意見だけど。フィンテックのテックリードで、昔ゲームを手動でコーディングしてたのを遠くに思い出すくらい。コミュニティが技術を素晴らしくしてくれる。Love2DのDiscordは俺の人生を変えた。こんなに素晴らしくてウェルカムなコミュニティに出会ったことはないよ。

動的言語はあんまり好きじゃないんだけど、なぜかLuaはずっと好きなんだよね。正直、理由はよくわからないけど。多分、言語仕様が一枚の紙に収まるくらいシンプルで、もっと高度な機能を追加するのも簡単だからかな。Loveは見た目もめっちゃクールだし、個人的にはやったことないけど、いつかやってみたいな。

LuaのソースコードはCのマスタークラスみたいなもので、あの言語を学ぶ人にはおすすめだよ。実装がしっかりしてて、規模も大きすぎず、各レイヤーで何が起こってるかを(ざっくりとでも)理解できるくらい整理されてる。ポータブルなCがしっかり書かれてて、ちょっとした例外はあるけどね。

Luaは私の心の中で特別な存在です。実際に学べた最初のプログラミング言語だったからです。2008年頃にMulti Theft Auto: San Andreasのスクリプト言語として選ばれました。Luaで世界を作り上げて、いろんなゲームモードがあったけど、私のお気に入りはロールプレイでした。懐かしい楽しい時代ですね。

löveが大好き!いくつかプロジェクトもやったし、Luaは俺の最初のプログラミング言語の一つだった。ゲーム開発にはすごく合ってると思う。あと、「Move or Die」はlove2dで動いてるし、あれはめっちゃ面白いゲームだよね。それに、ファイルをzipにしてlove2dのバイナリにコマンドで送るだけで読み込めるっていうトリックも好き!

このフレームワークが大好きです、言葉遊びも含めて。何年も前に、PortalとMarioのマッシュアップゲームが流行っていたときに、AtariのMissile Commandのクローンを作ったことがあります。https://github.com/chadpaulson/missile-command

TV番組「Community」のファンなら、8ビットのビデオゲームエピソード(Digital Estate Planning)の再現版「Journey to the Center of Hawkthorne」を試してみるべきです。https://projecthawkthorne.com/ 今はブラウザでそのままプレイできるようになっています(LÖVE Web Builderを使ってるのかな?)。https://schellingb.github.io/LoveWebBuilder/ このエンジンは本当に進化して、私にとって思い出深いゲームを実現してくれました。

Luaはすごく速いです。JITなしでも、Pythonがモラセスの中を進むように感じさせます。Luaはとても小さくてシンプル(でも単純ではない)なので、頭の中に完全に入れておけます。たとえ週末にしかプロジェクトに取り組めなくても、毎回半分を再学習する必要はありません。