Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

第10, 11回 P!H!P! 筋トレ (2015年11月10, 12日) #10

Open
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

yutokyokutyo
Copy link
Owner

3行まとめ 💪

  • モックとは
  • メソッドに引数を持たせて汎用性の高いコードにする
  • 本番用はURLを引数に渡すようにして、テストはローカルに保存したHTMLを読むようにする

会得した筋肉 💪

  • 時間で変化してしまうものに関しては外から渡すようにすると良さそう。
  • 本番用かテストかのフラグをどうつけるか。
  • 最初はPHPUnitを実行するときに環境変数の違いからのアプローチを試みた.
  • scraiping.php のことを忘れて、OdekakeSpotsがランキングを取ってくる実行ファイルだと勘違いしてしまった。
  • あくまで scraiping.php は実行ファイルで OdekakeSpots.php は引数に渡されたものに対してHTMLをパースして配列を返すといった機構が書いてあるだけのファイルなのであった。
  • クラスを定義するファイルには実行コードを書いたりしないこと。役割ごとにファイルを作るべき。
    • ゴミコードが混じっていて以下のようなエラーが生じていた。
% ./vendor/phpunit/phpunit/phpunit ./OdekakeSpotsTest.php                                                                                                   (git)-[2015-1110-muscle]
PHP Warning:  Missing argument 1 for OdekakeSpots::getRanking(), called in /Users/usr0600328/PHP_Muscle_Training/OdekakeSpots.php on line 41 and defined in /Users/usr0600328/PHP_Muscle_Training/OdekakeSpots.php on line 14

Warning: Missing argument 1 for OdekakeSpots::getRanking(), called in /Users/usr0600328/PHP_Muscle_Training/OdekakeSpots.php on line 41 and defined in /Users/usr0600328/PHP_Muscle_Training/OdekakeSpots.php on line 14
PHP Notice:  Undefined variable: lines in /Users/usr0600328/PHP_Muscle_Training/OdekakeSpots.php on line 17

Notice: Undefined variable: lines in /Users/usr0600328/PHP_Muscle_Training/OdekakeSpots.php on line 17
PHP Warning:  Invalid argument supplied for foreach() in /Users/usr0600328/PHP_Muscle_Training/OdekakeSpots.php on line 17

Warning: Invalid argument supplied for foreach() in /Users/usr0600328/PHP_Muscle_Training/OdekakeSpots.php on line 17
PHPUnit 4.0.20 by Sebastian Bergmann.

..E

Time: 35 ms, Memory: 3.00Mb

There was 1 error:

1) OdekakeSpotsTest::testPrintOdekakeSpots
Undefined variable: lines

/Users/usr0600328/PHP_Muscle_Training/OdekakeSpots.php:36
/Users/usr0600328/PHP_Muscle_Training/OdekakeSpotsTest.php:30

FAILURES!
Tests: 3, Assertions: 5, Errors: 1.

結果 💪

% php scraping.php                                                                                                                                          (git)-[2015-1110-muscle]
エプソン アクアパーク品川
東京ソラマチ(R)
三井アウトレットパーク 多摩南大沢%
% ./vendor/phpunit/phpunit/phpunit ./OdekakeSpotsTest.php                                                                                                   (git)-[2015-1110-muscle]
PHPUnit 4.0.20 by Sebastian Bergmann.

...

Time: 76 ms, Memory: 3.25Mb

OK (3 tests, 6 assertions)

感想

今日は難しかったです..。
処理の流れがあっちいったりこっちいったりで途中分からなくなって混乱してました。
どうやらメソッドの引数として渡す変数に慣れていないようです。
筋肉のゴールデンタイム意識して復習しまっす!

@yutokyokutyo
Copy link
Owner Author

次回

  • Travis で監視!?
  • new とかしてみたい
  • DBを使ったりとか?

@yutokyokutyo
Copy link
Owner Author

おまけ

最初はPHPUnitを実行するときに環境変数の違いからのアプローチを試みた.
$_ENV
get_defined_vars()

PHPUnit には環境変数がなかったけど、どうやら PHP には何かしら付随する変数がるみたい。
これを使えたりもしたのかな。。とか思ったり。。

% php OdekakeSpots.php                                                                                                                                                                                                                                 (git)-[2015-1110-muscle]
array(7) {
  ["_GET"]=>
  array(0) {
  }
  ["_POST"]=>
  array(0) {
  }
  ["_COOKIE"]=>
  array(0) {
  }
  ["_FILES"]=>
  array(0) {
  }
  ["argv"]=>
  array(1) {
    [0]=>
    string(16) "OdekakeSpots.php"
  }
  ["argc"]=>
  int(1)
  ["_SERVER"]=>
  array(40) {
    ["TERM_PROGRAM"]=>
    string(9) "iTerm.app"
    ["TERM"]=>
    string(14) "xterm-256color"
    ["SHELL"]=>
    string(9) "/bin/bash"
    ["TMPDIR"]=>
    string(49) "/var/folders/rx/8c07ztl14pg066ybvk0xm6640000gn/T/"
    ["Apple_PubSub_Socket_Render"]=>
    string(48) "/private/tmp/com.apple.launchd.LxVcVeMrBi/Render"
    ["USER"]=>
    string(10) "usr0600328"
    ["COMMAND_MODE"]=>
    string(8) "unix2003"
    ["RBENV_ROOT"]=>
    string(20) "/usr/local/var/rbenv"
    ["SSH_AUTH_SOCK"]=>
    string(51) "/private/tmp/com.apple.launchd.7r49nJQ0sc/Listeners"
    ["__CF_USER_TEXT_ENCODING"]=>
    string(13) "0x1F5:0x1:0xE"
    ["PATH"]=>
    string(173) "/usr/local/var/rbenv/shims:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/heroku/bin:/usr/local/var/rbenv/shims:/Users/usr0600328/go/bin"
    ["PWD"]=>
    string(37) "/Users/usr0600328/PHP_Muscle_Training"
    ["ITERM_PROFILE"]=>
    string(7) "Default"
    ["XPC_FLAGS"]=>
    string(3) "0x0"
    ["FS_TRASHER_SOCKET"]=>
    string(57) "/private/tmp/com.apple.launchd.uKSlIpLZqQ/ListeningSocket"
    ["XPC_SERVICE_NAME"]=>
    string(1) "0"
    ["SHLVL"]=>
    string(1) "2"
    ["HOME"]=>
    string(17) "/Users/usr0600328"
    ["ITERM_SESSION_ID"]=>
    string(6) "w0t4p0"
    ["LOGNAME"]=>
    string(10) "usr0600328"
    ["DISPLAY"]=>
    string(66) "/private/tmp/com.apple.launchd.FHURJYBS6v/org.macosforge.xquartz:0"
    ["SECURITYSESSIONID"]=>
    string(5) "186a5"
    ["_"]=>
    string(18) "/usr/local/bin/php"
    ["OLDPWD"]=>
    string(17) "/Users/usr0600328"
    ["GOPATH"]=>
    string(20) "/Users/usr0600328/go"
    ["LC_CTYPE"]=>
    string(11) "en_US.UTF-8"
    ["CLICOLOR"]=>
    string(1) "1"
    ["vcs_info_msg_0_"]=>
    string(24) "(git)-[2015-1110-muscle]"
    ["vcs_info_msg_1_"]=>
    string(0) ""
    ["LC_ALL"]=>
    string(11) "en_US.UTF-8"
    ["LANG"]=>
    string(11) "ja_JP.UTF-8"
    ["PHP_SELF"]=>
    string(16) "OdekakeSpots.php"
    ["SCRIPT_NAME"]=>
    string(16) "OdekakeSpots.php"
    ["SCRIPT_FILENAME"]=>
    string(16) "OdekakeSpots.php"
    ["PATH_TRANSLATED"]=>
    string(16) "OdekakeSpots.php"
    ["DOCUMENT_ROOT"]=>
    string(0) ""
    ["REQUEST_TIME_FLOAT"]=>
    float(1447155396.1297)
    ["REQUEST_TIME"]=>
    int(1447155396)
    ["argv"]=>
    array(1) {
      [0]=>
      string(16) "OdekakeSpots.php"
    }
    ["argc"]=>
    int(1)
  }
}

$spots = self::getRanking();
public static function printOdekakeSpots($path = '') {
if ($path === '') {
$path = 'http://www.walkerplus.com/top/tokyo.html';
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ここにいきなり URL がでてくるけど、どういう風にしたらスッキリするだろうか?

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

定数にしてあげてそこから呼ぶようにしてあげます!

@kurotaky
Copy link

👍

@yutokyokutyo yutokyokutyo changed the title 第10回 P!H!P! 筋トレ (2015年11月10日) 第10, 11回 P!H!P! 筋トレ (2015年11月10, 12日) Nov 13, 2015
@yutokyokutyo
Copy link
Owner Author

3行まとめ 💪

  • コードレビューをしていただきレビューを取り込んだ
  • 定数化してDRYにする
  • タイプヒンティングを導入した

筋肉メモ 💪

  • スコープはできるだけ小さくすること!
  • 名前を決めるときはまずブレストで出していく。その後組み合わせを変えてみたりする.
  • HTML, POST, POINT, URL, RESOURCE, ACCESS, END_POINT(API)
  • 状況に応じて名前を変化させることはザラなので最初から完璧な名前を決めようとはしてはいけない。
  • コンストラクタがまだ分かってないようだ。
    • new したら __constract なるメソッドを通ってインスタンスが作られていくイメージだったけどどうやら違うみたい。
  • annotation??ってなんだろう?
  • タイプヒンティング:http://php.net/manual/ja/functions.arguments.php#functions.arguments.type-declaration
  • git commit -v
  • define と const
  • 名前を決めるときに最終的にどのようになっていれば良いのかを考えると良さそう

感想 💪

名前付けはやっぱり難しい。
このスクレイピングに関しては実施毎にやることを変えているので、それと同時にメソッドの役割も変わったりする。だから難しいのかな。でもとっても勉強になる。
人と一緒に何か考えたりするのって、自分以外の技術者がどんな考えを持っているのかをリアルタイムで知ることができるからかけがえのない時間!!400%吸収していかなば!

@kurotaky
Copy link

最後のまとめいいですね 💪

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants