SlideShare a Scribd company logo
1 of 15
ゲーム組み込み向け
独自スクリプト言語の設計で
気を付けている事
2015年12月25日
守屋 俊
自己紹介
 守屋 俊
 コンシューマゲーム機のゲーム開発を主にしてきました
 Twitter: @shun_moriya
ターゲット
 ゲームにかかわる制御をプログラムから切り離したい
 スクリプト記入者がプログラマ以外で、しかも経験が乏しい
 しかも3人以上を相手にする必要がある
なんで独自言語を作るの?
 スクリプト実装者がプログラマなら、LuaやSquirrelなど既存の言語を利用させ
てもらった方が断然に効率が良い
 プログラムに興味を持たない大勢の人達に、スクリプトで制御をしてもらう為
の手段を提供する必要がある
 でも、大抵の作業者はコピペで済ませる傾向・・・
ガチガチに機能を制限した言語が欲しい!
スクリプト設計時に気をつけている事
 コンパクトである
 静的型である
 簡単にリスタートができる
 コンパイル方式である
 文法に強い要望は受けた経験は無い
 メッセージの為の文字列型は必要無い
 デバッカーはあればより良い
 アクター指向
コンパクトである
コンシューマ機は例外なくメモリが十分にある事はなく、
ユーザーの目に触れないスクリプト系の処理は高速かつコンパクトである
ことがいつも求められます。
しかし、効率を求めすぎてシンボルなどの情報を完全に切ってしまうと、
デバックなどの開発効率を落としてしまう事になるため、
絶妙なさじ加減が必要です。
静的型である
特定の状況でのみ使われるスクリプトは良くある話です。
しかし、ゲーム開発において実行されない限り簡単な名称エラーや型違い
エラーを検出できない事は非常に問題があります。
例えば100回に1回実行されるレアな条件があった場合を考えてみましょう。
この場合、変数の型の違いや名前の間違いなど非常に簡単なエラーですら
発見が難しくなります。
そして、修正の変更が入ることで、多くの確認事項のやり直しになってし
まいます。
簡単なリスタートができる
特にコンシューマ機の開発環境のコールドリセットは想像以上に遅いもの
があります。
プログラムのチェックにassertを利用してしまうと、ちょっとしたパラ
メータの間違いでもコールドリセットによる待ち時間が発生してしまいま
す。
メモリ不足など継続が困難な状態にならない限り、
ボタン1つでスクリプトを高速にリスタートできる事がとても重要です。
コンパイル方式である
インタプリタ方式ではなくコンパイル方式である事を推奨します。
理由は二つあります。
実行環境のメモリは十分にある事が少ないので、メモリの消費が多い翻訳
部分があるインタプリタ方式は薦めません。
そして、リスタートが遅い環境が考えられるので、実行前に早く間違いを
検出する事ができる点でコンパイル方式を薦めています。
文法に強い要望は受けた経験は無い
今のところスクリプターからスクリプトの文法に対して強い要望を受けた
事がないので、あなたの好きな文法で開発して問題ないでしょう。
もしも、ゲームアプリケーションの開発がCやC++で行なわれるのならば、
定数や構造体の定義はc言語に合わせておくと同期が便利かもしれません。
メッセージの為の文字列型は必要無い
文字列型を用意するのは問題ないですが、
海外展開する予定のゲームのスクリプトにメッセージを表示する命令を組
み込もうとしているなら、
それは止めておいた方が良いでしょう。
私の笑えない経験で、スクリプトの命令ごと翻訳されてしまった事があり
ました。
メッセージはExcelなど表で管理できるフォーマットにしておくと、
自分が読めない言語でも対応がわかり便利です。
デバッカーはあればより良い
デバッカーを用意できれば最も良いが、
最低限printfさえあればどうにかなります。
それすらも無い場合は問題です。
もしも、あなたが、デバッカーもprintfもない状態でデバックしろと言わ
れたら何と答えるか想像してみましょう。
アクター指向言語
経験した方ならお気づきだと思われますが、
全てのスクリプターが賢明である保障は残念な事にありません。
オブジェクト指向?スレッド?コルーチン?
とにかくイメージしている事が動けばよいのです。
クラスやポインターなど複雑そうな機能を導入する事をやめるかわりに、
私のスクリプトではアクターモデルを導入しています。
アクターは世の中の物事と同じで、常に並行して行われています。
そして、アクターという用語もゲーム内のキャラクターを制御するスクリ
プターに受け入れられやすい事も理由の一つです。
私が実装した言語の紹介
アクター指向言語Mana
Manaは疑似並列処理を行うことを目的にしたスクリプトで、
複数のアクターという単位によって構成されます。
アクターとは日本語で直訳する通りに「役者」の意味であり、そのシーン(シチュ
エーション)に必要なアクターが、そのシーンのソースファイルの中に存在してい
ます。
そして、各アクターがお互いの動きに応じて反応しあい、一つのシーンを作り上
げていきます。
Manaはリクエストと呼ばれる割り込みで動作するシステムです。
複雑な処理はプログラム側に任せて、タイミングや分岐など演出部分だけをスク
リプトに任せることができます。
詳しくはWebで…
https://github.com/shun126/Mana
まとめ
プログラマ以外の方が作るスクリプトは十分な設計を考えられている事は
少ないです。
実行前のコンパイラによるチェックと、実行時のトライアンドエラーの繰
り返しの効率化が最優先になります。
実機での実行回数が、最終的に高品質につながると考えてほぼ間違いない
でしょう。
この文章が今後ゲーム向けスクリプトを作ってみようと考えている方のヒ
ントになればうれしいです。

More Related Content

What's hot

The Steps of Programming
The Steps of ProgrammingThe Steps of Programming
The Steps of Programmingshundroidk
 
はじめてのChu カッコカリ
はじめてのChu カッコカリはじめてのChu カッコカリ
はじめてのChu カッコカリMasuda Tomoaki
 
磯野ー!Dartやろうぜー!
磯野ー!Dartやろうぜー!磯野ー!Dartやろうぜー!
磯野ー!Dartやろうぜー!uka yare
 
JXUG Windowsアプリを開発している皆さん、C#でスマホアプリ開発を試してみませんか?ハンズオン
JXUG Windowsアプリを開発している皆さん、C#でスマホアプリ開発を試してみませんか?ハンズオンJXUG Windowsアプリを開発している皆さん、C#でスマホアプリ開発を試してみませんか?ハンズオン
JXUG Windowsアプリを開発している皆さん、C#でスマホアプリ開発を試してみませんか?ハンズオンTomohiro Suzuki
 
複数人でSwift開発を行うには
複数人でSwift開発を行うには複数人でSwift開発を行うには
複数人でSwift開発を行うにはYuya Fujiwara
 
Javaプログラミング入門【第1回】
Javaプログラミング入門【第1回】Javaプログラミング入門【第1回】
Javaプログラミング入門【第1回】Yukiko Kato
 
オンライン英会話のモチベーション維持!
オンライン英会話のモチベーション維持!オンライン英会話のモチベーション維持!
オンライン英会話のモチベーション維持!civicpg
 
平成26年度 マルチメディア研究同好会 ゲーム/コンピューター班 新入会員の指導・活動予定の概要
平成26年度 マルチメディア研究同好会 ゲーム/コンピューター班 新入会員の指導・活動予定の概要平成26年度 マルチメディア研究同好会 ゲーム/コンピューター班 新入会員の指導・活動予定の概要
平成26年度 マルチメディア研究同好会 ゲーム/コンピューター班 新入会員の指導・活動予定の概要Multimedia Research Club (TMCIT)
 
プログラミング言語は怖くない
プログラミング言語は怖くないプログラミング言語は怖くない
プログラミング言語は怖くないShoichi Matsuda
 
WordPress 3.8 RC1
WordPress 3.8 RC1WordPress 3.8 RC1
WordPress 3.8 RC1BREN
 
第0回プログラミング講座
第0回プログラミング講座第0回プログラミング講座
第0回プログラミング講座happo31
 
勉強会用Swift授業2018-0126
勉強会用Swift授業2018-0126勉強会用Swift授業2018-0126
勉強会用Swift授業2018-0126Akihiro Fujiwara
 
ごった煮じゃNight!vol.2
ごった煮じゃNight!vol.2ごった煮じゃNight!vol.2
ごった煮じゃNight!vol.2Satoshi Furuichi
 
『これからはじめるプログラミング基礎の基礎』 のエッセンス
『これからはじめるプログラミング基礎の基礎』 のエッセンス『これからはじめるプログラミング基礎の基礎』 のエッセンス
『これからはじめるプログラミング基礎の基礎』 のエッセンスAyumu Kohiyama
 
議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」nishikawa_makoto7
 

What's hot (19)

The Steps of Programming
The Steps of ProgrammingThe Steps of Programming
The Steps of Programming
 
はじめてのChu カッコカリ
はじめてのChu カッコカリはじめてのChu カッコカリ
はじめてのChu カッコカリ
 
磯野ー!Dartやろうぜー!
磯野ー!Dartやろうぜー!磯野ー!Dartやろうぜー!
磯野ー!Dartやろうぜー!
 
初心者目線でIo t
初心者目線でIo t初心者目線でIo t
初心者目線でIo t
 
JXUG Windowsアプリを開発している皆さん、C#でスマホアプリ開発を試してみませんか?ハンズオン
JXUG Windowsアプリを開発している皆さん、C#でスマホアプリ開発を試してみませんか?ハンズオンJXUG Windowsアプリを開発している皆さん、C#でスマホアプリ開発を試してみませんか?ハンズオン
JXUG Windowsアプリを開発している皆さん、C#でスマホアプリ開発を試してみませんか?ハンズオン
 
複数人でSwift開発を行うには
複数人でSwift開発を行うには複数人でSwift開発を行うには
複数人でSwift開発を行うには
 
Javaプログラミング入門【第1回】
Javaプログラミング入門【第1回】Javaプログラミング入門【第1回】
Javaプログラミング入門【第1回】
 
オンライン英会話のモチベーション維持!
オンライン英会話のモチベーション維持!オンライン英会話のモチベーション維持!
オンライン英会話のモチベーション維持!
 
Intelli code
Intelli codeIntelli code
Intelli code
 
平成26年度 マルチメディア研究同好会 ゲーム/コンピューター班 新入会員の指導・活動予定の概要
平成26年度 マルチメディア研究同好会 ゲーム/コンピューター班 新入会員の指導・活動予定の概要平成26年度 マルチメディア研究同好会 ゲーム/コンピューター班 新入会員の指導・活動予定の概要
平成26年度 マルチメディア研究同好会 ゲーム/コンピューター班 新入会員の指導・活動予定の概要
 
アクセサリ部
アクセサリ部アクセサリ部
アクセサリ部
 
プログラミング言語は怖くない
プログラミング言語は怖くないプログラミング言語は怖くない
プログラミング言語は怖くない
 
WordPress 3.8 RC1
WordPress 3.8 RC1WordPress 3.8 RC1
WordPress 3.8 RC1
 
第0回プログラミング講座
第0回プログラミング講座第0回プログラミング講座
第0回プログラミング講座
 
勉強会用Swift授業2018-0126
勉強会用Swift授業2018-0126勉強会用Swift授業2018-0126
勉強会用Swift授業2018-0126
 
ごった煮じゃNight!vol.2
ごった煮じゃNight!vol.2ごった煮じゃNight!vol.2
ごった煮じゃNight!vol.2
 
『これからはじめるプログラミング基礎の基礎』 のエッセンス
『これからはじめるプログラミング基礎の基礎』 のエッセンス『これからはじめるプログラミング基礎の基礎』 のエッセンス
『これからはじめるプログラミング基礎の基礎』 のエッセンス
 
議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」
 
JS/Canvas Tutorial1
JS/Canvas Tutorial1JS/Canvas Tutorial1
JS/Canvas Tutorial1
 

Similar to ゲーム組み込み向け独自スクリプト言語の設計で気を付けている事

会話型UI事始め
会話型UI事始め会話型UI事始め
会話型UI事始めDeNA
 
Visual Studio Code でプログラムをデバッグしよう!
Visual Studio Code でプログラムをデバッグしよう!Visual Studio Code でプログラムをデバッグしよう!
Visual Studio Code でプログラムをデバッグしよう!m ishizaki
 
2 1 スクラッチに登録しよう
2 1 スクラッチに登録しよう2 1 スクラッチに登録しよう
2 1 スクラッチに登録しようShufu Gaishi
 
本格的なプログラミングが学べる学校・金沢高専
本格的なプログラミングが学べる学校・金沢高専本格的なプログラミングが学べる学校・金沢高専
本格的なプログラミングが学べる学校・金沢高専金沢工業高等専門学校
 
社内発表資料
社内発表資料社内発表資料
社内発表資料ssuser0b0d0b
 
20200803 プログラミングの基礎
20200803 プログラミングの基礎20200803 プログラミングの基礎
20200803 プログラミングの基礎Hikaru Tanaka
 
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~典子 松本
 
Azure Functions で Google Home, Amazon Echo, LINE Clova スキル開発 #decode19
Azure Functions で Google Home, Amazon Echo, LINE Clova スキル開発 #decode19Azure Functions で Google Home, Amazon Echo, LINE Clova スキル開発 #decode19
Azure Functions で Google Home, Amazon Echo, LINE Clova スキル開発 #decode19Madoka Chiyoda
 
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」Serverworks Co.,Ltd.
 
Uno Platform か Blazor
Uno Platform か BlazorUno Platform か Blazor
Uno Platform か BlazorHiroyuki Mori
 
エンジニアのためのSpread Sheets講座101 - Google Apps Script -
エンジニアのためのSpread Sheets講座101 - Google Apps Script -エンジニアのためのSpread Sheets講座101 - Google Apps Script -
エンジニアのためのSpread Sheets講座101 - Google Apps Script -Yuki Katada
 
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用Life Robotics
 
クロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
クロスプラットフォーム開発雑感 #pronamaclrhsapporocppクロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
クロスプラットフォーム開発雑感 #pronamaclrhsapporocppKatsuya Shimizu
 
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyoShuyo Nakatani
 
よりよい開発を目指すための、プロセス&ツール活用
よりよい開発を目指すための、プロセス&ツール活用よりよい開発を目指すための、プロセス&ツール活用
よりよい開発を目指すための、プロセス&ツール活用Kaoru NAKAMURA
 
MOONBlockでプログラミング体験
MOONBlockでプログラミング体験MOONBlockでプログラミング体験
MOONBlockでプログラミング体験Jun Shimura
 

Similar to ゲーム組み込み向け独自スクリプト言語の設計で気を付けている事 (17)

会話型UI事始め
会話型UI事始め会話型UI事始め
会話型UI事始め
 
Visual Studio Code でプログラムをデバッグしよう!
Visual Studio Code でプログラムをデバッグしよう!Visual Studio Code でプログラムをデバッグしよう!
Visual Studio Code でプログラムをデバッグしよう!
 
2 1 スクラッチに登録しよう
2 1 スクラッチに登録しよう2 1 スクラッチに登録しよう
2 1 スクラッチに登録しよう
 
本格的なプログラミングが学べる学校・金沢高専
本格的なプログラミングが学べる学校・金沢高専本格的なプログラミングが学べる学校・金沢高専
本格的なプログラミングが学べる学校・金沢高専
 
社内発表資料
社内発表資料社内発表資料
社内発表資料
 
20200803 プログラミングの基礎
20200803 プログラミングの基礎20200803 プログラミングの基礎
20200803 プログラミングの基礎
 
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
 
Azure Functions で Google Home, Amazon Echo, LINE Clova スキル開発 #decode19
Azure Functions で Google Home, Amazon Echo, LINE Clova スキル開発 #decode19Azure Functions で Google Home, Amazon Echo, LINE Clova スキル開発 #decode19
Azure Functions で Google Home, Amazon Echo, LINE Clova スキル開発 #decode19
 
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
 
Uno Platform か Blazor
Uno Platform か BlazorUno Platform か Blazor
Uno Platform か Blazor
 
Herlockサービス紹介
Herlockサービス紹介Herlockサービス紹介
Herlockサービス紹介
 
エンジニアのためのSpread Sheets講座101 - Google Apps Script -
エンジニアのためのSpread Sheets講座101 - Google Apps Script -エンジニアのためのSpread Sheets講座101 - Google Apps Script -
エンジニアのためのSpread Sheets講座101 - Google Apps Script -
 
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
 
クロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
クロスプラットフォーム開発雑感 #pronamaclrhsapporocppクロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
クロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
 
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
 
よりよい開発を目指すための、プロセス&ツール活用
よりよい開発を目指すための、プロセス&ツール活用よりよい開発を目指すための、プロセス&ツール活用
よりよい開発を目指すための、プロセス&ツール活用
 
MOONBlockでプログラミング体験
MOONBlockでプログラミング体験MOONBlockでプログラミング体験
MOONBlockでプログラミング体験
 

ゲーム組み込み向け独自スクリプト言語の設計で気を付けている事