Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

今すぐ使えるPHP開発のあれこれ

358 visualizaciones

Publicado el

PHP開発に使える技術

Publicado en: Ingeniería
  • Inicia sesión para ver los comentarios

  • Sé el primero en recomendar esto

今すぐ使えるPHP開発のあれこれ

  1. 1. 伝える第7回- 今すぐ使える PHP開発のあれこれ-
  2. 2. AGENDA 1. 伝えるとは 2. 自己紹介 3. 最近のphp界隈の流れ 4. 今さら聞けないcomoser 5. パッケージ管理の基本 6. composerコマンド 7. コーディング規約チェック 8. PHPコードの静的解析 9. PhpStorm 10. .editorconfig 11. Vagrant とAnsible
  3. 3. 伝えるとは
  4. 4. 「伝える」とはスピーカーが 伝えたいことをただ伝えて、 質問タイムは薄めの勉強会です。
  5. 5. 自己紹介
  6. 6. おまえ誰よ フリーランスのエンジニア 趣味 プログラミング サーバー構築 スキル php フロントエンドやりたい Ansible
  7. 7. 最近のPHP界隈の流れ
  8. 8. フルスタックからコンポーネント指向へ マイクロフレームワークの台頭 PEARからcomposerへ PSRの策定
  9. 9. 今さら聞けないCOMOSER
  10. 10. COMPOSERとはphpにおけるパッケージ管理ツール 昔でいうところのPEARに近いけど概念が全然違う RUBYのgem、nodejsのnpmに相当 後発なため、かなり柔軟になっている ただし、peclは現役。peclの代替はできない
  11. 11. PACKAGIST Packagist composerでダウンロードできる パッケージがまとまっているサイト 遅い
  12. 12. Packagist jp Packagistが遅いために作られた日本のミラーサイト 下記コマンドで設定を変更できる composer config -g repositories.packagist composer https://packagist.jp
  13. 13. PACKAGIST以外からのインス トール
  14. 14. GIT リポジトリPackagistに登録されていなくても Github、Github Enterpriseからのインストールもできる バージョンとかもちゃんとやってくれる
  15. 15. SATIS Composerプロジェクトが出している パッケージを使うことで 自前でPackagistを立てることもできる composerは に探しに行って、 なかったらPackagistに探しに行くという動きをする
  16. 16. SATISを使うと何が嬉しいかに依存パッケージを登録しておくことで、 Packagistが死んでもデプロイに影響がでない Packagistに登録できない類の自前のパッケージを 登録しておくことで、他のものと同様にインストールできる
  17. 17. パッケージ管理の基本
  18. 18. パッケージ管理いろいろyum apt homebrew npm gem bower ansible-galaxy
  19. 19. 設定ファイル COMPOSER.JSON
  20. 20. パッケージを管理する設定ファイル 主にどんなパッケージをインストールするか書いておく もしくは自分で公開するパッケージの情報を書いておく 他にはcomposerの振る舞いを記述していく 最低限のバージョン指定、追加のリポジトリなど 直接編集もできるが基本はコマンド叩くと更新される
  21. 21. ロックファイル COMPOSER.LOCK
  22. 22. インストールするパッケージのバージョンを 完全指定してあるファイル 自動で作成/更新される 開発環境と本番環境で全く同じバージョンを インストールするのに使ったりする
  23. 23. インストール先
  24. 24. GLOBAL 設定にもよるが ユーザーのホームディレクトリ配下に入れるときに使う どのプロジェクトでも使用したいものを入れる
  25. 25. PROJECT プロジェクト配下のvendorディレクトリ配下に インストールして使う クラスとして使いたいようなものを入れる
  26. 26. GLOBALかPROJECTかコマンドライン的に使うものはglobalに projectで使うものはprojectに入れる phpcs、phpmd、phpunitなどは コマンドラインとして使うのでglobalにいれておいたほうが 使い勝手がよい phpunitは両projectにもいれる コマンドラインとしてもパッケージ(クラス)としても使うため
  27. 27. DEVかそうでないか使用するパッケージの中には、 開発環境のみで使用したいものがある 例えばphpunit そういったものはdevオプションを 使用してインストールすることで、 開発環境でのみインストールすることができる
  28. 28. タスクパッケージをインストールし終わった後に 実行するタスクを定義することができる 定義するのは設定ファイル( )
  29. 29. COMPOSERコマンド
  30. 30. GLOBAL いきなりだが、これは実質コマンドではない 各(サブ)コマンドの前にglobalを置くことで global環境に対してコマンドを実行する
  31. 31. INIT の雛形を作る
  32. 32. などはインストーラーがそもそもあったりするので インストーラーでプロジェクト作るとそもそも が出来上がっている状態になる
  33. 33. REQUIRE 開発するときに最もお世話になるコマンド パッケージのインストールに使用する
  34. 34. INSTALL リポジトリからクローンしてきた直後など、環境構築時に叩くあまり叩く 機会は多くないかも composer.lockが存在すれば、 そのバージョンの情報を元にパッケージをインストールする なければ、composer.jsonを元にインストールする
  35. 35. UPDATE よく使う すでにインストールしているパッケージの バージョンを更新したいときに使用する これを実行することで、composer.lockも更新される
  36. 36. CONFIG
  37. 37. 設定の確認ーー ーー
  38. 38. リポジトリの追加Packagistに登録されているものは、 リポジトリの追加なしでインストールできる そうでない場合はリポジトリの追加が必要
  39. 39. コマンドでやる場合composer global config repositories.vendor-name/foo-codesniffer '{"type": "vcs", "url": "https://github.com/vandor-name/foo-codesniffer.git", "version":"master"} ※改行しているけど実際は1行
  40. 40. COMPOSER.JSONに書く場合"repositories": [ { "type":"package", "package": { "name": "vendor-name/foo-codesniffer", "version":"master", "source": { "url": "https://github.com/vendor-name/foo-codesniffer.git", "type": "git", "reference":"master" } } } ], "require-dev": { "vendor-name/foo-codesniffer": "dev-master" },
  41. 41. 注意古い環境でcomposerを動かすと、 detect_unicodeという php.ini周りの設定のためにエラーが出ることがある。 そんなときは、 php -d detect_unicode=false /path/to/composer install とphpのオプション指定すると使える。
  42. 42. コマンドと各ファイル
  43. 43. その1
  44. 44. その2
  45. 45. その3
  46. 46. コーディング規約チェック
  47. 47. PSRとはPHP Standards Recommendations PSRには0から14までのカテゴリがあり、 それぞれが違う範囲をカバーしている。 ただ、全部を気にするのは辛い。 ライブラリアンは別だが 実務上は(とりあえず)PSR1-4まで気にしておけばいい。 もっというと、PSR2だけでいい。
  48. 48. ただ、存在は知っておこう でないと、クラス読み込めないエラーが出た時に どうしていいかちんぷんかんぷん
  49. 49. PHP-FIG http://www.php-fig.org/ PSRは、php-figという団体が策定している php標準のコーディング規約 php-figには各フレームワークが参加している
  50. 50. PSR0 オートロードに関する規約 ただし、duplicateなので、 今からやるなら後述のPSR4を使うべき
  51. 51. PSR1 PSR0に従うこと クラス定義の中に読み込んだだけで影響のあるものを入れない php.iniの値を変える なんかいきなりechoしている requireしている クラスやメソッドの命名規則など
  52. 52. PSR2 PSR1を前提としての細かいコーディング規約 ifの括弧の位置とか。 コーディングする上で1番気にしておくべきところ。
  53. 53. PSR3 ロガーに関する規約 ロガーのインターフェースとか ログレベルとか
  54. 54. PSR4 オートロードに関する規約 PSR0の後継 ディレクトリのパスを名前空間と揃える形のやつ 名前空間を持ち出してきてるので、5.2以前は対象外
  55. 55. PHP CODESNIFFER(PHPCS)
  56. 56. 用語Rule(Source) ruleset Standard report
  57. 57. RULE(SOURCE) RuleといったりSourceといったりする ↓ のようなドット区切りの規約のこと 先頭から という名前空間になっている。
  58. 58. RULESET Ruleをまとめたもの xmlで記述する
  59. 59. STANDARD rulesetに付いている名前デフォルトであるのは下記 PEAR PSR1 PHPCS Squiz PSR2 Zend rulesetはインクルードできるので 使いたいRule、除外したいRuleを うまく設定して自前のを作るとよい
  60. 60. REPORT 標準出力への表示形式 オプションで指定できる summary source などが指定できる
  61. 61. コマンドイメージphpcs --standard=vendor/path/to/sniffer/ruleset.xml path/to/directory phpcs --report=source -s path/to/file.php
  62. 62. 実行結果の例$ phpcs /path/to/code FILE: /path/to/code/myfile.php -------------------------------------------------------------------------------- FOUND 5 ERROR(S) AFFECTING 5 LINE(S) -------------------------------------------------------------------------------- 2 | ERROR | Missing file doc comment 20 | ERROR | PHP keywords must be lowercase; expected "false" but found "FALSE" 47 | ERROR | Line not indented correctly; expected 4 spaces but found 1 51 | ERROR | Missing function doc comment 88 | ERROR | Line not indented correctly; expected 9 spaces but found 6 -------------------------------------------------------------------------------- FILE: /path/to/code/yourfile.php -------------------------------------------------------------------------------- FOUND 1 ERROR(S) AND 1 WARNING(S) AFFECTING 1 LINE(S) --------------------------------------------------------------------------------
  63. 63. PHPCBF phpcsのルールにそって、ある程度自動で修正してくれるツール
  64. 64. PHPコードの静的解析
  65. 65. PHP MESS DETECTOR(PHPMD) phpのコードでバグになる可能性がある コードを検知してくれるツール
  66. 66. RULESET CodeSnifferと同様にMess Detectorも ルールを持っている。 そのルールをカテゴライズしている単位 一つのRulesetの中にいくつかのRuleを持っている
  67. 67. 一覧Ruleset 内容 cleancode きれいなコードかどうか codesize コードの複雑さチェック controversial 命名規則チェック design 設計上の問題 naming 変数や関数の名称チェック unusedcode 使われていない要素の検知
  68. 68. コマンドイメージ
  69. 69. PHPSTORM
  70. 70. PHPSTORMとはJetbrains社が出しているPHP用のIDE 2015年のPHPカンファレンスでは、6割くらいの人が使っていた Monokaiのテーマがおすすめ viキーバインド使える Eclipse風のキーバインドも使える phpcs、phpmdはリアルタイムで警告してくれる phpunitも叩ける phpcbfも叩ける 部分的だけど日本語対応できるらしい
  71. 71. ECLIPSEより良い所補完が優秀 eclipseとくらべて Laravel + ide-helper ファイル移動が優秀 CakeStorm Laravel Plugin 軽い eclipseとくらべて syntax highlightが優秀 リファクタリングが優秀
  72. 72. 他のIDEができることまぁ、大抵できる デバッガを使用したステップ実行 した時にサーバーへのSFTP git操作 ファイルの履歴管理(ローカル)
  73. 73. .EDITORCONFIG
  74. 74. .EDITORCONFIGとは様々なエディターで利用できる、共通の書式設定ファイル 改行コード ハードタブ、ソフトタブの指定 行末に空行入れる、入れない 文字コード などを設定ファイル化したもの
  75. 75. 例こんな感じ root = true [*] indent_style = space indent_size = 4 end_of_line = lf insert_final_newline = true trim_trailing_whitespace = true [*.bat] end_of_line = crlf [*.yml] indent_style = space indent_size = 2
  76. 76. 使い方とりあえず、このファイルをプロジェクトルートに置く あとは、対応するエディタで開けば勝手にロードしてくれる 最近のエディタであれば、 プラグインがあることが多い ただし、各エディタのプラグインの対応状況が バラバラなので効かない場合もある
  77. 77. PHPCSとのすみ分けphpcsで賄える部分がほとんどなので、 phpcs入れてればまぁ、大丈夫。 でも、js、md、ctp、shellなどのphp以外のところを カバーできるのでいれておいて損はない phpcsでも、js、ctpはカバーできるけども。。
  78. 78. VAGRANT とANSIBLE
  79. 79. VAGRANTとは各種仮想マシンを操作するためのコマンドラインラッパー 操作できる仮想マシンはいくつかあるが、 VirtualBoxが一般的 pluginをインストールすれば、 AWS EC2, Azure,OpenStackなども操作できる
  80. 80. BOX 仮想マシンのイメージ Boxというファイルで管理する イメージなので基本ファイル容量がでかい 数百Mbから数Gb
  81. 81. VAGRANTFILE 仮想マシンの設定などを行う設定ファイル rubyの書式で書く
  82. 82. ANSIBLEと組み合わせる
  83. 83. ANSIBLEとは環境構築やサーバーに対して 何かをするときに便利なツール 秘伝のタレ的な、サーバー構築手順を プログラムにできる 冪等性を担保しやすい
  84. 84. PLAYBOOK Playbookというファイルに 様々なタスクを書いておくことで 環境構築を行っていける
  85. 85. VAGRANTとANSIBLE Vagrant単体でも十分威力を発揮するが、 Ansibleと組み合わせると鬼に金棒 Vagrantの弱点は、差分管理が難しいとこ
  86. 86. こんな時に困る
  87. 87. だからAnsibleで環境構築を 自動化しておけば、 まっさらなベースのBoxから プロジェクト環境がすぐに作れる
  88. 88. ご静聴有難うございました

×