CodeIQ MAGAZINECodeIQ MAGAZINE

GUIでアプリケーションが作れるNovius OSで効率的な開発 #PHP

2014.07.08 Category:技術コラム Tag: , ,

  • 16
  • このエントリーをはてなブックマークに追加
dashboard

Novius OSはFuelPHPベースのCMSです。特徴の一つに、「アプリケーション作成」ウィザードがあります。

管理画面からアプリケーションの雛形を作成できます。この機能があるおかげで、アプリケーションを効率よく作成できます。
by レスキューワーク株式会社 水野史土

「アプリケーション作成」ウィザードとは

「アプリケーション作成」ウィザードとは、Novius OSに標準同梱されているアプリケーションです。管理画面からアプリケーションの雛形を作ることができます。開発を効率化するツールとして役立ちます。

このウィザードを使ってアプリケーションの雛形を作ると、

  • アプリケーションに必要な設定ファイル
  • データベースにテーブルを生成するSQL
  • 管理画面でアイテムを一覧するページ
  • 管理画面で個別のアイテムを作成/編集するページ

が自動的に作成されます。

Novius OSはフレームワークFuelPHPをベースにしています。FuelPHPには、scaffold(スキャフォールド、足場)という、コードを雛形を作る機能があります。「アプリケーション作成」ウィザードは、このscaffoldに似た機能を、GUIで実現しています。「アプリケーション作成」ウィザードを利用すれば、さらに効率よく開発することができます。

「アプリケーション作成」ウィザードを使ってみる

実際に、「アプリケーション作成」を使ってみます。「アプリケーション作成」ウィザードは、Novius OSに標準で同梱されていますが、インストール直後は有効化されていませんので、まず有効化しましょう。

有効化すると、管理画面に「アプリケーション作成」ウィザードが表示されるので、選択してください。

「イベント」を作ってみる

ここでは、試しに「イベント」というアプリケーションを作ってみます。

単純化のため、「イベントタイトル」「本文」「開催日時」「イベント終了後のメッセージ」の4つにします。「本文」はメインカラム、「開催日時」「イベント終了後のメッセージ」はサイドカラム、という設定にします。

それぞれのステップで、説明に従って項目を埋めていくと、アプリケーションが作成できます。

このようにして、アプリケーションが簡単に作れました。もちろん、このアプリケーションでは、開催日時を条件判定してメッセージ切り替えをするので、この部分はPHPのコードを書かなければなりません。

しかしながら、アプリケーションの雛形を活用するのと、アプリケーションを一からすべてコードを書くのと比較すれば、だいぶ効率よくなっているはずです。自動生成されたモデルのコードです。ここまで自動生成されれば、開発の効率はよくなりますね。

 array(
            'default' => null,
            'data_type' => 'varchar',
            'null' => false,
            'character_maximum_length' => 100,
        ),
        'even_publication_status',
        'even_publication_start',
        'even_publication_end',
        'even_created_at',
        'even_updated_at',
    );

    protected static $_title_property = 'even_event_name';

    protected static $_observers = array(
        'Orm\Observer_CreatedAt' => array(
            'mysql_timestamp' => true,
            'property'=>'even_created_at'
        ),
        'Orm\Observer_UpdatedAt' => array(
            'mysql_timestamp' => true,
            'property'=>'even_updated_at'
        )
    );

    protected static $_behaviours = array(
        'Nos\Orm_Behaviour_Publishable' => array(
            'publication_state_property' => 'even_publication_status',
            'publication_start_property' => 'even_publication_start',
            'publication_end_property' => 'even_publication_end',
        ),
        'Nos\Orm_Behaviour_Urlenhancer' => array(
            'enhancers' => array('event_event'),
        ),
        'Nos\Orm_Behaviour_Virtualname' => array(
            'virtual_name_property' => 'even_virtual_name',
        ),
        /*
        'Nos\Orm_Behaviour_Twinnable' => array(
            'context_property'      => 'even_context',
            'common_id_property' => 'even_context_common_id',
            'is_main_property' => 'even_context_is_main',
            'common_fields'   => array(),
        ),
        */
        /*
        'Nos\Orm_Behaviour_Author' => array(
            'created_by_property' => 'even_created_by_id',
            'updated_by_property' => 'even_updated_by_id',
        ),
        */
    );

    protected static $_belongs_to  = array(
        /*
        'key' => array( // key must be defined, relation will be loaded via $event->key
            'key_from' => 'even_...', // Column on this model
            'model_to' => 'Event\Model_...', // Model to be defined
            'key_to' => '...', // column on the other model
            'cascade_save' => false,
            'cascade_delete' => false,
            //'conditions' => array('where' => ...)
        ),
        */
    );
    protected static $_has_one   = array();
    protected static $_has_many  = array(
        /*
        'key' => array( // key must be defined, relation will be loaded via $event->key
            'key_from' => 'even_...', // Column on this model
            'model_to' => 'Event\Model_...', // Model to be defined
            'key_to' => '...', // column on the other model
            'cascade_save' => false,
            'cascade_delete' => false,
            //'conditions' => array('where' => ...)
        ),
        */
    );
    protected static $_many_many = array(
        /*
            'key' => array( // key must be defined, relation will be loaded via $event->key
                'table_through' => '...', // intermediary table must be defined
                'key_from' => 'even_...', // Column on this model
                'key_through_from' => '...', // Column "from" on the intermediary table
                'key_through_to' => '...', // Column "to" on the intermediary table
                'key_to' => '...', // Column on the other model
                'cascade_save' => false,
                'cascade_delete' => false,
                'model_to'       => 'Event\Model_...', // Model to be defined
            ),
        */
    );

    protected static $_twinnable_belongs_to = array();
    protected static $_twinnable_has_one    = array();
    protected static $_twinnable_has_many   = array();
    protected static $_twinnable_many_many  = array();
    protected static $_attachment           = array();
}

データベース定義ファイルも自動生成されます。

CREATE TABLE IF NOT EXISTS `events` (
    `even_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    `even_event_name` varchar(255) NOT NULL,
    `even_event_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
    `even_virtual_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
    `even_publication_status` tinyint(1) NOT NULL,
    `even_publication_start` datetime DEFAULT NULL,
    `even_publication_end` datetime DEFAULT NULL,
    `even_created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
    `even_updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`even_id`),
    KEY `even_created_at` (`even_created_at`),
    KEY `even_updated_at` (`even_updated_at`)
) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

メタデータのイベント開催日even_event_dateは、フォーマットがtimestampなので、開催日での並べ替えをしたい場合等に役立ちます。

イベントの追加画面です。コードを書かずにここまで作れてしまいます。

作成する手順を紹介した動画も公開されています。

アプリケーションを通じた交流

筆者も、「アプリケーション作成」ウィザードを使って雛形を作ったアプリケーションを公開しています。OpenStreetMapというアプリケーションで、オープンストリートマップの地図とマーカーをウェブサイトに表示するアプリケーションです。

筆者の作成した「OpenStreetMap」アプリケーションを参考にして、Romain Coeurさんが「Google Maps」アプリケーションを公開しています。Novius OSを媒介として、ユーザー同士で交流やコード共有が行われています。

Novius OS公式サイトのアプリケーション一覧で、アプリケーションが公開されています。興味を持った方はご覧ください。

Novius OSを活用して効率的な開発を

Novius OSはFuelPHPベースのCMSなので、FuelPHPを知っているエンジニアがカスタマイズしやすく、開発効率はもともと高いです。元々効率がよいですが、それに加えて「アプリケーション作成」ウィザードを活用すれば、さらに効率よく開発できます。

単にCMSを導入するだけ、ではなく、お客様の業務に合わせたシステムを作成し、使いやすい管理画面を提供するという場合、Novius OSのようにカスタマイズが自由で効率のよいソフトウェアは重宝するでしょう。

  • 16
  • このエントリーをはてなブックマークに追加

■この記事を書いた人

avatar

レスキューワーク株式会社 水野史土

レスキューワーク株式会社(WordPressサイト/テーマ/プラグインの診断および障害復旧サービス)の代表取締役。。WordPressおよびNovius OS(FuelPHPベースのCMS)のコアコード貢献者。concrete5.orgのコミュニティリーダー。主な著書「徹底攻略 PHP5 技術者認定 [上級] 試験問題集」(共著)。

■関連記事

クイックソートとバブルソートを比較してみよう #PHP... クイックソートとバブルソート ソートの方法には様々な方法があります。よく知られているものには、クイックソートやバブルソートなどがあります。ほかにもソート方法がありますが、ここではこの2つを紹介します。尚、今回は要素の値は全て異なる前提とします。 バブルソート バブルソートは、一番小さい(or大...
Webサイト発注の指標にもなるconcrete5のポイント機能「Karma」とは? #concret... concrete5とは? concrete5とは、CMS(conctents management system)と呼ばれる、Webサイトをブラウザから更新できるようにするソフトウェアのことです。アメリカ、オレゴン州ポートランドで開発されていますが、英語だけでなく様々な言語に対応しています。日本語...
覚えておくと便利!min, max関数を使ってシンプルなコードを書く方法 #PHP... <Part1> min関数の活用法 min関数は、いくつかの値から最小のものを返す関数です。非常にシンプルですね。シンプルな関数ですが、使い方はいろいろあります。とり得る引数も様々です。 配列を引数にする場合 min関数は配列を引数にすることができます。この場合、配列の要素の中で最も小さい値を...
手軽に開発環境が作れるビルトインサーバーを使ってみよう #PHP... PHPの動作環境構築方法 PHPプログラムは、コマンドラインから実行することができます。しかし、たいていの場合は、ブラウザでアクセスし、実行することが多いでしょう。この場合、ウェブサーバーを用意してアクセスします。以下のように、いろいろな方法があります。 Apache等のウェブサーバーを起動す...
トランプのカードを混ぜる仕組み(パーフェクトシャッフル)をプログラミングで調べてみよう #PHP... トランプのカードを混ぜる トランプゲームを行う時、カードを混ぜる必要があります。カードを混ぜる方法にも、様々なものがありますが、ここでは、リフルシャッフルを取り上げます。 リフルシャッフルは、カード全体を半分に分けて、交互に一枚ずつ混ぜていく、というものです。 実際に手作業で行うと、一度に二、三...
待ったなし!今すぐPHP5.3から移行しないと起こるかもしれないトラブルまとめ #PHP... まずは確認。PHP5.4で削除されるもの セーフモード、マジッククォート、register_globals、register_long_arraysが、PHP5.4で削除されています。これらはPHP5.3で非推奨となっていたものですが、PHP5.2以前ベースで開発していた等で使っている場合はコード...

今週のPickUPレポート

新着記事

週間ランキング

CodeIQとは

CodeIQ(コードアイキュー)とは、自分の実力を知りたいITエンジニア向けの、実務スキル評価サービスです。

CodeIQご利用にあたって
関連サイト
codeiq

リクルートグループサイトへ