2016.10.03

Giiとカスタマイズ入門

こんにちは。次世代システム研究室のS.Iです。
次世代システム研究室ではシステム開発を行う上で様々な取り組みを行っています。
今回取り上げるプロジェクトでは、Yii2 FrameworkのGiiを利用してプログラムの自動生成を行うことで実装の効率化を図っています。ここではGiiの利用方法とカスタマイズについて触れていきたいと思います。

Giiによる自動生成

概要ついて

Yii2 Frameworkでは「Gii」と呼ばれるコードジェネレータが提供されています。これを利用すると、CRUD、モデル、コントローラー、フォーム、モジュール などを素早く生成することが出来ます。

Giiをインストールする

インストールについてはこちらを参照ください。

Giiでコードを生成する

コード生成についてはこちらを参照ください。

gii_1

いくつか紹介されていなかった点の補足ですが、
上記のようにコードを生成する画面ではどのようなファイルが作成されるか、内容を確認することができます。

gii_2

また、既に作成したものと作成しようとしているファイルのdiffが
画面上で確認できる機能も非常に便利でした。

 

Giiのカスタマイズついて

カスタマイズの一例を紹介します。

ステップ1:
まずはカスタマイズしたいプログラムのデフォルトのファイル一式を
コピーして適当な場所に配置します。
例)crudをカスタマイズする
 crud
    ├── default
    │   ├── controller.php
    │   ├── search.php
    │   └── views
    │       ├── create.php
    │       ├── _form.php
    │       ├── index.php
    │       ├── _search.php
    │       ├── update.php
    │       └── view.php
    ├── form.php
    └── Generator.php
※コピー元は「vendor/yiisoft/yii2-gii/generators」
※コピーするファイルはカスタマイズするものだけです

ステップ2:
あとは中身を書き換えるだけ!
ただし、元のプログラムのアップデートに対応できるように以下のようなクラスは
基本的にコピーしたものを書き換えるのではなくOverrideで内容を変更するのがおすすめです。
※例)vendor/yiisoft/yii2-gii/generators/controller/Generator.php

ステップ3:
設定の変更です。実際の「main.php」の設定は以下です。
hosts:
'modules'             => [
    'gii' => [
        'class'      => 'yii\gii\Module',
        //以下は実行を許可するIPです。適切に設定しましょう。
        'allowedIPs' => ['*'],
        //以下でGeneratorをカスタマイズしたものに設定します
        'generators' => [
            'crud'  => [
                'class' => 'app\generators\crud\CustomGenerator',
            ],
            'model' => [
                'class' => 'app\generators\model\CustomGenerator',
            ],
        ],
    ],
],
ステップ4:
だいぶ省略しましたが、あとは画面でコードを生成するだけです!

今回のプロジェクトでは以下をカスタマイズすることで
数段階レベルアップして開発作業を効率化することができました。
・templateエンジンへの適用
・ヴァリデーションの拡張
・メッセージの管理
・Bootstrapの適用

実際のカスタマイズ前と後の画面イメージは以下です。

カスタマイズ前:
gii_4

カスタマイズ後:
gii_3

最後に

残念ながら、業務要件の高い画面ではあまり効果を発揮することはできませんが、
管理系のシステムなど比較的調整のつきやすいものに適用することで品質や開発コストを大幅に向上できます。あまり固執せずに可能な範囲で利用できるとよいのではないでしょうか。

次世代システム研究室では、アプリケーション開発や設計を行うアーキテクトを募集しています。アプリケーション開発者の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧 からご応募をお願いします。

Pocket

関連記事