# Usagi Project MyNETS 1.2.0 への移行ガイド

最終更新日: 2008/09/12

## 目次

- 0. はじめに
- 1. 手順
- 2. 作業方法
  - 2-1-1. コンバート SQL の実行
  - 2-2. ソースコードの置き換え
  - 2-3. 設定ファイルの変更
  - 2-4. 携帯メール投稿アドレス設定の変更
- 3. MyNETS で削除された設定項目
- 4. MyNETS 1.2.* と OpenPNE 2.4系テーブルの違う部分

## 0. はじめに

この文書は、OpenPNE 2.4.* から MyNETS 1.2.0 への移行の手順を記載したものです。

- OpenPNE 2.6.*、2.8.* からの移行は、動作報告がされておりますが、確実に動作を保障するものではありません。
- OpenPNE 2.10.*、2.12.* からの移行は、OpenPNE のテーブル変更および絵文字処理の関係上、コンバートを行っても、すでに保存されている一部のデータが、正常にコンバートされないことがあります。
- また、2.12.* 以降のバージョンにおいては、更新日時などが違う形式で保存されているため、MyNETSへコンバートしてからの更新日時等の計算になることがあります。

現在 2.12.* からのコンバートプログラムを調整しております。リリースまでしばらくお待ちください。

上記をご確認の上、移行を行うようにしてください。

## 1. 手順

移行は以下のような手順で進めます。

1. メインテナンスモードへ切り替え
   (config.php[define('OPENPNE_UNDER_MAINTENANCE', true);])
2. 現在のデータベースをバックアップ
3. コンバート SQL の実行
4. コンバートスクリプトの実行
5. ソースコードの置き換え
6. 設定ファイルの変更
7. 携帯メール投稿設定の変更
8. 運用モードへ切り替え
   (config.php[define('OPENPNE_UNDER_MAINTENANCE', false);])

## 2. 作業方法

MyNETS 1.2.0 より、「3. アップグレード SQL の実行」および「4. コンバートスクリプトの実行」を自動で行うコンバートツールが含まれています。コンバートツールを利用するには、convert/README.txt を参照ください。

### 実行が終わったら、または使用しない場合、convert/ディレクトリは削除するか別の名前へ変更するようにしてください。

コンバートツールはまだまだ調整が必要です。特にDBが肥大化しているケースにおいては、メモリ不足などにより正常にPHPが実行できず、画面が途中で停止してしまう可能性があります。ご利用においては、必ず「テストDB」を用意して実行するようにしてください。

### 2-1-1. コンバート SQL の実行

OpenPNE から移行するには、

- setup/sql/MySQL4.*/convert/Pne2Usagi_convertSQL4MySQL4.*.sql

をまず実行します。
MySQL のバージョンによって sql ディレクトリの下のディレクトリを選択してください。ご使用の MySQL のバージョンにあったディレクトリ以下のファイルを実行してください。

次にsetup/sql/README_c_image_convert.txt を開いて、注意書きを確認してください。

ここの説明の下にあるSQLをすべて実行することでコンバートが完了します。

### 2-2. ソースコードの置き換え

サーバ上に MyNETS 1.2.0 のソースファイルを設置します。 詳しくは、「MyNETS セットアップガイド」の「1. ファイルの設置」を参考にしてください。

MyNETS 1.2.0 では、OpenPNE からディレクトリ構成が変更され、public_html が廃止されています。確実にソースコードを入れ替えるようにしてください

### 2-3. 設定ファイルの変更

MyNETS で追加された設定ファイル(config.php)の設定項目

※config.php は、MyNETS に含まれる config.php.sample を元に変更し作成されることを推奨します。
尚 MyNETS 1.2.0 ではディレクトリの構成が変更となり、public_html が廃止されました。それにより OPENPNE_DIR 直下に conf ディレクトリが用意され、そこへ config.php を保存するようになりました。ご注意ください。

#### OpenPNEのconfig.phpから内容が変更されているもの

- 運用モードで HTML 中の空白改行を一部削除:
  $GLOBALS['SMARTY']['autoload_filters'] = array( "pre" => array("strip"),"output"=>array("comment") );
- 未ログイン日数を変更:
  define('LASTLOGIN_DAYS', 3);
- テーブルの PREFIX を利用する場合は、PREFIX文字列を指定:
  define('MYNETS_PREFIX_NAME','');
- Usagi Project更新情報のURL設定
  define('OPENPNE_INFO_URL', 'http://usagi-project.org/PRESS/feed/');
- 画像変換時に許可する解像度のリスト
  $GLOBALS['_OPENPNE_IMG_ALLOWED_SIZE'] = array('36x36', '76x76', '120x120', '180x180', '360x360', '54x54');
- セッションファイルの保存ディレクトリ
  //session_save_path('/tmp');
  session_save_path(OPENPNE_VAR_DIR . '/session');

#### MyNETS独自で設定情報が追加されたもの

    /* ここからうさぎちゃん */

    // 未ログイン日数を変更(default=3)
    //define('LASTLOGIN_DAYS', 7);

    // どのDBモジュールを使用するか ('pne','mysql')
    define('MYNETS_DB_MODULE', 'mysql');

    // CAPTCHA（画像のなかの文字列をメンバーに入力させる認証方式）を使用するかどうか
    define('MYNETS_USE_CAPTCHA', true);

    //最新日記の表示を一人１件とする場合はtrue,すべて出す場合はfalse
    define('DIARY_DISTINCT_LIST',false);

    //コミュニティの更新表示を１コミュニティ１件とする場合はtrue,すべて出す場合はfalse
    define('COMMU_DISTINCT_LIST',false);

    //外部公開日記を行う
    define('MYNETS_OPEN_DIARY', true);

    //外部公開コミュニティを行う（現在外部コミュページ未実装）
    define('MYNETS_OPEN_COMMU', false);

    //HOMEのカレンダーを本日起点とする。日曜起点の場合はfalse
    define('DISPLAY_SCHEDULE_WEEK', false);

    //サイドブロック情報を表示するかしないか
    //表示するには define('USE_EXT_DIR', true); に設定する必要あり
    define('DISPLAY_SIDE_BLOCK', false);

    //サイドブロックをログイン前に表示するかどうか
    define('DISPLAY_SIDE_BLOCK_WITHOUT_LOGIN', false);

    //サイドブロックで表示する情報
    $GLOBALS['MYNETS_DISABLE_SIDE_VIEW_MODULES'] = array(
        'newdiary'  => true,
        'newtopic' => true,
        'newevent' => true,
        'newreview' => true,        //現在表示設定なし
        'newcommunity' => false,    //現在表示設定なし
        'newmember' => true,
        'onlinemember' => true,
    );

    //会員が新規登録した際に、管理者へメールを送信するかしないか
    define('ADMIN_INVITE_MAIL', false);

    // ニュースを表示するか否か
    define('DISPLAY_NEWS_BLOCK',true);

    // ニュースのもっと見るでGoogleニュースのトピック別ニュースを表示するか否か
    define('DISPLAY_GOOGLE_TOPIC',true);

    // 認証前、ログインページなどでニュースを表示するか否か
    define('DISPLAY_NEWS_BLOCK_WITHOUT_LOGIN',false);

    // ニュースフィードのキャッシュの場所
    define('NEWS_CACHE_DIR',OPENPNE_RSS_CACHE_DIR);

    // ニュースフィードの取得制限時間（秒）
    define('NEWS_CACHE_LIMIT',1800);

    // ニュースフィードのURLリスト
    // RSS1.0/RSS2.0/Atom1.0形式のフィードを返すURLを指定してください。
    // キーとURLという形で複数指定することも可能ですが、実際に使用するURLの分だけ処理が重くなります。
    // 以下はサンプルのURLです。使用する行の先頭の「//」（コメントアウト）を削除し、使用しない
    // 場合には、先頭に「//」を記述して下さい。
    $GLOBALS['NEWS_FEED_URL_LIST'] = array(
        'GoogleNews-Popular' => 'http://news.google.com/news?hl=ja&ned=ja&ie=UTF-8&oe=UTF-8&output=atom&topic=po',
    //    'goo-Ranking' => 'http://ranking.goo.ne.jp/rss/index.rdf',
    );

    // ニュース記事のリンク要素から、元記事のURLを取り出す場合の
    // URLの正規表現のリスト
    // 'pattern'に正規表現を記述し、preg_matchの検索結果の
    // $matches[1]にドメイン名、$matches[2]に元記事のURL部分
    //  が入る正規表現にする。
    // 'urldecode'については、抽出した元記事のURLをURLデコード
    // するか否か(true/false)の指定項目。
    $GLOBALS['NEWS_EXTRACT_LINK_URL_LIST'] = array(
        'GoogleNews' => array(
                            'pattern'   => '@http://(news\.google\.com)/.*url=([^&]+)@i',
                            'urldecode' => true,
                        ),
        'GooRanking' => array(
                            'pattern'   => '@http://(plus\.goo\.ne\.jp)/rnkredir/redir\.php\?.*to=(http%3A%2F%2F.+)@i',
                            'urldecode' => true,
                        ),
        'Yahoo!News' => array(
                            'pattern'   => '@http://(rd\.yahoo\.co\.jp)/[^\*]+\*(http://.+)@i',
                            'urldecode' => false,
                        ),
        'RSSNavi' => array(
                            'pattern'   => '@http://(www\.rssnavi\.jp)/r/\?.+(?:&|&)u=(http.+)@i',
                            'urldecode' => false,
                        ),
    );

    // 広告などのURLをニュース記事から除去するための、URLの正規表現のリスト
    // デリミタは「/」でも何でも良いが、正規表現であることが条件
    $GLOBALS['NEWS_REMOVE_LINK_URL_LIST'] = array(
        '@http://www\.pheedo\.jp/click\.phdo\?a=@i',
        '@http://ck\.jp\.ap\.valuecommerce\.com/.+@i',
    );

    // 広告などの項目をニュース記事から除去するための、タイトルの正規表現のリスト
    // デリミタは「/」でも何でも良いが、正規表現であることが条件
    $GLOBALS['NEWS_REMOVE_TITLE_LIST'] = array(
        '/^AD[:|：]/i',
        '/^PR[:|：]/i',
        '/^\(AD\)/i',
        '/^配信日時/',
        '/^ダイジェストニュース：製品情報/',
    );

    // ニュースを取得する件数
    define('NEWS_FEED_MAX',10);

    // ニュースのテキスト（概要）を省略する位置（文字数）
    // 省略文字も含んだ長さにすること
    define('NEWS_DESCRIPTION_LENGTH',200);

    // ニュースのテキスト（概要）を省略したことを表す文字列
    define('NEWS_DESCRIPTION_ETC','...');

    // Proxyサーバの設定（ENABLE_PROXY以外は小文字）
    // ENABLE_PROXY ... Proxyを使用するか否か（true/false）
    // proxy_host   ... Proxyサーバのホスト名またはIPアドレス
    // proxy_port   ... Proxyサーバのポート番号（80番や8080、8888など）
    // proxy_user   ... Proxyサーバを利用する際のユーザ名（通常不要）
    // proxy_pass   ... Proxyサーバを利用する際のパスワード（通常不要）
    $GLOBALS['NEWS_PROXY_CONFIG'] = array(
        'ENABLE_PROXY'  => false,
        'proxy_host' => 'localhost',
        'proxy_port' => 8080,
        'proxy_user' => '',
        'proxy_pass' => '',
    );

    // 複数のニュースを結合してキャッシュする(true)か否(false)か
    // ニュースの保存に時間がかかるようになるが、読み出しは速くなる。
    define('NEWS_CACHE_MERGE',true);

    // キャッシュがNEWS_CACHE_LIMITより古い場合に収集する(true)か否(false)か
    // falseの場合は常にキャッシュから読み込む。（キャッシュがない場合だけ収集）
    // false指定の場合は、cronなどでキャッシュを更新しないと意味がないので注意。
    define('NEWS_COLLECT_FEED',true);

    // shima3BBCode入力支援モジュールを入力に使用する(true)か否(false)か
    // 使用するには define('USE_EXT_DIR', true); に設定する必要あり
    define('BBCODE_USE_FOR_INPUT', true);

    // shima3BBCode入力支援モジュールでscript.aculo.usを使用する(true)か否(false)か
    define('BBCODE_USE_SCRIPTACULOUS', true);

    // Fesly開発のBBCode入力支援モジュールを入力に使用する(true)か否(false)か
    // 使用するには define('USE_EXT_DIR', true); に設定する必要あり
    define('BBCODE_USE_FOR_INPUT_FESLY', true);

    // ホームで表示するインフォメーションの件数
    define('ADMIN_INFO_NUM',3);

    // 携帯でのオートログインを有効にするか
    define('USAGI_MOBILE_AUTO_LOGIN', false);

    // iPhoneを携帯として接続させるかどうか（現在未実装）
    define('IPHONE_IS_MOBILE', false);

    //海外サーバを利用した場合の日本時間の設定
    //利用する場合はコメントをはずしてください。
    //putenv("TZ=Asia/Tokyo");

    //キャッチオールが使えないサーバーの場合の
    //POPアカウントでの処理
    define('USE_POP_MAIL', false);
    define('POP_SERVER_DOMAIN', 'exsmple.com');
    define('POP_SERVER_USER', 'pop username');
    define('POP_SERVER_PASS', 'pop password');

    //メッセージの本文を受信させるかどうかの設定
    define('MESSAGE_BODY_RECIVE', true);

    //招待制可能なSNSの場合のみ有効
    //QRコードによるコミュニティ経由新規登録を行うか
    define('MYNETS_QRENTRY_COMMU', true);
    //QRコードによる招待登録を行うか（現在未実装）
    define('MYNETS_QRENTRY_MEMBER', false);

    //システムでHOOKSを使うかどうか
    define('ENABLE_HOOKS', FALSE);

    //今日のひとこと・クイックコミュニケーションの名前
    define('QUICK_SERVICE_NAME', '一言メッセージをどうぞ！');

* 設置ディレクトリおよび設置スキンのパーミッションを 777 に変更します。
* MyNETS ではスキン画像を DB ではなくディレクトリに保存し、画面表示のレスポンスを向上させる対策を取っています。そのため画像を skin ディレクトリ以下に保存しなければなりません。
新しく自分で作成したスキン画像等をご利用になる場合は「MyNETS セットアップガイド」をお読みになり、ディレクトリ構成をご確認ください。

    $ chmod -R 777 OPENPNE_DIR/skin/*/img/

### 2-4. 携帯メール投稿アドレス設定の変更

MyNETS では、携帯機能強化とともに、メール投稿で扱える機能が大幅に強化されています。

項目 | 新形式 | 旧形式
--- | --- | ---
新規登録 / ログインURL取得 | get@MAIL_SERVER_DOMAIN | 同左
プロフィール画像変更 | pXXX-YYY@MAIL_SERVER_DOMAIN | pXXX@MAIL_SERVER_DOMAIN
コミュニティトピックのメール投稿 | tXXX-YYY@MAIL_SERVER_DOMAIN | tXXX@MAIL_SERVER_DOMAIN
コミュニティトピックのメール作成 | eXXX-YYY@MAIL_SERVER_DOMAIN | eXXX@MAIL_SERVER_DOMAIN
コミュニティトピックのメール修正 | etXXX-YYY@MAIL_SERVER_DOMAIN | etXXX@MAIL_SERVER_DOMAIN
日記メール投稿 | bXXX-YYY@MAIL_SERVER_DOMAIN | blog@MAIL_SERVER_DOMAIN
日記コメントメール投稿 | cXXX-YYY@MAIL_SERVER_DOMAIN | cXXX@MAIL_SERVER_DOMAIN
日記画像の修正メール投稿 | dpicXXX-XXX-YYY@MAIL_SERVER_DOMAIN | dpicXXX-XXX@MAIL_SERVER_DOMAIN
コミュニティの管理者の携帯での画像変更投稿 | copicXXX-XXX-YYY@MAIL_SERVER_DOMAIN | copicXXX-XXX@MAIL_SERVER_DOMAIN
空メールによる携帯アドレス設定 | mbentry@MAIL_SERVER_DOMAIN | 同左
QRコードによるコミュニティ経由新規登録用アドレス(1.2.0Nigtyで追加) | qrcXXX-XXX@MAIL_SERVER_DOMAIN | 同左
QRコードによるメンバー紹介新規登録用アドレス(1.2.0で追加;機能未実装) | qrm-XXX@MAIL_SERVER_DOMAIN | 同左

- XXX には数字。
- YYY には 12 バイトの英数字([0-9a-f]{12})。

※上記が MyNETS での携帯メール投稿用のメールアドレスです。運営していた OpenPNE の設定に追加してください。

以上でアップグレード作業は完了です。

## 3. MyNETS で削除された設定項目

- BIZ 機能は削除されましたので、下の項目はありません
  define('USE_BIZ_DIR', false);
  define('OPENPNE_WEBAPP_BIZ_DIR' , OPENPNE_DIR . '/webapp_biz');
  define('OPENPNE_MODULES_BIZ_DIR', OPENPNE_WEBAPP_BIZ_DIR . '/modules');;
- セーフモードかどうかは自動判定になりましたので、下の項目はありません
  define('MAIL_SET_ENVFROM', true);
- コミュニティに地図を表示するかどうか
  define('OPENPNE_USE_COMMU_MAP', true);

## 4. MyNETS 1.2.0 と OpenPNE 2.10系までのテーブルの差異

1. 伝言板用のテーブルが追加されています。(テーブル追加)
2. 日記のコメント集計方法が変更になり、日記テーブルに数がリアルにカウントされます。(カラム追加)
3. 足跡集計方法が変更になり、足跡テーブルを常に集計せず、リアルに会員テーブルに数がカウントされます。(カラム追加)
4. 日記閲覧用のテーブルが追加されています。(テーブル追加)
5. 日記タグ用のテーブルが追加されています。(テーブル追加)
6. ランキング集計データ保存テーブルが追加されています。(テーブル追加)
   ※これは現在まだ未稼働で今後変更になる可能性があります。
7. 足跡テーブルに携帯か PC からの接続の情報が保存されるようになり、足跡一覧を見たときに携帯接続が PC 接続が判別できるようになりました。(カラム追加)
8. PC 及び携帯用のテンプレートファイルを用意することで、設定画面からメンバーが画面変更を行うことが出来るようになりました。その設定保存のため、c_member にカラムを追加、またテンプレートファイルの内容を保存する c_display_view テーブルが追加されました。
9. 退会者の管理用テーブルが追加されています。(テーブル追加)
10. 携帯の画面切り替えを管理するためのテーブルが追加されています。(テーブル追加)
11. 管理画面からのお知らせを管理するテーブルが追加されました。
12. バージョンを管理するためのテーブルが追加されました（コンバートツールで利用）。
13. サイト管理者への問い合わせ、迷惑ユーザーの通報を管理するテーブルが追加されました。
14. 今日の一言を管理するテーブルが追加されました。
15. メンバーの画像投稿数、容量、日記の投稿件数などを管理するテーブルが追加されました（現在調整中、機能未実装）。
16. アクセス数を別途管理するテーブルが追加されました（現在調整中、機能未実装）。
17. 画像テーブルを分割するためのカテゴリー別のテーブルが追加されました（現在調整中、機能未実装）。

その他、インデックスの更新や、パフォーマンス調整のためのカラムを追加、変更しております。

絶対に独自でカラムを削除したりテーブルを削除しないようにしてください。

- 今後もテーブルの追加及び削除、修正が行われる可能性があります。但しその場合は修正・追加一覧とコンバート用ファイルを用意して、 移行がスムーズに行えるのを確認した上でリリースいたします。
- 2.6系のテーブルでもアップグレード SQL の実行及びコンバートスクリプトの実行により、動作する事が確認されています。
- これらの運用中データベースの移行は、確実な動作を保障するものではありませんので、移行の際はバックアップを確実に行ったうえで実効してください。
- また、独自のカスタマイズでテーブル等の項目を追加したり削除している場合はそのままでは動くかどうかは分かりませんので、 各種スクリプトを実行する前に SQL の内容を確認の上ご自信の判断で移行処理を行ってください。

以上の内容を確認しながらコンバートしてください。

OpenPNE は株式会社手嶋屋の開発しているオープンソースソフトウェアの名称です。
MyNETS は、ネットを使って多くの開発者が共同で開発している Usagi Project のオープンソースソフトウェアの名称です。
プロジェクト管理者、開発者、開発協力者の情報はプロジェクトホームページをご覧ください。
Usagi Project | SourceForge.jp Usagi Project