Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
やさしいコーディング規約の導入
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
fortkle
January 13, 2016
Technology
4.7k
10
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
やさしいコーディング規約の導入
fortkle
January 13, 2016
More Decks by fortkle
See All by fortkle
無駄な物をなるべく作らないリプレイス戦略 / replace-strategy-phperkaigi2021
fortkle
1
2.7k
フルリモート時代のカンバン運用 / kanban-operation-in-remote
fortkle
0
770
GitHub Actionsで始めるPHPアプリケーションのCI実践入門 / ga-phperkaigi2020
fortkle
3
4.9k
余裕を生み出すコードレビュー 〜レビュイー編〜 / code-review-phpcon-2019
fortkle
8
7.5k
「設計振り返り」を始めてみようと思っている話 / architecture reflection
fortkle
3
620
「ママ向けNo.1アプリ」の 更なる成長を支える仕組み / startup-engineer-night-connehito
fortkle
2
350
良いテストデータ、悪いテストデータ / testdata-antipattern
fortkle
4
7k
BackstopJSで始める CSSリグレッションテスト / backstopjs-css-test
fortkle
0
1.6k
PhpStorm導入アンチパターン / phpstorm-anti-pattern
fortkle
0
2.2k
Other Decks in Technology
See All in Technology
[AWS Summit Japan 2026]迷っているあなたへ_小さな一歩が、やがて自分を助けてくれる
sh_fk2
2
410
水を運ぶ人としてのリーダーシップ
izumii19
4
990
10年間のブログ発信を振り返って見えたWebアプリケーションエンジニアとしての軌跡
stefafafan
0
180
【FinOps】データドリブンな意思決定を目指して
z63d
0
320
AIが自律的に回る開発ループを設計してチーム開発に組み込む
nekorush14
0
130
Kiro Ambassador を目指す話
k_adachi_01
0
130
【2026年版】 ベクトル検索とEmbedding最前線
mocobeta
23
7.5k
本当の”仕事”を手放せる未来が見えた
mu7889yoon
0
120
“詰む”前に仕組みを作れ 〜技術の波に溺れないためのキャッチアップ術〜
takasyou
7
3.7k
【Snowflake Summit 2026 Recap!!】Snowflake Summit Deep Dive: Security & Governance
civitaspo
1
310
MySQL & MySQL HeatWave Report - June 2026
freshdaz
0
110
いまさら聞けない「仕様駆動開発入門」 〜AI活用時代の開発プロセスを考える〜
findy_eventslides
2
200
Featured
See All Featured
Test your architecture with Archunit
thirion
1
2.3k
4 Signs Your Business is Dying
shpigford
187
22k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
210
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
A Modern Web Designer's Workflow
chriscoyier
698
190k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
210
Music & Morning Musume
bryan
47
7.2k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
250
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
55k
Making Projects Easy
brettharned
120
6.7k
Marketing to machines
jonoalderson
1
5.5k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Transcript
͍͞͠ ίʔσΟϯάنͷಋೖ ߴ ߊ @fortkle - PHP BLT #2
ࣗݾհ • @fortkle • Connehito גࣜձࣾʢϚϚ͚αʔϏε mamariʣ • ୲ྖҬϑϩϯτʙαʔόʔαΠυ •
࠷ۙͷझຯɺvimʹlintܥϓϥάΠϯΛೖΕ· ͬͯ͘ϓϥάΠϯʹౖΒΕ·͘Δ͜ͱ
None
ޚࣾͷίʔσΟϯάنɺ ػೳͯ͠·͔͢ʁ 143 143 ΦϨΦϨ ;FOE $BLF1)1 4ZNGPOZ
None
ίʔσΟϯάن͕ͳ͍ͱਏ͍ • ίʔυϨϏϡʔͷࡍʹࠣࡉͳΓऔΓ͕ൃੜ (εϖʔεɺΠϯσϯτɺվߦҐஔ) • ίʔυελΠϧ͕౷Ұ͞Εͳ͘ͳΓอकੑͷ Լ • ଞਓ͕ॻ͍ͨίʔυͷՄಡੑ͕Լ͕Δ
ͳΜͱ͔͠ͳ͍ͱ…!
3STEPͰίʔσΟϯάنΛ खʹೖΕΔ
ͨͱ͑…͜ΜͳPJT • طʹ։ൃ͕͔ͳΓਐΜͰ͍ΔPJT • ίʔσΟϯάنࠓͷͱ͜Ζͳ͍ • ނʹphpcsͳͲΛී௨ʹ͏ͱΤϥʔ͕େྔ ʹग़ͯਏ͍ => Ͳ͏ͬͯίʔσΟϯάنΛ࡞Δ͔ʁ
STEP1. ࠾༻͢ΔنΛܾΊΔ • ࠓ͔Β৽͘͠ίʔσΟϯάنΛ࠾༻͢Δͱ ͨ͠ΒPSR-2 • ࣍Ͱ༻͍ͯ͠ΔFWಠࣗͷن(ex. Cake)
STEP2. νΣοΫπʔϧΛ༻ҙ • StyleCIScrutinizerͳͲͷSaas͋Δ͕ ͓ೃછΈ phpcs (PHP CodeSniffer) ͕͓͢͢Ί •
ΧελϚΠζੑͷߴ͞ɺແྉɺ(ރΕͯΔ) • ͨͩ͠ී௨ʹ্ͬͯख͘ߦ͔ͳ͍
ී௨ʹΔͱ͜͏ͳΔ Τϥʔग़ྗߦ 65,000…….. ࣮ߦ࣌ؒ 27ඵ… ※ Vender/ Plugin/ ԼؚΜͰ͍ΔͷͰ࣮ࡍͬͱগͳ͘ͳΓ·͢ʢͬͨʣ
None
͏·͍͘͘phpcs
STEP2. νΣοΫπʔϧΛ༻ҙ • pearͰͳ͘composerͰΠϯετʔϧ // Πϯετʔϧ $ composer require “squizlabs/php_codesniffer=*"
--dev // ֬ೝʢར༻Ͱ͖ΔنΛදࣔʣ $ vendor/bin/phpcs -i
STEP2. νΣοΫπʔϧΛ༻ҙ • phpcsxmlͰنΛΧελϚΠζͰ͖Δ • STEP1ͰܾΊͨنΛܧঝ͚ͨͩ͠ͷϑΝΠ ϧ phpcs.xmlΛͭ͘Δ // phpcs.xml
<?xml version="1.0"?> <ruleset name="Owl_PSR2"> <description>Owl standard Based on PSR2</description> <rule ref="PSR2" /> </ruleset>
STEP2. νΣοΫπʔϧΛ༻ҙ • ͓ΉΖʹɺԼهίϚϯυΛΞϓϦέʔγϣϯ શମ (./app) ʹର࣮ͯ͠ߦ $ vendor/bin/phpcs -s
--report=source --standard=./ phpcs.xml ./app
STEP2. νΣοΫπʔϧΛ༻ҙ • Τϥʔͱͯ͠ݕग़͞ΕͨنͱΤϥʔ͕݅ ιʔτ͞Εͯදࣔ͞ΕΔʢศར..!ʣ
STEP2. νΣοΫπʔϧΛ༻ҙ • ΤϥʔʹͳͬͨنΛҰશͯআ֎ (phpcs.xmlʹه) <?xml version="1.0"?> <ruleset name="Owl_PSR2"> <description>Owl
standard Based on PSR2</description> <rule ref="PSR2"> <exclude name="Generic.WhiteSpace.DisallowTabIndent.TabsUsed"/> <!-- 145 --> <exclude name="Squiz.WhiteSpace.SuperfluousWhitespace.EndLine"/> <!-- 21 --> <exclude name="PSR2.Classes.ClassDeclaration.OpenBraceNewLine"/> <!-- 18 --> <exclude name="Generic.Files.LineLength.TooLong"/> <!-- 17 --> <exclude name="PSR2.Classes.ClassDeclaration.CloseBraceAfterBody"/> <!-- 16 --> <exclude name="Squiz.ControlStructures.ControlSignature.SpaceAfterKeyword"/> <!-- 9 --> <exclude name="Squiz.Functions.MultiLineFunctionDeclaration"/> <!-- 1 --> <exclude name="Generic.WhiteSpace.ScopeIndent.Incorrect"/> <!-- 1 --> </rule> </ruleset>
STEP2. νΣοΫπʔϧΛ༻ҙ • ࠶phpcsΛ࣮ߦ͢ΔͱΤϥʔ͕ग़ͳ͘ͳΔɻ ˠ ʮ؇͍CodeSnifferʯͷ $ vendor/bin/phpcs -s --report=source
--standard=./ phpcs.xml ./app $ // Τϥʔ͕ͳ͍ͷͰ࣮ߦͯ͠Կදࣔ͞Εͳ͍
STEP2. νΣοΫπʔϧΛ༻ҙ • ࡉ͔͘ϑΣʔζΛ͚ͯ1ͭ1ͭআ֎ϧʔϧΛফ ͍ͯ͘͠ => ͍͔ͭࣗવͱඪͷنʹͳΔʂ <?xml version="1.0"?> <ruleset
name="Owl_PSR2"> <description>Owl standard Based on PSR2</description> <rule ref="PSR2"> <!-- Կͳ͘ͳΔͱPSR-2ͱಉ༷ͷϧʔϧͱͳΔʂ --> </rule> </ruleset>
STEP2. νΣοΫπʔϧΛ༻ҙ • STEP2·ͱΊ 1. ඪ(͜͜ͰPSR2)ΛϕʔεʹΤϥʔͱͳ͍ͬͯΔ ϧʔϧΛআ֎͠ɺʮ؇͍نʯΛ࡞Δ 2. ϑΣʔζຖʹϧʔϧͷআ֎ΛΊ͍͖ͯɺ গͣͭ͠ඪʹ͚͍ۙͮͯ͘
3. શͯͷϧʔϧͷআ֎ΛΊͨ࣌ɺඪͱಉ͡نͱͳΔ
STEP3. CIʹΈࠐΈࣗಈ࣮ߦ • TravisCIΛ͍ͬͯͨ߹ • .travis.ymlʹॲཧΛՃࣗ͠ಈͰ࣮ߦ͞ΕΔΑ ͏ʹ͢Δ • νΣοΫରΛίϛοτ͞ΕͨϑΝΠϧͷ͏ͪ phpϑΝΠϧͷΈʹݶఆ͢Δ
(shʹ·ͱΊͯྑ͍)
STEP3. CIʹΈࠐΈࣗಈ࣮ߦ // .travis.yml ~ུ~ before_script: # full clone -
git fetch --unshallow - git fetch origin master:refs/remotes/origin/ master # setup application - sh ./setup_app.sh # exec codeSniffer - git diff --name-only --diff-filter=ACMR origin/master...HEAD | grep ".php" | xargs vendor/bin/phpcs --standard=./phpcs.xml PSJHJONBTUFSͱ )&"%Λൺֱ͚ͯࠩͩ͠ νΣοΫ
STEP3. CIʹΈࠐΈࣗಈ࣮ߦ shͰ·ͱΊɺϝοηʔδΛදࣔ͢ΕΑΓɻ Τϥʔ͕͋ͬͨ߹Ϗϧυ͕ࣦഊ͢Δɻ
·ͱΊ • ؇͍ϧʔϧ͔Β࢝Ίͯඪ(PSR-2)ʹ͍͍ۙͮͯ͘ Ξϓϩʔν͕Φεεϝ • ίϛοτͨ͠ϑΝΠϧͷΈΛphpcsͷݕࠪରͱ ͠ɺTravisͰࣗಈ࣮ߦ͢Δͱָ • ࠓ·ͰίʔσΟϯάنΛఘΊ͍ͯͨ͋ͷPJT ͍͔ͭPSR-2ʹ४ڌͰ͖Δ͔ʁ
͓͠·͍