PHPフレームワークと出会うまで

ずっと可能性があると信じていたWebアプリ、 自分自身はエンジニアとしてのセンスはあるつもりと思ってはいたが、 ずっとどう勉強すれば分からなかった。

小さい頃から一人で留守番する鍵っ子だった。 よく空想して遊んだし、パズルを解くのは昔から得意だった。 勉強は嫌いで殆ど勉強しなかったが、数字をパズルのように組み合わせるだけで解ける物理は好きで得意だった。

ゲームの計算機をJavaScriptで作ってみたり、 高校卒業後は情報系の専門学校に入り、 卒業研究では流行りのAjaxをつかったシステムを作ってまわりの人をびっくりさせた。

でも、それだけでは僕の求めるエンジニアには決してなれない。 勉強をして新しい知識を身につける能力が欠けていた。

IT土方に足りないもの

僕は所謂IT土方だった。

要求から人より速くフローチャートを描き起こせても、 計算が速くて多重のネストを少ないバグで回せても、 超能力で不具合のある行を指差して見つける事が出来ても、 当時それなりに難しかったソフトウェア開発技術者を持っていても、 僕にはWebアプリは作れはしなかった。

少年漫画は強敵と対峙すれば成長して互角の勝負を繰り広げられるが、現実そんなに甘くない。 現実世界の人間様が成長するのは、打ちひしがれて枕を濡らした次の朝だ。 これはどんな人間であっても、やった分しか成長できないことを意味している。

エンジニアとしての成長も同様だ。 Hello Worldから初めて、チュートリアル、しょぼいアプリケーションを作らなければ一生何も作れはしない。

やりたい事は沢山あるけれど、 きっと自分の無知とやる気のなさを呪いながら何も出来ないまま一生を過ごすのだ。

そんなことを思いながら務めていた、とある会社でsirasayaさんに出会った。

PHPフレームワークとブログとの出会い

元々興味があってIT系企業に就職しただけあって、 最低限のアンテナを張って情報収集はしていた。

そこらのブログやQiitaの記事で Ruby on Railsが流行ってるらしいとか、CakePHPが流行ってるらしいとか、 それらのフレームワークを利用して高速にアプリケーションを作れるらしいとか、沢山見聞きはしていた。 実際に触ろうとしたことはある。

しかし、フレームワークにはフレームワークの使い方というものがある。 基礎を知らずして応用は出来ない、ゲームのようにボタンを押せばとりあえず敵をやっつけてストーリーが進むわけではないのだ。 当時の自分にはどうすれば使いこなせるかも分からず途方にくれてしまっていた。

sirasayaさんは前の職場でDOLEMというフレームワークを開発して業務に使っていたと聞く。 (当時はちゃんとした名称はなく、Coreフレームワーク等と呼んでいたらしい)

「ん?ブログ程度なら3日あれば作れるぞ。」 この一言がWebエンジニアとしての最初の一歩となった。

DOLEMの初リリースが2012年の5月、 DLしたDOLEMの使い方はさっぱり分からなかったが、 作った本人が「わかり易い、すぐ使いこなせる」というだけあって、 2週間が過ぎた頃には既にDOLEMを駆使してMySQLに値を突っ込んで取り出すという事が出来るようになった。

最初に作るもの

そしてようやく一人プロジェクトが始まった。 作るものはもちろん…ブログだ。

2006年という大昔の時点でLivedoorブログで作られている痛いニュースが大ブレークしていた。 今日日ブログなんて小学生だって楽勝で持てる。

ぶっちゃけ今さらそんなものを必死に作っても客観的には一銭の価値もない。 でも僕が欲しいのはブログという実体ではなく、ブログを作れるという技術力だ。

何故ブログか? 乱暴に言えば掲示板に執筆者用の管理画面を足せばブログだ。 ブログに複数執筆者がログインでき、相互にコメントを付け合うものはSNS。 画像を乗せてメールが飛ばせればショッピングカートだって作れる。 クラウドソーシングや、クラウドファンディングだって派生して作れる。

だからブログ、まずはブログ、とにかくブログ。 後はありとあらゆる事をアイデア次第で開発出来るノウハウに繋がるのだから… これがまがりなりにも完成した動機であり、執念でもあった。

ブログ(初期型)の要件

一番意識したのはエンジニアが自分の為に作るブログはどうあるべきか… 当時の自分の知識やスキルレベルの中ではかなり頑張ったほうだと思う。 結果、かなり理想に近いブログシステムになった。

  • さくらのVPS
    • WebエンジニアたるものLinuxの環境構築が出来て当然である
    • ドメインは既にとっていたromancing.jp、ロマサガが好きで取ったがググらビリティも低く何故いまだに使っているのかは一生の謎
  • 言語・環境等
    • PHP 5.1.6
    • 知る人ぞ知る有名なバージョン
    • もちろんyum install -y phpで勝手に入るバージョン
    • MySQL 5.6
    • 速度が全然違うから、こちらのバージョンは妥協出来なかった
    • あれこれぐぐって最新バージョンをインストール
  • 利用技術等
    • DOLEM
    • jWikiParser
    • PHP製のWikiパーサー
    • Bootstrap
    • 旧Twitter Bootstrap
    • OAuth(Facebook + Twitter)
    • ログイン機能はPost送信で出来るが、SSL証明書は高いものという認識があった
    • 個人情報がうるさくなる昨今、サーバーには何も置きたくないという思いがあった
  • こんなことがしたい
    • 記事には日付がセットで付与され、いつ書かれた記事か誰の目にも明らかであること
    • PHPやJavaScript(特にjQuery)関係の記事はまぁ酷い
    • 日付も無ければバージョンも無く、動かないコードだらけ、コメント欄もないようなのが当然のようにググると上位ヒットする有様
    • 有識者がリンク張ってこれは誤りですよってやってくれるが、この親切のおかげで糞記事の順位が上がる悪循環
    • ログイン後の管理画面で記事を書き込んで投稿できること
    • 記事はWikiのような簡易的な書き方が出来ること
    • 当時はMarkdownというものの存在を知らなかった
    • コメントにも同様の書き方が出来ること
    • なりすまし対策に、ログインしてコメントすることができること
    • 全ての記事は子記事を持てること
    • 普通のブログの記事は断片的な情報を書いて放置する為、粗悪な記事が永久に残ってしまうことを懸念していた
    • サブカテゴリを無限に作れる、Wikiとブログの良いとこどり的なものが作りたかった
    • もちろんGitHubという便利なプロジェクトホスティングサービスを併用するなんて発想はなかった

開発の思い出

ブログの開発は概ね順調に進んだ。 DOLEMは今時のイケてるフレームワークに比べると重複ロジックが多くなりがちで、上級者的には腕の見せどころ的な所があるが、 挙動自体はとても素直でプルグラマの域を出ていない当時の僕にはとても理解しやすいものだった。

記事の子供に子記事が入ってるという所のSQLで多少苦戦した程度だ。 単に足りないのは実際に手を動かす行動力とやる気だけだった。 IT土方経験のお陰で、やることさえ明確ならば、いくらでもググりつつ動作するSQL文は用意できる。 最終的にMySQLでは再帰的に同じテーブルを参照し、子孫記事を全て取得する一撃SQLは書けないとわかり妥協した。

一番ハマったのはOAuth。 TwitterFacebookも英語サイトでなければデベロッパー登録出来ないのだ。 Qiitaや日本のエンジニアさんのブログを読み漁り、なんとか実装することが出来た。 今でもOAuthを一発で実装しろと言われても多分無理、素直にJanrain等を使わせて欲しい。

DOLEMが出てから約3ヶ月、 OAuthの記事を少し読んではバトルフィールド3をプレイする日々が続いた。 Lvはとっくに廃人と呼ばれる50に突入し、全てのアサルトライフルで500キルを達成するアサルトライフル評論家になっていた。 その後ブログは完成し、記念すべき最初のPOSTは2012-08-28 02:56:39だった。

完成後どうなった?

デプロイの面倒臭さや改良等のモチベーションが保てず、 長いことブログの更新を放置してしまっていた。

愛用していたiGoogleがサービスを終了してしまったので、 RSSリーダーが急遽必要になった。 代替手段は当然山のようにあったが、これも自分で作ろうと決めていた。

結局Rssfeederという自分しか使わないWebアプリが出来たが、 こちらはFuelPHPというフレームワークで開発した所PHP5.3以上が必須だった。 思い切ってPHP5.5まで上げたところ、DOLEMがPHPエラーを吐くようになった。

そこからは完全にブログを修正する気力が無くなってしまい、 長いこと放置することに…

新ブログの要件

2016年になったということで、 もっと簡単に更新出来る形で他のブログを使っていこうと決意。 この3年半で得た知識や技術の棚卸しも兼ねて、エンジニアのブログとしてあるべき姿にしたい。

  • Markdownで記述できる
  • 記事の実体をGitHubで管理できる
  • RSSを自動で吐き出せる
    • 以前のブログはRSSを出力する前に力尽きてしまった
  • コメント機能が存在する
    • GitHubで記事の実体を管理すると、コメント機能と静的なファイル管理がどうしても衝突してしまう
    • MySQLで管理する事も考えたが、開発コストが重くダサさが拭えない
    • ダメ元で調べてたらHEXOのライブラリに外部サイトのサービスを利用するものがありあっさり解決

2016年の抱負

  • 英語の技術書やレポートを読めるようになる
    • 思い出にも書いたが、大阪で仕事を初めて新技術に触ることも増えた
    • KinesisやEvent Hubsは基本的に情報が英語でしか載っていない
  • typing.ioでWPM60を安定させる
    • 現在時点で平均のWPMは50程度
    • 大阪に出る前はWPM30〜35程度だったが、40を超えた辺りから世界が変わって見えるようになった
    • 少しずつエンジニアとしての自信も付いてきたのもあり、タイピングはとても楽しい