PHP好きですか?僕は嫌いでも好きでもないです。ただ、PHPプログラマはファイルに適当にクラス生やすので好きになれないです。
PHP’erが クラス名を適当につけるし、ファイル内部にどんどんクラスを作るのでカオスになってきた。
ファイル名とクラス名が対応してない。
クラスを適当に作れるの、作る側は便利だし、歓迎ですよ。でもね歓迎なんだけど、ひとの描いたコードを追いかけるときには、これが逆に何処に何があるかわからないので不便過ぎる。かといって、それだけのためにDocumentorにかけるのも不便なんですよ。
どのファイルにクラスがあるが調べたい。
どこでも、クラスとファイル名の対応表をすぐに作りたいです。そこでコマンドの組み合わせでやってみた。
awk と grepでパパっと。
grep -r ^\s*class . | sort | awk '{ printf"% 35s",$2; printf "\t" ; printf $1 ; printf "\n"}' | cut -d : -f 1コマンドって美しいですねぇ。いやー便利。
実行結果。
ほらね。簡単にクラス名とファイル名の対応表が出来る。さぁ、これで道標が出来た。他人の作ったソースコードを読もう。
SimplePage ./vendor/simpletest/page.php
ParallelRegex ./vendor/simpletest/php_parser.php
SimpleHtmlLexer ./vendor/simpletest/php_parser.php
SimpleHtmlSaxParser ./vendor/simpletest/php_parser.php
SimpleLexer ./vendor/simpletest/php_parser.php
SimplePhpPageBuilder ./vendor/simpletest/php_parser.php
SimpleStateStack ./vendor/simpletest/php_parser.php
Recorder ./vendor/simpletest/recorder.php
SimpleResultOfException ./vendor/simpletest/recorder.php
SimpleResultOfFail ./vendor/simpletest/recorder.php
SimpleResultOfPass ./vendor/simpletest/recorder.php
SimpleReflection ./vendor/simpletest/reflection_php4.php
SimpleReflection ./vendor/simpletest/reflection_php5.php
RemoteTestCase ./vendor/simpletest/remote.php
HtmlReporter ./vendor/simpletest/reporter.php
NoSkipsReporter ./vendor/simpletest/reporter.php
SelectiveReporter ./vendor/simpletest/reporter.php
TextReporter ./vendor/simpletest/reporter.php
MultipleReporter ./vendor/simpletest/scorer.php
SimpleReporter ./vendor/simpletest/scorer.php
SimpleReporterDecorator ./vendor/simpletest/scorer.php
SimpleScorer ./vendor/simpletest/scorer.php
SimpleById ./vendor/simpletest/selector.php
SimpleByLabel ./vendor/simpletest/selector.php
SimpleByLabelOrName ./vendor/simpletest/selector.php
SimpleByName ./vendor/simpletest/selector.php
ShellTestCase ./vendor/simpletest/shell_tester.php
SimpleShell ./vendor/simpletest/shell_tester.php
SimpleStackTrace ./vendor/simpletest/simpletest.php
SimpleTest ./vendor/simpletest/simpletest.php
SimpleTestContext ./vendor/simpletest/simpletest.php
SimpleFileSocket ./vendor/simpletest/socket.php
SimpleSecureSocket ./vendor/simpletest/socket.php
SimpleSocket ./vendor/simpletest/socket.php
SimpleStickyError ./vendor/simpletest/socket.php
MultipleSelectionTag ./vendor/simpletest/tag.php
SimpleAnchorTag ./vendor/simpletest/tag.php
SimpleBaseTag ./vendor/simpletest/tag.php
SimpleButtonTag ./vendor/simpletest/tag.php
SimpleCheckboxGroup ./vendor/simpletest/tag.php
SimpleCheckboxTag ./vendor/simpletest/tag.php
SimpleFormTag ./vendor/simpletest/tag.php
SimpleFrameTag ./vendor/simpletest/tag.php
SimpleImageSubmitTag ./vendor/simpletest/tag.php
SimpleLabelTag ./vendor/simpletest/tag.php
SimpleOptionTag ./vendor/simpletest/tag.php
SimpleRadioButtonTag ./vendor/simpletest/tag.php
SimpleRadioGroup ./vendor/simpletest/tag.php
SimpleSelectionTag ./vendor/simpletest/tag.php
SimpleSubmitTag ./vendor/simpletest/tag.php
SimpleTag ./vendor/simpletest/tag.php
SimpleTagBuilder ./vendor/simpletest/tag.php
SimpleTagGroup ./vendor/simpletest/tag.php
SimpleTextAreaTag ./vendor/simpletest/tag.php
SimpleTextTag ./vendor/simpletest/tag.php
SimpleTitleTag ./vendor/simpletest/tag.php
SimpleUploadTag ./vendor/simpletest/tag.php
SimpleWidget ./vendor/simpletest/tag.php
LiveTestOfForms ./vendor/simpletest/test/acceptance_test.php
SimpleTestAcceptanceTest ./vendor/simpletest/test/acceptance_test.php
TestOfFileUploads ./vendor/simpletest/test/acceptance_test.php
TestOfFrameAuthentication ./vendor/simpletest/test/acceptance_test.php
TestOfLinkFollowing ./vendor/simpletest/test/acceptance_test.php
TestOfLiveAuthentication ./vendor/simpletest/test/acceptance_test.php
TestOfLiveBrowser ./vendor/simpletest/test/acceptance_test.php
TestOfLiveCookies ./vendor/simpletest/test/acceptance_test.php
大規模コードリーディングとかそういう本を読むのもいいですね。でもできることから始めよう。