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
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
WebGIS AI Agentの紹介
_shimizu
0
560
アラート調査向けAIエージェントの本番導入とその後/AI Agents for Alert Investigation: Production Deployment and After
taddy_919
0
120
AIAU_UMEMOGU_ninomiya_slide
ninomiya_ii
0
260
AI Agentをシステムに組み込む前にゆるく向き合ってみる
hayama17
0
130
【FinOps】データドリブンな意思決定を目指して
z63d
0
330
AWS Security Hub CSPMの成功・失敗体験
cmusudakeisuke
0
540
「ビジネスがわかるエンジニア」とは何か?
ryooob
0
300
40代で“やっとエンジニアになれた”――閉じた学びを開き、空の青さを知る / 20260628 Naoki Takahashi
shift_evolve
PRO
4
850
秘密度ラベル初心者が第1歩でつまづかないための「設計・運用」ポイント
seafay
PRO
1
480
Agile and AI Redmine Japan 2026
hiranabe
4
480
コミュニティの有益性 ~JAWS Days 2026 での体験を通して~ / The Benefits of a Community ~Through My Experience at JAWS Days 2026~
seike460
PRO
0
270
サイバーエージェントにおけるAI推進戦略と変革への取り組み
shotatsuge
0
530
Featured
See All Featured
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
490
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
220
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
240
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
BBQ
matthewcrist
89
10k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Designing Experiences People Love
moore
143
24k
Into the Great Unknown - MozCon
thekraken
41
2.6k
Optimizing for Happiness
mojombo
378
71k
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ʹ४ڌͰ͖Δ͔ʁ
͓͠·͍