CodeIgniterを一年使って分かったWordPressと比べてのメリット・デメリット
皆様、いかがお過ごしであろうか? 最近仕事でも原点回帰し、WordPressを触る機会が多い野地である。このブログは1年以上構造が変わっていないのだけれども。
とは言っても公私ともに開発に使うフレームワークは主に「CodeIgniter」というPHP製フレームワークであり、いずれこのブログも自分で作ったCMSへ移行したいところなのだが、まだ鋭意制作中である。フルスクラッチってやっぱ気軽でない。が、楽しい。
さて、そんな訳でそのCodeIgniterを使って一年ほどECやらマッチングシステムやら作ってきたわけだが、今回はその経験をもとにCodeIgniterでシステムを開発するメリット・デメリットをWordPressと比べながら書いていきたいと思う。
厳密な話をすればWordPressはCMS、CodeIgniterはフレームワークという大きな違いはあるものの、動的なWebシステムを作る際、どちらを採用するとどんなメリットがあるかの参考にして頂ければ幸いである。
- メリットその1: 速い
- メリットその2: MVC構造で開発ができる
- メリットその3: データベースが自由に設計できる
- メリットその4: より安全なセキュリティ対策ができる
- メリットその5: ブログからかけ離れたシステムも作れる
- デメリットその1: 開発コストが高い
- デメリットその2: 学習コストが高い
- デメリットその3: Web上に情報が少ない
- デメリットその4: セキュリティホールが発生しやすい
- デメリットその5: 使用人口が少ない
- まとめ
メリットその1: 速い
どんなWebシステムであろうと、速度は命であり、絶対の正義である。
先述したように、WordPressはフレームワークではなくCMSだ。
CMSの宿命なのだが、CMSは様々なケースに対応するため我々が想像する以上の処理機能を読み込んでいる。
対してCodeIgniterはフレームワークであるため、自前で用意した様々な処理をケースによって取捨選択できる。
よって、ちゃんとエンジニアが無駄のない設計をすれば冗談ではなくWordPressの数十倍の速度を出すことが可能だ。
更に言えば、CodeIgniterは数あるPHPフレームワークの中でもかなり高速な部類である(PHP四天王と呼ばれる他Laravel, Symfony, CakePHPの中ではダントツで速い)ため、特に大規模・多機能ではないWebシステムを構築する時に力を発揮するだろう。
余談だが、Phalconというフレームワークは更に一次元違う速度で動く。内部がPHPではなくCで書かれているので厳密にはエクステンションなのだが、とにかく速度を重視する際には一考する価値あり。
メリットその2: MVC構造で開発ができる
MVCとはMode, View, Controllerの三つからなるデザインパターンのことで、
- Model: データベースとのやり取り等をはじめとしたビジネスロジックを扱う。
- View: 実際に画面へ出力するHTML等を、ModelやControllerによって取得・整形されたデータを基に表示するUI部分。
- Controller: ユーザーから受け取った命令(主にURLやフォームから送信される情報等)を判断・変換しModelへ渡し、結果データをViewへ渡す。
という明確な役割分担ができる。
WordPressのテンプレートではHTMLの中に情報を取得する(=データベースへ問い合わせる)処理が書かれていたりするケースが非常に多い。
CodeIgniterはMVCの各PHPファイルが綺麗に分けられるため、コードの見通しが良くなるのに加え、デザイナーとエンジニアの分業がしやすくなる等のメリットがある。
また、WordPressでは投稿タイプやタクソノミー、スラッグ設定やテンプレートのファイルの有無で描画に使うテンプレートファイルが変化するため、比較的規模が大きくなってくるとURLを見ただけではどのテンプレートを使っているのか見当が付きづらい。
対してCodeIgniterではURLがどのファイルを叩きに行っているのか一発で分かる。
例を挙げれば、「○○○.com/test/view/12」
というURLがあれば、ControllerディレクトリにあるTest.php
というファイルの中にあるTest
クラスのview($hoge)
メソッドの$hoge
へ12
という引数を与えつつアクセスしている、というのが分かるので、以降の処理が非常に追いやすい。
メリットその3: データベースが自由に設計できる
CodeIgniterでは主に先述したModelで扱うことになるデータベースだが、Wordrepssでは既存の関数とインストールと共に自動でセットされる約11個のテーブルを組み合わせてデータベースを扱う。
もちろんWordPressでも新たなテーブルを作成したり、$wpdb
を用い、サニタイズされたSQLでデータベースと対話できる。
が、CodeIgniterはインストールしただけではテーブルが用意されないため、そもそもデータベースを使わないといった選択も可能である。本当に静的なページを表示したり、動的であってもファイルベースのデータからのみデータを取得する時など、わざわざデータベースに接続しなくてもいいというのは意外と大きなアドバンテージだ。
そしてもちろん、それらデータベースと対話するコードも自前で作成するため、要件に合わせた無駄のない処理を使うことになるだろう。
さらに、使用するデータベースの種類もWordPressではMySQL一択なのに対し、CodeIgniterはMySQL, Oracle, PostgreSQL, MS SQL, SQLite, CUBRID, Interbase/Firebird, ODBCに加え、Redis等のNoSQLデータベースもサポートしている。
メリットその4: より安全なセキュリティ対策ができる
WordPressは歴史が長いシステムなだけあってセキュリティ対策には目を見張るものがある。
が、同時に全世界のWebサイトにおける30%弱を動かしているだけあって標的にされやすいという宿命を背負っているのも事実だ。
その点だけでCodeIgniterで作られたシステムのセキュリティは(ちゃんと対策を怠らなければ)高いと言っても過言ではない。
またWordPressにない機能として、$_POSTや$_GETの値を自動でサニタイズし、存在しない値も自動でNULLにしてくれる入力クラスや、自動でCSRF脆弱性対策をしてくれるセキュリティクラス、OpenSSLを用いて簡単にデータの暗号化・復号を行えるEncryptionクラス等、ちゃんと知って使えば高機能なセキュリティ対策機能がたくさんある。
もちろん、WordPressでもこれら対策は可能だが、CodeIgniterの方が簡単かつ少ない労力(=フレームワークの用意する確実なセキュリティ対策に任せられる)で実装できるだろう。
メリットその5: ブログからかけ離れたシステムも作れる
動的なWebシステムを作るなら知見があるWordPress! と考えてしまうのはよくある話だろう。が、あくまでWordPressは動的にページを生成する、というブログ型のCSMであり、一からECシステム等の機能を作ろうとするとかなりの労力を必要とする。
その点、CodeIgniterは銀行レベルの規模感でない限り、PHPで作るシステムであればほとんどのケースに対応可能であるため、ECやブラウザで動くゲームのバックエンドを作る場合はその工数を大きく圧縮してくれるだろう。
管理画面もWordPressのようなものに限らず、オールSPAで作ってもいいし、権限やコンテンツのアップロードも自由自在なので、既存CMSで解決できそうにないフルスクラッチ案件では間違いなくCodeIgniterに分があるだろう。
デメリットその1: 開発コストが高い
ここからは逆に、WordPressの方が優れている、つまりCodeIgniterのデメリットをあげていこう。
システムが複雑ならCodeIgniterで開発したほうがいいのは先述した通りだが、逆に必要な機能が単純であればあるほどWordPressの方が有利なのは間違いない。
特に顕著なのが管理画面のUI・機能で、WordPressは既存の機能を使いまわすだけで高機能な管理画面を生成することができる。
対してCodeIgniterは管理画面のHTML, CSS, JavaScriptを含め全て自前で開発する必要があるため開発コストはどうしても割高になるだろう。
また、データベース設計の知識に乏しいのであればWordePressが自動で作成・取得・更新してくれるデータベースを利用するほうが遥かに効率的で破綻しにくいはずだ。
同じPHPで作られたシステムでも、うまくいけばフロントの知識+アルファで開発ができるWordPressのシステムは魅力的だ。
そしてなんと言っても大きな要因になるのが豊富なプラグインの数々である。
CodeIgniterでもthirdpartyディレクトリにプラグイン的なものを仕込むことができるが、ご存じの通りWordPressには比べ物にならない数のプラグインが存在し、要件にマッチすればそれらは工数を大幅に削減する強力な武器になる。
デメリットその2: 学習コストが高い
始めに断っておくと、CodeIgniterはPHPフレームワークの中では断トツで学習コストが低い(はず)。
しかし、それでも長年Web系でない人を含め愛され続けているWordPressの低学習コストっぷりには歯が立たないだろう。
そもそも、CodeIgniterでシステムを作るときは最低でもPHPの知識、現実的にはデータベース周りとフロント周りの知識も必要だが、WordPrressはその全てをすっ飛ばせる威力がある。
もちろん、細かいところを弄ろうとしたら知識があることに越したことはないが、例え扱うのが熟練のフルスタックエンジニアであっても自動化できるところはできるだけ自動化してくれたほうが嬉しいはずだ。
経験を積んでくるとつい錯覚してしまいがちだが、高度のでエレガントな技術を使えるからといって開発スペードや他の職種を蔑ろにしてはならない。WordPress最大のメリットの一つは誰でも使えるところにある。
デメリットその3: Web上に情報が少ない
これまた初めに断っておくと、日本語版ドキュメントは所々未翻訳でありつつも分かり易いし、ちらほら情報があるにはあるのだが、やっぱり情報量の多さはWordPressに敵わない。
開発中はもちろんのこと、運用中のバグも大抵は検索すれば修正方法が乗っているし、何より他社・他人の作ったWordPressが世界中にあふれているのでクライアントもWordPressで構築されたサイトなら安心感があるだろう。
CodeIgniterは数あるPHPフレームワークの中でもレンタルサーバーで運用しやすいフレームワークだが、WordPressはそれらサーバー会社レベルでサポートされているケースが多いのも特筆すべき点だ。多少設定にクセがあるサーバーを使用する際にも情報に困ることが少ないだろう。
デメリットその4: セキュリティホールが発生しやすい
先述した内容と真逆になるが、逆に知識が無いままにCodeIgniterで開発を進めると規約が緩いのがアダとなり、思わぬセキュリティホールが発生する場合もある。
WordPressの場合は良くも悪くも用意された関数なり管理画面なりを使いまわして機能要件を満たしていくのだが、自前でコードを書く比率の高いCodeIgniter開発者によってセキュリティレベルに差が出易い。
一見ちゃんと動くシステムであっても、ちゃんとセキュリティ対策に対する勉強も含めた工数を含めないと特に危険である。
この点はシステムを動かす以上に上級者向けと言えるだろう。いつの時代も攻めるより守るのが難しいのだ。
デメリットその5: 使用人口が少ない
クライアントへシステムの説明をするときに、WordPressなら話が早いケースも多々あるだろうし、会社的にも開発者が変わっても対応しやすいというメリットは無視できない。
海外ではそれなりに人気のCodeIgniterも日本ではマイナー気味なのでこの点は素直に痛い。
学習コストや情報の多さにも関わってくる話だが、やはり世界的WebページのディファクトスタンダートたるWordPressはWeb制作の共通言語一歩手前の知識であると言える。
この理由だけで選定技術を決めるのもアレだが、オープンなWebの世界ではことさら、この人口差がジワジワと差として出てくるだろう。野地はWordPressはもちろんのこと、CodeIgniterの日本進出を応援しています。
まとめ
そもそも同じ土俵にいるかは意見が分かれるだろうが、CodeIgnierとWordPressの比較記事はいかがだったろうか。
どちらも自分の仕事・趣味には欠かせない存在だが、どんなに優れたシステムにも長短はあるもの。
勿論0からコードを生み出す能力もエンジニアの大切な能力だが、既存の良いシステムの丁度おいしいところを使いまわすのも同じくらい大切な能力だ。
これからも色々な言語を問わず様々フレームワークやCMSが登場するだろうが、Web制作者として、システムと案件の双方が輝ける組み合わせを見つけるのは使命と言っても良いのではないだろうか。
[…] CodeIgniterを一年使って分かったWordPressと比べてのメリット・デメリット […]