データベースにテーブルを新規生成する仕組みや、その基礎について解説します。EC機能や予約機能と言った複雑な仕組みを新しく構築する場合に、標準のデータベース構造では仕様的に難しくなる問題が多いでしょう。その問題を少し解決しやすくする為の1つのアプローチとしても、データを保存するテーブル(表のようなもの)を別に用意する方法があります。テーブルは投稿や固定ページの記事データ以外にメニューやカスタマイズ情報の一部なども記録している汎用的なテーブルみたいな使われ方もしているのかな。重要な情報を持っているテーブルな感じがしますね。テーブルも情報を保存するテーブルだけど、有効化されているプラグインやウェブサイトの全体的な情報などしか保存されていない感じです。テネーブルそうですね。名でデータ保存されます。テーブルに保存されます。テーブルは、実際には非常に大切なデータを大量に保存している重要なテーブルです。標準で用意している以外の独自テーブルを指します。カスタムテーブルを作る意味は?ブリエ新しくテーブルを作る理由って何だろう?テネーブル複雑なシステムを作る場合には、複雑なデータを取り扱う必要がありますよね。言った複雑なデータを、他の多くの重要なデータと同じ場所に保存するのは、ちょっと怖いですよね?影響を与えちゃいそうですよね。標準のテーブルにデータを保存していた場合、データを削除する際にも標準のデータを削除しないように気をつけて作らなければなりません。言った機能が正しく作れていない場合、運営しているウェブサイトに深刻な不具合を作ってしまう原因にもなっちゃいそうって感じなかったでしょうか?テネーブルその問題を解決する為にも、新しいテーブルを用意すると言うのは、大きな理由の1つです。標準のテーブルとは別にデータを読み書きすることで、標準のデータを守る、またサイトのパフォーマンスを大きく低下させない事が可能になります。それに、新しく追加したい機能の用途に合わせてテーブル設計を行う事で、それに合わせたシステムを構築しやすくするのも大きな理由でしょう。ルミェール他にも、その機能のデータがいらなくなった時は、追加したテーブルを削除するだけでデータを削除できる便利な利点も。個人情報のデータを守る・正しく削除すると言う点でも、テーブルを別にすると言うことは重要なんだ。カスタムテーブルを用意するのは、プラグインでテネーブルカスタムテーブルを新しく作る(新規生成)場合は、すべてプラグインで行うのが基本です。場合によってはテーマで用意される場合もありますが、推奨はされていない方法です。ルミェールテーマで新しくテーブルを作らない方が良い理由は、テーマを変更した場合にそのデータをどう取り扱うかの問題になるから。テーマ独自の機能でもデータを残したままにするのは無駄だよね!テーブルを新規生成するタイミングと削除するタイミングテネーブルプラグインで新しくテーブルを新規生成するタイミングは、プラグインが有効になった時が基本です。その場合、テーブルを使わなくなるのは、プラグインが削除される時になりますので、その時が削除するタイミングとなります。ルミェールメンテナンス時やアップデートなどの場合によっては、プラグインを停止する事があるよね。停止時にテーブルは削除しちゃ駄目だよ。良く間違ってプラグイン停止時にテーブルを削除するように実装されているケースもあるけど、それが理由でメンテナンスが終わった後やアップデートが終了した後にデータが消えているなどの問題に繋がっているんだ。停止時は、テーブルに関しては何もしないで、そのままの状態にしておく必要があるよ。プラグインを有効化する時にもフックが実行されるようになっています。この場合は専用の関数が用意されています。関数で、テーブルを新規生成する処理を実行させる関数を設定すれば、プラグインを有効化する時にテーブルを新規生成することができます。プラグインを削除(アンインストール)する時にもフックが実行するようになっています。関数が用意されています。関数で、テーブルを削除する処理を実行させる関数を設定すれば、プラグインを削除する時にテーブルを削除することができます。プラグインのアンインストール時に呼び出される関数を登録する。クラスについてブリエプラグインを有効化した時や削除する時に処理を行うようにするのは解ったけど、テーブルを新規作成や削除はどのようにやるんだろう?テネーブルテーブルはデータベースに存在するものです。その為、データベース操作が必要となります。言うクラスが用意されています。言うデータベース言語を使う必要があるんだ。簡単にしてくれる便利なクラス。簡単に、安全にデータベースに接続からデータ操作を処理してくれるよ。テーブルを追加してみようテネーブル実際に、テーブルを新規生成してみましょう。言うテーブル名で新規生成する例にしたよ。部分は異なる場合もあるので、その場合は文章やコードを置き換えながら確認してね。サンプルコードについて解説したソースコード全体を動作するかたちで記述しているファイルは、記事の最後からダウンロードできるようにしています。動作確認される場合は、そちらをダウンロードしてご確認ください。);}}ブリエすごく難しくないですか...?テネーブルそうですね。通してみると難しいと思います。順番に解説していきます。関数をプラグイン有効時に実行されるようにフック登録しています。関数では、最初にインストールされている該当プラグインのバージョンと、実行されている該当プラグインのバージョンを比較しています。ブリエえっと、何でバージョンを比較するのでしょうか?テネーブル比較する大きな理由としては、プラグインを無効化(停止)した状態から再び有効化した場合の動作対応です。その場合のように、必ず違うバージョンの時だけプラグインが有効化されるとは限りません。プラグインの停止後に同じバージョンで有効化される場合があります。一般的に同一のバージョンの時はプラグインの中身に変更が無いですから、テーブル構造も変更する必要はないはずです。変更がないのにテーブルの新規生成をしようとすることは、テーブルに保存してあるデータにとっては無駄な危険操作を行ってしまいます。その為、テーブル操作処理は行わないようにする必要があります。ルミェールデータベースにはたくさんのデータが存在しているので、データを守る為には、操作する必要が無い場合は処理を実行しないようにするのも大事なんだ!テネーブル処理の解説に戻ります。グローバル宣言をしています。インストールする際に設定したデータベースのプレフィックスとなる為です。ルミェールプレフィックス(prefix)は、「接頭辞」という意味。先頭に一意の特別な文字列を付けるんだ。1つのデータベースに複数インストールする場合などが理由だよ。抜いた文字列を合わせたのを、変数で設定してるんですね。テネーブル続いていきましょうか。次は、文字コードの設定です。バージョンやインストール時の言語や設定方法によって、データベースの文字コードが異なる場合があります。クラスを用いて設定されている文字コードを取得するのが安全です。定義されているんだよ。ブリエ文字コードの違いとか詳しくないと、何だか難しいことですね。設定されていない場合は、文字コードは設定しません。比較しているところです。条件が負の場合、文字コードは設定されません。言う場合もあるので、文字コードについては、あまり難しく考える必要はなく、ここは文字コードの設定にはこの書き方をするって覚えておくだけでも良いです。テネーブル次に行っているのは、クエリ文字列の設定です。違うんでしょうか?テネーブル試しに、クエリ文字列のコードを1行にして動作を確認してください。ブリエあれ?エラーが出ちゃっています?または正常にテーブルが新規生成がされないようになっちゃってます。クエリ文字列をそのまま実行する関数ではないからです。参照してみましょうか。関数は現在のテーブル構造を走査し、作成予定のテーブル構造と比較します。関数はやや融通がききません。テーブルの作成または更新テネーブル現在のテーブル構造を走査する為に、色々な制約が存在しています。ウェブサイトでご確認ください。関数の制約が理由で動作エラーになる場合もあるよ。制約でエラーにならないか、テーブルの新規生成の時だけではなく、構造の変更などの時もテストする必要があるよ!テネーブルすこし難しいことですが、テーブル内のデータを安全に更新する為には必要なことです。関数のテーブル構造を走査によって、テーブル新規生成やテーブル構造の変更・更新を正しく行ってくれるようになります。データベース操作を教える時には何故かエラーが出る、難しいと相談されることがあります。使用するように1行などで記述している場合が多いからでした。正しいけれどエラーとなってしまうと言う問題になってしまいますので、注意です。関数を利用して保存します。再度有効化した時などには、その値をインストールされたバージョンの値として前述の比較処理の判定に利用されます。テーブルを削除してみようテネーブル作ったものは必要なくなった時に消す必要があるかもしれません。テーブルを削除するサンプルコードも見ていきましょう。);}テネーブル処理は、テーブルの新規生成の時とほぼ同様です。テーブルの生成や更新でない限り、現在のテーブル構造を走査する必要はありません。