Hatena::ブログ(Diary)

TODO: ブログの名前を考える RSSフィード

2014-11-22 枯れた技術と未成熟な技術、でもホントは…

タイトルが長すぎて表示されてないので再掲。『枯れた技術と未成熟な技術、でもホントはエンジニアのセルフマネジメントについてのはなし』

ここ数年感じていることについて、標準的な開発者にとってはすでに常識となっているかもしれないことについて吐きだしたいと思う。


ある種の開発業務の現場では、基本“未成熟な”技術よりも“枯れた”技術が求められる。

Webサーバで言うなら、「Nginx」よりも「Apache」だ。 ※ Nginxもそろそろ枯れた方に入るのかもしれませんが…

それにはもちろん理由があって、それは間違いではない。しかし、本当にそれは間違いではないのだろうか?


ApacheとIISとNginx

具体的な数値はググってもらうとして、Apacheといえば世界でもっともよく使われているWebサーバであることは間違いない。その実績はダントツだし、恐らく会社の中にもそれなりのノウハウは蓄積されていることと思う。

もし、Apacheを採用しない理由があるとすれば、それは開発元によるサポート(の義務といった方が適切か?)がない点だろう。それによって、IISを選択するというケースはある。それもまた間違いない。

一方、Nginxを採用する動機は、それが「大量のリクエストを少ないリソースでさばけるから」が多いのではないだろうか?


Apache/IISとNginxとの違い

この違いは、単なる要件の違いではないと思っている。

それはWebを使うユーザ層とボリュームの変化、インターネットが普及したとはいえまだまだコンピュータに関心がある人たちのものだった時代から意識するしないはさておき本当に誰もが使うようになった時代へと移ったことを意味する。すなわち、Nginxを選択するということは今の時代における普遍的な問題(大量のリクエスト)を抱えており、それを解決する必要に迫られているということだ。

※ Apache/IISであってもその問題に対処する方法はいくらでも(AWSでサーバ台数を増やすとか)あるが、それはまた別軸での未成熟な技術の話となって複雑なので、今回はスルーします。


怖くないですか?

もし自分がインフラに関わっているエンジニアで、Apache/IISを使う(使わないといけない)仕事をしているとしたら、怖くありませんか?

あなたのスキルに価値がないとまでは言いませんが、それを必要としている人は昔からずっと同じことをしている(そして恐らこれからもずっと同じことをし続ける)人たちです。果たして今後も一緒に価値を生み出し続けていけるのでしょうか?生み出せなければもちろん自分の価値も下がっていきます。


私が考えるセルフマネジメント

ずばり、『(たとえ未成熟であっても)新しい技術が必要とされる仕事をすること』

会社から与えられるがままに仕事をこなすことで自然にそれが実現されるなら、それに越したことはありません。あなたはきっと最高の職場にいるのでしょう。もしそうでないのなら、そうなるように自分で行動を起こす必要があります。

これらを意識的にやること、それがセルフマネジメントだと私は考えます。

2013-05-01

[] URL生成Tips

CakePHPでURLを生成するときに“使える”変数・定数


その前に、基本のおさらい。

  • $_SERVER['SERVER_NAME']
localhost
  • Router::url(array('controller' => 'users', 'action' => 'login'), true))
http://localhost/sampleapp/users/login

これも基本でしょという声は華麗にスルーしつつ。

  • FULL_BASE_URL
http://localhost
  • $this->controller->request->base
/sampleapp
  • $this->controller->request->webroot
/sampleapp/

2013-04-30

[] Configureを使う必然性

自分自身、CakePHPが提供するConfigureクラスとPHPネイティブのdefineの使い分けがよく分かってなかったので調べてみた。

CakePHP - Configure::write or define()のgrigriさんの答えでようやく腑に落ちたのでここに引用しておく。

Benefits of using Configure:

* No collisions with other php scripts.
* Can be changed at runtime
* Easy to organize, list, group and persist related settings

Benefits of using php constants:

* Less verbose
* More efficient

2013-04-13

[] 携帯端末用プラグインに手を入れました

ガラケー(フィーチャーフォン)についての知識・経験が圧倒的に不足しているため、MASA-P/cake_ktai_library ? GitHubというCakePHPプラグインを導入しようとしました。

1.3系(MASA-P/cake_ktai_library at 0.x-1.3 ? GitHub)と2.x系(MASA-P/cake_ktai_library at 0.x-2.x ? GitHub)とがあったので、後者をダウンロードしてPluginフォルダに置いてみたところ、

Non-static method Lib3gk::get_instance() should not be called statically, assuming $this from incompatible context

※同様のエラーが他二件

Declaration of KtaiComponent::initialize() should be compatible with Component::initialize(Controller $controller)

※同様のエラーが他二件

といったエラーが発生…

[動作環境]

PHPを継続的に使ってきたわけではないので詳しいことは分かりません(ダメ開発者や…)が、エラーメッセージから推察するに言語仕様の変更によるものと思われました。

そのあたりを修正したところ、無事エラーが消え、動作しました!


Folkしたリポジトリにその修正をコミットしておきましたので、必要な方は下記からどうぞ。

fullkawa/cake_ktai_library at 0.x-2.x ? GitHub

2013-04-10

CakePHPキャッシュまとめ

CakePHPで利用できるキャッシュ機構についてまとめてみました。

詳細はリンク先参照。

ブラウザキャッシュ

出力したコンテンツをブラウザ側でキャッシュさせる/させないを制御します。

リクエストとレスポンスオブジェクト — CakePHP Cookbook 2.x ドキュメント

Viewのキャッシュ(ファイルキャッシュ)

同一リクエスト(コントローラ/アクション/パラメータ)に対するレスポンスをキャッシュします。

もちろん、レスポンスの内容が異なる(例:PC用とスマホ用)場合は違うURLになるようにしなければなりません。

キャッシュヘルパー — CakePHP Cookbook 2.x ドキュメント

CakePHPアプリケーションの基本的な設計指針 (2) - キャッシュまわり - - 24時間CakePHP


element単位でキャッシュする仕組みもあります。

ビュー — CakePHP Cookbook 2.x ドキュメント

CakePHPのCache(Viewキャッシュ)について考える | 半年前の私への教科書の"1.element ( & requestAction ) キャッシュ"参照

Modelのキャッシュ

1リクエストの間だけキャッシュされます。

モデルの属性 — CakePHP Cookbook 2.x ドキュメント

CakePHP標準(?)のキャッシュ

CakePHP標準(?)のキャッシュエンジン。キャッシュストレージを指定することでファイル(デフォルト)やメモリに任意のデータをキャッシュします。

CakePHPでファイルキャッシュ、メモリキャッシュを使う|A Day In The Boy's Lifeの"CakePHPでメモリキャッシュを利用する"参照

実行コードのキャッシュ

PHPの実行コードをキャッシュして、コンパイルに要する時間を短縮します。

いろいろなミドルウェアがありますが、APCやeAccelerator等が有名です。

いまさらAPCをインストールして、PHPの実行を高速化してみた ::ハブろぐ