🅿️

Scratchでポイントシステムを作りたいときに見る記事

2024/12/10に公開

Scratchでポイントシステムを作るときの方法や注意点を紹介します。

作成方法

Scratchにはクラウド変数という機能があり、変数の値をサーバーに保存できます。
コメントなどでポイントを管理する方法もあると思いますが、今回は割愛します。

クラウド変数を使ってポイントシステムを作るなら、大きく分けて

  • クラウド変数にユーザー、ポイントのデータを保存する
  • サーバーを用意して、クラウド変数経由で情報をやりとりする

この2種類の方法がありますが、本格的なシステムを作るなら後者がおすすめです。
下の図のようなイメージです。
セーブのイメージ
ロードのイメージ

前者のように直接クラウド変数にデータを保存することもできますが、
クラウド変数の仕様により、1作品に保存できるのは2560文字までとなってしまいます。(1変数あたり256文字、1作品あたり10個)
容量にすると約1KBですね。
気になった方は、この記事も読んでみると面白いです。
https://qiita.com/ito-noizi-scratch/items/ef9d5a4989fe6b49201c

おすすめツール

サーバーをScratchで作成するのはかなり複雑になります。
そこで、Pythonのライブラリ「scratchattach」がおすすめ!

https://github.com/TimMcCool/scratchattach/wiki

Pythonで簡単なプログラムを組んで、クラウド変数の参照、更新ができます。(気が向いたら使い方記事を書こうと思っています)
こんな感じです。

sample.py
import scratchattach as sa

session = sa.login("username", "password")  # Scratchにログイン
cloud = session.connect_scratch_cloud("project_id")  # クラウドに接続
events = cloud.events()

@events.event
def on_set(activity):  # クラウド変数が更新されたときに呼び出される
    print(f"クラウド変数が更新されました タイムスタンプ: {activity.timestamp} 変数名: {activity.var} 値: {activity.value}")
    # クラウド変数の変更者を知りたいときは activity.load_log_data() を使うといいらしい

@events.event  # 検知の準備が完了したときに呼び出される
def on_ready():
   print("サーバーの準備完了!")

events.start()  # 検知開始

(公式Wikiより一部改変)

また、クラウド通信用のクラス、ユーザーやプロジェクトのデータの取得など、さまざまな機能がそろっています!
しかし、後述しますが利用しない方がよい機能もライブラリに含まれているので、よく確認しましょう。

禁止されていること

Scratchには、利用規約やコミュニティーガイドライン以外にも、様々なルールがあります。(ScratchTeamがディスカッションフォーラムでお知らせしたり、コメントで質問に回答したりなど)
特に、ポイントシステムにかかわる部分には禁止されていることが多いと感じています。いくつかの例を挙げます。

例1: オンラインチャット機能を作りたい!

Cloud chat projectsという公式声明が出されており、
自由入力・単語選択のチャットを共有することは禁止されています。
第二次クラウドショックと呼ばれているらしい)
絵文字や限られた定型文を送信するチャットは問題ないとされています。

例2: 登録者に毎日1回自動でコメントする機能を作ったぞ!

Botを利用したソーシャルアクション(コメント、フォロー、ハート星など)は
許可されていません。
フォーラムでの声明はないですが、元ScratchTeamの方をはじめ、
多くのScratcherがディスカッションフォーラムで同じ趣旨の発言をしています。

先ほどのscratchattachでもコメントの送信フォローなどの機能が用意されていますが、
最悪アカウントブロックの恐れもあるので極力使用しない方がいいでしょう。

例3: ホームページを作ってそこでポイントを送れるようにしよう!

Shops, Points, and Pretend Currency Systemsの2番目に違反します。
日本語訳にある通り、ポイントシステムがScratch外のアプリ、スクリプトなどで使用できるようにしてはいけません。
理由は明記されていませんが、ブラウザ拡張機能のように使う際にリスクがあるからだと思っています。

例4: ホームページから問い合わせられるようにGoogleフォームのリンクを置こうかな

Links to Member-created Websitesの4番目に違反します。
自作のWebサイトのリンクを紹介する際には、ウェブサイト上でモデレートされていない通信手段を設けないことが条件となっています。

ちなみに、「Webサイトを宣伝するには事前に許可を取る必要がある」と言われることがありますが、
2024年12月現在、ルールを守っている限り許可は不要になりました。

例5: フォローしてもらったらポイントをあげよう

Shops, Points, and Pretend Currency Systemsの3番目に、
支払い方法として、ソーシャルアクション(好き、お気に入り、参照、フォローなど)を使うこと」はできないと書かれています。
「宝くじ・コンテストの景品としてフォロー、ハート星をする」といったことも、この理由から禁止されているものです。

おわりに(読み飛ばし推奨)

この記事は自分への自戒も込めて作ったものです。
Botを使ったシステムの運営は、悪意を持てばいくらでも悪い使い方ができてしまいます。
そのため、慎重に製作していった方がいいのかなと思うようになりました。
ルールを守らずにシステムを運営しても、システムの評判が下がったり、最悪アカウントブロックで活動ができなくなってしまう恐れがあります。
ルールはよく読んで、守っていきましょう!

最後まで読んでいただき、ありがとうございました。
違うところとか質問とかがあれば、Discussionで教えてもらえるとありがたいです!

Discussion