Help us understand the problem. What is going on with this article?

Xcodeを開かずにOpenSiv3Dを使いたい

この記事はSiv3d Advent Calendar 2019 20日目の記事です。

はじめに

Mac版のOpenSiv3DはXcodeが推奨されています。ですが、Xcodeでコードを書くのは 個人的に好きではないです。ですが私の力ではCMakeListsを書く事ができませんでした。
ただ基本的な事(プロジェクトを作成やコードを書く等)はXcodeを使いたくないなと思い、今回の記事を書かせていただきます。
Xcodeの力とか要らないし〜、てか俺vim派だし〜って方は18日目のhigashi000さんの記事をどうぞ。

includeとlibを別のフォルダに格納する

Siv3Dをはじめようでmac版のOpenSiv3Dがダウンロードできます。ダウンロードしたzipファイルを開くと下の画像のようにフォルダが入ってます。1.jpg
includeフォルダとlibフォルダにOpenSiv3DのHeaderやLibrary等が入っています。ですが、この2つのフォルダはそこまでではないですが少し重いです。毎回上記のサイトからダウンロードしたりするとやはり容量を食ってしまいます。という事で私は「/usr/local/OpenSiv3Dv0_4_2/」に2つのフォルダを格納しました。別にホームディレクトリに格納しても大丈夫です。

Xcodeの再設定

includeとlibを別のフォルダに格納したので、もちろんXcodeでHeader Search PathsとLibrary Search Pathsの再設定をします。
IncludeSearchPath_after.jpg
初期状態ではこのようになっています。このパスを、

IncludeSearchPath.jpg
このように再設定します。つまり「../../」を全部「/usr/local/OpenSiv3Dv0_4_2/」に書き換えます。画像ではHeader Search Pathsしか表示されていませんが、下のLibrary Search Pathsも同じように書き換えます。

VScodeの設定

App等が入ってるフォルダの位置でVScodeを開きます。開いたらc_cpp_properties.jsonを以下のように書き換えます。

c_cpp_properties.json
{
    "configurations": [
        {
            "name": "Mac",
            "includePath": [
                "/usr/local/OpenSiv3Dv0_4_2/include",
                "/usr/local/OpenSiv3Dv0_4_2/include/ThirdParty",
                "/usr/local/include",
                "./src"
            ],
            "defines": [],
            "macFrameworkPath": [
                "/System/Library/Frameworks",
                "/Library/Frameworks"
            ],
            "compilerPath": "/usr/local/bin/gcc",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x64"
        }
    ],
    "version": 4
}

これでVScodeでOpenSiv3Dのインテリセンスが働くようになります。そもそもXcodeが嫌な理由としてインテリセンスが出るのが遅いという点がありました。

VScode上でビルド&実行する

上述した通り、私の力ではCMakeListsを書く事ができませんでした。という事でビルドと実行はXcodeに任せる事にしました。幸いMacはジェスチャが優秀なのでXcodeとVScodeの行き来が楽なので、VScodeでコーディングしてからXcodeでビルドをするという方法が最初に思い浮かびました。ただこのやり方は私的には不満です。Xcodeを開かずにビルドがしたいからです。

調べていくうちにターミナルで「xcodebuild」と打ち込むとビルドをしてくれるという事がわかりました。VScode上でターミナルを開き、

$ xcodebuild

と打ち込むとビルドが完了し、App/empty.appが作成されます。ちなみにこのempty.appを開くと実行する事ができます。

ということは、

$ xcodebuild && open App/empty.app

とターミナルに打ち込む事によってビルドしてから実行する事ができます。
私は毎回ターミナルに書くのがめんどくさいので、keybindings.jsonに以下のコードを追加します。

keybindings.json
[
    {
        "key": "Cmd+b",
        "command": "workbench.action.terminal.sendSequence",
        "args": {
            "text": "xcodebuild \n"
        }
    },
    {
        "key": "Cmd+r",
        "command": "workbench.action.terminal.sendSequence",
        "args": {
            "text": "xcodebuild && open App/empty.app \n"
        }
    }
]

一応これでXcodeと同じコマンドでビルドや実行ができるようになります。ただしこれではプロジェクト名がemptyではなかった場合にビルドはできても実行はできません。なので、

keybindings.json
[
    {
        "key": "Cmd+b",
        "command": "workbench.action.terminal.sendSequence",
        "args": {
            "text": "xcodebuild \n"
        }
    },
    {
        "key": "Cmd+r",
        "command": "workbench.action.terminal.sendSequence",
        "args": {
            "text": "xcodebuild && find . -name \*.app | xargs open \n"
        }
    }
]

という風に書けばプロジェクト名が変更されてても実行できるようになります。

こちらが実際にCommand+Rを押した時の動画です。

バッチファイルを作成

実はここまでで記事を終わらせる予定だったのですが、このままでは正直実用性がないなと感じたのでもう少し改良していきます。

上記のVScodeを開いていたフォルダに.commandファイルを作成します。このファイルをダブルクリックする事により、その場所でVScodeを開けるようにします。

Appフォルダやsrcフォルダと同じ場所に「任意の名前.command」というファイルを作成します。作成したファイルに以下のコードを記述します。

#!/bin/bash
MY_DIRNAME=$(dirname $0)
cd $MY_DIRNAME
open -a Visual\ Studio\ Code .

これでXcodeのようにフォルダからダブルクリックで開けるようになりました。

テンプレートの作成

ここから先はおまけで、上記の作ったテンプレートが欲しいなと思い、作成しました。

まず、テンプレートに使いたいプロジェクトを選びます。めんどくさかったらここからダウンロードしたやつで構いません。今回私はMain.cppのみのプロジェクトとRyoさんが作成してくださったゲームテンプレートのちょこっと改良版の2つをテンプレート化します。

プロジェクトフォルダのzip化

まず、テンプレート化したいプロジェクトをzip化します。例えば今回templateSiv3D.zipというファイルを作成したとします。このzipファイルをターミナルから開く場合、__MACOSXや.DS_Storeが作成されてしまいます。なので、ターミナルで

$ zip --delete templateSiv3D.zip "*__MACOSX*" "*.DS_Store"

という風に打ち込んでください。作ったzipファイルは任意の場所に格納しておいてください。私は2つ作っているので、~/OpenSiv3D_Template/ にNomalとGameTemplateというフォルダを作成してその中にそれぞれ格納しています。

シェルの設定

次にターミナルから作成したzipファイルを解凍し、VScodeを開くようにシェルを設定します。.bashrc(zshを使ってる人は.zshrc)に以下のコードを追加します。

#OpenSiv3Dのテンプレート作成&Appフォルダと同じ階層に移動&VScodeを開く
function OpenSiv3D_nomal_template () {
  unzip ~/OpenSiv3D_Template/Nomal/v0_4_2.zip; # <-上で作成したzipファイル
  mv ./v0_4_2 ./$1;
  open -a Visual\ Studio\ Code ./$1/examples/empty; # <-Appフォルダと同じ階層
}

#OpenSiv3Dのゲームテンプレート作成&Appフォルダと同じ階層に移動&VScodeを開く
function OpenSiv3D_game_template () {
  unzip ~/OpenSiv3D_Template/GameTemplate/v0_4_2.zip; # <-上で作成したzipファイル
  mv ./v0_4_2 ./$1;
  open -a Visual\ Studio\ Code ./$1/Game/Game; # <-Appフォルダと同じ階層
}

引数を指定していますが、引数に入れた文字がフォルダの名前になります。実際にコマンドを実行した動画がこちらです。

これで一応テンプレートとして機能するようになりました。

終わりに

とりあえずXcodeを開かないでOpenSiv3Dの開発ができるようになりました。今回書いていませんが、hppファイル等をVScodeで作成すると反映されますのでご安心を。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away