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
大規模コードリーディングとかそういう本を読むのもいいですね。でもできることから始めよう。