• T, M T, M
  • — 2 weeks ago
Laravel で開発をして思ったこと①

客先の要望で初めてLaravelを使って開発を行う事になりました。

ここでは、Laravelで開発した過程で思った、良かった点や悪かった点を書いていこうと思います。
参考に使ったバージョンは7.3となります。

◆ Migrationで詰まったあれこれ。

最近のフレームワーク同様にLaravelには専用のMigrationが付いてます。
DBを管理していく上で、このMigration機能を使う事になるのですが、詰まった事があったので書いておきます。

①ORマッパーで書いたMigration実行エラー時の挙動について

開発中の話なので、参照キー(foreign Key)設定のあるテーブル作成(Create Table)時に、エラーが出る事が多々あります。
※エラー原因は、参照先テーブルがMigrationの順番等で作られていなかったり、削除されていたり、メモリが足りなかったり等々です。

ここで問題となるのが、エラーが発生したのに、テーブルを作ってしまうという点です。

どうやら、Migration実行時に参照キーがあるテーブルを作る場合、参照設定のある1つのテーブル作成(Create Table)文を生成するのではなく、テーブル作成(Create Table)文と、参照キー設定(Alter Table)文の2つのSQLを生成しており、そのためこのような事が起こるようです。

単純に生成された1つ目のテーブル作成(Create Table)文が成功し、2つ目の参照キー設定(Alter Table)文で落ちるといった形です。

ここで面倒なのは、エラーを解消した後に再度同じテーブル作成文をMigrationで実行するのですが、エラー時に参照制約がないテーブルが既に出来ているため、今度はテーブル作成(Create Table)文で重複作成エラーになってしまうという事です。

ついでに言えば自分の開発してる環境では、テーブルが既にある場合、スキップして正常扱いにするようにしていたので、参照キーの張っていないテーブルが、あたかも正しいテーブルかのように出来上がっていたりしました。

・・・なんだかなぁと。

なので、参照キーを張っているテーブルを作る場合、エラーが出たらテーブルが残っている可能性があるので、再度実行する前に確認して削除しましょうと。

早く参照キー制約付きのCreate Table文を生成するようになって欲しいもんです。

②ORマッパーがパーティションに対応していない

ログテーブルの作成に当たって、後々にデータ容量が膨らむ事を考慮して、古くなった不要データをサクっと削除できるように、パーティションを設定する事があります。

幾つか調べてみたのですが、バージョン7.3時点では、LaravelのORマッパーではパーティションを作る事ができないようです。

パーティションは必要なため、仕方なく直接SQLを実行するようなロジックをMigrationファイルに書き込んで対応しましたが、今後の課題として対応して欲しい所です。

とりあえず第1回は不便さを感じた点でMigrationについて記載してみました。

◆感想

個人的な見解ですが、各フレームワークが用意している、DBにアクセスするための専用ORマッパーは好きではありません。
本音で言えば、これらORマッパーで記述するより、全て直接SQLで書いた方がいいとさえ思っています。

これらORマッパーは内部的にSQLを生成しているだけのスクリプトで、SQLを習得していればなくても対応可能です。
※今回もパーティションを構築する部分で最終的にSQLを書く事で乗り切っています。
現在の開発環境としては、お客様のソースの書き方に合わせる必要があるため、使わざるおえないというのが実情ですが・・・

更に最もな理由として、これらの専用ORマッパーは、頑張って覚えたとしても、他のフレームワークを使う事になれば、その知識が全て無駄になってしまうからです。
逆にSQLであれば、全てのフレームワークのDBアクセス部分で使用する事ができます。

実際問題フレームワークは、1つだけ極めればいいといった技術ではなく、客先や時代によってコロコロ変える事を求められるせいなのもあります。
私自身も、symfony → CakePHP → CodeIgniter → phalcon → Laravel(今ここ)と・・・客先都合で、次々と使うフレームワークを変えています。

今後の展開として、ORマッパー化が進み過ぎて、後発組のエンジニアが、ORマッパーだけでDBアクセスをするようになり、いざ何かあった時に基礎となる素のSQLが書けない…といった様になってしまわないかなと危惧しています・・・

って事で、とりあえず暗い話しは一旦置いて、次回は、逆にちょっと良いと思ったCollectionの回りの機能について書いてみたいと思います。

T, M

System engineer

Laravel で開発をして思ったこと①

お気軽に
お問い合わせください。

お問い合わせ