OpenSiv3D Linux版の紹介

---

**[追記]**
**OpenSiv3Dのアップデートにより、本記事の導入方法の内容がそのまま現状のOpenSiv3Dに当てはまらない部分があります。ご了承ください。**

**最新の導入方法等については以下のドキュメントを参照してください。**

- https://github.com/Siv3D/OpenSiv3D/blob/master/Linux/README.md
- https://github.com/Siv3D/OpenSiv3D/blob/master/Linux/README_JP.md (↑のREADME.mdの日本語版です)
- https://siv3d.github.io/#getting-started (2019/10/13時点でLinux版の導入方法は↑のREADME.mdへのリンクになっています)

---

これは [Siv3D Advent Calender 2017](https://qiita.com/advent-calendar/2017/siv3d) 3日目の記事です。

この記事ではOpenSiv3DのLinux版の紹介をします。

OpenSiv3D Linux版は、筆者が2016年10月末に移植を始めたもので、現在も有志で移植を続けています。Linux版はv0.0.8から本家リポジトリと試験的に統合され、v0.1.3ではWindows及びmacOS版とほぼ同等の機能がLinuxでも使えます。下図はOpenSiv3D Linux版でトランプを描画させた例です(トランプ描画機能は11日の記事のものです)。

![Screenshot from 2017-10-05 13-46-19.png](https://qiita-image-store.s3.amazonaws.com/0/211534/0fe921a0-e51d-b00e-1ee0-cbadfae17c27.png)

本家にマージされたソースコードは本家Githubリポジトリから取得できます。また、開発中のv0.2系列のLinux版のソースコードは現在以下のリポジトリにあります。

https://github.com/wynd2608/OpenSiv3D/

[追記]
本家リポジトリにLinuxブランチができました。
https://github.com/Siv3D/OpenSiv3D/tree/linux

# Windows / macOS版との差異
Linux版は描画や音声再生関連の機能ではWindows及びmacOS版と大きな差はありません。ほとんどの場合ソースコードは環境によらず共通になります。

ですが、プラットフォームに依存する機能では、実装ができていないものやそもそも実装ができないものがあります。実装ができていない機能の例として、電源情報の取得機能やメッセージボックスの表示機能などがあります。細かい機能の差異についてはLinux版のドキュメントに説明がある他、実装予定のものはGithubで管理されており今後実装を進めていく予定です。

# LinuxでOpenSiv3Dを使う

正直なところ、LinuxでOpenSiv3Dを使うのは少し大変かもしれません。なぜなら、OpenSiv3D Linux版は現在コンパイル済みバイナリの配布がないためです。そのため、OpenSiv3DをLinuxで使うためにはソースコードからライブラリをビルドする必要があります。

ビルド方法や依存ライブラリの詳細はリポジトリに含まれる[ドキュメント](https://github.com/Siv3D/OpenSiv3D/blob/master/Linux/INSTALL.md)に書かれているので、それに従っていけばビルドが可能です。現時点で動作を確認しているLinuxディストリビューションはArch Linux(筆者開発環境)、Ubuntu 17.10、Fedora 26です。今後これ以外のディストリビューションでも動作確認をしていく予定です。一例として筆者が開発に使っているArch LinuxでのOpenSiv3Dを利用したアプリケーションのビルド手順をこの記事の末尾にまとめておきますので参考にしてみてください。

また、明日4日目の記事にでDocker上でOpenSiv3Dを動かす方法が紹介される予定です。Dockerを使うことでより簡単にOpenSiv3D Linux版を利用できると思いますので、Linux版を動かしてみたい方は明日の記事も参考にしていただければと思います。

# Linux版開発に関して

現在、筆者が中心となってLinux版の開発を進めています。ですが、過去に移植に遅れが出たこともあり、安定して開発を継続させるために開発に協力していただける方を随時募集しています。開発はGithub上で行われている他、[Slack](https://github.com/Siv3D/Reference-JP/wiki/Slack)にlinuxチャンネルがありますので、気軽に参加してみてください。
開発そのものへの協力でなくとも、Linux版を使ってみた意見や感想、質問等もいただければ開発の励みになります。

# 終わりに

そもそもに自分がOpenSiv3DのLinuxへの移植を始めたのは、WindowsでSiv3Dを使っていて便利なのに、Linuxで簡単に絵を描ける環境がなく、Siv3Dのようなライブラリがあればいいなと思っていたところOpenSiv3DのmacOS版が来たのでこれはいけるんじゃないかと思ったからです。OpenSiv3Dはゲームに限らず何か可視化したいという時に便利なので、ゲーム開発以外にも研究畑とかでも使えるのではないかなとも思っていたりします。

これからもOpenSiv3D Linux版を発展させていければと思います。
Windows版、macOS版だけでなく、Linux版の作品もどしどし作ってもらえるととても嬉しいです。

# Arch LinuxでOpenSiv3D Linux版(v0.1.7)を利用するアプリケーションを作る手順
ここで紹介する手順はあくまで例です。ファイルパス等は変更がききますので、やりやすいよう読み替えていただければと思います。

1. 必要なパッケージをインストール(グラフィックカードのドライバ等は適宜環境に合わせて導入)。
	Arch Linuxで提供されているパッケージはバージョンが新しいので、パッケージマネージャで必要なライブラリをインストールするだけで、OpenSiv3Dをビルドする環境を整えられます。また、下記コマンドでは`gcc`をインストールしていますが`clang`でもOpenSiv3Dをビルドすることは可能です。

	```
	$ sudo pacman -S git cmake gcc pkg-config libx11 libxi libxinerama libxcursor libxrandr libpng libjpeg-turbo glib2 mesa glew glu freetype2 openal
	```

2. OpenSiv3Dのソースコードを取得。

	```
	$ git clone https://github.com/Siv3D/OpenSiv3D.git
	```

3. OpenSiv3Dのビルド(`CMakeLists.txt` 内でコンパイラを指定する書き方は非推奨のようなので修正予定です)。

	```
	$ cd OpenSiv3D/Linux
	```
	
	デバッグビルドの場合。

	```
	$ mkdir Debug
	$ cd Debug
	$ cmake -DCMAKE_BUILD_TYPE=Debug ..
	$ make
	```

	リリースビルドの場合。

	```
	$ make Release
	$ cd Release
	$ cmake -DCMAKE_BUILD_TYPE=Release ..
	$ make
	```

	以下のような表示が出て、ビルドを行ったディレクトリに `libSiv3D.a` ができていればOKです。
	![Screenshot from 2017-12-03 02-48-05.png](https://qiita-image-store.s3.amazonaws.com/0/211534/cc7c0aaf-57e0-6ee3-0738-b1418442a085.png)

4. アプリケーションのソースコードを用意する(`~/siv3d/app.cpp` とします)。
5. `OpenSiv3D/Linux/make_debug.sh` もしくは `OpenSiv3D/Linux/make_release.sh` を `~/siv3d` にコピーして、 同ファイル内の中の `[path/to/...]` の部分をインクルードディレクトリや静的ライブラリへの適切なパスに書き換える。
6. `OpenSiv3D/Linux` にある `resources` ディレクトリをまるごと `~/siv3d` へコピーする(フォント等のファイルが入っています)。
7. アプリケーションをビルドする。
	`~/siv3d` で以下どちらかを実行。

	```
	$ ./make_debug.sh app
	$ ./make_release.sh app
	```

	`~/siv3d` 内に `app` という名前の実行ファイルができていればOKです。
	(注) このシェルスクリプトは移植の動作確認時のコンパイルのために書かれたものなので、コンパイルできるcppファイルは1つだけです。複数個のcppファイルをコンパイルする場合はMakefile等を別途作成する必要があります。

8. アプリケーションを実行する。

	```
	$ ./app
	```

	Hello, Siv3D!

	![Screenshot from 2017-12-03 02-52-43.png](https://qiita-image-store.s3.amazonaws.com/0/211534/e20b4e28-b316-da1b-9b62-86be604cec24.png)