SlideShare uma empresa Scribd logo
1 de 35
Baixar para ler offline
Movable Type 
プラグイン制作入門以前 
hiroshi yamato / Alliance Port, LLC 
Board Director, Business Development
自己紹介 
• 大和比呂志 
• 合同会社アライアンス・ポー 
ト:共同創業者、取締役事業 
開発マネージャ 
• なんでもやるエンジニア 
• 元シックス・アパートの社員 
番号2番
お断り 
• このプレゼンだけではプラグインを書けるよう 
にはなりません。 
• ゴールは「プラグインを書く前に知っておくと良 
いことを共有しておこう」です。 
• 野田さんはこのセッション中は仕事しててくだ 
さい。
プラグイン書いたこと 
ありますか?
「そもそもプログラム書いたことないよ」 
「でもMTタグなら<mt:if>も<mt:for>も 
<mt:loop>」も使ったことあるでしょ?」
そんな人が対象です
結論:「誰でも書けます」 
(やる気があれば)
道具 
• Perlについての基礎的な知識 
• テキストエディタ
Perlについて 
• 理解度的には「初めてのPerl」(488ページ)と「続・初め 
てのPerl」(432ページ)あたりまで知ってれば大体困りま 
せん 
• でも、社会人が仕事と平行して勉強するの大変ですよ 
ね、、、オライリーの本読み難いし、、、2ヶ月だと一 
日15ページノルマ、、、 
• なのでいきなり仕事にしてしまいました。ほんとマジ死 
ぬかとおもった、、、
基礎的なPerl力を付けるには 
1. http://dotinstall.com/lessons/basic_perl 
2. http://yusukebe.com/archives/20130315/ 
104846.html (ページ数が多くない!! 入門すると 
きには超大事!!) 
3. ここまでやれば「続・初めてのPerl」は読みす 
すめられるので常に鞄に入れておきましょう
(誤解を恐れずに言う) 
MTの正体
• MTが起動するとメモリにハッシュ配列を作ります。 
• そのハッシュ配列の中に「設定」だとか「ユーザー情報」だとか管理 
画面に設定されてるような情報を格納します。 
• その格納されたハッシュ配列が簡単に言うとMTです (厳密に言えば 
mt.cgiですが)。 
• プラグインではそのハッシュ配列の情報を利用したり書き換えたりし 
ます。 
• MTオブジェクトと呼ばれるものは大体そんな感じです。 
• なのでPerlの勉強するときは配列/ハッシュ配列の操作や理解を深めて 
おくと吉です!!!
実際に見てみよう
MTのプラグインで 
出来ること
• オレオレMTタグが作れます (ブロックタグ、ファン 
クションタグ、グローバル・モディファイア等々) 
• 管理画面が拡張できます (オレオレ管理画面も作れ 
ます) 
• MTの機能をつかったCGIアプリケーションが作れ 
ます(メールフォームetc) 
• オレオレAPIが作れます (new!!)
プラグイン制作の「地図」
大きくわけて2つ 
• config.yamlに「プラグインで利用するイベント 
を登録」 
• perlで「イベントに対応した処理を記述」
操作/結果mt.cgi イベントプラグイン 
mt.cgiが起動 
イベントが発生 
対応した処理を呼ぶ 
処理結果を戻す 
出力 
処理 
mt.cgiが終了 
コールバック 
フックポイント
【朗報】
参考になる公式の 
ドキュメントがあります!!
• https://movabletype.org/documentation/ 
developer/ (英語のドキュメント。下記の日本語 
に比べるとこちらのほうがくわしい) 
• https://github.com/movabletype/Documentation/ 
wiki/Japanese-developer-guide (日本語。step 
by stepで書かれているのでとても良いです) 
• DataAPIとかは割愛しますが有ります。
「よしわかった! 
作ってみよう!」
「まぁ、待て」
mtpluginstarter 
• ゼロから作らない。 
• 最新の機能はフォローされてないけど全然充分 (branches 
の中にあるmt-plugin-start_yaml.plを使いましょう) 
• http://sourceforge.jp/projects/mtpluginstarter/ 
• インストールとか使いかたは今日はフォローしません。 
こういうものがある、ということだけ持ち替えってくだ 
さい!!
mtpluginstarterで出来ること 
←名前を決めれる 
←ドキュメントの雛形を用意してくれる 
←MTオブジェクトの拡張の雛形を用意してくれる 
←プラグインの設定のUIとサブルーチンを用意してくれる 
←スケジュールタスクのイベント登録とサブルーチンを用意してくれ 
る 
←管理画面の拡張のイベント登録とサブルーチンを用意してくれる 
←MTタグのイベント登録とサブルーチンを用意してくれる 
←グローバル・モディファイアのイベント登録とサブルーチンを用意 
してくれる 
←アプリケーション・コールバックのイベント登録とサブルーチンを 
用意してくれる 
←管理画面の機能の追加とそのUIの雛形を用意してくれる 
Your new plugin settings are… 
Plugin Name : test 
include documentation link : yes 
using MT::Object : yes 
using config template : yes 
using scheduled tasks : yes 
using transformer : yes 
using template tags : yes 
using text filters : yes 
using app callbacks : yes 
using methods : yes
時間があればデモ
人のcodeを読んでみよう 
https://github.com/allianceport/OneTimeTask 
https://github.com/allianceport/RebuildOncetimePerDay 
https://github.com/movabletype/Documentation/wiki/ 
Japanese-plugin-dev-2-1
まとめ
• Perlは my ($app, $hoge) = @_; ってのを見て意味が解る程 
度で大体オーケー (あとはグーグル先生がなんとかしてくれ 
ます) 
• MTプラグインは「イベントとその処理」を記述するだけ。 
作法を覚えたらそれでおしまい。 
• できることは「イベントに登録できること」だけ (実際は他 
にもあります。プラグインの設定とか) 
• 人のコードが読めるようになれば理解は急激に深まります 
(最終的にはMTのコードを読めるようになります)
だれでも作れます!!
この資料でフォローさ 
れていないこと
• デバッグについて: 
https://github.com/movabletype/Documentation/wiki/Japanese-plugin-dev-2-4 
• プラグイン設定について: 
https://github.com/movabletype/Documentation/wiki/Japanese-plugin-dev-3-1 
• MTオブジェクトについて: 
https://github.com/movabletype/Documentation/wiki/Japanese-plugin-dev-3-4 
http://www.sixapart.jp/movabletype/manual/object_reference/ 
• DataAPIについて: 
https://github.com/movabletype/Documentation/wiki/Movable-Type-Data-API 
• リスティング・フレームワークについて: 
https://github.com/movabletype/Documentation/wiki/Ja-dev-listing-framework-overview 
• などなど
One more thing 
(言ってみたかった!!)
• 先程紹介したmtpluginstarterですが、ライセンスが変 
更になります (メンテや開発に参加も出来るかも!!)。 
• シックス・アパート高山さんが「toolsの下に入れら 
れるように検討します!!」と言ってくれました!! (そ 
うなればMTのパッケージに含まれて、より使いやす 
く!!) 
• なので懇親会では最低一人一回は高山さんに「(tools 
に)入れてください!!」ってお願いしましょう!!
ありがとうございました!

Mais conteúdo relacionado

Mais procurados

続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j
Toshiaki Maki
 
ゲームエンジンとMVC
ゲームエンジンとMVCゲームエンジンとMVC
ゲームエンジンとMVC
AimingStudy
 
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへ
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへアプリのテストを書かなければならないと分かっているけども、書けていない人たちへ
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへ
Tomohiro Yamasaki
 

Mais procurados (20)

20120915 Pythonは本当にBlenderの役に立っているか?
20120915 Pythonは本当にBlenderの役に立っているか?20120915 Pythonは本当にBlenderの役に立っているか?
20120915 Pythonは本当にBlenderの役に立っているか?
 
意外と簡単 プラグイン開発超入門
意外と簡単 プラグイン開発超入門意外と簡単 プラグイン開発超入門
意外と簡単 プラグイン開発超入門
 
続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j
 
ゲームエンジンとMVC
ゲームエンジンとMVCゲームエンジンとMVC
ゲームエンジンとMVC
 
GUI Test is (not) necessary
GUI Test is (not) necessaryGUI Test is (not) necessary
GUI Test is (not) necessary
 
マークアップの作業効率をあげよう!
マークアップの作業効率をあげよう!マークアップの作業効率をあげよう!
マークアップの作業効率をあげよう!
 
レスポンシブ対応 をサポートするプラグイン
レスポンシブ対応 をサポートするプラグインレスポンシブ対応 をサポートするプラグイン
レスポンシブ対応 をサポートするプラグイン
 
簡単なプラグインの管理方法とプラグインのご紹介
簡単なプラグインの管理方法とプラグインのご紹介簡単なプラグインの管理方法とプラグインのご紹介
簡単なプラグインの管理方法とプラグインのご紹介
 
HTML5 アプリ開発
HTML5 アプリ開発HTML5 アプリ開発
HTML5 アプリ開発
 
DjangoでさくっとWeb アプリケーション開発をする話
DjangoでさくっとWeb アプリケーション開発をする話DjangoでさくっとWeb アプリケーション開発をする話
DjangoでさくっとWeb アプリケーション開発をする話
 
CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話
CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話
CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話
 
Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!
 
mypy - 待望のPython3.9型ヒント対応
mypy - 待望のPython3.9型ヒント対応mypy - 待望のPython3.9型ヒント対応
mypy - 待望のPython3.9型ヒント対応
 
Laravel管理画面ジェネレーター
Laravel管理画面ジェネレーターLaravel管理画面ジェネレーター
Laravel管理画面ジェネレーター
 
チームビルディング~本物のチームを作る方法~
チームビルディング~本物のチームを作る方法~チームビルディング~本物のチームを作る方法~
チームビルディング~本物のチームを作る方法~
 
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへ
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへアプリのテストを書かなければならないと分かっているけども、書けていない人たちへ
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへ
 
2479
24792479
2479
 
第1回 初心者向け Ruby on Rails 勉強会 in 門前仲町
第1回 初心者向け Ruby on Rails 勉強会 in 門前仲町第1回 初心者向け Ruby on Rails 勉強会 in 門前仲町
第1回 初心者向け Ruby on Rails 勉強会 in 門前仲町
 
業務系WebアプリケーションがStrutsから旅立つ日
業務系WebアプリケーションがStrutsから旅立つ日業務系WebアプリケーションがStrutsから旅立つ日
業務系WebアプリケーションがStrutsから旅立つ日
 
うちのRedmineの使い方(2)
うちのRedmineの使い方(2)うちのRedmineの使い方(2)
うちのRedmineの使い方(2)
 

Semelhante a MTプラグイン入門以前

俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
taiju higashi
 
運用管理を楽にしたいという話
運用管理を楽にしたいという話運用管理を楽にしたいという話
運用管理を楽にしたいという話
Hisashi HATAKEYAMA
 
Windowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようWindowsにpythonをインストールしてみよう
Windowsにpythonをインストールしてみよう
Kenji NAKAGAKI
 

Semelhante a MTプラグイン入門以前 (20)

俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
 
プランナーがPR駆動してみた話
プランナーがPR駆動してみた話プランナーがPR駆動してみた話
プランナーがPR駆動してみた話
 
いろいろ見せますLord of Knightsのクライアント開発事例紹介
いろいろ見せますLord of Knightsのクライアント開発事例紹介いろいろ見せますLord of Knightsのクライアント開発事例紹介
いろいろ見せますLord of Knightsのクライアント開発事例紹介
 
運用管理を楽にしたいという話
運用管理を楽にしたいという話運用管理を楽にしたいという話
運用管理を楽にしたいという話
 
2015 summercamp 10
2015 summercamp 102015 summercamp 10
2015 summercamp 10
 
connpass特徴と開発の流れ
connpass特徴と開発の流れconnpass特徴と開発の流れ
connpass特徴と開発の流れ
 
Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践
 
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
 
Chainerで学ぶdeep learning
Chainerで学ぶdeep learningChainerで学ぶdeep learning
Chainerで学ぶdeep learning
 
DartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみようDartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみよう
 
すごいタスク管理(仮)
すごいタスク管理(仮)すごいタスク管理(仮)
すごいタスク管理(仮)
 
Windowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようWindowsにpythonをインストールしてみよう
Windowsにpythonをインストールしてみよう
 
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
 
20200817 プログラミングの基礎 その2
20200817 プログラミングの基礎 その220200817 プログラミングの基礎 その2
20200817 プログラミングの基礎 その2
 
俺とGitHub
俺とGitHub俺とGitHub
俺とGitHub
 
分報PDCA
分報PDCA分報PDCA
分報PDCA
 
Introduction to NetOpsCoding#2
Introduction to NetOpsCoding#2Introduction to NetOpsCoding#2
Introduction to NetOpsCoding#2
 
Gcpug begginers #1LT startup scriptとshutdown script
Gcpug begginers #1LT startup scriptとshutdown scriptGcpug begginers #1LT startup scriptとshutdown script
Gcpug begginers #1LT startup scriptとshutdown script
 
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
 
Django で始める PyCharm 入門
Django で始める PyCharm 入門Django で始める PyCharm 入門
Django で始める PyCharm 入門
 

MTプラグイン入門以前