第一回OpenPNE3で学ぶsymfony勉強会に参加

OpenPNEで有名な株式会社手嶋屋さんで開催された勉強会に参加させていただきました。

OpenPNE3で学ぶSymfonyのタスク機能

  • 講師

    • 手嶋守さん
  • 概要

OpenPNEsymfonyについて

OpenPNEについて

OpenPNEsymfonyを採用することの利点

  • symfonyの公式ドキュメント、開発Tipsが生かせる

    • 独自フレームワークだと、サポートにリソースをさかれてしまうので難があった
    • ソーシャルプラットフォームの表現に開発を注力することができるようになった
    • symfonyノウハウを利用することでOpenPNEの拡張が出来るところがversion3以降の強み
    • プラグイン機構で柔軟な機能追加ができる

OpenPNE3において、symfonyタスク機能をどのように活用しているか

  • symfonyタスクとは

    • symfonyコマンドで様々な処理を実行できる機能

      • キャッシュクリア、ジェネレート、デプロイ、データインポートエクスポートなど
      • HTTPアクセスを介さない、バッチ処理の様なイメージ
  • どのような用途で利用しているのか

  • どうやって実行しているのか

OpenPNEタスクを使ってみましょう

環境・前提

プラグインひな形作成

  • plugin生成コマンドを実行します


mochiz% ./symfony opGenerate:plugin opTestTwoPlugin
>> dir+ /Users/mochiz/Sites/OpenPNE3/plugins/opTestTwoPlugin/apps
>> dir+ /Users/mochiz/Sites/OpenPNE3/plugins/opTestTwoPlugin/lib
>> dir+ /Users/mochiz/Sites/OpenPNE3/plugins/opTestTwoPlugin/test
>> dir+ /Users/mochiz/Sites/OpenPNE3/plugins/opTestTwoPlugin/test/bootstrap
>> file+ /Users/mochiz/Sites/OpenPNE3/plugins/opTestTwoPlugin/test/bootstrap/database.php
>> file+ /Users/mochiz/Sites/OpenPNE3/plugins/opTestTwoPlugin/test/bootstrap/functional.php
>> file+ /Users/mochiz/Sites/OpenPNE3/plugins/opTestTwoPlugin/test/bootstrap/unit.php
>> dir+ /Users/mochiz/Sites/OpenPNE3/plugins/opTestTwoPlugin/test/fixtures
>> file+ /Users/mochiz/Sites/OpenPNE3/plugins/opTestTwoPlugin/test/fixtures/test_data.yml
>> dir+ /Users/mochiz/Sites/OpenPNE3/plugins/opTestTwoPlugin/test/functional
>> dir+ /Users/mochiz/Sites/OpenPNE3/plugins/opTestTwoPlugin/test/functional/mobile_frontend
>> file+ /Users/mochiz/Sites/OpenPNE3/plugins/opTestTwoPlugin/test/functional/mobile_frontend/skeletonActionsTest.php
>> dir+ /Users/mochiz/Sites/OpenPNE3/plugins/opTestTwoPlugin/test/functional/pc_frontend
>> file+ /Users/mochiz/Sites/OpenPNE3/plugins/opTestTwoPlugin/test/functional/pc_frontend/skeletonActionsTest.php
>> dir+ /Users/mochiz/Sites/OpenPNE3/plugins/opTestTwoPlugin/test/unit
>> dir+ /Users/mochiz/Sites/OpenPNE3/plugins/opTestTwoPlugin/test/unit/model
>> file+ /Users/mochiz/Sites/OpenPNE3/plugins/opTestTwoPlugin/test/unit/model/SkeletonTest.php
>> chmod 777 /Users/mochiz/Sites/OpenPNE3/cache
>> chmod 777 /Users/mochiz/Sites/OpenPNE3/log
>> chmod 777 /Users/mochiz/Sites/OpenPNE3/symfony
>> chmod 666 /Users/mochiz/Sites/OpenPNE3/log/.gitignore
>> dir+ /Users/mochiz/Sites/OpenPNE3/web/cache
>> chmod 777 /Users/mochiz/Sites/OpenPNE3/web/cache

Permissions on some files could not be fixed.
You may fix this problem for accessing "/pc_backend.php/sns/cache" via your web browser.

If you want to get more information, please execute "./symfony openpne:permission --env=dev".

タスククラス作成

  • lib/taskにタスククラスを設置しましょう
  • 時間短縮のために、今回は既存ファイルをコピーしてタスククラスを作成します


cd plugins
mkdir opTestTwoPlugin/lib/task
git clone git clone http://github.com/tejima/opMinnatomodachiPlugin.git
cp opMinnatomodachiPlugin/lib/task/opMinnatomodachiTask.class.php opTestTwoPlugin/lib/task/opTestTask.class.php

  • クラスメイトファイル名に齟齬がないよう編集します

    • namespace、nameを編集し、タスク名を決定しましょう
    • namespace=opTest
    • name=two


class opTestTask extends sfBaseTask
{
protected function configure()
{
$this->namespace = 'opTest';
$this->name = 'two';
}

protected function execute($arguments = array(), $options = array())
{
var_dump('Test');
}
}

タスクを実行する

  • 作成したタスクを実行します


./symfony opTest:two
string(4) "Test"

symfony1.4タスクの作り方まとめ

  • 拡張するときにはpluginを作成しましょう
  • lib/taskへタスクを設置しましょう

手嶋屋謹製タスクプラグインのご紹介

タスクプラグインの紹介:みんな友達プラグイン

  • ソースはgithub

  • なにやってるのかざっくり紹介

    • DB接続
    • Doctorineフレンドリンクテーブルを削除
    • すべてのフレンドリンクを再作成

      • select結果をまとめてインサート。5000人分くらいまではストレス無く実行できるはず
    • 以上のような処理が5行くらいでできちゃいます
  • 新入社員が入った場合に自動的に結びつけができるので便利

タスクプラグインの紹介:ランチイベントランダム作成プラグイン

質疑応答

  • OpenPNEを、OAuthライブラリなど、zendライブラリなど入っている前提で使って良いですか?

    • 基本的にはそのままで使っていただけるはず
    • zendライブラリも同梱していますが、ライセンス的には問題ない(はず)
  • メール受信後の動作などもタスクで実装されていたりするのか?

    • 携帯メールをdumpしてサイトへ反映するタスクなどもあります
    • openpne

実例で見るsymfonyの我流修正方法

  • 講師

    • 河合さん
  • Crossover21というサイトを構築しています

    • 官民一体の政策議論、情報交換、勉強会のネットワークSNS
    • OpenPNE3で実装されています

      • コミュニティ、アクティビティを主軸に拡張
      • レイアウト、文言を見やすく
      • 友達機能、日記機能は使わない
      • 管理者毎に機能制限をかける
      • 使い勝手をよくしたら、好評でした。とのこと

どうやって実装したのかをざっくりと

  • 文言修正方法

    • i18n機能で文言を変更させています

      • 「コミュニティ」を「グループ」に変更
      • 国際化だけでなく、日本語を別の文言に変更することができるようになります。
    • スタイルシート変更

      • プラグインCSSを切り替えできます
      • Skinとつけるといいらしい
      • plugins/opSkin*を参照
  • 機能修正

    • アクティビティ(mixiエコーみたいな?)

      • 一般的に、オープンソーシャル上で行動したログをアクティビティと呼びます。
      • OpenPNEでは、つぶやきのみがログに残される行動になるので、つぶやき=アクティビティなイメージらしい
      • 全員に公開するアクティビティを作りたかった
      • 「友達に限定して公開する制限」を加えている処理をコメントアウト(笑)
      • 「友達に限定して公開する制限」を選択するフォーム部分をコメントアウト(笑)
    • スタッフ管理者のメニュー制限

      • なんかいろいろカスタマイズできるみたいです

質疑応答

  • ※あとで書く

感想

  • ※あとで書く