Google Blockly で ビジュアルプログラムを楽しむ 自己紹介 名前 robo (兼高理恵) お仕事 Java 技術者 設計から実装まで 好きなもの モバイル端末 補足 Android女子部関西(リーダは日高未紗子さん) 助手兼掃除番 2

Similar documents
SmartBrowser_document_build30_update.pptx

TestDesign for Web

Eclipse 操作方法 (Servlet/JSP 入門補助テキスト)

Web データ管理 JavaScript (1) (4 章 ) 2011/12/7( 水 ) 湘南工科大学講義資料 Web データ管理 (2011) 阿倍 1/21

Maser - User Operation Manual

PowerPoint プレゼンテーション

PowerPoint Presentation

HARTING Node.js Environment for HAIIC MICA 日本語 HARTING Node.js Environment for HAIIC MICA HARTING IT Software Development Marienwerder Str. 3, E

Notesアプリが iPadで動くDomino Mobile Apps ご紹介

Team Foundation Server 2018 を使用したバージョン管理 補足資料

コンテンツ作成基本編

SAMBA Stunnel(Windows) 編 1. インストール 1 セキュア SAMBA の URL にアクセスし ログインを行います xxx 部分は会社様によって異なります xxxxx 2 Windows 版ダウンロード ボ

SAMBA Stunnel(Mac) 編 1. インストール 1 セキュア SAMBA の URL にアクセスし ログインを行います xxxxx 部分は会社様によって異なります xxxxx 2 Mac OS 版ダウンロー

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

JavaScript カスタマイズ入門 kintone university アプリデザイナープラス JavaScript カスタマイズ入門編演習問題回答 演習問題 第 2 章サンプルで試そう 1 cybozu.com developer network の サンプルで試そう ( 以下 サンプル と

Mindjet MindManager Version 9 for Windows サービスパック 2 リリースノート : 2011 年 4 月 20 日

コンテンツ作成基本編

AppsWF ワークフロー設定ガイド Ver.1.1 株式会社オプロ

スマートにプログラミング Android 入門編第 2 版 SDK4/2.3 対応 よくあるご質問 (FAQ) ここでは 読者の皆様から寄せられた質問の中で 比較的多く見受けられたトラブル事例とその解決策を集め掲載致しました お困りの際の解決のヒントとしてご利用下さい なお スマートにプログラミング

サイト名

intra-mart Accel Platform — intra-mart Sphinxドキュメント ビルド手順書   第2版  

Shareresearchオンラインマニュアル

スライド 1

事前準備 1. Visual Studio Community 2013 または Professional 以上のエディションのインストール 2. Android スマートフォンへの任意の QR コードリーダーアプリのインストール 3. アプリ素材のダウンロード

PowerPoint プレゼンテーション

2. 生田仮想デスクトップ PC の接続方法 生田仮想デスクトップ PC に接続する方法は 次の 2 通りです 1. HTML アクセス Internet Explorer や Safari などのブラウザを用います PC に特別なソフトウェアをインストールす る必要が無いので 管理者権限をもってい

利用者

情報更新日 :2012/5/20 サンプルソースの文字化けについて [ トラブル事例 ] Eclipse に ダウンロードしたソースコードをインポートすると文字化けが起きる ( 関連箇所 : 0-1 はじめに ) [ 回答 ] 本書でその利用を前提としております Tech Fun Eclipse は

発環境を準備しよう2 章開Eclipseをインストールしようそれでは Eclipseをセットアップしましょう Eclipseは Eclipse Foundationのサイトからダウンロードできます ダウンロードのページを開くと いく

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

2. ccmybox を利用するには ccmybox の利用には Web ブラウザが必要ですが パソコンの Web ブラウザだけでなく スマートフォンなどのモバイル機器の Web ブラウザからも接続が可能です また Web ブラウザを利用した接続方法以外に 専用接続ツールがメーカーより提供されていま

メール利用マニュアル (Web ブラウザ編 ) 1

Microsoft Word - MyWebMedical40_client_guideIE8.doc

PowerPoint プレゼンテーション

Taro-QGIS 3.2

大阪ガス株式会社 情報通信部 御中

情報連携用語彙データベースと連携するデータ設計 作成支援ツール群の試作及び試用並びに概念モデルの構築 ( 神戸市こども家庭局こども企画育成部 千葉市総務局情報経営部業務改革推進課 川口市企画財政部情報政策課 ) データ構造設計支援ツール設計書 2014 年 9 月 30 日 実施企業 : 株式会社ア

WinXp-Rmenu

PowerPoint プレゼンテーション

目次 はじめに...3 チュートリアル素材のご利用に関して... 4 完成イメージ...5 一連の流れ 5 STEP 1. クイズの新規作成...6 STEP 2. 一般公開 ( オンラインストレージ ) 終わりに お問い合わせ お問い合わせ窓口 更新

4. ファイルアップロード機能 使い方 ファイルをドラッグ & ドロップ した状態 図 4-1: ファイルアップロード画面 ( 例 ) 1. 送信するファイルをドラッグ & ドロップしてください 送信するファイルの右のエリアをマウスでクリックする事により 従来のエクスプローラー形式のアップロードも可

メールサーバ仕様変更に伴うメール設定変更方法

新規インストールガイド Sophos Anti-Virus for Mac 9.7 学内利用版 本書は Download Station から Sophos Anti-Virus for Mac 9.7 の学内利用版 ( 以下 Sophos Anti-Virus とする ) をダウンロ ドし 新規イ

プレポスト【問題】

Web ファイルアクセス (Nextcloud) 利用マニュアル PC 操作編 Ver /4/26 明治大学情報基盤本部

<V3

スライド タイトルなし

目次 1. 概要 2. サーバーへの設置 3. 設定 4. ユーザーアクセス記録の収集 5. 利用規定 6. 更新履歴

ULTRA DRIVE とは インターネット上 ( クラウド ) に大切なデータを保存することが出来る便利なアプリケーション ( オンラインストレージ ) です 本資料について ULTRA DRIVE サービスは マイナーバージョンアップ等もあるため 実際のクライアントと本資料に差分が発生する場合が

POWER EGG V2.01 ユーザーズマニュアル 汎用申請編

Microsoft Word - XOOPS インストールマニュアルv12.doc

ArcGIS Runtime SDK for .NET アプリケーション配布ガイド

Microsoft Word - Mac版 Eclipseの導入と設定.docx

NSS利用者マニュアル

追加インストールガイド Microsoft Office Multilanguage Pack 2016 本書は Download Station から Microsoft Language Pack Multilanguage Pack 2016 ( 以下 Language Pack) をダウンロ

スライド 1

BizDataBank とはインターネット上のクラウドサーバーを 自分のパソコンのハードディスクのようにご利用いただけるサービスです クラウドに格納したデータはパソコンだけでなく スマートフォンやタブレットでも自在にアクセス可能 さらに 大容量データの送信やメンバー限定のファイル共有など ビジネスや

(Microsoft Word - TBC\221\200\215\354\203K\203C\203hRev,A.doc)

NSS利用者マニュアル

クラウド内の Java - 動画スクリプト 皆さん こんにちは Steve Perry です 私たちが作成した人事アプリケーションを覚えていますか? 今回は そのアプリケーションをクラウド内で実行しましょう コードは GitHub の

- 2 / 25 - 表示される

intra-mart Accel Collaboration — ファイルライブラリ 管理者操作ガイド   第6版  

MP:eMeeting インストールマニュアル Version /06/30 株式会社デジタル ウント メア

WebSAM System Navigator JNS isadmin SNMP Trap 連携設定手順書 NEC 2012 年 12 月

新規インストールガイド Sophos Anti-Virus for Mac 9.7 学外利用版 本書は Download Station から Sophos Anti-Virus for Mac 9.7 の学外利用版 ( 以下 Sophos Anti-Virus とする ) をダウンロ ドし 新規イ

目次 ページ 1. 本マニュアルについて 3 2. 動作環境 4 3. ( 前準備 ) ライブラリの解凍と保存 5 4. モデルのインポート 6 5. インポートしたモデルのインピーダンス計算例 8 6. 補足 単シリーズ 単モデルのインポート お問い合わせ先 21 2

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版  

intra-mart Accel Platform — OData for SAP HANA セットアップガイド   初版  

Ver26 メディアマート株式会社 アドバンスト アナリティクス株式会社 Statistics 26.0 のインストール手順書 (Windows 版 ) Authorized User ライセンス ( シングルライセンス ) 1. 事前に IBM SPSS Statistics 26 をインストール

◎phpapi.indd

インテル® Parallel Studio XE 2019 Composer Edition for Fortran Windows : インストール・ガイド

Source Insight

Cloud Disk とは インターネット上 ( クラウド ) に大切なデータを保存することが出来る便利なアプリケーション ( オンラインストレージ ) です 本資料について Cloud Disk サービスは マイナーバージョンアップ等もあるため 実際のクライアントと本資料 に差分が発生する場合があ

第 8 回の内容 クライアントサイド処理 JavaScript の基礎

Windowsユーザでも 手軽に作れるiPhoneアプリ

スクールCOBOL2002

有償オプションの動作環境の追加 3.1. Video+ 型コンテンツの教材作成クライアントの動作環境に下記のソフトウェアを追加しました Microsoft PowerPoint レスポンシブデザイン受講機能の受講者クライアントの動作環境に下記の OS と Web ブラウザを追加し

目次 CONTENTS 内容 1. はじめに 使用するシステムについて プロフィールページ編集 公開 ( 依頼 ) ログインする プロフィール編集 公開 ( 依頼 ) 基本的なエディタの使い方

第5回 マインクラフト・プログラミング入門

Microsoft Word - koutiku-win.doc

(1)IE6 の設定手順 (1)IE6 の設定手順 1) 信頼済みサイトの追加手順 1: ブラウザ (Internet Explorer) を起動します 手順 2: ツール / インターネットオプション / セキュリティ メニューを選択します 手順 3: セキュリティ タブの 信頼済みサイト を選択

新規インストールガイド Microsoft Office Professional Plus 2016 本書は Download Station から Microsoft Office Professional Plus 2016( 以下 Office) をダウンロ ドし 新規インストールを行う手順

SciFinder エラーへの対処法

Visual Studio 2017 RC インストール & ファーストステップガイド 2016 年 11 月 16 日 (V1.0)

JP-2-Develop Websites and Components in AEM v6x_(V3_after QA)_1111

intra-mart Accel Platform — 招待機能プログラミングガイド   初版  

目次 1. AOS ユーザー登録サイト AOS ユーザー登録 AOS ライセンスキー登録 ios 版アプリ インストール 起動と新規登録 初期設定とバックアップ Andro

SILAND.JP テンプレート集

[Unifinity]運用マニュアル

ミーティング記録の管理

Consuming a simple Web Service

2 ログイン ( パソコン版画面 ) Web サイトのログイン画面が表示されます 通知メールに記載されている ID と仮パスワードを入力して ログイン ボタンをクリックしてください ID パスワードを連続して 5 回間違うと 当 I D はロックアウト ( 一時的に使用不可 ) されるので ご注意く

テキストファイルの入出力1

extension機能概要マニュアル

新規インストールガイド SPSS Statistics 24/25 Windows 32/64bit 版 本書は Download Station から SPSS Statistics をダウンロ ドし 新規インストールを行う手順を記載しています 本手順は学内ネットワークに接続した状態で行う必要があ

(Microsoft PowerPoint - ClickFramework.ppt [\214\335\212\267\203\202\201[\203h])

Microsoft PowerPoint - Tutorial_2_upd.ppt

KS_SSO_guide

目次 はじめに 4 概要 4 背景 4 対象 5 スケジュール 5 目標点 6 使用機材 6 第 1 章 C# 言語 7 C# 言語の歴史 7 基本構文 8 C 言語との違い 9 Java 言語との違い 10.Netフレームワーク 10 開発資料 10 第 2 章 Mono 11 Monoの歴史 1

Transcription:

GDG Devfest W Kyoto Google Blockly で ビジュアルプログラムを 楽しむ 兼高理恵 (robo) 1

Google Blockly で ビジュアルプログラムを楽しむ 自己紹介 名前 robo (兼高理恵) お仕事 Java 技術者 設計から実装まで 好きなもの モバイル端末 補足 Android女子部関西(リーダは日高未紗子さん) 助手兼掃除番 2

Blockly について Blockly は Googleさんが2012/06に公開された ブロックのドラッグ ドロップのみで 任意プログラム言語のコードテキスト作成ができる Webベースの ビジュアル プログラミング エディタ環境(基盤)です Blockly という独自プログラム言語ではないことに ご注意ください 参考先 Blockly サイト https://code.google.com/p/blockly/ Blockly紹介ビデオ 画質が粗くてごめんなさい http://www.youtube.com/watch?v=p_hm3xd4-qm&feature=youtu.be 3

Blockly について Blockly サイト 4 Blockly ビジュアル エディタ

Blockly の仲間たち Blocklyは あまた存在する ビジュアル プログラミング環境の1つです ビジュアル プログラミング環境は 世界中で今も誕生し続けています 興味をもたれた方は Google 検索されては いかがでしょうか 5

Blockly の仲間たち SCRATCH http://scratch.mit.edu/ StarLogoプロジェクト http://education.mit.edu/projects/starlogo-tng 6 Squeak http://www.squeak.org/ AppInventor http://appinventor.mit.edu/ 文部科学省プログラミン http://www.mext.go.jp/programin/

Blockly の特徴 Webブラウザのみで利用可能です 開発環境のダウンロードやプラグインの追加も 必要ありません サーバすら不要です 各国語対応も考慮されています ブロック表示メッセージのリソース化手法の提供 のみならず 右から左に流れる言語でも対応できる ように設計されています メッセージ表示は リソース化を行わなくても(直書でも)可能です 7

Blockly の特徴 プログラム言語を問わないコード テキスト生成 任意のプログラミング言語のコード テキスト生成 が可能となるよう設計されています 自由にサポート言語が追加開発できるのです 公開CODEサンプルでは JavaScriptやPythonの コードがエクスポートできるようになっています 2013/02までは Dartコードのエクスポート サポートも行われていました 8

Blockly の特徴 独自拡張も自分のサイトでの使用も自由です Blocklyは Apache License 2.0ライセンスの オープンソース プロジェクトです 独自拡張したソースの頒布は 派生成果物に Apache License 2.0 のコピー(テキスト)と 参照元の帰属告知のコピー(派生成果物に無関係物は除く)と 独自変更(拡張)部の告知を含めれば 自由に行えます (詳しくは 脚注を御参照ください) 参考先 Apache License 2.0 http://www.apache.org/licenses/license-2.0 Apache License, Version 2.0 (日本語訳) http://sourceforge.jp/projects/opensource/wiki/licenses%2fapache_license_2.0 9

Blockly の特徴 教育環境での利用のみにとどまりません Blocklyは 任意プログラム言語のコード テキスト生成や 任意機能を表すカスタム ブロック作成が 独自に開発できるよう設計されています つまり特定ハード用のプログラム開発や 業務用DSLの独自開発にも応用可能なのです 参考先 紹介しました特徴については 下記の Blockly wiki ページを参考にいたしました Alternatives https://code.google.com/p/blockly/wiki/alternatives 10

Blockly 独自拡張の例 Arudino ビジュアルプログラミング エディタ BlocklyDuino Blocklyを独自拡張して Arudino用の ビジュアル プログラミング エディタ BlocklyDuinoを作成された方もおられます gasolin / BlocklyDuino https://github.com/gasolin/blocklyduino/wiki BlocklyDuino visual editor demo http://www.gasolin.idv.tw/public/blockly/demos/blocklyduino/index.html 11

Blockly 独自拡張の例 Arudino ビジュアルプログラミング エディタ BlocklyDuino BlocklyDuino サイト 12 BlocklyDuino エディタ デモ

Blockly 独自拡張の例 Arudino ビジュアルプログラミング エディタ BlocklyDuino Arduino開発は C言語に似たプログラミング言語が 本来の手法ですが Lチカだって この通り ArudinoIDE 13 BlocklyDuino エディタ デモ

制限事項 ローカルファイルでは エラーとなる場合がある Chromeブラウザでは セキュリティ上の制限のため file://スキーマ利用時のインライン フレームの テンプレート展開に失敗します (issue 47416) http://code.google.com/p/chromium/issues/detail?id=47416 このため Blockly プロジェクトから取得した ソースコードのAppsコンテンツが実行できません 14

制限事項 Chromeでは httpサーバを介した利用を勧めます 独自開発のためローカルファイルを利用する場合は ローカル http サーバを立ち上げるか Firefoxや SafariやOperaブラウザの御利用を検討ください 補足 Blocklyプロジェクト ソースコードの Demosは iframeやテンプレート未使用です Choromeであってもローカルファイル (file://スキーマ)からの実行が可能です 15

制限事項 ファイルからのインポートに対応していません コード テキストやブロック構造XMLの 直接ファイル保存や読込は 対応していません 作成プログラムは エクスポートのみ可能です Blockly > Apps > Codeで作成したプログラムは ブロック構造のXMLテキストエリア内容をコピーして テキストエディタに貼りつけファイル保管すれば 保管済みのXML内容を再びXMLテキストエリアに 貼り付けることで再現することができます 16

制限事項 高機能ブロックは 提供していません 言語仕様を一般化(幅広いプログラム言語への対応思想より)するため 提供ブロックの機能は 低レベルとなっています 特定の処理を1ブロックで実現するには 独自に カスタム ブロックを開発する必要があります 大規模プログラム開発を対象としていません 比較的小規模なプログラミングを対象とした 設計となっています 参考先 制限事項については 下記の Blockly wiki ページを参考にいたしました FAQ - High Level https://code.google.com/p/blockly/wiki/faqhighlevel 17

Blockly紹介編と次章について Blockly についての一般的な説明は 以上です 聴講者(読者)がプログラミング知識があるとして エディタやブロックの使い方は 省いています (お使いになれば すぐに判ると思います) 以降から 簡単なカスタム ビジュアルエディタ作成を介して Blocklyの独自拡張について説明いたします 18

Blockly紹介編と次章について サンプル作成する簡易カスタム ビジュアルエディタの外観 19

20

Blockly独自拡張の入門書 Introduction(入門書)ページ 基本的な実装(APIの利用や解説)については Introduction(入門書)ページを始まりとして 一連のwikiページを辿ることで学びます 正式な技術情報源は 上記ページ(とML)のみです サンプルの作成においても 上記ページの情報と ソースコード解析のみで対応しました 参考先 Introduction https://code.google.com/p/blockly/wiki/installation Blcockly wiki page https://code.google.com/p/blockly/w/list 21

Blockly独自拡張の入門書 Introduction(入門書)は必読です Introduction(入門書)の一連のページは 英語ドキュメントですが 30ページもありません 独自拡張を行いたい方は 必ず目を通してください 正式な技術的情報は 上記を読解するのみなため 私からの説明は サンプル作成にあたって感じた キーポイントに絞らせていただきます 22

ソースコード取得 ソースコード取得には SVNを利用します 開発メンバーでない方は 下記のSVNコマンドで SVNサーバからHTTPを介した リードオンリーの ワークコピーを匿名でチェックアウトして下さい svn checkout http://blockly.googlecode.com/svn/trunk/ blockly-read-only eclipseなどのsvnクライアントを用いれば コマンドを使わずに 上記URLリポジトリから匿名でソースコード一式が取得できます 参考先 ソースコード取得説明 https://code.google.com/p/blockly/source/checkout 注意 Zipファイルでのソースコード提供サービスは未対応です 23

ソースコード取得 補足 正式開発では コンパイルを行っています Blocklyは JavaScriptで動作しているので ソースコードを改修しての直接実行も可能ですが 開発要件的には コア部のソースを圧縮するなど コンパイルが必要になっています ソースコードのルートには Makeファイルも存在しますが make環境構築について調べ切れていません (ごめんなさい) 24

ソースコード取得 補足 コントリビュートについて コントリビュートするに当たっては dept_toolsという チェックアウトや コードレビューを管理するために呼び出される スクリプト パッケージの使用が必要だそうです 詳しくは 以下のWikiページを御参照ください How to contribute to the blockly project https://code.google.com/p/blockly/wiki/contributingcode 25

ソースコード取得 補足 Blocklyソース ツリー 取得したソースコード一式のフォルダ構成は 以下のようになっていました <Blocklyソース>/core Blocklyコア機能 モジュール Blockly全体の基本機能部 language ブロック機能設定 モジュール ブロック毎の形状や役割の設定部 ブロック機能を担うcommon 各国語 (en, zh_tw)のサブフォルダを含む generator コードテキスト生成 モジュール ブロック毎のコードテキスト生成部 プログラム言語ごとのサブフォルダ (javascript python dart)を含む media エディタのリソース モジュール エディタ部のリソース apps Blocklyでできることの説明用アプリ demos Blocklyの機能紹介用サンプル エディタ部のHTML/JSも含まれる appengine Cloud Strage用のモジュール エディタ部のHTML/JSも含まれる externs 詳細不明 tests 詳細不明(テストツール ) ソースルートには Blocklyコア機能全体を圧縮した blockly_compressed.js が配置されています 26

Blockly全体構成イメージ Blocklyコア部 (core) ブロック機能設定部 (language) workspace toolbox エディタ部 (media, htmlコンテンツ) 27 コードテキスト生成部 (generator)

作成サンプルについて Blockly独自拡張のサンプルは ソースコードの demos/generatorを元に作成しています サンプルのソースコード一式は blockly_custom_sampleフォルダに収めました 改造内容が読み易いよう 実行に必要な最少限のファイル のみを配置し 改修部前後にコメントを入れたほか 実装内容についてのコメントも入れました 以降の説明では サンプルのソース内容と見比べて読み進めて下さい 28

作成サンプルについて 新規作成および改修ファイルのみの一覧 /blockly_compressed.js /demos/index.html /generator/index.html /droid.png /generators/javascript.js /javascript/playground.js /language/common/playground.js /en/_messages.js (改)圧縮の展開のみ行っています (改)サンプルへの導線改修のみ (改)エディタ部の設定処理部 toolboxで利用するブロック カテゴリの設定を含む (新)ドロイド君画像(画面表示用リソース) (改)JavaScriptコードテキスト生成の全体処理部 コード生成の初期化時や終了時の処理を含む (新)playgroundカテゴリの JavaScriptコードテキスト生成部 (新)playgroundカテゴリのブロック機能設定部 (改)ブロックに表示する文言設定(英語版) 拡張子が org のファイルは 改造前のオリジナル ファイルです 29

作成サンプルについて 独自拡張部についての説明 エディタ部の拡張 toolboxで利用するブロック カテゴリの追加と プログラム実行時の画面(playground 遊戯場)や JavaScriptのコードテキストとXMLのテキストを workspace内容(プログラム内容 ブロック構造)と 同期させて表示する画面を追加しています ここでは toolbox内容の設定や workspace内容とテキストやhtml(dom) オブジェクトを同期させる実装を行っています 30

作成サンプルについて 独自拡張部についての説明 ブロック機能設定とコードテキスト生成の追加 新規追加のカスタム ブロックとして 新規追加のカスタム ブロックとして プログラム実行時の 画面と表示物を表す playgroundという ブロック カテゴリ (JSファイル)をlanguageとgeneratorsフォルダに新設して 下記3つの ブロック項目 をカテゴリ内に設けることで 対応する3つのカスタム ブロックを新規作成しています playground JavaScript実行時の画面を表すブロック playground_droid ドロイド君を画面に表示するブロック playground_wait 処理を指定時間待機させるブロック 31

エディタ部の実装内容 toolboxで利用するブロックに関する実装 新規ブロック カテゴリ playground の ブロック(各ブロック項目)を利用する場合(part1) 対象ソース ファイル <サンプル フォルダ>/demos/generator/index.html 実装場所 head 部 実装内容 <script type="text/javascript" 省略 <script type="text/javascript" 省略 <script type="text/javascript" 省略 <script type="text/javascript" 省略 <script type="text/javascript" src="../../blockly_compressed.js"></script> src="../../language/en/_messages.js"></script> src="../../language/common/playground.js"></script> src="../../generators/javascript.js"></script> src="../../generators/javascript/playground.js"></script> 参照 Installation: Language Generators generators部の実装に関係します https://code.google.com/p/blockly/wiki/languagegenerators 32

エディタ部の実装内容 toolboxで利用するブロックに関する実装 新規ブロック カテゴリ playground の ブロック(各ブロック項目)を利用する場合(part2) 対象ソース ファイル <サンプル フォルダ>/demos/generator/index.html 実装場所 body部 実装内容 <xml id="toolbox" style="display: none"> 省略 <category name="playground"> <block type="playground"></block> <block type="playground_doroid"></block> <block type="playground_wait"></block> </category> 省略 </xml> 参照 Installation: Defining the Toolbox https://code.google.com/p/blockly/wiki/toolbox 33

エディタ部の実装内容 workspaceのブロック構造とxmlの相互同期 workspaceのブロック構造と XMLテキストを相互に同期させる実装(part1) 対象ソース ファイル <サンプル フォルダ>/demos/generator/index.html 実装場所 scriptタグ ブロック内 実装内容 ブロック構造 XMLテキスト function readxml() { 省略 var xmldom = Blockly.Xml.workspaceToDom(Blockly.mainWorkspace); 省略 xmltext = Blockly.Xml.domToPrettyText(xmlDom); //XML テキストのインデント整形を行います 省略 } 参照 Introduction (Importing and Exporting Blocks) https://code.google.com/p/blockly/wiki/installation 34

エディタ部の実装内容 workspaceのブロック構造とxmlの相互同期 workspaceのブロック構造と XMLテキストを相互に同期させる実装(part2) 対象ソース ファイル <サンプル フォルダ>/demos/generator/index.html 実装場所 scriptタグ ブロック内 実装内容 XMLテキスト ブロック構造 function switchdisplay(selectorid) { 省略 var xmldom = Blockly.Xml.textToDom(xmlText); 省略 Blockly.mainWorkspace.clear(); Blockly.Xml.domToWorkspace(Blockly.mainWorkspace, xmldom); 省略 } 35

エディタ部の実装内容 workspaceからjavascriptコードテキスト生成 workspaceのブロック構造から JavaScriptのコードテキストを生成する実装 対象ソース ファイル <サンプル フォルダ>/demos/generator/index.html 実装場所 scriptタグ ブロック内 実装内容 ブロック構造 JavaScriptコードテキスト function showcode() { var code = Blockly.Generator.workspaceToCode('JavaScript'); } 36

エディタ部の実装内容 workspace再描画 workspace内容を再描画させる実装 対象ソース ファイル <サンプル フォルダ>/demos/generator/index.html 実装場所 scriptタグ ブロック内 実装内容 function editblock() { Blockly.mainWorkspace.renderBlocks(); } 37

ブロック機能設定の実装 ブロック playground_doroid の機能設定 新規ブロック項目 playground_doroid の ブロック機能(形状含む)設定実装 (part1) 対象ソース ファイル <サンプル フォルダ>/language/common/playground.js 実装内容 // playground(遊び場)画面の doroido(アイコン表示)ブロック設定 Blockly.Language.playground_doroid = { 省略 init: function() { //ブロック色設定(引数はHSV色) this.setcolour(100); 参照 Creating Custom Blocks: Defining Blocks https://code.google.com/p/blockly/wiki/definingblocks part1からpart3までの一連の処理は 上記ドキュメントに関連しています 参照 Creating Custom Blocks: Defining a Block: Creating Mutators https://code.google.com/p/blockly/wiki/creatingmutators ここでは利用していませんが ブロック形状のユーザ変更も参照して下さい 38

ブロック機能設定の実装 ブロック playground_doroid の機能設定 新規ブロック項目 playground_doroid の ブロック機能(形状含む)設定実装 (part2) 実装内容 //作業変数の値を設定する 入力フィールド(リストボックス等)を追加 // 注 入力フィールドは 必須ではありません (指定しなくてもでも良い) this.appenddummyinput().appendtitle(blockly.lang_playground_doroid_input_icon).appendtitle(new Blockly.FieldImage('doroid.png', 36, 44)); //作業変数の値を設定する 入力ブロック行を追加 this.appendvalueinput('pos_x').setcheck(number).setalign(blockly.align_right).appendtitle(blockly.lang_playground_doroid_input_x); //作業変数の値を設定する 入力ブロック行を追加 this.appendvalueinput('pos_y').setcheck(number).setalign(blockly.align_right).appendtitle(blockly.lang_playground_doroid_input_y); 39

ブロック機能設定の実装 ブロック playground_doroid の機能設定 新規ブロック項目 playground_doroid の ブロック機能(形状含む)設定実装 (part3) 実装内容 //前ブロック受付指定(有効) this.setpreviousstatement(true); //前ブロック受付指定(有効) this.setnextstatement(true); //入力項目のインライン指定(あり) // 注 入力フィールドと入力ブロックが複数ある場合 // true 指定により それらを1行に表示します this.setinputsinline(true); //ツールチップ表示指定 // Assign 'this' to a variable for use in the tooltip closure below. var thisblock = this; this.settooltip(function() { return Blockly.LANG_PLAYGROUND_DOROID_TOOLTIP.replace('%1', thisblock.gettitlevalue('var')); }); }, 省略 }; 40

コードテキスト生成の実装 ブロック playground_doroid のコード生成 新規ブロック項目 playground_doroid の JavaScriptコードテキスト生成実装 (part1) 対象ソース ファイル <サンプル フォルダ>/generators/javascript/playground.js 実装内容 ブロック入力値の取得部 // playground(遊び場)の doroid(アイコン表示物)設定 Blockly.JavaScript.playground_doroid = function() { // ドロイドくんアイコン設定 var argument0 = Blockly.JavaScript.valueToCode(this, 'POS_X', Blockly.JavaScript.ORDER_ASSIGNMENT) '0'; var argument1 = Blockly.JavaScript.valueToCode(this, 'POS_Y', Blockly.JavaScript.ORDER_ASSIGNMENT) '0'; 省略 参照 Creating Custom Blocks: Generating Code: Operator Precedence (演算を伴う可能性のある値の優先順位指定) https://code.google.com/p/blockly/wiki/operatorprecedence 参照 Creating Custom Blocks: Generating Code https://code.google.com/p/blockly/wiki/generatingcode ここでは利用していませんが ブロック入力値の取得について上記も参照して下さい 41

コードテキスト生成の実装 ブロック playground_doroid のコード生成 新規ブロック項目 playground_doroid の JavaScriptコードテキスト生成実装 (part2) 実装内容 生成JavaScriptコードテキスト設定部 var code; code = "if (_playgroundcanvasvar_) {\n" + " var _pg_context_ = _playgroundcanvasvar_.getcontext('2d');\n" + " _pg_context_.fillstyle = _playgroundcanvasvar_.style['background-color'];\n" + " _pg_context_.fillrect(_doroidimagex_,_doroidimagey_, 36,44);\n" + " _doroidimagex_ = " + argument0 + ";\n" + " _doroidimagey_ = " + argument1 + ";\n" + " _pg_context_.drawimage(_doroidimagevar_, _doroidimagex_,_doroidimagey_, 36,44);\n" + "}\n"; return code; }; 42

コードテキスト生成の実装 多重記述抑止が必要なコード生成 Blocilyには 変数の多重宣言抑止機構が 予め提供済となっています ですが独自拡張では 当然自分での対応になります このため プログラム全体の初期処理と終了処理に パッチをあて多重記述を抑止するフラグの初期化と 実行済時の初期化コード対応処理を組み込みました (この手法は ダーティハックに相当します) 参照 Creating Custom Blocks: Generating Code: Caching Arguments (変数の多重宣言抑止記述あり) https://code.google.com/p/blockly/wiki/cachingarguments 43

コードテキスト生成の実装 多重記述抑止が必要なコード生成 実行時のフラグON処理と 多重記述を抑止するフラグの定義および初期化コードの定義 対象ソース ファイル <サンプル フォルダ>/generators/javascript/playground.js 実装内容 実行済フラグ設定と 初期化コード指定 // playground(遊び場)の doroid(アイコン表示物)設定 Blockly.JavaScript.playground_doroid = function() { 省略 Blockly.JavaScript.playground_doroid.isExist = true; 省略 }; // doroid 定義確認フラグ Blockly.JavaScript.playground_doroid.isExist = null; // doroid 初期設定コード Blockly.JavaScript.playground_doroid.initCode = "var _doroidimagevar_ = new Image();\n" + "_doroidimagevar_.src = 'doroid.png';\n" + "var _doroidimagex_ = 0;\n" + "var _doroidimagey_ = 0;"; 44

コードテキスト生成の実装 多重記述抑止が必要なコード生成 プログラム全体初期化処理での 多重記述抑止フラグの強制初期化対応 対象ソース ファイル <サンプル フォルダ>/generators/javascript.js 実装内容 実行済フラグの強制初期化 Blockly.JavaScript.init = function() { 省略 //2013/03/08 my add line start //playground 利用フラグを強制初期化 Blockly.JavaScript.playground.isExist = false; //doroid_doroid 利用フラグを強制初期化 Blockly.JavaScript.playground_doroid.isExist = false; //doroid_wait 利用フラグを強制初期化 Blockly.JavaScript.playground_wait.isExist = false; //2013/03/08 my add line end }; 45

コードテキスト生成の実装 多重記述抑止が必要なコード生成 プログラム全体終了処理での 多重記述抑止フラグON時の初期化コード強制追加対応 対象ソース ファイル <サンプル フォルダ>/generators/javascript.js 実装内容 実行済時の初期化コード強制追加 Blockly.JavaScript.finish = function(code) { 省略 //2013/03/08 my add line start //playground が利用されていれば definitions(定義物)に playground の設定を強制追加 if(blockly.javascript.playground.isexist === true){ Blockly.JavaScript.definitions_['playground'] = Blockly.JavaScript.playground.initCode; } //playground_doroid が利用されていれば definitions(定義物)に playground_doroid の設定を強制追加 if(blockly.javascript.playground_doroid.isexist === true){ Blockly.JavaScript.definitions_['playground_doroid'] = Blockly.JavaScript.playground_doroid.initCode; } //2013/03/08 my add line end 省略 }; 46

サンプル エディタの実行 サンプル作成しました カスタム ビジュアルエディタ実装は 以上のようになっています 簡単な拡張ですが カスタム ブロック追加や XMLテキストの貼付によるプログラミング済みの ブロック構造の再現もできるようになっています プログラム済みのサンプルXMLを張り付けて どのような動きをするのか確認してみましょう 47

サンプル エディタの実行 サンプル一式が含まれたフォルダ直下の droid_hello_world.xml ファイルを テキストエディタで開いてください そして全テキストをコピーして [Read/Write Block XML]をクリック XMLテキストエリアにコピーを貼付てから [Run JavaScript]をクリックしてみて下さい 48

サンプル エディタの実行 いかがでしたか サンプル内容は つまらないものですが 独自拡張ブロックも下手なりに作れたのです Blocklyの独自拡張は 手の届かないものではない と思ってくださいましたら幸です 49

Google Blockly で ビジュアルプログラムを楽しむ ご清聴 ありがとうございました 50