Upload
s-yamaoka
View
809
Download
5
Embed Size (px)
Citation preview
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
開発初心者のためのMoodleプラグインの開発と利用
Time: 2015.2.21 09:30-11:00 Room: 5405
株式会社テクノウォーカー 山岡 茂治
7th Conference for Moodle Teachers and Developers
Moodle moot japan 2015
Page. 1
Part1:Moodleプラグイン開発の概要(40分)
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
Page. 2
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
発表内容 –Agenda- ※2部構成40分+40分
• Part1:Moodleプラグイン開発の概要(40分)
– はじめに(プラグイン開発について)• Moodleのプラグイン開発についての概要と流れ
– XAMPP、エディタ、DBツールを使った開発環境の整備• Moodleの開発環境を無償のツールで揃える方法
– PHPプログラミング基礎の基礎• 初心者が最低限知っておくPHPの書き方、デバッグの仕方
– プラグインの開発方法• プラグインの仕組みと構成、開発の手順を紹介
– プラグイン開発例(既存ブロックのコピー)• HTMLブロックをコピーし、オリジナルのブロックを作成
Page. 3
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
発表内容 –Agenda- ※2部構成40分+40分
• Part2 : 各種プラグインの開発例(40分)
– ブロック開発のポイント• Part1に続き、ブロック開発に必要なポイントの紹介
– テーマの開発とポイント• Cleanテーマをコピーし、オリジナルを作成
テーマ開発の流れと開発に必要なポイントを紹介
– 活動モジュールの開発とポイント• モジュールテンプレートをコピーし、オリジナル「15パズル」を作成
活動モジュール開発の流れと必要なポイントを紹介
– まとめ・質疑応答• 弊社オリジナルの開発事例の紹介(ローカルプラグイン等)
• まとめと質疑応答
Page. 4
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
■はじめに
moodle moot 2014 Okinawa に引き続き発表をさせて頂きます。
前回は、弊社サイトや事例を中心に紹介しましたが、今回はMoodleの
プラグイン開発に関する仕組みや開発手順の紹介です。
■開発をするにあたって必要なこと
① Moodleに関する基礎知識(コースやモジュール、ユーザーなどの概念)
② HTMLおよびPHP(プログラミング)の知識
③ 開発をするための環境・ツールの用意
④ やってみようという好奇心・やらなきゃいけない状況に追い込む
本日の発表では、プログラミングの知識が無くてもプラグイン開発の第一歩を踏み出せることが目標です
Part1:Moodleプラグイン開発の概要
1. はじめに(プラグイン開発について)①
Page. 5
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
■Moodleの開発者向け情報
・Moodle.orgに(昔より)充実した情報 (但し英語です)
https://docs.moodle.org/dev/Main_Page
・弊社Moodle情報サイトにも今後開発者向け情報を掲載予定です。
http://www.twalker.co.jp/moodle/
Part1:Moodleプラグイン開発の概要
1. はじめに(プラグイン開発について)②
ページには以下の内容が掲載●Overview
概要やロードマップなどの情報●Plugin development各種プラグイン開発の情報
●Core APIsMoodleの内部APIについての情報
●Guidelines開発についてのガイドライン
●Developer tools開発ツールの紹介等
●ProjectsMoodleの特定分野に関するプロジェクト
Page. 6
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
■開発をするための環境1 Moodle本体の用意
当然ですが、Moodle本体が必要です。
Moodle本体を動かすには「Apache・PHP・MySQL」も必要です。
⇒ Moodle.org から XAMPP+Moodleをダウンロード
Part1:Moodleプラグイン開発の概要
2. XAMPP、エディタ、DBツールなどの開発環境の整備①
ダウンロード&Moodleセットアップ手順
① Moodle.orgの「Downloads」から、画面左下の「Latest release」をクリック
② 更に「Moodle installer package for xxx」をクリック
③「Download.zip」から、ZIPファイルをダウンロード
Page. 7
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
■開発をするための環境1 Moodle本体の用意(続き)
Part1:Moodleプラグイン開発の概要
2. XAMPP、エディタ、DBツールなどの開発環境の整備②
Page. 8
ダウンロード&Moodleセットアップ手順
④ デスクトップやCドライブへZIPファイルを解凍
⑤ 解答したフォルダ内の Start Moodle.exe をWクリック
⑥ ブラウザを起動し http://localhost/ (またはlocalhost:8080)と入力
⑦ Moodleのセットアップを実行
※⑤にて、既に80番ポートが他のアプリケーション等で起動できない場合はApacheの動作ポートを80から8080等に変更します。Server\Apache\Conf\httpd.conf をメモ帳で編集し58行目付近のListen 80 を Listen 8080 に変更・保存します
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
■開発をするための環境2 エディタ・DBツールの用意
高価な開発ツールもありますが、最初は以下のものがあれば十分です
●テキストエディタ
「EmEditor」 https://jp.emeditor.com/
「さくらエディタ」http://sakura-editor.sourceforge.net/
⇒ メモ帳だと少し物足りないが、色が付く程度の機能があれば良い
Part1:Moodleプラグイン開発の概要
2. XAMPP、エディタ、DBツールなどの開発環境の整備③
Page. 9
メモ帳で config.php を開いたところ
EmEditorで config.php を開いたところ
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
■開発をするための環境2 エディタ・DBツールの用意
高価な開発ツールもありますが、最初は以下のものがあれば十分です
●DBツール
「A5:SQL Mk-2」http://www.wind.sannet.ne.jp/m_matsu/developer/a5m2/
⇒ matsubara様が開発・公開している無償のツールです。
リモートDB管理(SSH転送)、ER図の作成、SQLや定義書の生成など
Part1:Moodleプラグイン開発の概要
2. XAMPP、エディタ、DBツールなどの開発環境の整備④
Page. 10
※弊社の場合は XAMPP+Visual Studio+PHP拡張機能とEmEditor、A5:SQL Mk-2、Subverion(ソース管理)にて開発をしています
ホームページ(ソフト本体はVectorからダウンロード)
開発環境のMoodleDBに接続し、Userテーブルを編集している画面
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
■PHPのプログラミングについて
MoodleはPHPという言語で作られています。
PHPやプログラミングを知らなくても、以下のことだけ知っておく。
1)PHPの記述方法、コメント
⇒ プログラムの中身は知らなくても、書き方は理解しておきます
2)変数とは
⇒ 何らかのデータが入った箱(変数)の概念について理解しておく
3)echo と exit、var_dump
⇒ Moodleの動きを知るためで必要(途中で中身を見る・止める)
※もちろん、本格的に開発をするなら覚える必要はあります
( PHPについては、市販のテキストや講習会なども豊富です)
Part1:Moodleプラグイン開発の概要
3. PHPプログラミング基礎の基礎①
Page. 11
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
1)PHPの記述方法・コメント
●ファイル名は xxxxx.php とする
例)hello.php ⇒ PHPのプログラム(かもしれない)
●プログラムは <?php … ?> の … の部分に書く
<?php echo “こんにちは”; ?>
<?php
…(いろいろなプログラム処理)
?>
●HTML(ホームページの記述方法)と混在して記述する
例)<h1><?php echo $title; ?></h1>
● // または /* ~ */ でコメント
(コメント部分はプログラムは実行されない)
例)// echo “こんにちは”; ⇒ 実行されない
Part1:Moodleプラグイン開発の概要
3. PHPプログラミング基礎の基礎②
Page. 12
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
2)変数とは
・データを格納する「箱」 数学の方程式 x=1 と同じ、上書きされる
・PHPでは $名前 と指定する
・変数の中には、文字列、数値、日時、オブジェクト(機能の集まり)
などが格納される(これらをデータ型という)
Part1:Moodleプラグイン開発の概要
3. PHPプログラミング基礎の基礎③
Page. 13
ID: 2
Lastname: 山田
Email: xxxx@xxxxx
$count
$count = 1
1
$count
$count = 3
31
後の処理で上書きされる
$count = $count + 4
3 3 + 4
$count
上書きの前に、変数の値を足しこんで格納(=7)
$count
1.23
$text
“あいう”
$date
“2014/4/1
12:34:56”
$USER
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
3)echoとexit、var_dump …プログラムのデバッグ(調査)に必要
● 中身を画面に表示させる
echo 文字列; または echo $変数;
● プログラムをその場で終了させる
exit; (と書くだけ)
●とにかく何が入っているかを見る
var_dump($変数);
Part1:Moodleプラグイン開発の概要
3. PHPプログラミング基礎の基礎④
Page. 14
例)
echo “<hr>”;
var_dump($PAGE);
exit;
/index.php の最終行 echo $OUTPUT->footer(); の処理の上に$PAGE(ページ情報の格納した変数)に関する情報を出力した例
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
■プラグインの開発方法
一般的?には以下のどちらかからスタート
① Moodle.org からテンプレートをダウンロードして利用する(第二部)
⇒ まっさらな状態から開発するため、手間はかかるが、
その分、自由に作成しやすい
② 既存のモジュールをコピーしてオリジナルにする(第一部)
⇒ 各種処理が自前で実装しなくて作業量が減るがモジュール名の
書き換え作業の漏れなども発生しやすい
■開発の流れ
1)目的・機能を決定し、プラグインの種類を決める
2)必要なデータ構造を考える(独自にデータを格納する場合)
続く
Part1:Moodleプラグイン開発の概要
4. プラグインの開発方法①
Page. 15
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
■開発の流れ(続き)
3)プラグインのテンプレートまたは既存のプログラムをコピー
4)自動インストール用のデータ構造定義ファイル(XML)を用意する
5)プラグイン内のファイル名やプログラムの関数名などを書き換える
6)version.phpやlang/プラグイン名.phpなどの基本情報を書き換える
7)一旦Moodleへプラグインを配置し、正常登録できるか確認する
8)各プラグインの主要処理を記述する
9)ブラウザでMoodle上に配置されたプラグインの動作を確認する
10)8~9を繰り返しで完成させたら、7~9の動きをテスト
※通常のソフトウェア開発会社の場合は、工程管理の上で
要件定義書や設計書の作成など、体系的に組織して開発をお
こなっています。
Part1:Moodleプラグイン開発の概要
4. プラグインの開発方法②
Page. 16
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
■Moodleのプラグインの種類(一例)
サイト管理 – プラグイン – プラグイン概要
※その他、数多くのプラグインが定義されている
開発するプラグインが、どの種類に該当するかによって、
ルール(規約)が異なります。プラグインの目的・機能を
明確にし、プラグインの種類に合わせて開発をおこないます
Part1:Moodleプラグイン開発の概要
4. プラグインの開発方法③
Page. 17
種類 内容
ブロック 画面左右に配置し、補助的な機能を提供
テーマ Moodle画面のデザインを提供する
活動モジュール コース内のコンテンツを提供する
ローカルプラグイン 独自の機能などを提供する
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
■Moodleの主要APIと機能
Moodleの各種機能をプログラムから利用 ⇒ Moodle Core API
良く利用する主要API https://docs.moodle.org/dev/Core_APIs
Part1:Moodleプラグイン開発の概要
4. プラグインの開発方法④
Page. 18
APIの種類 内部表記 内容
権限チェック ログインや権限のチェック機能など
データ操作 $DB データベースの内容の取得・追加・更新・削除の機能
ファイル操作 ($file) 保存されたファイルの取得やファイルの格納
ログ操作 ($event) Moodleログの入出力機能
ページ $PAGE ヘッダーやフッターの設定をおこなう
出力 $OUTPUT ヘッダーやコンテンツの出力(レンダリングされる)
言語定義 $string[‘’] 言語ごとの表記定義
設定 $CFG Moodle本体やプラグイン設定の取得と更新
ユーザー $USER ログインしているユーザーの情報
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
■ $CFG(表記固定) … Moodle本体やプラグイン設定の取得と更新
●$CFG->設定名 にてMoodleの設定が取得できる
例)echo $CFG->wwwroot; // MoodleのURL(http://localhost 等)
●各種モジュールの設定は、get_configを使って取得可能
$設定値 = get_config(モジュール名, 設定名);
●各種モジュールの設定は、set_configを使って設定可能
set_config(設定名, 初期値, モジュール名);
■ $USER(表記固定) … ログインしているユーザーの情報●ログインしているユーザーのプロファイル情報を取得できる
$USER->id … ログインしているユーザーの内部ID
$USER->username … ユーザーのログイン名
$USER->preference … パスワード更新日時、ログイン失敗回数など
それぞれ困ったら var_dump で中身を探ってみると良いかも
※function ~ の中で使うには global $CFG, $USER の宣言が必要
Part1:Moodleプラグイン開発の概要
4. プラグインの開発方法⑤
Page. 19
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
■ $PAGE(表記固定) … ヘッダーやフッターの設定をおこなう
●ページ情報の設定例
$PAGE->set_title(“ページタイトル”) … ページのタイトルを変更
$PAGE->set_pagelayout(“standard”) … テーマのレイアウトを変更
$PAGE->requires->js(“xxxxx.js”) … 独自のJSファイルをセット
■ $OUTPUT(表記固定) … ヘッダーやコンテンツの出力等
●Moodleで独自ページを生成する場合(ローカルプラグイン等)
echo $OUTPUT->header();
echo “HTMLなどのコンテンツ本体”;
echo $OUTPUT->footer();
※$PAGEや$OUTPUTは通常のプラグイン開発では
あまり意識しないことが多いです。独自のページを作る
場合などに用います。
Part1:Moodleプラグイン開発の概要
4. プラグインの開発方法⑥
Page. 20
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
■ $DB(表記固定) … データベース(表)のデータの取得や更新
●データの取得(1件)
$結果 = $DB->get_record(モジュール名, 取得条件);
例)$course = $DB->get_record('course', array('id'=>2));
●データの取得(複数)
$結果 = $DB->get_records(モジュール名, 取得条件, 並び順);
●データの追加・更新・削除
$登録後ID = $DB->insert_record(モジュール名, $変数)
$DB->update_record(モジュール名, $変数)
$DB->delete_records(モジュール名, 条件)
例)$id = $DB->insert_record('book', $book);
●SQLの実行
$DB->execute(“SQL文”);
Part1:Moodleプラグイン開発の概要
4. プラグインの開発方法⑦
Page. 21
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
■Moodleの主要関数Moodle Core APIに含まれており、どこからも利用できる関数
良く利用する主要関数
●ログインチェック
require_login(); // 未ログインの場合にログインページへ
●セッションチェック
require_session(); // 想定されている操作か調べる(入力フォーム等)
●値(ユーザー入力値等)の取得
$結果 = required_param(名前, 値の種類); // 失敗時エラー
$結果 = optional_param(名前, 既定値, 値の種類); // 失敗時既定値
例)
$id = required_param(“id”, PARAM_INT);
$name = optional_param(“name”, PARAM_RAW);
echo $id;
echo $name;
※他にも多くの関数や機能がありますが、本日はここまで。
Part1:Moodleプラグイン開発の概要
4. プラグインの開発方法⑧
Page. 22
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
■既存モジュールのコピーからブロックモジュールを作ってみる
簡単そう?(失礼!)なHTMLモジュールをコピーして作成
(ブロックのHTMLモジュールは実装も分かりやすく良い手本)
【オリジナルモジュールへの手順】
1)ブロックモジュール「html」をコピーして「hello」にする
2)モジュール名「html」の記述をすべて hello に変更する
3)ファイル名 block_html を全て block_hello に変更する
4)(大変なので)余計なファイル・コードを消す
5)MoodleのBlocksフォルダにコピーする
6)管理者にてMoodleにログイン、プラグインのインストール
7)最低限の動作を確認できたら、PHPのコードを記述
8)完成!
それでは実際にやってみます。
Part1:Moodleプラグイン開発の概要
5. プラグインの開発例(ブロックモジュール)①
Page. 23
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
■手順1)「html」をコピーして「hello」にする
■手順2)「html」の記述をすべて hello に変更
■手順3)ファイル名 block_html を全て block_hello に変更
■手順4)(大変なので)余計なファイル・コードを消す
Part1:Moodleプラグイン開発の概要
5. プラグインの開発例(ブロックモジュール)②
Page. 24
・x_html_x.php などのファイル名をすべて x_hello_x.phpにする
・Backup、DB、Testsフォルダを削除
・PHPプログラムの html を hello に書き換える(エディタの一括置換)
Langフォルダ以外削除ファイル名を変更
フォルダをコピーし、リネームする
エディタの置換機能でhtml ⇒ hello へ
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
■手順5)MoodleのBlocksフォルダにコピーする
■手順6)管理者にてMoodleにログイン、プラグインのインストール
■手順7)最低限の動作を確認できたら、PHPのコードを記述
■手順8)完成!
Part1:Moodleプラグイン開発の概要
5. プラグインの開発例(ブロックモジュール)③
Page. 25
・Blocksフォルダに「hello」を戻す
・管理者でログインするとプラグインのインストール画面が表示される。プラグインをインストール。
・あいさつプラグインを配置してみる(エラーでない)
・block_hello.php内のget_contentsプログラムを修正
MoodleのBlocksフォルダにコピー
「Moodleデータベースを更新」を押してインストールする
ホームに「あいさつ」を配置してみる
block_hello.phpの80行目付近に以下の行を追加global $USER;$this->content->text = “こんにちは $USER->username さん!”;
オリジナル「あいさつ」ブロックの完成!
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
Page. 26
7th Conference for Moodle Teachers and Developers
Moodle moot japan 2015
■参考出典元・著作物利用
● Moodle.org(Moodle公式サイト)http://moodle.org/
ダウンロード、開発者向け情報を主に紹介。
● EmEditor(テキストエディタ)https://jp.emeditor.com/
Moodle開発ツールとして紹介。弊社で利用しているテキストエディタです。
● さくらエディタ(テキストエディタ)http://sakura-editor.sourceforge.net/
Moodle開発ツールとして紹介。弊社で利用しているテキストエディタです。
● A5:SQL Mk-2(matsubara様)
http://www.wind.sannet.ne.jp/m_matsu/developer/a5m2/
Moodle開発ツールとして紹介。弊社で利用しているDB設計・監理ツールです。
● いらすとや様(かわいいフリー素材集) http://www.irasutoya.com/
京都・金閣寺のかわいいイラストをお借りしました。
● 甘茶の音楽工房様 http://amachamusic.chagasi.com/
スライドパズルの音楽に「小さなおもちゃ箱」「チョコレート大作戦」を
お借りしました。
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
Page. 27
内容に関するお問い合わせは、以下へお願い致します。
moot期間中は展示ブースにおります。お気軽にお声をおかけください。
ご静聴ありがとうございました
株式会社テクノウォーカー
担当: システム企画部 山岡 茂治
電話: 03-5155-1830(東京) 052-453-3393(名古屋)
メール: [email protected]
テクノウォーカーHP: http://www.twalker.co.jp
Moodle情報サイト: http://www.twalker.co.jp/moodle/
7th Conference for Moodle Teachers and Developers
Moodle moot japan 2015
Techno Walker Inc. All rights reserved. 文書・画像等の無断使用・転載を禁止します。
7th Conference for Moodle Teachers and Developers
Page. 28