俺 Pedia

窓際エンジニア(仮)の日常

PHPでの開発におけるライブラリやツールの選択

この記事は「低予算でも闘う企画担当者の為の鎮魂歌 Advent Calendar 2015」の5日目の記事です。
 
今回はPHPでの開発におけるライブラリやツールの選択について考えたいと思います。

企画担当者が担当する「開発」とは?

さて一言で「開発」と言っても、規模だけでも小規模なものから大規模なもの、そして構成で言っても単純なものから複雑なものまで様々なです。
単純なもので言えば単体機能を有するツールの開発もあれば、会社サイトの問い合わせフォームの実装、もう少し複雑になるのであれば認証機能を持つデータ管理アプリケーションであったり、場合によってはちょっとしたポータルサイトのようなものまで開発する事になるかもしれません。
さらに言えば、昨今ではPC向けサイトよりもスマートフォン向けサイトやコンテンツの対応も増え、場合によってはそのバックエンドの開発のような事も行う事がないとは言えません。
  以前はCakePHPを中心として開発を進めていましたが、やはり規模の小さい単純な案件ではもっとシンプルに進められないかという気持ちが強くなり、結果今ではマイクロフレームワークを中心とした構成に変更しました。
これから紹介する記事ではそのマイクロフレームワークを中心とした構成で私が利用するものをご紹介していきたいと考えています。

私が利用するライブラリやツールのご紹介

それでは具体的に紹介していきたいと思います。

① Slim(フレームワーク)

Slim Framework

Slimフレームワークは非常にシンプルで且つ拡張性も有するマイクロフレームワークです。
フレームワークに求めるものは人それぞれだと思いますが、私はルーティングに関する機能、リクエストに関する機能、レスポンス及びビューに関する機能、そして拡張性を持たせる意味でフック処理やそれに類する機能があれば十分だと考えています。その視点から見るとSlimフレームワークは非常に最適で十分なフレームワークであると感じました。

② Twig(テンプレートエンジン)

Homepage - Twig - The flexible, fast, and secure PHP template engine

PHPでテンプレートエンジンというと一般的にはSmartyにたどり着きます。実はそれほど拘りはなくむしろ私自身もともとフレームワークを利用する前はSmartyをベースにした自前の構成で開発をしていました。しかしSmartyは日々進化を続けテンプレートエンジンという役割から少し逸脱したレベルまで到達しているようにも思えます。その為、連携しての利用を考えるとそれなりにバージョンを管理する必要もあり、また、場合によってはバージョン依存の問題を解消する為の時間を割く必要も増えてきました。
このあたりのやり取りにつかれ、現在は消去法的にTwigにたどり着いています。もともとSlimを利用する事を先に決めていましたので、そこから関連する情報の多さも考慮してテンプレートエンジンにはTwigを選択しました。

③ Illuminate Database(データベースコンポーネント)

illuminate/database · GitHub

最近ですとIdiormあたりも人気ですが、あえてIlluminateを選択しています。とはいえ選択に至る切っ掛けは少し本質的な部分から外れてしまっており、もともとは認証ライブラリとしてSentinelの採用を想定しており、その中でIlluminateの利用も視野に入ってきた為、機能的に不足は感じなかったのでIlluminateを採用しました。Illuminate自体はLaravelのコンポーネントですので、例えばある程度の規模の開発を行うとなった場合にフレームワークをLaravelにするという場合にもスキルは生かせるのではないかと考えています。

④ Sentry(認証管理ライブラリ)

cartalyst/sentry · GitHub

一番悩んだものがSentryです。理由としては既に後継のSentinelがリリースされておりSentryはDEPRECATEDとなっており利用を推奨していない状況だからです。実装だけを考えますとSentinelでも問題はないのですが、使ってみた感じではSentryの場合は重複登録時のエラー処理や認証エラーの原因が例外として個別に捕捉できますが、Sentinelでは単純にエラーとしかわからず結果その部分を補う必要があります。それほどの負担ではないもののちょっとこの部分私の理解が進むまでは当面Sentryを利用した方が良いのではないかと考え、現状は認証管理についてはSentryを利用する事としています。

⑤ Respect Validation(バリデーションライブラリ)

Respect\Validation

Respect Validationは使いやすさと機能の多さの両面からおすすめのバリデーションライブラリです。マイクロフレームワークの場合、簡易的な検査であればフレームワーク側で実装されているものもありますが、フルスタックフレームワーク同等のレベルの機能を使いたいと思った場合は個別でライブラリを導入する必要があります。
Respect Validationは直感的に使えますのでそれほど躓く事なく利用する事ができると思います。

⑥ PHPMailer(メール送信ライブラリ)

PHPMailer/PHPMailer · GitHub

PHPMailerは非常に有名なライブラリですので説明するまでもありませんね。私は元々Qdmailが優れたライブラリであった為長く愛用していましたが、メンテナンスが長いこと行われていない状況が続いていました。利用する分には大きな影響はないのですがPHPのアップデートも行われることもあり切り替えを行う事としました。メール送信という処理は比較的頻度が高く実装する為、切り替えるとなるといろいろ迷いましたが、結果的にPHPMailerが最もしっくりきたので選択しました。
もしかすると他にももっとよいライブラリがあるのかも知れませんが、現時点では不満もなく活用できています。

以上が主に利用するライブラリとなります。

なお、その他ログライブラリもありますが、ログについては条件により実装方法がかなり異なる(ローカルで単純に出力する場合もあれば、外部サービスへ出力する場合もあるなど)ので、今回のおすすめからは除外しております。機会があればケースを整理してご紹介できればと思います。

次回からはまずはレンタルサーバ上での環境の整備についてご紹介した後、それぞれのライブラリの利用についてご紹介したいと思います。