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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
790
GitHub Actionsで始めるPHPアプリケーションのCI実践入門 / ga-phperkaigi2020
fortkle
3
6.4k
余裕を生み出すコードレビュー 〜レビュイー編〜 / code-review-phpcon-2019
fortkle
8
7.6k
「設計振り返り」を始めてみようと思っている話 / architecture reflection
fortkle
3
640
「ママ向けNo.1アプリ」の 更なる成長を支える仕組み / startup-engineer-night-connehito
fortkle
2
360
良いテストデータ、悪いテストデータ / 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
アクセスキーが漏れた日にやるべきこと- 無効化の先にある本当の対応
kazzpapa3
0
360
現場の暗黙知を継承するAIエージェント — 対話から生まれる長期記憶と Skills
atsukish
0
130
カーネルまで探検して理解するふたつの自動計装
sumiyae
0
340
OAuth SPIFFE Client Authentication(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
350
internal/testlog で遊ぼう
rokuosan
0
340
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.3k
サービス内で複数のOP・ASを連鎖させる(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
350
EUDIWの枠組みを出発点に民間エコシステムの在り方を考える(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
340
AIレビュー時代に必要なのは、SLOで引く撤退ライン
nobuoooo
0
150
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
どんな手を使っても絶対間に合わせるスケジューラ
asari194617
0
1.5k
AWSとAzureのマルチクラウド活用における強い味方___AWS_Kiroを使った二刀流スキル作成.pdf
duelist2020jp
1
140
Featured
See All Featured
A Tale of Four Properties
chriscoyier
163
24k
Building AI with AI
inesmontani
PRO
1
1.2k
RailsConf 2023
tenderlove
30
1.5k
How to make the Groovebox
asonas
2
2.4k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
260
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
400
Speed Design
sergeychernyshev
33
2k
For a Future-Friendly Web
brad_frost
183
10k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
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ʹ४ڌͰ͖Δ͔ʁ
͓͠·͍