自分が現役でプログラミングをやっていた時期はPHP4全盛期で、クラスも使わず、データベースもmysql_関数を直接使うような時代でした。もちろんテンプレートエンジンやフレームワークも使わず、HTMLにPHPのロジックを直書きです。JavaScriptもほとんど使っていなかったと思います。
それから数年プログラミングの世界から離れていて、つい最近舞い戻ってきたのですが、あまりにも技術が進歩していて、加齢プログラマにはついてゆくのが大変です。
新しい技術は、前提として知っていなければならない知識が多いのですね。
そんなわけで、カムバックしてから学んだことをまとめました。
PHP系
他の言語、具体的にはRuby on Railsも何度か挑戦したのですが、PHPで出来ることばかりなので、なんとなくモチベーションが上がらなくて最近はやってません。でもRuby界隈は楽しそうで羨ましい。
PDO
データベースを抽象化して扱えるクラスです。DBを扱うときはほぼ必須です。接続先がMySQLであるとかPostgreSQLであるとかあんまり考えなくてもいいので楽です。
Symfony
PHP用のウェブアプリケーションフレームワークです。いろんな定形処理を簡単にやってくれます。PHP用のフレームワークは星の数ほどありますが、Symfonyはとてもしっかりした作りで安心感がありオススメです。
Slim
PHP用のマイクロフレームワークです。軽量です。Symfonyほどの機能は要らないけどルーティングを自前で書くのが面倒だなーと思ったときのベストチョイスでした。同じようなものにSilexとかいうのもありますが、こっちのほうがなんとなく好き。
JavaScript系
TypeScript
JavaScriptのフワフワしたところをカッチリ固めてくれる上位互換言語です。JavaScriptにコンパイルできます。実はまだ導入していません。もう少し大規模なプロジェクトになったら導入したいです。
jQuery
これはメジャーすぎると思うので詳しい解説は省きますが、JavaScriptのブラウザ間におけるややこしい差異を吸収したりして簡単に記述できるライブラリです。実は自分はJavaScript自体は詳しくなくて、jQueryにべったり依存しています。
AngularJS
jQueryを規模が大きくなった業務システムに適用・保守するのはかなり難しいです。餅は餅屋、ということで最近はAngularJSを使っています。jQueryが苦手としているデータバインディングを強力にサポートしてくれます。信頼のGoogle製です。
ツール
AngularJSを使おうと思ったらYeomanというツールを使うのが良いと聞いて
npm install -g yo
で簡単にインストールできるyo! とか書いてあるけど失敗しまくるし、謎の知らないツールを大量に導入されるので情緒不安定になりました。なのでYeomanで使っているツールを全部理解したらリベンジしたいです。
Composer
PHPのライブラリを管理してくれるツールです。最近はPearよりこっちを使うのがナウいらしいです。上で紹介したSlimはComposerで導入しました。あとはオートロードという優れた機能がありまして、自作のクラスをPSR-0とかPSR-4という規約に準拠して作成しておけば、requireしなくてもクラスを使うことができます。便利。規約は以下のようにとてもシンプルです。
npm
サーバサイドJavaScriptであるNode.jsのライブラリ管理ツールです。なぜかNode.js関係以外でもいろいろと使われているようです。YeomanやBowerやGruntをインストールするのに必要だったので導入しました。
Bower
JavaScriptのライブラリその他を管理するやつです。JavaScriptライブラリくらい手作業でダウンロードすればいいじゃん!と思っていたのですが、ライブラリが増えてくると管理もバージョンアップも大変になるので、Bowerを使うと超便利です。
Grunt
Makeみたいなものでしょうか?TypeScriptをコンパイルしてJavaScriptを生成したり、SassをコンパイルしてCSSを作成したり、複数のJavaScriptファイルをひとつにまとめてMinifyしてくれたりするらしいお役立ちツールですが、まだあまり活用していないです。
Bootstrap
デフォルトで綺麗なボタンやテーブルが作れるCSSのフレームワークです。段組がとっても楽です。あと勝手にモバイル対応してくれます。
まとめ
今業務で作成しているアプリはフロントエンドがAngularJS+Bootstrap、バックエンドがPHP+Slim+MySQLで、フロントとバックの通信はRESTに準拠したものにしています。
最初は覚えることが多すぎて面倒だったのですが、ライブラリやツールや規約の登場した理由を知ると納得できて、とても効率的に開発することができるようになりました。