2017年8月19日と8月20日の両日にOpen Developers Conference 2017 TokyoとLLイベント2017ことLearn Languages 2017 in ODCに参加してきました。
https://www.ospn.jp/odc2017/modules/eventrsv/?id=1&noform=1www.ospn.jp PROGRAM – LLイベント2017
プログラミング環境としてのPHP
出張版 PHP勉強会@東京の枠で話すひとが決まってなかったので、話すことにしました。PHPの初学者向けの内容を意図して書きました。
内容自体は結構前からぼやっと思ってたことをまとめてみた感じです。個々の内容とかは既出の焼き直しがほとんどかな。
2017年のPHP開発にEmacsで勝つ
このLTは2週間以上前に申し込んでたのですが、タイトルは適当に決めて、内容は当日適当に書きました。応募した当初の構想は完全に忘れましたが、たぶんまったく別物です。
基本的には、いつも思ってることをはっきりと書きました。「つよいエディタ よわいエディタ そんなのひとのかって。ほんとうに つよい プログラマーなら すきな エディタで かてるように がんばるべき」などと私は思ってるのですが、仕事でやる以上は成果を出せると良いです。……みたいなところで、戦闘機と竹槍の話。あなたの使ってるエディタで進捗出せてますか? ひょっとしてエディタへの拘りは、単に馴れを言ひわけに研鑽を怠ってるだけで、時間を浪費してるだけなのでは???
といった疑問からのPhpStormの分析と、Emacsを使ってPhpStormを上回る進捗を出せるようにするための試みを始めよう、といった意思表明のつもりです。問題意識としてはずっと前からあったことなのですが、最近になってRequest: The Future of PHP Mode (TL;DR Near Bottom) : emacsのようなことがあって、未来について悩むことになった恰好です。
そんなこんながあって、GitHubのリポジトリを作りました。EmacsでPHPを開発するときに困ってることとか、ここどうにかならないかといった要望などがあればissueを作ってください。わかる範囲で解決策を提示するか、必要なものを実装していきます。
あなたの身の周りにEmacsでPHPのコードを書いてるひとが居たら連絡してくれると嬉しいです。
PHPにおけるメタプログラミングの温床
LLイベントは2003年から毎年開催されるプログラミング言語を横断したコミュニティによるカンファレンスです。LL Saturday(2003)、LL Weekend(2004)と続き、毎年名称が変更されるため「LLイベント」と総称されます。
とは言っても私はLLまつり(2013)に初めて参加したきり、ご無沙汰でした。今回参加しようと思ったのも上記のODCに参加してたからで、それも当日朝に ここしばらく寝不足が続いてたので 行こうか躊躇してたのですが、結果としては行って大正解でした。 当日のノリでLTに応募するところまで含めて。
そんなわけで、以前からタイトルだけ構想を温めてた*1メタプログラミングの話です。
前から思ってたんですけど、メタプログラミングの定義ってなんなんですかね? みたいなことを深く悩むとインタプリタとの差、ただの実行時処理との差はいったい何だときりがないのですが、まあ単なる函数呼び出しとは異なる一見して不可思議な現象を起せればそれはメタプログラミングと言って良いのではないかと思ってます*2。
めんどくさい(し時間がなかった)ので完全に説明を省いてるのですが、このスライドの内容は、ひとつ残らずPHPマニュアルに載ってます。つまり仕様内の挙動です。
- 初級篇
- 中級篇
- PHP: オーバーロード - Manual (
__get
,__set
,__call
などなど)
- PHP: オーバーロード - Manual (
- 上級篇
- まとめ
- PHPUnit – The PHP Testing Framework
- PsySH - A runtime developer console, interactive debugger and REPL for PHP.
- 一部フレームワーク = BEAR.Sunday / イントロダクション
- アスペクト指向フレームワーク = Go! AOP PHP - modern aspect-oriented framework for the new level of software development
- Codeception/AspectMock: The most powerful and flexible mocking framework for PHPUnit / Codeception.
参考までに、私がいままでに書いた記事では以下のものがメタプログラミングの応用です。
予告
PHPカンファレンス2017 - #phpcon2017で話します。今度はエラー処理の話をするよ。