プラグイン作者脳に 
なろう 
{ 
実案件で学ぶプラグイン開発フロー 
@takeyuweb 
竹内雄一Yuichi Takeuchi 
MTDDC Meetup TOKYO 2014
• プログラマ向けの話をし 
ます。 
• プラグイン作成”入門”的 
な内容ではありません。 
• 実案件でプラグインを 
作ったときの作業フロー 
についてお話しします。 
このセッションについて
 自己紹介 
 プラグインについて 
 プラグイン作成の動機 
 要件を固める 
 目処を立てる 
 実装する 
 デモ 
 TODO(時間があれば) 
Agenda
 自己紹介 
 プラグインについて 
 プラグイン作成の動機 
 要件を固める 
 目処を立てる 
 実装する 
 デモ 
 TODO(時間があれば) 
Agenda
 タケユー・ウェブ(2008~) 
 フリーWebエンジニア 
 Rails / MT / AngularJS / Linux / 
AWS etc… 
 MT東京 
 Ruby好き 
 Lancers認定ランサー 
 2014.4~さいたま市 
↑週3ぐらいでいます。 
竹内雄一@takeyuweb
 MTプラグイン開発経験 
 たぶん60個ぐらい 
 業務(非公開) 
 趣味 
 KetaiPost (2010) 
 初プラグイン 
 携帯メール投稿 
 息子の成長記録 
竹内雄一@takeyuweb
 自己紹介 
 プラグインについて 
 プラグイン作成の動機 
 要件を固める 
 目処を立てる 
 実装する 
 デモ 
 TODO(時間があれば) 
Agenda
 できること、種類からみた分類 
 ある処理に別の処理を挟む「コールバック」 
 管理画面を変更「トランスフォーマー」 
 テンプレートタグ 
 バッチ処理 
 DataAPI拡張 
 MTフレームワーク独自アプリ 
などなど… 
大抵のことはがんばればできます。 
プラグインについて
学習資料① 
 Movable Type 開発者向 
けガイド 
 GitHubにある 
 詳しい 
 基本的なことはここで 
写経してればOK
学習資料② 
 Movable Typeプラグイ 
ン開発入門 
 MT4の本だけどMT6で 
も基本は同じ 
 私も買いました。
学習資料③ 
 Movable Type 
Developer’s Guide 
Volume 1 
 MT4の本だけどMT6で 
も基本は同じ 
 私も買いました。
 ソースコード 
 MT本体 
 今でもよく読む、今日も読む 
 公開されている他のプラグイン 
学習資料④
 自己紹介 
 プラグインについて 
 プラグイン作成の動機 
 要件を固める 
 目処を立てる 
 実装する 
 デモ 
 TODO(時間があれば) 
Agenda
 実際のご依頼 
 「メールマガジンをMTでやりたい」 
 レンタルサーバで動かしたい 
 できればHTMLメールでやりたい 
 購読者は6000人ぐらいで月1配信 
「ではプラグイン作りましょう」 
プラグイン作成の動機
 自己紹介 
 プラグインについて 
 プラグイン作成の動機 
 要件を固める 
 目処を立てる 
 実装する 
 デモ 
 TODO(時間があれば) 
Agenda
 メールマガジンをMTでやりたい 
 配信先を管理 
 メールマガジンを管理 
 指定日時配信 
 HTMLメール 
 配信数は10000通程度 
要件を洗い出す
 メールマガジンをMTでやりたい 
 配信先を管理…MTユーザ&ロール 
 メールマガジンを管理 
 指定日時配信 
 HTMLメール 
 配信数は10000通程度 
MTに落とし込む
配信先を管理 
 MTのユーザを配信先 
に 
 メルマガ受信【権限】 
 【ロール】に権限設定 
 「メルマガ会員」 
ロール追加 
配信時点のメルマガ受信 
ユーザへ!
 メールマガジンをMTでやりたい 
 配信先を管理…MTユーザ&ロール 
 メールマガジンを管理…ブログ記事 
 指定日時配信…ブログ記事 
 HTMLメール 
 配信数は10000通程度 
MTに落とし込む
 ブログ記事 
=メールマガジン記事 
 記事からメール本文 
 公開時に配信 
メールマガジンを管理
指定日時配信 
 記事の公開日時指定 
 標準機能でいけそう
 メールマガジンをMTでやりたい 
 配信先を管理…MTユーザ&ロール 
 メールマガジンを管理…ブログ記事 
 指定日時配信…ブログ記事 
 HTMLメール…テンプレート処理&MTのメール 
 配信数は10000通程度 
MTに落とし込む
HTMLメール 
 MTテンプレートで 
 <$MTEntryBody$> 
 本文作成用テンプレー 
トを追加 
 本文を構築 
 MTのメール送信機能 
 通知メールなどのやつ
 メールマガジンをMTでやりたい 
 配信先を管理…MTユーザ&ロール 
 メールマガジンを管理…ブログ記事 
 指定日時配信…ブログ記事 
 HTMLメール…テンプレート処理&MTのメール 
 配信数は10000通程度…非同期処理 
MTに落とし込む
 タイムアウトの危機 
 非同期処理 
 Ex)公開キュー 
 配信先リスト作成 
 生SQL 
配信数は10000通程度
 メールマガジンをMTでやりたい 
 配信先を管理…MTユーザ&ロール 
 メールマガジンを管理…ブログ記事 
 指定日時配信…ブログ記事 
 HTMLメール…テンプレート処理&MTのメール 
 配信数は10000通程度…非同期処理 
できるかな?
 自己紹介 
 プラグインについて 
 プラグイン作成の動機 
 要件を固める 
 目処を立てる 
 実装する 
 デモ 
 TODO(時間があれば) 
Agenda
 実装方法を調査 
 MTユーザ&ロール 
 ブログ記事「公開」時に処理 
 テンプレート処理 
 MTのメール 
 非同期処理 
目処を立てる
 知りたいこと 
 権限の追加方法 
 ロールの追加方法 
 メールアドレス一覧取得方法 
MTユーザ&ロール
(ソースコードを表示します) 
 権限の追加 
 tmpl/cms/edit_role.tmpl 
 <mt:loop 
name="loaded_permissions"> 
 MT::CMS::User 
 my $perms = $app- 
>model('permission')- 
>perms_from_registry; 
 MT::Permission::perms_from_regist 
ry 
 Permissionsレジストリに追加すれ 
ばいけそう 
 MT::Core::load_core_permissions 
MTユーザ&ロール
(ソースコードを表示) 
 プラグインインストール時に「メールマガジン会 
員」ロールをシステムに登録したい。 
 http://www.sixapart.jp/movabletype/manual/object_r 
eference/archives/mt_plugin.html 
 upgrade_functions を使うと明示している。できそう。 
 MT/Plugin.pm 
 upgrade_functions 
 MT/Upgrade.pm 
 post_schema_upgrade 
 upgrade_functions を追加してそこでやればよさそう 
 upgrade_functions のplugin にプラグインIDを設定する 
 プラグイン新規インストール用… version_limit を設定 
しない 
 プラグインアップグレード用… version_limit を設定す 
る 
MTユーザ&ロール
(ソースコードを表示) 
 権限を設定した(ロールを割り当てた)ユーザ 
のメールアドレス一覧取得方法 
 ロール割り当てのDB構造 
 MT::CMS::User::grant_role 
 MT::Association->link 
 MT::Associationモデル 
 中間テーブル`mt_association`にブログとユーザ、 
ロールが設定されている 
MTユーザ&ロール
(試しに実行) 
 送信先ユーザIDの取得(SQL) 
 SELECT mt_association.author_id 
FROM mt_association 
WHERE blog_id=<blog_id> AND role_id=<role_id> 
 送信先メールアドレスの取得(SQL) 
 select mt_author.author_email 
from mt_association 
INNER JOIN mt_author ON mt_author.author_id = 
mt_association.association_author_id 
WHERE association_blog_id=<blog_id> AND 
association_role_id=<role_id> 
MTユーザ&ロール
 MT上での実装方法を調査 
 MTユーザ&ロール 
 ブログ記事「公開」時に処理 
 テンプレート処理 
 MTのメール 
 非同期処理 
実装の目処を立てる
 知りたいこと 
 公開したときに処理を入れる「コールバック」 
 記事編集フォーム 
 一括編集 
 指定日時公開 
ブログ記事公開時に処理
(ソースコードを表示) 
 MT::CMS::core_methods を見れば`__mode`と実装コードの対応が 
わかる 
 save_entry 
 MT::CMS::Entry::save 
 $app->run_callbacks( 'cms_post_save.' . $type, $app, $obj, $orig_obj ); 
 save_entries 
 MT::CMS::Entry::save_entries 
 $app->run_callbacks( 'cms_post_bulk_save.' . ( $type eq 'entry' ? 
'entries' : 'pages' ), $app, @objects ); 
 MT::Core::load_core_tasks 
 MT->instance->publisher->publish_future_posts 
 MT->run_callbacks( 'scheduled_post_published', $mt, $entry ); 
ブログ記事公開時に処理
 まとめ 
 記事保存時cms_post_save.entry 
 一括編集cms_post_bulk_save.entry 
 指定日時公開scheduled_post_published 
コールバックでいけそう。 
ブログ記事公開時に処理
 MT上での実装方法を調査 
 MTユーザ&ロール 
 ブログ記事「公開」時に処理 
 テンプレート処理 
 MTのメール 
 非同期処理 
実装の目処を立てる
 テーマ機能 
 メルマガブログテーマ 
テンプレート処理 
 プラグインでテーマを追 
加する方法 
 システムテンプレートを 
テーマに含める方法 
 テンプレート処理 
 テンプレートの取りだし方 
 テンプレートとブログ記事 
から文字列を得る
(ソースコードを表示) 
 プラグインによるテーマ追加 
 ブログ作成時のテーマ選択一覧 
 <select name="blog_theme“ 
 tmpl/cms/edit_blog.tmpl 
 theme_loopに入ってる 
 MT/App/CMS/Common.pm 
 $param{theme_loop} = MT::Theme->load_theme_loop($type); 
 … 
 MTのテーマディレクトリ(`MT_DIR/themes`)に加えて、 
themesレジストリを参照することがわかった 
 config.yaml で追加できる 
テーマ機能
(ソースコードを表示) 
 取りだし 
 コメント完了時「コメント完了」システムテンプレートを処 
理 
 MT::App::CMS::post 
 my $tmpl = MT::Template->load( 
{ type => 'comment_response', blog_id => $entry->blog_id } ); 
 文字列を得る 
 my $ctx = MT::Template::Context->new; 
$ctx->stash( 'comment', $comment ); 
 MT::Template::Tags::Entry::_hdlr_entry_title 
 my $html = $tmpl->build( $ctx, %cond ); 
テンプレート処理
 MT上での実装方法を調査 
 MTユーザ&ロール 
 ブログ記事「公開」時に処理 
 テンプレート処理 
 MTのメール 
 非同期処理 
実装の目処を立てる
 知りたいこと 
 MTのメール送信API 
 Multi-Partメール対応可能か 
MTのメール
 メール送信方法 
 管理者メールアドレスEmailAddressMain 
 MT::Mail->send( %head, $body ); 
 MT::Mail->send( %head, $body ); 
 Bodyはそのまま送信される 
 HTMLメールはMIME::Entity等で組み立てて渡せ 
ばOK 
 %head フィールド名をキーにした連想配列 
MTのメール
 MT上での実装方法を調査 
 MTユーザ&ロール 
 ブログ記事「公開」時に処理 
 テンプレート処理 
 MTのメール 
 非同期処理 
実装の目処を立てる
 知りたいこと 
 ジョブキュー 
 Amazon SQS / Resqueみたいなの 
 公開キューとかで使ってる 
 run-periodic-tasks 
非同期処理
(ソースコードを表示) 
 FUTURE() 
 MT::WeblogPublisher 
 my $job = TheSchwartz::Job->new(); 
 $job->funcname('MT::Worker::Publish'); 
 MT::TheSchwartz->insert($job); 
 MT::Worker::Publish 
 use base qw( TheSchwartz::Worker ); 
 MT::Core 
 task_workers 
非同期処理
 自己紹介 
 プラグインについて 
 プラグイン作成の動機 
 要件を固める 
 目処を立てる 
 実装する 
 デモ 
 TODO(時間があれば) 
Agenda
https://github.com/takeyuweb/mt-plugin-MailMug 
ソースコード公開します
 自己紹介 
 プラグインについて 
 プラグイン作成の動機 
 要件を固める 
 目処を立てる 
 実装する 
 デモ 
 TODO(時間があれば) 
Agenda
デモ
 自己紹介 
 プラグインについて 
 プラグイン作成の動機 
 要件を固める 
 目処を立てる 
 実装する 
 デモ 
 TODO(時間があれば) 
Agenda
 非公開サブルーチンを外から利用 
 MT::Hoge::_fuga みたいなの 
 モンキーパッチ 
バージョンアップで壊れるリスク 
追従するコスト 
やるべきでないこと
 なんちゃってロール実装なのでちゃんと権限をみるように修正 
 宛先インポート 
 content_actions でインポート機能追加 
 空メール送信で登録 
 /etc/aliases でパイプ 
 受け取りスクリプトを作成 
 AmazonSES等のメール配信サービス利用 
 メルマガ送信用のSMTP設定は? 
 無理なら別途メール送信コードを書く 
 拡張用コールバック 
 メールマガジン送信専用スクリプト 
 run-periodic-tasksを使用せず 
TODO
以上

プラグイン作者脳になろう ~実案件で学ぶプラグイン開発フロー~

  • 1.
    プラグイン作者脳に なろう { 実案件で学ぶプラグイン開発フロー @takeyuweb 竹内雄一Yuichi Takeuchi MTDDC Meetup TOKYO 2014
  • 2.
    • プログラマ向けの話をし ます。 • プラグイン作成”入門”的 な内容ではありません。 • 実案件でプラグインを 作ったときの作業フロー についてお話しします。 このセッションについて
  • 3.
     自己紹介 プラグインについて  プラグイン作成の動機  要件を固める  目処を立てる  実装する  デモ  TODO(時間があれば) Agenda
  • 4.
     自己紹介 プラグインについて  プラグイン作成の動機  要件を固める  目処を立てる  実装する  デモ  TODO(時間があれば) Agenda
  • 5.
     タケユー・ウェブ(2008~) フリーWebエンジニア  Rails / MT / AngularJS / Linux / AWS etc…  MT東京  Ruby好き  Lancers認定ランサー  2014.4~さいたま市 ↑週3ぐらいでいます。 竹内雄一@takeyuweb
  • 6.
     MTプラグイン開発経験 たぶん60個ぐらい  業務(非公開)  趣味  KetaiPost (2010)  初プラグイン  携帯メール投稿  息子の成長記録 竹内雄一@takeyuweb
  • 7.
     自己紹介 プラグインについて  プラグイン作成の動機  要件を固める  目処を立てる  実装する  デモ  TODO(時間があれば) Agenda
  • 8.
     できること、種類からみた分類 ある処理に別の処理を挟む「コールバック」  管理画面を変更「トランスフォーマー」  テンプレートタグ  バッチ処理  DataAPI拡張  MTフレームワーク独自アプリ などなど… 大抵のことはがんばればできます。 プラグインについて
  • 9.
    学習資料①  MovableType 開発者向 けガイド  GitHubにある  詳しい  基本的なことはここで 写経してればOK
  • 10.
    学習資料②  MovableTypeプラグイ ン開発入門  MT4の本だけどMT6で も基本は同じ  私も買いました。
  • 11.
    学習資料③  MovableType Developer’s Guide Volume 1  MT4の本だけどMT6で も基本は同じ  私も買いました。
  • 12.
     ソースコード MT本体  今でもよく読む、今日も読む  公開されている他のプラグイン 学習資料④
  • 13.
     自己紹介 プラグインについて  プラグイン作成の動機  要件を固める  目処を立てる  実装する  デモ  TODO(時間があれば) Agenda
  • 14.
     実際のご依頼 「メールマガジンをMTでやりたい」  レンタルサーバで動かしたい  できればHTMLメールでやりたい  購読者は6000人ぐらいで月1配信 「ではプラグイン作りましょう」 プラグイン作成の動機
  • 15.
     自己紹介 プラグインについて  プラグイン作成の動機  要件を固める  目処を立てる  実装する  デモ  TODO(時間があれば) Agenda
  • 16.
     メールマガジンをMTでやりたい 配信先を管理  メールマガジンを管理  指定日時配信  HTMLメール  配信数は10000通程度 要件を洗い出す
  • 17.
     メールマガジンをMTでやりたい 配信先を管理…MTユーザ&ロール  メールマガジンを管理  指定日時配信  HTMLメール  配信数は10000通程度 MTに落とし込む
  • 18.
    配信先を管理  MTのユーザを配信先 に  メルマガ受信【権限】  【ロール】に権限設定  「メルマガ会員」 ロール追加 配信時点のメルマガ受信 ユーザへ!
  • 19.
     メールマガジンをMTでやりたい 配信先を管理…MTユーザ&ロール  メールマガジンを管理…ブログ記事  指定日時配信…ブログ記事  HTMLメール  配信数は10000通程度 MTに落とし込む
  • 20.
     ブログ記事 =メールマガジン記事  記事からメール本文  公開時に配信 メールマガジンを管理
  • 21.
  • 22.
     メールマガジンをMTでやりたい 配信先を管理…MTユーザ&ロール  メールマガジンを管理…ブログ記事  指定日時配信…ブログ記事  HTMLメール…テンプレート処理&MTのメール  配信数は10000通程度 MTに落とし込む
  • 23.
    HTMLメール  MTテンプレートで  <$MTEntryBody$>  本文作成用テンプレー トを追加  本文を構築  MTのメール送信機能  通知メールなどのやつ
  • 24.
     メールマガジンをMTでやりたい 配信先を管理…MTユーザ&ロール  メールマガジンを管理…ブログ記事  指定日時配信…ブログ記事  HTMLメール…テンプレート処理&MTのメール  配信数は10000通程度…非同期処理 MTに落とし込む
  • 25.
     タイムアウトの危機 非同期処理  Ex)公開キュー  配信先リスト作成  生SQL 配信数は10000通程度
  • 26.
     メールマガジンをMTでやりたい 配信先を管理…MTユーザ&ロール  メールマガジンを管理…ブログ記事  指定日時配信…ブログ記事  HTMLメール…テンプレート処理&MTのメール  配信数は10000通程度…非同期処理 できるかな?
  • 27.
     自己紹介 プラグインについて  プラグイン作成の動機  要件を固める  目処を立てる  実装する  デモ  TODO(時間があれば) Agenda
  • 28.
     実装方法を調査 MTユーザ&ロール  ブログ記事「公開」時に処理  テンプレート処理  MTのメール  非同期処理 目処を立てる
  • 29.
     知りたいこと 権限の追加方法  ロールの追加方法  メールアドレス一覧取得方法 MTユーザ&ロール
  • 30.
    (ソースコードを表示します)  権限の追加  tmpl/cms/edit_role.tmpl  <mt:loop name="loaded_permissions">  MT::CMS::User  my $perms = $app- >model('permission')- >perms_from_registry;  MT::Permission::perms_from_regist ry  Permissionsレジストリに追加すれ ばいけそう  MT::Core::load_core_permissions MTユーザ&ロール
  • 31.
    (ソースコードを表示)  プラグインインストール時に「メールマガジン会 員」ロールをシステムに登録したい。  http://www.sixapart.jp/movabletype/manual/object_r eference/archives/mt_plugin.html  upgrade_functions を使うと明示している。できそう。  MT/Plugin.pm  upgrade_functions  MT/Upgrade.pm  post_schema_upgrade  upgrade_functions を追加してそこでやればよさそう  upgrade_functions のplugin にプラグインIDを設定する  プラグイン新規インストール用… version_limit を設定 しない  プラグインアップグレード用… version_limit を設定す る MTユーザ&ロール
  • 32.
    (ソースコードを表示)  権限を設定した(ロールを割り当てた)ユーザ のメールアドレス一覧取得方法  ロール割り当てのDB構造  MT::CMS::User::grant_role  MT::Association->link  MT::Associationモデル  中間テーブル`mt_association`にブログとユーザ、 ロールが設定されている MTユーザ&ロール
  • 33.
    (試しに実行)  送信先ユーザIDの取得(SQL)  SELECT mt_association.author_id FROM mt_association WHERE blog_id=<blog_id> AND role_id=<role_id>  送信先メールアドレスの取得(SQL)  select mt_author.author_email from mt_association INNER JOIN mt_author ON mt_author.author_id = mt_association.association_author_id WHERE association_blog_id=<blog_id> AND association_role_id=<role_id> MTユーザ&ロール
  • 34.
     MT上での実装方法を調査 MTユーザ&ロール  ブログ記事「公開」時に処理  テンプレート処理  MTのメール  非同期処理 実装の目処を立てる
  • 35.
     知りたいこと 公開したときに処理を入れる「コールバック」  記事編集フォーム  一括編集  指定日時公開 ブログ記事公開時に処理
  • 36.
    (ソースコードを表示)  MT::CMS::core_methodsを見れば`__mode`と実装コードの対応が わかる  save_entry  MT::CMS::Entry::save  $app->run_callbacks( 'cms_post_save.' . $type, $app, $obj, $orig_obj );  save_entries  MT::CMS::Entry::save_entries  $app->run_callbacks( 'cms_post_bulk_save.' . ( $type eq 'entry' ? 'entries' : 'pages' ), $app, @objects );  MT::Core::load_core_tasks  MT->instance->publisher->publish_future_posts  MT->run_callbacks( 'scheduled_post_published', $mt, $entry ); ブログ記事公開時に処理
  • 37.
     まとめ 記事保存時cms_post_save.entry  一括編集cms_post_bulk_save.entry  指定日時公開scheduled_post_published コールバックでいけそう。 ブログ記事公開時に処理
  • 38.
     MT上での実装方法を調査 MTユーザ&ロール  ブログ記事「公開」時に処理  テンプレート処理  MTのメール  非同期処理 実装の目処を立てる
  • 39.
     テーマ機能 メルマガブログテーマ テンプレート処理  プラグインでテーマを追 加する方法  システムテンプレートを テーマに含める方法  テンプレート処理  テンプレートの取りだし方  テンプレートとブログ記事 から文字列を得る
  • 40.
    (ソースコードを表示)  プラグインによるテーマ追加  ブログ作成時のテーマ選択一覧  <select name="blog_theme“  tmpl/cms/edit_blog.tmpl  theme_loopに入ってる  MT/App/CMS/Common.pm  $param{theme_loop} = MT::Theme->load_theme_loop($type);  …  MTのテーマディレクトリ(`MT_DIR/themes`)に加えて、 themesレジストリを参照することがわかった  config.yaml で追加できる テーマ機能
  • 41.
    (ソースコードを表示)  取りだし  コメント完了時「コメント完了」システムテンプレートを処 理  MT::App::CMS::post  my $tmpl = MT::Template->load( { type => 'comment_response', blog_id => $entry->blog_id } );  文字列を得る  my $ctx = MT::Template::Context->new; $ctx->stash( 'comment', $comment );  MT::Template::Tags::Entry::_hdlr_entry_title  my $html = $tmpl->build( $ctx, %cond ); テンプレート処理
  • 42.
     MT上での実装方法を調査 MTユーザ&ロール  ブログ記事「公開」時に処理  テンプレート処理  MTのメール  非同期処理 実装の目処を立てる
  • 43.
     知りたいこと MTのメール送信API  Multi-Partメール対応可能か MTのメール
  • 44.
     メール送信方法 管理者メールアドレスEmailAddressMain  MT::Mail->send( %head, $body );  MT::Mail->send( %head, $body );  Bodyはそのまま送信される  HTMLメールはMIME::Entity等で組み立てて渡せ ばOK  %head フィールド名をキーにした連想配列 MTのメール
  • 45.
     MT上での実装方法を調査 MTユーザ&ロール  ブログ記事「公開」時に処理  テンプレート処理  MTのメール  非同期処理 実装の目処を立てる
  • 46.
     知りたいこと ジョブキュー  Amazon SQS / Resqueみたいなの  公開キューとかで使ってる  run-periodic-tasks 非同期処理
  • 47.
    (ソースコードを表示)  FUTURE()  MT::WeblogPublisher  my $job = TheSchwartz::Job->new();  $job->funcname('MT::Worker::Publish');  MT::TheSchwartz->insert($job);  MT::Worker::Publish  use base qw( TheSchwartz::Worker );  MT::Core  task_workers 非同期処理
  • 48.
     自己紹介 プラグインについて  プラグイン作成の動機  要件を固める  目処を立てる  実装する  デモ  TODO(時間があれば) Agenda
  • 49.
  • 50.
     自己紹介 プラグインについて  プラグイン作成の動機  要件を固める  目処を立てる  実装する  デモ  TODO(時間があれば) Agenda
  • 51.
  • 52.
     自己紹介 プラグインについて  プラグイン作成の動機  要件を固める  目処を立てる  実装する  デモ  TODO(時間があれば) Agenda
  • 53.
     非公開サブルーチンを外から利用 MT::Hoge::_fuga みたいなの  モンキーパッチ バージョンアップで壊れるリスク 追従するコスト やるべきでないこと
  • 54.
     なんちゃってロール実装なのでちゃんと権限をみるように修正 宛先インポート  content_actions でインポート機能追加  空メール送信で登録  /etc/aliases でパイプ  受け取りスクリプトを作成  AmazonSES等のメール配信サービス利用  メルマガ送信用のSMTP設定は?  無理なら別途メール送信コードを書く  拡張用コールバック  メールマガジン送信専用スクリプト  run-periodic-tasksを使用せず TODO
  • 55.

Editor's Notes

  • #2 自己紹介 プラグインについて プラグイン作成の動機 要件を固める 20分 ソースコードリーディング 20分 デモ5分