Scratch (プログラミング言語)

Scratchは、非営利団体Scratch財団がマサチューセッツ工科大学メディアラボ ライフロングキンダーガーデングループと共同開発する、8歳から16歳のユーザーをメインターゲットとする無料教育プログラミング言語及びその開発環境、コミュニティサイトである。ウィキペディアと同様、収録されている全ての内容がオープンコンテントで商業広告が存在しないということを特徴とする。

Scratchは世界中で使われており、

1億3600万個以上の共有されたプロジェクト
1億1200万人以上の登録ユーザー
8億3290万個以上の投稿されたコメント
3310万個以上の作成されたスタジオが存在している。

日本のユーザー数はそのおよそ1.75%にあたる188万人以上である。

ScratchはWindows、Mac、Linux、Raspberry Pi、Android、iPadなどに対応しており、ソースコードはGPLv2ライセンスとScratch Source Code LicenseとしてGitHubにて公開されている。

1. 概要
-----

Scratchは、初心者が最初に正しい構文の書き方を覚えることなく実行でき、遊び心のある実験やアニメーション、ゲームなどの制作を通してさらなる学習意欲を起こさせること、色々な人とのコメントや、ディスカッションフォーラムなどでコミュニケーション能力の育成をすることを意図している。8 - 16歳の子供向けに開発されたものだが、子供から大人まで幅広い年代が使用している。2023年6月17日現在では、12歳で登録するユーザーが最も多い。

Scratchという名称はディスクジョッキーがレコードを手でこするスクラッチングに由来しており、DJが気軽に曲をミックスすることと、Scratchで簡単にプロジェクトをミックスすることを関連付けている。2006年に最初のバージョンがMITメディアラボのミッチェル・レズニックが主導する「ライフロング・キンダーガーテン・グループ」にMITに来たEtoys開発チームのジョン・マロニーを招いて開発された。

Scratchの触覚や視覚的GUIは子供達がプログラムブロックをスプライトやステージにドラッグ・アンド・ドロップすることでアニメーション、アート、ストーリーやゲーム制作をゲーム感覚で出来るようにしている。正しい構文を読んでも書けない人のために視覚的にグループ分けされたブロックはそれらをクリックすることでテストできたり、リミックスや修正、プロジェクトの新バージョンを制作するために違うブロックを容易に書き換えることができる。

2013年5月にScratch 2.0が公開され、ウェブアプリケーションとなり、開発環境のインストールが不要となった。そのためリミックスが容易になり、従来のバージョンにはなかった、ウェブアプリケーションならではの機能が追加された。

2019年1月、Scratch 3.0が公開された。Scratch 3.0では、Scratch 2.0まで使用していたAdobe Flashを使用せず、HTML5を使用しているため、Internet Explorerなど一部のブラウザでは動作しなくなったが、その一方でスマートフォンやタブレット端末での利用がサポートされるようになった。さらに、いくつかの拡張機能の追加、ブロックの文字の読みやすさ向上など機能性や画質が向上した。

1.1. Scratchユーザインタフェース
----------------------

Scratch 3のユーザインタフェースは複数の枠に分かれており、左側はブロックパレット、真ん中はスクリプトエリア、右側がステージとスプライトのリストである。 プログラムを作るために必要なブロックはブロックパレットに並んでおり、スクリプトエリアにドラッグできる。全てのブロックを表示するにはあまりにも多すぎるため、ブロックは主に動き、見た目、音、制御、イベント、調べる、演算、変数、ブロック定義の9つのグループに分けられている。また、拡張機能により、ペンや外部機器との連携などの機能が追加できる。

1.1.1. サイトの色の更新
---------------

障害等の有無にかかわらずサイトをアクセシブルにするため、2023年6月28日に画面上部のナビゲーションバーの色が青から紫に変わったほか、ブロックの色をハイコントラストに調整できる設定が追加されるなどの変更が行われた。



1.2. Scratch Lab
----------------

Scratch LabはまだScratchに実装されていない機能を試すことができる場所である。2023年3月現在、video sprites、Face Sensing、Animated Text、New Block Colorsを試すことができる。しかし、ここで作った作品はコミュニティに共有できない。

このうち、New Block Colorsが実装され、2023年6月28日に更新された。そのアップデートはプロジェクト制作画面にとどまらず、Scratchのすべてのページが変更された。

2. 拡張機能
-------

Scratchの拡張機能を使用すると、様々な種類のブロックが追加され、ロボットとPCを接続させそのプログラムを設定するなどのことができる。以下は、Scratch3.0での拡張機能の一覧である。



2.1. ユーザーコミュニティ
---------------

Scratchは教育施設、博物館、コミュニティセンター、そして家庭内といった多くの場所で使われている。例として、低年齢の子供達は親や友達とプログラムを書くうえで、大学生はいくつかの計算機科学入門クラスでScratchが使われたりしている。表示される言語を変えることで世界中で使えるようになっている。ジョンズ・ホプキンス大学のCenter for Talented Youth  ではCTYオンラインプログラムにて6年生の生徒向けにScratchプログラミングのオンラインコースを提供している。

2.1.1. オンラインコミュニティ
------------------

Scratchのオンラインコミュニティのスローガンは「Imagine, Program, Share」でScratchの背後にある哲学の重要な部分として共有と創造性の社会的背景を指している。

またScratchのプロジェクトは新たなプロジェクトを作るためのリミックスに向けたものになっている。プロジェクトは開発環境からScratchのウェブサイトに直接アップロードでき、プログラムをリミックスして学習や、新たなプロジェクトとして共有することもできる。

Scratchユーザーはコメント、好き・お気に入りをつけたり、プロジェクトを共有することが出来る。

共有されたプロジェクトには、クリエイティブ・コモンズ 表示-継承2.0ライセンスが適用され、商用利用が出来る。

ウェブサイトでは頻繁に「Scratch Design Studio 」というユーザーが基本デザインコンセプトを使って制作、共有を奨励するチャレンジが開催されている。メキシコやイスラエル向けのカスタムホームページでは幾つかのセクションにローカルコンテンツが置かれている。ポルトガル やアラブ首長国連邦 でも独立したScratchウェブサイトがある。2008年、ScratchのオンラインコミュニティプラットフォームがArs Electronica PrixのHonorary Mentionを受賞した。教育者向けのオンラインコミュニティとして「ScratchEd」というものもあったが、2019年5月にサイトが閉鎖された。

2.1.2. イベント
-----------

2.1.2.1. Scratch Day
--------------------

Scratch Day は、年に一度世界中で行われるScratchのイベントである。 だれでもイベントを主催することができ、どこでも開催することができるが、基本的に5月15日の前後の休日に行われるのが伝統である。これは、Scratchというサービスそのものが2007年5月15日に始まったことに由来する。始まりは、2009年にMITのKaren Brennanが、Scratchのリリース日にイベントをしようと思いたち、開催したことにある。以後、Scratch Dayは毎年世界各地で行われている。現在はScratch Weekと名前を変え開催されている。

2.1.2.2. エイプリルフール
-----------------

Scratchでは、エイプリルフール限定のイベントが毎年必ず行われる。2021年、2020年は、「旗が押されたとき」などのイベントブロックが猫の形に変化していた。2022年では、大きなものでいうと、特定ワードで検索すると検索結果が変化したり、エディターの上部に「モード」というのが追加された。

3. 展開
-----

ミッチェル・レズニック本人による、Scratchを題材としたプレゼンテーション「//Let's teach kids to code.// 」が、2012年11月におこなわれたTEDxBeaconStreetにて講演され、その模様がTEDによって公開されている。この中でレズニックは、Scratchを利用して子供にプログラミングを覚えさせることの優位性、特にコーディングを通して得られる様々な経験が、その子供がプログラマーになるかならないかに関わらず、将来職に就き、仕事をこなすうえでとても有益である、と説いている。

また、TEDやTEDxの講演イベントでおこなわれたプレゼンテーションから英会話を学ぶことを目的とした、NHKによる教育番組「スーパープレゼンテーション」でもこのプレゼンテーションが取り上げられている。NHK Eテレでは『Why!?プログラミング』で公式にプログラミングソフトとして採用されたり、民放では千葉テレビ放送・BSフジの『GP LEAGUE プログラミングコロシアム』で放送される「GP LEAGUE」での公式言語の1つにもなっている。

4. Scratcher
------------

Scratcher  とは、Scratchのユーザーの一つの称号であり、Scratchチームが荒らしやスパム、「コミュニティーガイドライン」に違反をしていない安全なユーザーと確認したユーザーに与えられる。Scratcherになると、クラウド上にプロジェクトの変数を保存する「クラウド変数」や、コメントの連続投稿の規制が解除される。さらに、ディスカッションフォーラムでの投稿の合間に待つ時間が、120秒から60秒になったりScratchのスタジオを作成できるようになるなど、複数の制限が撤廃される。

5. Scratchの機能
-------------

Scratchにある機能の一部を紹介する。

5.1. 作る
-------

Scratchの新しいプロジェクトを作成するツール。Scratchのアカウントを所持していると、自動で保存がされ、「私の作品」からいつでも見れるようになる。最後に保存されたステージの画面が、プロジェクトのサムネイルとなる。

5.2. 見る
-------

「傾向」はその時点で、Scratch内で人気のプロジェクトを掲載している。「人気」は傾向よりプロジェクトの参照数が多かったり、お気に入りに登録されたりすると掲載される。これらは7つのカテゴリに分けられており、「すべて」「アニメーション」「アート」「ゲーム」「音楽」「物語」「チュートリアル」がある。また、2019年8月までは、傾向は「流行」と呼ばれていた。

5.3. リミックス
----------

人が作ったプロジェクトを複製し、編集して作り替えることができる。だが、編集したプロジェクトにはオリジナルの作者名とオリジナルが添付される。

5.4. アイデア
---------

初心者向けの動画や入門者用プロジェクトを見ることができる。バージョン2.0では「ヒント」と呼ばれていた。

5.5. ディスカッションフォーラム
------------------

Scratchに関係あることについて質問や会話を行う場所である。システムにはDjangoBBを採用している。

5.5.1. 署名
---------

フォーラムで投稿をした際、下部に自動的に追加される投稿のこと。プロジェクトの宣伝など、他人に伝えたいことを署名に表示させている。

6. Scratchアプリ
-------------

Scratchをインターネットに接続しなくても使用ができるオフラインエディターとして、Electronで動作するScratchアプリがWindows、Mac、Android、ChromeOS用に用意されている。

3.16.1 以前まではScratch Desktopと呼ばれていたが、3.16.1で名称がScratch 3に変更された。

以下、ソースコード上では存在したがインストーラー等が存在しないバージョンもあるが、GitHub上のソースコードからコンパイル可能である。

7. ファイルの形式
----------

7.1. Scratch1.4
---------------

Scratch1.4は、.sb形式である。このファイルは9つに分かれている。以下にその説明を記述する。



7.2. Scratch2.0
---------------

Scratch2.0は.sb2形式であり、内容は.jsonファイルと、サウンドおよび画像を含むzipファイルである。

7.3. Scratch3.0
---------------

Scratch3.0は.sb3形式であり、これはScratch2.0の.sb2と非常によく似ているが、違いの1つに音がある。

8. 公式キャラクター
-----------

これらのキャラクターはScratchの商標であり、Scratch以外のサイトで明示的な許可なく利用することはできない。

8.1. Scratchキャット 
------------------------------

猫をモチーフにしたキャラクター。毛の色はオレンジ色で、二足で直立している。Scratchを起動した時に、開発環境画面のステージに必ず表示される。新しくプロジェクトを作成したときに必ず表示されており、「Scratch」の象徴となっている。Scratch2.0から見た目が変わり、鼻は茶色から黒になり目や口や足の形も変わった。

8.2. Gobo 
--------------

黄色の体で、頭がとがったキャラクター。2011年に、Scratchチームが、Scratchのプロジェクトの中で、「9番目に多く使われているスプライト」と発表した。また、2.0から、絵文字としても使用できるようになった。以下は、「Goboの友達」と言われている。

8.3. Pico 
--------------

2.0から追加されたスプライト。名前の由来は、単位の「ピコ」より。体はオレンジ色で、丸い耳がある。

8.4. Tera 
--------------

2.0から追加されたスプライト。名前の由来は、単位の「テラ」より。体は青く、羽毛がある。

8.5. Nano 
--------------

2.0から追加されたスプライト。名前の由来は、単位の「ナノ」から。体が灰色で、ほかのキャラクターと比べると、背が低い。

8.6. Giga 
--------------

2.0から追加されたスプライト。名前の由来は、単位の「ギガ」から。頭の色が濃い赤色である。

9. ScratchのMOD
--------------

Scratchのいくつかの派生 はScratch Modificationsと呼ばれ、Scratchのバージョン1.4のソースコード を使って制作された。これらのプログラムは通常「ブロック」が追加されたり GUIが変更されたScratchのバリエーションである。

BYOB  のようにそのうちのいくつかはさらにコンピューティングへの基礎的アプローチへのシフトを導入しているがBYOBにのみユーザーを許容しないものの、Scratchの一部ではないファーストクラス手続き、ファーストクラスリスト、プロトタイプ継承を備えたファーストクラス真オブジェクト指向スプライトがある。BYOBはイェンス・ムーニッヒが開発し、カリフォルニア大学バークレー校のブライアン・ハーベイがドキュメンテーションを提供し、計算機科学専攻ではない学生への計算機科学初級コースにおける「The Beauty and Joy of Computing」を教える時に使用された。

2014年にはScratch 1.4と同等の環境をiPadで再現した「Pyonkee」が登場した。伊藤忠テクノソリューションズが児童向けに開催するプログラミング教室でも採用されている。

日本国内では更にJavaScriptではなく、日本発祥のプログラミング言語であるRubyを同一の操作性でプログラムする為に、任意団体スモウルビーにより「Smalruby」というものも作られて展開している。

ScratchJrは、Scratchを使うのに必要な文字の読み書きや算数を使えないより小さい子供たちのためにMITメディアラボが、タフツ大学とThe Playful Inventor Companyと協力して開発した。

9.1. TurboWarp
--------------

TurboWarpは、ScratchのMODの一つ。プロジェクトをJavaScriptにコンパイルして1FPSから250FPSまでの速度で実行できるようにする。他にも補完機能、ペンのHD化などがあり、「高度な設定」で細かな設定ができる。TurboWarpには、Scratchのプロジェクトをロードする機能があり2022年11月9日まで非共有プロジェクトの閲覧、編集が可能だった。2022年11月10日にScratch APIの仕様が変更された為、閲覧、編集共に不可能になった。

10. 検閲
------

2020年8月、中国政府がグレート・ファイアウォールを使用して、ScratchのWebサイトへのアクセスをブロックしたことが判明した。原因はScratchに登録する時に選択する国リストに 「香港」「マカオ」「台湾」が含まれていたからである。 当時中国ではScratchを使用していた人の5.7%にあたる、300万ユーザーが利用していた。現在中国本土ではオンラインでScratchは出来ず、オフラインエディターを使用している。検閲を担当している中国の機関は「Scratchに掲載されている情報は、中国本土に対して、屈辱的で中傷的、また虚偽のものである」と声明を出している。また、一部のユーザーはScratch内で、香港独立や台湾独立、中米貿易摩擦などを例に出し中国を非難していた。

11. 脚注
------

11.1. 注釈
--------

11.2. 出典
--------

12. 関連項目
--------

Lego Mindstorms
LOGO
ピョンキー
TurboWarp

13. 外部リンク
---------

[1]
[2] Scratch-Wiki