スクラッチコーチキャンプ ゲームクリエイターに、オレはなる!そんなキミを応援(子供も大人も)
  • ALL
  • はじめての方へ
  • スクラッチゲームの作り方

    スクラッチコーチのコーディング規約

    スクラッチコーチのコーディング規約
    この記事は スクラッチコーチで掲載されているオリジナル記事 のバックアップです。
    スターター作品
    なし
    今回の完成サンプル
    なし

    スクラッチのチュートリアルで使われているスクラッチコーチのコーディング規約をまとめておきます!

    コーディング規約とは?

    コーディング規約というのはシステム開発やゲーム制作の現場ごとに定義されている「どうやってコーディングするか」というルールのことです。

    例えば変数名の付け方

    たとえば最近のIT現場における変数の名前に関するコーディング規約だと、キャメルケースとスネークケースのどちらかが多い印象です。

    • キャメルケースとは……「scratchGameDevelopment」のように、「scratch」「game」「development」という文字のつなぎ部分を大文字にする書き方。ただし最初の文字は小文字。キャメルというのはラクダのことで、文字の感じがラクダのコブっぽいという由来。かわいい。
    • スネークケースとは……「scratch_game_development」のように文字のつなぎにアンダーバーを使う書き方。なんとなくヘビっぽいからという由来。

    個人的な感覚だとJava、Javascript、Python、Rubyなどの最近メジャーな言語ではキャメルケースのほうが多いかな。スネークケースはPHP(とくにWordPress)でよく使われている印象。

    スクラッチだと日本人は変数名は日本語で付けたほうが分かりやすいと思うから、キャメルケースは使えないし、スネークケースもそこまで使われてないかな。

    スクラッチコーチのコーディング規約を語るok-scratch ok-scratch

    u003cpu003e似たようなので他にもケバブケースというのもある。「scratch-game-development」みたいな感じで食べ物のケバブっぽい……ぽいか?wu003c/pu003eu003cpu003eでもハイフンは変数名に使うとエラーになる言語も多いのでファイル名とか文字列とかで使われる場面が多いかな。u003c/pu003e

    スクラッチのコーディング規約

    ココからは実際にスクラッチコーチで使っているコーディング規約をまとめておきます!

    スクラッチコーチのコーディング規約を語るok-scratch ok-scratch

    u003cpu003eただしこれは僕が個人的な経験で作ってきただけで公式のコーディング規約ではないです。というかコーディング規約なんてスクラッチにはないと思う。ここからスクラッチコーチで使ってる規約を紹介するけど、u003cemu003eこのとおりにスクラッチを作らないとダメというものではないu003c/emu003eです。役に立ちそうな部分があったら使ってみてね、という程度の気軽な規約です。u003c/pu003e

    変数名

    基本的に変数名は日本語で書きます。ただしXやYなど、英語のほうが分かりやすい部分は英語を使います。

    スクラッチコーチのコーディング規約を語るok-scratch ok-scratch

    u003cpu003e名前に関する規約はコーディング規約とは分けて命名規則とも呼んだりします。u003c/pu003e

    変数の種類を見分ける書き方

    スクラッチには大きく2通りの変数があります。

    • すべてのスプライトに共通の変数(グローバル変数)
    • このスプライトでのみ使う変数(ローカル変数)

    公式のこの2つに加えて、さらにもう2つスクラッチコーチでは独自に定義しています。

    • 1度だけ値をセットしたら2度と変更しないグローバル変数(定数)
    • このスプライトのみで使う上に、あるブロック定義内でのみ使われる一時的な変数(プライベート変数)

    これらを見分けるために以下のように接頭語を使っています。

    種類接頭語例 (カッコ内は値の例)
    グローバル変数
    (すべてのスプライトで使う変数)
    ★重力 (-1など)
    ★難易度
    ★いまのステージ
    定数
    (1度定義したら変更しないグローバル変数)
    ■はい (1)
    ■いいえ (0)
    ■あり (1)
    ■なし (0)
    ■30FPS (30)
    ■空白 ()
    ローカル変数
    (このスプライトのみで使う変数)
    なしスピードY
    ジャンプ力
    プライベート変数
    (このスプライトのみで使う一時的な変数)
    __値
    _一時的に保存された速度
    スクラッチコーチのコーディング規約を語るok-scratch ok-scratch

    u003cpu003eプライベート変数についてはそこまで厳密に使ってません。使わないと分かりづらい似たような名前のローカル変数があるときとかは使うかなぁ程度。u003c/pu003e

    英語圏のスクラッチャーさんは、グローバル変数は大文字で書いて、ローカル変数は小文字で書くようにしてたりする。みんなそれぞれコーディング規約があって、見てて面白い。

    グリフパッチさんの変数の命名規則

    真偽値を格納する変数

    変数の値が0か1(falseかtrue)になる変数は接尾語を「〜かどうか」にします。長過ぎたら「〜か」でもOK。

    例)ジャンプ中かどうか

    例)空中にいるか

    スクラッチコーチのコーディング規約を語るok-scratch ok-scratch

    u003cpu003eとくにローカル変数では真偽値かどうかをパッと見で分かると便利。u003c/pu003e

    ブロック定義名

    基本的にブロック定義名は日本語で書きます。

    ブロック定義名は動詞で書きます。

    例)ジャンプを行うブロック定義であれば、「ジャンプ」ではなく「ジャンプする」「飛ぶ」「跳ねる」など

    再描画するブロック定義かどうかを見分ける書き方

    ブロック定義には再描画するものとしないものがあります。パッと見ただけで分かるように接頭語を付けて判断します(最近そうし始めました)

    種類接頭語
    再描画が必要であるなしジャンプする
    アニメーションする
    再描画が不要である_
    (アンダーバー)
    _空中にいるか調べる
    _スピンできるか調べる
    _埋もれを修正する

    引数は引数名をラベルでも書く

    ブロック定義には引数を渡せますが、この引数名を敢えてラベルでも書き残しておきます

    たとえばコレ↓

    「値」という引数が定義されています。そして「エンコードする)値:」というように「値:」という引数名を敢えてラベルにも書いてあります。この状態だと冗長に思えますが、実際にブロック定義を使う時に便利です。

    見てみましょう↓

    ↑このように引数は空白になってしまいます。そうすると「あれ、ここって何いれるんだっけ?」といちいちブロック定義の引数名を調べる必要があります。そのひと手間が面倒なので、最初からラベルに引数名を書き残しておきます。

    プライベートブロック定義

    長いブロック定義を小分けするために、処理の一部を別のブロック定義に移し替えるというリファクタリング上の理由で作ったブロック定義をプライベートブロック定義と個人的に呼んでいます。

    プライベートブロック定義には、呼び出し元のブロック定義名 + アンダーバー2つ + 動詞という命名規則を採用しています。

    例)「_キー操作[←→]に対応する」の処理が長いので、止まる処理は別途切り出して別のブロック定義としてまとめたなら、そのブロック定義の名前は「_キー操作[←→]に対応する__止まる」となる。

    こうすることでブロック定義一覧では並んで表示されるので後日見ても「これはプライベートブロック定義だな」と一目でわかります。

    メッセージの書き方

    基本的に日本語で書く。最近は不自然でなければ語尾は「〜します」「〜しました」で整えています。

    例)ゲームを開始します

    例)被弾しました

    例)停止ボタンが押されました

    例)ステージをクリアしました

    条件分岐やループなどの囲みは極力ネストさせない

    ネストというのは「もし〜なら」の中でさらに「もし〜なら」を使うこととか、「ずっと」ループの中で「もし〜なら」を使うことです。ネスト自体は悪いことじゃないし、むしろ絶対ネストしないと無理な場面って多い。

    だけど「もし」の中で5回も6回も「もし」が使われてたりすると、すごく見づらくなります。

    こんな↓

    こういうのを「ネストの階層が深い」と表現するのですが、階層が深すぎるとデバッグが大変になりがちです。

    そこで、可能ならネストは極力しないように作れるように心がけてます。可能なら!

    ↑左と右のブロック群はまったく同じ処理なんですが、どっちが好みですか?好みにもよるのですが、左はネストをさせないようにしたバージョン。右はネストしまくってるバージョンです。処理の内容自体は全く同じですが、左のほうが個人的には好みです。

    スクラッチコーチのコーディング規約を語るok-scratch ok-scratch

    u003cpu003eちなみに僕はスクラッチに限らずJavascriptとかテキスト言語でもネストしないように書く派です。ネスト派もいるし、現場によってはコーディング規約で縛りがあったりするから、どっちでもOKになっておくのがベター。u003c/pu003e

    コーディング規約を作っちゃおう

    これは僕なりのコーディング規約ですが、みんな「オレオレ規約」作ってしまってOKだと思います!別に仕事じゃないんだし、自分なりのスクラッチの作り方ベストプラクティスみたいなのを作るのも楽しみなんじゃないかなぁって思います。

    スクラッチコーチのコーディング規約を語るok-scratch ok-scratch

    u003cpu003e他にも思い出したり更新があれば追記していきます〜!u003c/pu003e

    この記事への質問やコメントをどうぞ

    ただいま実験的に質問を受け付けています。

    コメントは受け付けていません。

    スパム防止のため、 質問をするにはログインが必要 です。ログインはスクラッチのアカウントがあれば誰でもできます。

    ブクマよろしくお願いします!という口コミを寄せてくれた方 ブクマよろしくお願いします!
    どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!