アーカイブ : 2014年 3月

Sublime Text 2の設定(Packageの導入)

Sublime Text 2をより使いやすくするために、

Packageの導入を行いましょう。

始めにPackage Controlをインストールします。

メニューのViewからShow Consoleをクリックすると

入力ボックスが表示されますので、以下を貼り付けてEnterキーを押します。


import urllib2,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();os.makedirs(ipp) if not os.path.exists(ipp) else None;open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read())

Sublime Text 2を再起動します。

再起動後、メニューのPreferencesからPacage Controlが表示されれば完了です。

Packageのインストール

Ctrl+Shift+P もしくは、

メニューのToolsからCommand Palette…をクリックします。

入力ウィンドウが開きますので、「install」と入力し、

「Package Control:Install Package」が表示されたら

Enterキーを押します。

パッケージのリストが表示されますので、

インストールしたいパッケージを入力するか選択します。

オススメのPackage

HTML5:HTMLの自動補完

CSS Snippets:CSSの自動補完

jQuery:jQueryの自動補完

SublimeLinter:HTML,CSS,JSのエラーをリアルタイムで指摘

Goto-CSS-Declaration:HTMLのclass、ID名にカーソルをあてcommand + →でCSSの同じ単語に一発ジャンプ

IMESupport:日本語を入力する時に、エディタ内の現在行で入力できるようにする

AutoFileName:imageやlinkでファイルを扱う際、フォルダ名・ファイル名を一覧から選択できるようにする

他にも色々ありますので、検索すると良さそうです。

以下のサイトを参考にさせて頂きました。

SublimeText2の初心者 インストール・設定方法

Sublime Text 2ってエディタがすごくイイ。Dreamweaverから乗り換えた時の初期設定とか使い方とかをメモ

Sublime Text 2が立ち上がらなくなったときの対応

Sublime Text 2を使い始めて、色々カスタマイズをしていたら

エラーが表示されて、立ち上がらなくなってしまいました。

SublimeText2エラーメッセージ

SublimeText2エラーメッセージ

メッセージの内容は以下です。

Error trying to parse settings: Trailing comma before closing bracket in C:\Users\admin\AppData\Roaming\Sublime Text 2\Packages\User\Preferences.sublime-settings:9:1

どうも閉じカッコの前に不要なカンマが入っているということのようです。

メッセージにあった「C:\Users\admin\AppData\Roaming\Sublime Text 2\Packages\User\Preferences.sublime-settings」

というファイルを探してテキストエディタで開きます。


{
"color_scheme": "Packages/Color Scheme - Default/Sunburst.tmTheme",
"ignored_packages":
[
"Vintage"
],
"draw_white_space": "all", // スペース、タブを表示
"highlight_line": true, //現在行を強調する
}

となっていました。

最後の「”highlight_line”: true,」の「,」が不要なようです。

削除して、以下のようにして保存します。

{
"color_scheme": "Packages/Color Scheme - Default/Sunburst.tmTheme",
"ignored_packages":
[
"Vintage"
],
"draw_white_space": "all", // スペース、タブを表示
"highlight_line": true //現在行を強調する
}

これでOKだろうと、起動を試みたが立ち上がらない・・・。

タスクマネージャーにSublime Text 2が残っていないか確認してみたら、

バックグラウンドプロセスにいました。

このプロセスを終了させて、Sublime Text 2の起動で立ち上がってくれました。

テキストエディタはSublime Text 2がオススメ

テキストエディタはずっと秀丸を使い続けてきたのですが、

最近「Sublime Text 2」を使い始めています。

しばらく使ってみて良さそうなら、

完全に乗り換えようと思っています。

Packageをインストールすることで

入力補完機能など便利な機能を使えるようになります。

とりあえずインストールしてみて

使ってみるだけなら無料でできますので、

気になる方はぜひ試してみてください。

継続して使用する場合は、有料になります。

とりあえずインストールしたら初期設定を行ってみましょう。

メニューの「Preferences」から「Settings – User」をクリックします。


{
"color_scheme": "Packages/Color Scheme - Default/Sunburst.tmTheme",
"ignored_packages":
[
"Vintage"
]
}

上記のように表示されるので、「}」の前に設定を追加して以下のようにしました。

{
"color_scheme": "Packages/Color Scheme - Default/Sunburst.tmTheme",
"ignored_packages":
[
"Vintage"
],
"draw_white_space": "all", // スペース、タブを表示
"highlight_line": true, //現在行を強調する
"word_wrap": true //自動改行
}

「draw_white_space」、「highlight_line」、「word_wrap」の3つを追加しました。

他にも設定できるパラメーターがありますので、

試しながら紹介していきます。

PHPでURLが存在するかを調べる方法

PHPで、入力されたURLが実際に存在するかを

チェックする処理を実装したので、その時のメモ。

以下を使う方法があります。

1.get_headers

2.fopen

3.file_get_contents

結局、get_headersを使う方法を採用しました。

get_headers()は、HTTP リクエストに対するレスポンス内で

サーバーによって送出されたヘッダの配列を返すので、

この中からステータスコードが200であるかを

チェックします。

以下のように実装しました。


$header = @get_headers($url);
if(preg_match('#^HTTP/.*\s+[200]+\s#i', $header[0])) {
return true;
} else {
return false;
}

以下のサイトを参考にさせてもらいました。

PHPでURLが存在するか確認する方法

URLが実際に存在するかどうかを調べる方法(PHP)

PHPのファイルダウンロードでのファイル名文字化け対応

PHPでファイルダウンロードが画面を作ったのですが、

ユーザーさんからダウンロードしたファイルが文字化けする

という報告があり調査しました。

私が普段使っているのはGoogle Chromeなのですが、

Chromeでは文字化けは起こっていませんでした。

ユーザーさんに確認すると、使用しているブラウザは

IEとのこと。

IEで試してみると、やはり文字化けしました。

ダウンロードする処理は以下のように書いていました。


header("Content-Type: application/octet-stream;");
header("Content-Disposition: attachment;filename=".$file_name);
echo file_get_contents($file_name);

文字化けするのなら文字コードを変えてやればいいということで

mb_convert_encodingを使ってみます。


header("Content-Type: application/octet-stream;");
header("Content-Disposition: attachment;filename=".mb_convert_encoding($file_name, 'sjis-win', 'UTF-8'));
echo file_get_contents($file_name);

サーバー上のプログラム、DBはUTF-8なので、

UTF-8からWindows用にShift-JISに変換します。

これで文字化けは解消しました。

IEだけではなく、念のためChromeで試しても文字化けせず。

PHPでCSVダウンロード画面を作ったがCSVファイルを開くとエラーが表示される件

PHPでCSVダウンロード画面を作ったのですが、

ダウンロードしたCSVファイルをエクセルで開くと

エラーが表示されてしまうので調べました。

エラー内容は、以下のようなものです。

開こうとしているファイル ‘***.***’ の形式は ファイル拡張子が示す形式と異なります。

Excel は ‘xxxx.csv’が SYLK ファイルであることを確認しましたが、読み込むことができません。ファイルにエラーが含まれるか、SYLKファイル形式でない可能性があります。異なるファイル形式でそのファイルを開くには、[OK]をクリックしてください。

テキストエディタでCSVファイルを開いてみても、

おかしな点は見つかりませんでした。

同じエラーで困っている方がいらっしゃるようです。

CSVファイルの先頭を「ID」で始めるとSYLK形式として

読み込もうとするためこのようなエラーが発生するようです。

マイクロソフトのサポートページには、回避策として

先頭の文字列”ID”の前にスペースを入力する方法が掲載されていました。

■参考
【Excel】SYLK ファイルであることを確認しましたが、読み込むことができません

[PJ98]CSV形式で保存したファイルをExcelで開くとエラー発生

画像ファイル共有にはpiwigoがオススメ

社内でHP用の写真素材を共有したいということがあり、

フォトギャラリーシステムを探しましたが、

インストールの簡単さ、見た目の良さ、機能の豊富さから

piwigoを使用することに決めました。

一番の決め手は、手元にある大量の画像ファイルを

FTPでアップし、これを読み込んでくれる機能でした。

管理画面から1ファイルずつアップロードとかになると

使えなかったのですが、この機能のおかげで非常に助かりました。

インストール

piwigoダウンロードページからzipファイルをダウンロードします。

「Download Package」を選びました。

ダウンロードしたzipファイルを解凍してサーバーにアップします。

またpiwigo用のデータベースをMySQLで作成しておきます。

サーバーにアップロードできたら、ブラウザからインストールフォルダにアクセスします。

フォルダに権限を設定していないと、_data/フォルダに権限がないというような

エラーメッセージが表示されますので、_data/に権限777を設定します。

Give write access (chmod 777) to "_data/" directory at the root of your Piwigo installation

Piwigoインストール

Piwigoインストール

データベース設定に、作成したデータベース情報を入力します。

管理設定に、Piwigoの管理ユーザー情報を入力します。

以上が入力できたら「インストールを開始する」ボタンをクリックします。

Piwigoインストール完了

Piwigoインストール完了

インストール完了画面が表示されます。

local/configフォルダに書き込み権限がなかった場合、

「local/config/database.inc.php の設定ファイル作成に失敗しました。」

と表示されますので、「設定ファイルをダウンロードします。」をクリックして

database.inc.phpをダウンロードします。

念の為に、database.inc.phpを開いて中身を確認しておきます。

記載されている内容が「その他の解決は、上のボックスにあるテクストをコピーし、”local/config/database.inc.php”に貼り付けます。」

のボックス内のテキストと同じかを確認します。

確認できたら、database.inc.phpを「local/config」フォルダ内にアップロードします。

アップロードできたら、「ギャラリーへ」ボタンをクリックします。

「こんにちは ○○さん, あなたのPiwigoフォト・ガラリーが何も入っていません!」みたいな

メッセージが表示されますので、「写真を追加する」をクリックして

管理画面に遷移します。

uploadフォルダに権限がないとメッセージが出た場合は、

メッセージ通りにuploadフォルダに権限777を設定します。

以上でインストールは完了です。

今回は、手元にある大量の素材ファイルを一括でpiwigoに登録したかったので、

FTPでアップロード⇒同期という方法を使用します。

管理画面上で「FTP + 同期」タグを選択します。

「クイックスタート」に手順が書いてありますので、この通りに進めます。

1.「galleries」フォルダに画像ファイルをアップロードします。

「galleries」フォルダ内にフォルダを作成してもかまいません。

警告にもありますが、ディレクトリおよびファイル名には、文字、「-」「_」「.」の記号のみ含んでください。空白、アクセント符号は含まないでください。

今回、日本語のフォルダ名、ファイル名を使用していたのですが、

日本語は使用不可でした。

全て半角英数に置き換えました。

2.同期化する

「galleries」フォルダへのアップロードが終わったら、

管理画面メニューの「ツール」から「同期化」をクリックします。

フォルダとファイルを一緒に同期化する場合は、

「ファイル構造とデータベースを同期化する」で

「ディレクトリ + ファイル」にチェックを入れます。

最初に実行する場合は、「シミュレーション」の

「シミュレーションのみ実行する (データベースは更新されません)」に

チェックを入れてエラーが発生しないか確認した方がよいでしょう。

エラーが発生しないことが確認できたら、このチェックを外し再度実行します。

これだけで、自動で同期化してくれます。

フォルダ名を日本語にしたい場合は、同期化後に変更できます。

Piwigoで簡単に画像ファイルの共有ができるようになりましたので、

同じように悩んでいる方はぜひPiwigoをお試しください。

PHPで日付計算する方法のまとめ

PHPで「現在から○日後」「ある日から○カ月後」の日付を求めたい

ということがよくあるのでまとめてみました。

strtotimeを使います。

strtotimeは、「英文形式の日付をUnixタイムスタンプに変換する」関数です。

int strtotime ( string $time [, int $now = time() ] )

以下のように使用します。

strtotime("now");

strtotime("+1 day");

strtotime("next Thursday");

1週間後の日付を求める場合は以下のように書きます。

echo date('Y-m-d', strtotime('+1 week'));

1か月と10日後の日付はこうなります。

echo date('Y-m-d', strtotime('+1 month 10 days'));

ある特定の日から○日前というのも求められます。

strtotimeの2番目の引数に、特定の日を入れます。

echo date('Y-m-d', strtotime('+1 month', strtotime('2014-03-12')));

上記は、「2014年3月12日の1カ月後の日付」を表示します。

CakePHPでログイン認証

CakePHPでログイン認証を実装します。
パスワードを暗号化して保存しますので、ユーザー編集画面でパスワードをデフォルトで空欄にし、入力した場合のみ変更する実装にします。

まずはユーザーテーブルを作成。

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` text,
  `username` text,
  `password` text,
  `deleted` smallint(6) DEFAULT '0',
  `created` datetime DEFAULT NULL,
  `updated` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ;

Userモデルを作成します。
app/Model/User.php
bakeで作成したものに、以下の内容を追加しました。

■パスワードの暗号化

App::uses('SimplePasswordHasher', 'Controller/Component/Auth');

AuthコンポーネントのSimplePasswordHasherを使用します。

    public function beforeSave($options = array()) {
        if (!$this->id) {
            $passwordHasher = new SimplePasswordHasher();
            $this->data['User']['password'] = $passwordHasher->hash($this->data['User']['password']);
        } else if ($this->id && $this->data['User']['password1']) {
            $passwordHasher = new SimplePasswordHasher();
            $this->data['User']['password'] = $passwordHasher->hash($this->data['User']['password1']);
		}
        return true;
    }

beforeSaveで、保存前にpasswordを暗号化します。
編集画面で、パスワード欄に何も入力しない場合は変更したくないので、変更画面(views/users/edit)のパスワードをpassword1として、これが入力されている場合に暗号化してpasswordにセットします。
登録画面では、暗号化して保存します。

■バリデーション
$validateで設定します。
パスワードは、登録画面のみ必須にしたいので、「’on’ => ‘create’」を指定します。
また、usernameは半角英数のみのユニークにしたいので、alphaNumericとisUniqueを指定します。
alphaNumericは日本語を通してしまうので、正規表現を使ってエラーチェックを設定します。

<?php
App::uses('AppModel', 'Model');
App::uses('SimplePasswordHasher', 'Controller/Component/Auth');

/**
 * User Model
 *
 */
class User extends AppModel {

    public function beforeSave($options = array()) {
        if (!$this->id) {
            $passwordHasher = new SimplePasswordHasher();
            $this->data['User']['password'] = $passwordHasher->hash($this->data['User']['password']);
        } else if ($this->id && $this->data['User']['password1']) {
            $passwordHasher = new SimplePasswordHasher();
            $this->data['User']['password'] = $passwordHasher->hash($this->data['User']['password1']);
		}
        return true;
    }

/**
 * Display field
 *
 * @var string
 */
	public $displayField = 'name';

/**
 * Validation rules
 *
 * @var array
 */
	public $validate = array(
		'name' => array(
			'notEmpty' => array(
				'rule' => array('notEmpty'),
				'message' => '必須入力です',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'username' => array(
			'notEmpty' => array(
				'rule' => array('notEmpty'),
				'message' => '必須入力です',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
			'alphaNumeric' => array(
				'rule' => array('alphaNumeric'),
				'message' => '半角英数字のみ入力してください',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
			'isUnique' => array(
				'rule' => array('isUnique'),
				'message' => 'このログインIDは既に登録されています'
			),
		),
		'password' => array(
			'notEmpty' => array(
				'rule' => array('notEmpty'),
				'message' => '必須入力です',
				//'allowEmpty' => false,
				'required' => true,
				'last' => true, // Stop validation after this rule
				'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
	);

	public function alphaNumeric($check) {
	    $value = array_values($check);  // 配列の添字を数値添字に変換して・・・
	    $value = $value[0];     // 最初の値を取る
	    return preg_match('/^[a-zA-Z0-9]+$/', $value);
	}
}

次にコントローラーを作成します。
app/Controller/UsersController.php

<?php
App::uses('AppController', 'Controller');
/**
 * Users Controller
 *
 * @property User $User
 * @property PaginatorComponent $Paginator
 */
class UsersController extends AppController {

/**
 * Components
 *
 * @var array
 */
	public $components = array('Paginator');

	function beforeFilter() {
		parent::beforeFilter();

		$this->Auth->allow('add', 'edit', 'logout');
	}

	function login() {
		$this->layout = 'simple';
		if ($this->request->is('post')) {
			if ($this->Auth->login()) {
				$this->redirect($this->Auth->redirect());
			} else {
				$this->Session->setFlash(__('Invalid username or password, try again'));
			}
		}
	}

	function logout() {
		$this->redirect($this->Auth->logout());
	}
	

/**
 * index method
 *
 * @return void
 */
	public function index() {
		$this->User->recursive = 0;
		$this->set('users', $this->Paginator->paginate());
	}

/**
 * view method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function view($id = null) {
		if (!$this->User->exists($id)) {
			throw new NotFoundException(__('Invalid user'));
		}
		$options = array('conditions' => array('User.' . $this->User->primaryKey => $id));
		$this->set('user', $this->User->find('first', $options));
	}

/**
 * add method
 *
 * @return void
 */
	public function add() {
		if ($this->request->is('post')) {
				$this->User->create();
				if ($this->User->save($this->request->data)) {
					$this->Session->setFlash(__('The user has been saved.'));
					return $this->redirect(array('action' => 'add_comp'));
				} else {
					$this->Session->setFlash(__('The user could not be saved. Please, try again.'));
				}
		}
	}
	function add_comp(){
	}

/**
 * edit method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function edit($id = null) {
		if (!$id && empty($this->request->data)) {
			throw new NotFoundException(__('Invalid user'));
		}
		if ($this->request->is(array('post', 'put'))) {
				if ($this->User->save($this->request->data)) {
					$this->Session->setFlash(__('The user has been saved.'));
					return $this->redirect(array('action' => 'edit_comp'));
				} else {
					$this->Session->setFlash(__('The user could not be saved. Please, try again.'));
				}
		} else {
			$options = array('conditions' => array('User.' . $this->User->primaryKey => $id));
			$this->request->data = $this->User->find('first', $options);
			$this->request->data['User']['password'] = null;
		}
	}
	function edit_comp(){
	}


/**
 * delete method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function delete($id = null) {
		$this->User->id = $id;
		if (!$this->User->exists()) {
			throw new NotFoundException(__('Invalid user'));
		}
		$this->request->onlyAllow('post', 'delete');
		if ($this->User->delete()) {
			$this->Session->setFlash(__('The user has been deleted.'));
		} else {
			$this->Session->setFlash(__('The user could not be deleted. Please, try again.'));
		}
		return $this->redirect(array('action' => 'index'));
	}
}

次に、AppController.phpで、Authコンポーネントの設定を行います。
app/Controller/AppController.php

<?php
/**
 * Application level Controller
 *
 * This file is application-wide controller file. You can put all
 * application-wide controller-related methods here.
 *
 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 * @link          http://cakephp.org CakePHP(tm) Project
 * @package       app.Controller
 * @since         CakePHP(tm) v 0.2.9
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 */

App::uses('Controller', 'Controller');

/**
 * Application Controller
 *
 * Add your application-wide methods in the class below, your controllers
 * will inherit them.
 *
 * @package		app.Controller
 * @link		http://book.cakephp.org/2.0/en/controllers.html#the-app-controller
 */
class AppController extends Controller {
    var $components = array('Session', 
            'Auth' => array(
                'authenticate' => array('Form' => array('scope' => array('User.deleted' => '0'),
														))
            ),
			);
}

最後にviewを作成します。
app/View/Users/add.ctp

<!-- app/View/Users/add.ctp -->
<div class="users form">
<?php echo $this->Form->create('User'); ?>
    <fieldset>
        <legend><?php echo __('Add User'); ?></legend>
        <?php echo $this->Form->input('username');
        echo $this->Form->input('password');
    ?>
    </fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
</div>

ユーザー情報の編集画面です。
パスワードを「password1」にします。
app/View/Users/edit.ctp

<!-- app/View/Users/edit.ctp -->
<div class="users form">
<?php echo $this->Form->create('User', array('action'=>'edit')); ?>
    <fieldset>
        <legend><?php echo __('Add User'); ?></legend>
        <?php echo $this->Form->input('username');
        echo $this->Form->input('password1');
    ?>
    </fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
</div>

ログイン画面です。
app/View/Users/login.ctp

<!-- app/View/Users/login.ctp -->
<div class="users form">
<?php echo $this->Session->flash('auth'); ?>
<?php echo $this->Form->create('User'); ?>
    <fieldset>
        <legend><?php echo __('Please enter your username and password'); ?></legend>
        <?php echo $this->Form->input('username');
        echo $this->Form->input('password');
    ?>
    </fieldset>
<?php echo $this->Form->end(__('Login')); ?>
</div>

EclipseのERMasterでER図を描く

では実際に、ER図を描いていきます。

ERMasterを使用できるように環境を設定する方法は、EclipseのインストールERMasterのインストールERMasterでER図作成を開始する、それぞれ過去の記事をご覧ください。

ERMasterのメニューにある「テーブル」をクリックします。
するとカーソルに「プラス」がついて、描画領域に新テーブルを作成できるようになります。

ERMaster

ERMaster

任意の場所で、左クリックすると、テーブルが作成されます。

ERMaster

ERMaster

作成されたテーブルをダブルクリックすると、テーブル情報の編集画面が立ち上がります。

ERMaster テーブル情報

ERMaster テーブル情報

物理名にテーブルの物理名を、論理名にテーブルの論理名を入力します。
今回は、ユーザーテーブルを作成します。
CakePHPでシステム開発を行うことが多いので、CakePHPのユーザーテーブルを意識して作成してみます。
物理名を「users」、論理名を「ユーザー」とします。

ERMaster テーブル情報

ERMaster テーブル情報

項目を追加するには、テーブル情報ボックスの中ほどにある「追加」ボタンをクリックします。
列情報ボックスが立ち上がります。

ERMaster 列情報

ERMaster 列情報

最初にプライマリキーのIDを作成します。
主キー、UNIQUE、AUTO_INCREMENTにチェックを入れます。
物理名を「id」、論理名を「ID」とし、型に「int」を選択します。

ERMaster 列情報

ERMaster 列情報

OKをクリックすると項目が追加されます。

ERMaster テーブル情報

ERMaster テーブル情報

次はユーザー名を作成します。
NOT NULLにチェックを入れ、物理名を「name」、論理名を「ユーザー名」とし、型に「text」を選択します。

ERMaster 列情報

ERMaster 列情報

同様にして、ログインID、パスワード、登録日時、更新日時を追加します。
登録日時の「created」および更新日時の「updated」ですが、この項目名で作成しておくと、
CakePHPが自動で登録・更新してくれるので、作成しておきます。

ERMaster テーブル情報

ERMaster テーブル情報

OKボタンをクリックすると、テーブル情報が反映されます。

ERMaster

ERMaster

物理名だけだとわかりずらいので、論理名も表示させましょう。
描画領域で右クリックして、メニューから「表示」⇒「ビューモード」と進み、「論理/物理」を選択します。

ERMaster 論理名を表示

ERMaster 論理名を表示

論理名と物理名が表示され、わかりやすくなりました。

ERMaster 論理名と物理名を表示

ERMaster 論理名と物理名を表示

この他にも、「表示」では表記法や表記レベルなど選択できますので、お好みに合わせてカスタマイズしてください。

最後に、実際にデータベース上にテーブル作成を行うためのSQL文を生成します。
描写領域で右クリックし、「エクスポート」⇒「DDL」をクリックします。

ERMaster SQL生成

ERMaster SQL生成

出力ファイルで出力先を選択し、OKをクリックすると、SQL文が出力されます。

ERMaster SQL文生成

ERMaster SQL文生成

実際に以下のようなSQL文が出力されました。

SET SESSION FOREIGN_KEY_CHECKS=0;

/* Drop Tables */

DROP TABLE users;




/* Create Tables */

CREATE TABLE users
(
	-- 主キー
	id int NOT NULL UNIQUE AUTO_INCREMENT COMMENT '主キー',
	name text NOT NULL,
	login text NOT NULL,
	password text NOT NULL,
	created datetime,
	updated datetime,
	PRIMARY KEY (id)
);



実際に使いだすと手放せなくなりますので、是非一度お試しください!