Slide 1

Slide 1 text

ͳ͕Β3VCZձٞ  ౔ ௕ྑ઒͏͔͍ϛϡʔδΞϜ ,PJDIJ*50&4. *OD ೔ ͷ044׆ಈΛଓ͚Δ෣୆ཪ Write Code Every Day

Slide 2

Slide 2 text

w044ϓϩάϥϚʔ w3VCP$PQίΞνʔϜίϛολʔ w.$1TUFFSJOHHSPVQϝϯόʔ wגࣜձࣾӬ࿨γεςϜϚωδϝϯτ &4. *OD  ΤϯδχΞϦϯάϚωʔδϟʔ σΟεςΟϯάΠογϡυɾΤϯδχΞ @koic

Slide 3

Slide 3 text

ࢲ͸ʰ3VCZͰ--.ΞϓϦέʔγϣϯΛࢧ͑Δجૅٕज़ʱʹ͍͓ͭͯ࿩͠͠·͢

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

೔ͷ044׆ಈΛ ଓ͚Δ෣୆ཪ 3VCZ.JOJ-BOHVBHF࡞੒ه ʙϋϯζΦϯͰֶͿΠϯλϓϦλͷੈքʙ ࠓճͷӬ࿨͔Βͷొஃऀ զʑ͸झຯશ։Ͱ࿩ͯ͠·͕͢ɺ8FCͱ%#ͷγεςϜ։ൃ͕த৺ͷࣄۀͰ͢ dLPJD dIBSVHVDIJ

Slide 6

Slide 6 text

Support OSS community

Slide 7

Slide 7 text

w !LPJD1BSTFSHFNίϛολʔ w !KVOL-SBNBίϛολʔ w !4)(".&-*/,4QBSTFZίϯτϦϏϡʔλ w !IBSVHVDIJͳ͕Β3VCZձٞύʔαʔ࿮ w ઈࢍ෦һืूத ߏจղੳثݚڀ෦ IUUQTNBHB[JOFSVCZJTUOFUBSUJDMFT'PMMPX6Q,JSJTIJNB3VCZIUNM

Slide 8

Slide 8 text

w มԽͷ଎͍--.पลٕज़ʹ͍ͭͯͷ࿩୊ w ༧ࢉͷ͍ͭͨ෦׆ಈ w Ӭ࿨ࣾ಺4MBDLͷMMNDMVCνϟϯωϧ w ઈࢍ෦һืूத w ೖࣾ͢Δ͚ͩͰɺ΋Εͳ͘ೖ෦Ͱ͖·͢ େن໛ݴޠϞσϧ --. ݚڀ෦ IUUQTNBHB[JOFSVCZJTUOFUBSUJDMFT'PMMPX6Q,JSJTIJNB3VCZIUNM

Slide 9

Slide 9 text

ࠓ೔ͷ࿩

Slide 10

Slide 10 text

.BJOUBJO044&WFSZ%BZ IUUQTHJUIVCDPNLPJD

Slide 11

Slide 11 text

3VCZ$POG5BJXBOͷҰນ ೔ຖ೔ίϛοτ ͍ͯ͠Δׂͬͯͱڰؾ Ͱ͢ΑͶ ๙Ίݴ༿ IUUQTYDPNIBDIJCMPHTUBUVT ͨͿΜ

Slide 12

Slide 12 text

ϓϩάϥϚʔͷΞτϦΤ࿩ ϓϩάϥϛϯά݁ՌͰ͋Δ1VMM3FRVFTU΁ͷաఔ΍ίʔυϨϏϡʔͳͲͷ؀ڥͷ࿩

Slide 13

Slide 13 text

 ύονΛॻͨ͘Ίͷجຊ؀ڥ  ݸਓͷΠγϡʔ؅ཧ  όά୳ࡧͷ؀ڥͮ͘Γ  ιʔγϟϧίʔσΟϯά  ήʔϛϑΟέʔγϣϯ ໨࣍

Slide 14

Slide 14 text

 ύονΛॻͨ͘Ίͷجຊ؀ڥ

Slide 15

Slide 15 text

w YNPUFNFOHIR͸ϦϙδτϦ؅ཧπʔϧ ͰɺBNBUTVEBHFNTSD͸ϦϙδτϦऔಘ πʔϧ w ͓࢓ࣄͷϓϩϓϥΠΤλϦͷίʔυͱ044Λ ಁաతʹѻ͑ΔσΟϨΫτϦߏ଄ʹ͢Δ w HFNTSDͰखݩʹґଘHFNΛ͓࣋ͬͯ͘଍৔ HIRͱHFNTSDͰجૅߏங

Slide 16

Slide 16 text

w ϦϞʔτϦϙδτϦ͔ΒHJUDMPOFͨ͠ ϩʔΧϧϦϙδτϦΛ؅ཧ͢Δπʔϧ w HJUDMPOFʹ୅ΘΓHIRHFUͰϦϙδτϦऔಘ w dHJUDPO fi HʹHIRͷSPPUσΟϨΫτϦΛ ࢦఆՄೳ HIR IUUQTHJUIVCDPNYNPUFNFOHIR [ghq] root = ~/src HIRHFUʹΑΔσϑΥϧτͷ഑ஔઌ͸HIR ͕ͩɺιʔείʔυͱ͍͏ந৅Խͨ͠σΟ ϨΫτϦ໊ͱͯ͠ѻ͏ͨΊTSDʹ͍ͯ͠Δ

Slide 17

Slide 17 text

HIR IUUQTHJUIVCDPNYNPUFNFOHIR $ tree `ghq root` /Users/koic/src ├── github.com │ ├── modelcontextprotocol │ │ ├── modelcontextprotocol │ │ └── ruby-sdk │ └── rubocop │ ├── rubocop │ └── rubocop-rails ├── gitlab.com │ └── tmtms │ └── lsp_router w HIRSPPU͔Βͷ ϗετ໊PSH໊ ϦϙδτϦ໊ͷ σΟϨΫτϦߏ଄ w TSD௚ԼʹϦϙδτϦ HJUDMPOFͯ͠Δਓ΁ HIR@USBOTGFSΛHFN ͱͯ͠ϦϦʔεࡁΈ

Slide 18

Slide 18 text

w HFNJOTUBMMͰϥΠϒϥϦΛґଘؔ܎ΛؚΊͯ खݩʹHJUDMPOF͢Δ(FNϓϥάΠϯ w Πϯετʔϧํ๏͸3&"%.&Λࢀরͷ͜ͱ w HFNSDʹHIRࢦఆ͕͋Ε͹HIRHFUͰऔಘ HFNTSD IUUQTHJUIVCDPNBNBUTVEBHFNTSD $ cat ~/.gemrc gemsrc_use_ghq: ~/src dHFNSD΁ͷ͜ͷࢦఆ͕ͳ͚Ε͹HJUDMPOFͰऔಘ͢Δ

Slide 19

Slide 19 text

͜͜·Ͱ͕ 044։ൃجૅ؀ڥ खݩͰCVOEMFJOTUBMMͨ͠ࡍͷґଘϥΠϒϥϦͷϦϙδτϦ؀ڥ͕खݩʹ͋Δ $ gem i rubocop Fetching rubocop-1.80.2.gem exists /Users/koic/src/github.com/rubocop/rubocop Successfully installed rubocop-1.80.2 1 gem installed

Slide 20

Slide 20 text

w (FN fi MFMPDLͷHFN͸HIRͰऔಘࡁΈͱͳΔ w ͓࢓ࣄͰCVOEMFJOTUBMM͍ͯ͠ΔHFNʹ͍ͭ ͍ͯͭͰ΋ύονΛૹΕΔ؀ڥ͕Ͱ͖͍ͯΔ w ՀཟͱόβʔϧͰ͍͏ʮϦʔφεͷ๏ଇʯ͕ ಇ͍ͯΔେ͖ͳ(FNͷ໰୊୳͠͸೉қ౓͕ߴ ͘ɺೖ໳ऀ͸খ͞ͳ(FN͔Β࢝ΊΔͷ͕ฏқ 044ରԠਓࡐͷCVOEMFJOTUBMM FH 3VCZPO3BJMT

Slide 21

Slide 21 text

w ແݶʹ૿͑ΔϩʔΧϧϦϙδτϦͱ͍͏՝୊ w QFDP΍G[GͳͲϑΟϧλϦϯάπʔϧͰղܾ ϑΟϧλϦϯάπʔϧͰϦϙδτϦҠಈ $ ghq list | wc -l 2428 $ cr # This is an original command. QUERY> rubocop/rubo IgnoreCase [16 (1/1)] /Users/koic/src/github.com/rubocop/rubocop /Users/koic/src/github.com/rubocop/rubocop-ast /Users/koic/src/github.com/rubocop/rubocop-capybara

Slide 22

Slide 22 text

ࢀߟ HIR QFDP # cr is a custom command for "change repository". function cr() { if [ $# -eq 1 ]; then repo=$(ghq list -p | sort | peco --query $1) else repo=$(ghq list -p | sort | peco) fi if [ -n "$repo" ]; then cd $repo fi } IUUQTHJUIVCDPNLPJDEPU fi MFTCMPCNBTUFSEPUTIHIRTI ༨ஊͰ͕͢ɺ&NBDTύοέʔδͩͱJWZHIR͕ศར

Slide 23

Slide 23 text

w ίϛοτݖ͕ͳ͍ϦϙδτϦ΁͸'PSL͕ඞཁ w HJUDMPOFͨ͠ΦϦδφϧϦϙδτϦΛPSJHJO ͱ͢Δ͔VQTUSFBNͱ͢Δ͔͸PSJHJO͕ݸਓత ʹ͓͢͢Ί HJUσϑΥϧτͷڍಈʹ४͡Δ  w PSJHJOΦϦδφϧϦϙδτϦ SBJMTSBJMT  w VQTUSFBN'PSLϦϙδτϦ LPJDSBJMT HJUͷPSJHJOͱVQTUSFBN FH FH

Slide 24

Slide 24 text

$ git remote add upstream https://github.com/koic/rubocop $ git push upstream head ϩʔΧϧϦϙδτϦ ϦϞʔτϦϙδτϦ FH (JU)VC dTSDHJUIVCDPNSVCPDPQSVCPDPQ PSJHJO SVCPDPQSVCPDPQ VQTUFBN LPJDSVCPDPQ PSJHJOʹ४ͨ͡ύε PSJHJOͱVQTUSFBN 044 13લͷHJUQVTI͸ɺHJUQVTIVQTUSFBNIFBEͷܾΊଧͪͰΑ͍ GPSLͨ͠ϦϙδτϦΛVQTUSFBNͱͯ͠ॳظઃఆճͷΈࢦఆ 13 VQTUSFBN DMPOFQVMM 'PSL PSJHJO OFFETDPNNJUCJU

Slide 25

Slide 25 text

w ͓࢓ࣄͷϓϩϓϥΠΤλϦͷίʔυͱ044Λ ಁաతʹѻ͑ΔHJUίϚϯυ͙͠͞Λߏங͢Δ w ίϯτϦϏϡʔγϣϯ͢Δࡍʹ͸ɺ HJUQVTIVQTUSFBNIFBEΛఆܕͷܕͱ͢Δ ͓࢓ࣄͰ΋PSJHJOͱVQTUSFBNΛ࢖͏ HJUQVTIGͷσϑΥϧτΛGPSDFXJUIMFBTFʹ͢ΔHJUެࣜઃఆ͕ཉ͍͠ $ git pull origin main $ git push upstream head

Slide 26

Slide 26 text

$ git remote add upstream https://github.com/your/origin $ git push upstream head ϩʔΧϧϦϙδτϦ ϦϞʔτϦϙδτϦ FH (JU)VC dTSDHJUIVCDPNZPVSPSJHJO PSJHJOcVQTSFBN ZPVSPSJHJO PSJHJOʹ४ͨ͡ύε PSJHJOͱVQTUSFBN ͓࢓ࣄ VQTUSFBN͸࣮࣭PSJHJOͷΤΠϦΞε 'PSL͸ෆཁ VQTUSFBN DMPOFQVMM ͓࢓ࣄͰ΋HJUQVTIVQTUSFBNIFBEͱ͍͏044ͱಉ͙͡͠͞ʹͳΔ 13 PSJHJO

Slide 27

Slide 27 text

 ݸਓͷΠγϡʔ؅ཧ

Slide 28

Slide 28 text

w 3BJMTͷେݩͷ#BTFDBNQΛπʔϧͱͯ͠ར༻ w ࣌ؒ͸༗ݶͳͷͰɺύϒϦοΫͳΠγϡʔʹ ͍ͯ͠ͳ͍ ΏΔ;Θͳ՝୊ɺԠ౴ͷखؒՋ  w झຯͳͷͰ޷͖ͳ࣌ʹ΍ΕΔ͜ͱΛॏࢹ w ʮࠔͬͯΔਓͷ໰୊͕௚ΔͷͰͳ͘ɺ௚͢ؾ ͷ͋Δਓͷ໰୊͕௚ΔCZ!LBNJQPʯͷਫ਼ਆ ඇެ։ͷݸਓλεΫ؅ཧ

Slide 29

Slide 29 text

w wip_࢝·Γͷ໊લͷϒϥϯν͕ύονା w QFDPͰϒϥϯν໊ʹΑΔϑΟϧλϦϯά ύονାͱ8*1ϒϥϯνͰ࿈ಈ alias cb='git checkout `git branch | peco | \ sed -e "s/\* //g" | awk "{print \$1}"`' $ cb # cb is a custom command for "change branch". QUERY> wip_ wip_fix_a_false_positive_for_layout_xxx_cop wip_fix_a_false_negative_for_style_xxx_cop

Slide 30

Slide 30 text

w ະ׬੒ެ։ͰͷΠγϡʔͷόοΫϦϯΫ๷ࢭ w wip_࢝·ΓϒϥϯνͷQVTI๷ࢭͷHJUIPPLT HJUIPPLTͰະ׬੒ͷQVTI๷ࢭ # .git/hooks/pre-push if [ \ "$(git rev-parse --abbrev-ref HEAD | grep '^wip_')"\ ]; then echo "[ABORT] You cannot push this branch." 1>&2 exit 1 fi git push࣌ʹ࣮ߦ͞ΕΔHJUIPPLTͱͯ͠഑ஔ XJQϒϥϯνͩͱࣦഊ͢ΔͷͰɺৗʹgit push upstream headͰྑ͍

Slide 31

Slide 31 text

w UFNQMBUFΛ࢖͍ϦϙδτϦΛDMPOF͢Δ౓ʹ IPPLTεΫϦϓτΛHJUIPPLTσΟϨΫτϦ ഑Լʹ༻ҙ͢ΔखؒΛղܾ͢Δ w HJUDMPOFͨ͠λΠϛϯάͰϦϙδτϦϧʔτ ʹର͢ΔHJUIPPLTͷఆܕ഑ஔΛࣗಈԽ͢Δ HJUͷUFNQMBUFػೳ (JU)VCͷςϯϓϨʔτͰ͸ͳ͘ɺHJUͷςϯϓϨʔτػೳͷ࿩Ͱ͢

Slide 32

Slide 32 text

w HJUDPO fi HHMPCBMJOJUUFNQMBUFEJSύε ΛςϯϓϨʔτͷύεΛࢦఆ࣮ͯ͠ߦ͢Δ w HJUDPO fi HʹUFNQMBUFEJSͷઃఆ͕Ͱ͖Δ HJU@UFNQMBUFIPPLTΛ༻ҙ [init] templatedir = ~/src/github.com/koic/dotfiles/dot.git_template $ git config --global init.templatedir \ ~/github.com/koic/dotfiles/dot.git_template

Slide 33

Slide 33 text

w HJUQVTI࣌ʹϒϥϯν໊͕XJQ@͔Β࢝·Δ ৔߹͸ࣦഊͤ͞ΔςϯϓϨʔτΛ഑ஔ͢Δ UFNQMBUFEJSͷύεʹςϯϓϨʔτ഑ஔ HJUDMPOF࣌ʹ࡞੒͞ΕΔ ςϯϓϨʔτʹͳΔ HJUΑ͘Ͱ͖ͯΔ

Slide 34

Slide 34 text

w #BTFDBNQ؅ཧͷΠγϡʔͰHJUͷϒϥϯν໊ Λඥ͚ͮͯ؅ཧ͍ͯ͠Δ΋ͷ΋͋Δ #BTFDBNQͱϒϥϯν໊Λ࿈ܞ

Slide 35

Slide 35 text

 όά୳ࡧͷ؀ڥͮ͘Γ -PDBM3VCP$PQ&YBNQMF

Slide 36

Slide 36 text

w ߏจͷॊೈੑ͸ɺߏจͷෳࡶੑΛഎܠͱ͢Δ w ʮ͜Μͳॻ͖ํ΋Ͱ͖Δͷ͔ʂʯΛ͢΂ͯ ࣄલʹ೺Ѳ͢Δͷ͸ɺ;ͭ͏ͷਓྨ͸೉͍͠ w ʮ͜ΜͳίʔσΟϯάελΠϧ͢Δͷ͔ʂʯ Λ͢΂ͯࣄલ༧ଌ͢Δͷ͸ɺਓྨʹ͸ෆՄೳ ࣮͸೉͍͠3VCZͷߏจ ݁Ռͱͯ͠ୀ۶͠ͳ͍ఔ౓ʹ͸ΠγϡʔϨϙʔτΛ௖͖·͢ ͋Γ͕ͱ͏͍͟͝·͢

Slide 37

Slide 37 text

w (FN fi MFͰHFNϝιουͷQBUIΦϓγϣϯΛ ࢖ͬͯϩʔΧϧΛ࢖͏Α͏ʹ͍ͯ͠Δ w ։ൃσόοάͰγʔϜϨεʹίʔυฤू͢Δ Πγϡʔͷ࠶ݱ؀ڥ 3VCP$PQ༻ # frozen_string_literal: true source 'https://rubygems.org' gem 'prism', path: '/Users/koic/src/github.com/ruby/prism' gem 'rubocop', path: '/Users/koic/src/github.com/rubocop/rubocop' gem 'rubocop-ast', path: '/Users/koic/src/github.com/rubocop/rubocop-ast'

Slide 38

Slide 38 text

w Πγϡʔͷಈ࡞ݕূ༻ʹϩʔΧϧϦϙδτϦ Λ༻ҙ͍ͯ͠Δ w Πγϡʔ൪߸ͰσΟϨΫτϦΛ۷ͬͯɺ ΠγϡʔͷίʔυΛషΓ෇͚ͯ֬ೝ͍ͯ͠Δ Πγϡʔͷ࠶ݱ؀ڥ 3VCP$PQ༻ $ mkdir 42 && cd $_ $ emacs example.rb # Paste issue code and edit. $ bundle exec rubocop HJU؅ཧ͓ͯ͘͠ͱɺΦʔτίϨΫτͷόά࠶ݱ·ͰHJUDIFDLPVUͷ܁Γฦָ͕͠

Slide 39

Slide 39 text

͓ߦّͷѱ͍ίʔυΛٻΊΑ w ͓࢓ࣄͷίʔυͰ͸ɺಈ͖͘Ε͍ͳίʔυΛ ໨ඪ͢ΔͨΊɺ3VCP$PQ΁ͷَ໳͸গͳ͍ w 3VCP$PQ͕յΕ͍ͯΔ͜ͱΛݟ͚ͭΔʹ͸ ͦͷٯΛ߈Ί͍ͯ͘ w ໰୊୳͠ʹ͸લड़ͷʮΠγϡʔ࠶ݱ؀ڥʯΛ ϥϯλΠϜ؀ڥͱͯ͠࢖͏

Slide 40

Slide 40 text

w ΃Μ͞Μ΍NBNF͞Μͷ ΞϨ HJUIVCDPNUSJD  w ։࠵͝ͱʹެ։͞ΕΔ 53*$,ͷίʔυͰޡݕ஌ ͕ͳ͔ͬͨ͜ͱ͕ͳ͍ w ࠷ڪͷ3VCP$PQΩϥʔ 53*$,ͷ࠷ڪίʔυͰݕࠪ eval((s=%~c=(0..35 ).map{s[2*_1+1]}*'';class$Inte ger;def$quXinclude(Math ;spXo(a)=self* a.pow(87X=h=32.chr;g=PI/480;ls=(sp*31X,89)%89; def$abX+'eval((s=%'+(n=? .next)+s*88.chr+[nXs()=[a =self%X+'.split(',sp*25+'?'+88.chr+');(0..36).mapX89,89- a].miX{s[2*_1].split}',sp*31+".join.tr('$',$/)))"]*$/)Xn;end ;reqX.split$/;trap(:INT){puts;exit};q=->t,i{a,y=((t+i*99)Xuire 'matrX%960). ivmod(80);[(a*(7+i)+i*23)%79+(y+a)/(5+i%4)%2,39Xix';1 5.tiX-y/2]};p=->t,u{a=->b,c{(0..5).sum{(u%2-1)*E**(t*(b+c*_1)*gXmes{ |i,*X.i+ i*u+=5+sin(u*u))}};x,z=a[5,3]. 5,3].rect;x+=y.Xv|z= *?!Xi a[19,4];z+=w;r=(4+(x.abs+z.i).ab };t=(0..959).fX..? W,?Xind{|t|(0..29).all?{x,y=q[t,_1];(x 2||h=ls[y][x]X[,* ?]..X[/[^!-}]/]}};h=($**h+h).chr;eval( []} ->(x,yX?};a =(0X,a,b){x=x*36+39.5;y=19.5-y*18;b*=1 |i|((yX..1 34)X-b).ceil..y+b).map{|j|((x-i)/a+(y j)/ .times{X.ma p{zXx,z=p[t,_1];l=u```=0;while``````(l<1)``; u+```=0 ;d=x-y;X.in dex(Xl+=(d.abs+(z-w``)``.i).ab``s*1.``1 ;x``,z=y``,w;o[v``=``x.r d.imag/Xc[i+ 15*Xd.abs*l*sin(2*``l-t``*g*80``-_1) l*(``1-l)/``6,a``=l*( -l)**2*0.X_1] )};X7,a*2]&&o[v,z,``0.0``3,l**`` ``times``{|i``|(8+i).times{|Xw=* MatXj|o[sin(i)/2+````` ```sin( `/2.0`````````)*j/200,j*0.0Xrix [*(X5-1,0.02,0.1]``}} ``. q[t,``_1];m``[y][x]= };i=-X0.. 44).X1;$><<(['%%','[H .map{|j|(0..79).map{|k|x=(Xmap{ |i,X -39.5)/35.8;y=( i+=1;m[j][k]?h:c[i]):ls[j]X*b| v<l { v9 { P l ga%]AK$#BrjXb<

Slide 41

Slide 41 text

w େࡕ3VCZձٞͷొஃͷͨΊʹࣗ࡞ͨ͠ HJUIVCDPNLPJDNJOJGZSCΛ࢖ͬͯɺNJOJGZ ͨ͠3VCZͷίʔυΛΦʔτίϨΫτ͢Δ .JOJGZͨ͠ίʔυΛݕࠪ͢Δ $ gem i minifyrb $ cat lib/mcp/version.rb module MCP VERSION = "0.2.0" end $ minifyrb lib/mcp/version.rb module MCP;VERSION="0.2.0";end .JOJGZͨ͠ίʔυ͕ੜ੒͞ΕΔ IUUQTTQFBLFSEFDLDPNLPJDNJOJGZSVCZDPEF

Slide 42

Slide 42 text

w ೉ಡԽʹର͢Δ෮߸ԽΈ͍ͨͳ΋ͷ w ͓࢓ࣄʹݶΒͣɺ;ͩΜ͸ΈΜͳߦّͷྑ͍ ίʔυΛແҙࣝʹ໨ࢦͯ͠͠·͍·͢ΑͶʁ w 3VCP$PQͷΦʔτίϨΫτͱ͍͏ ϑΥʔϚολʔͷྗͷ࠶ൃݟ .JOJGZͰյͯ͠3VCP$PQͰ௚͢ .JOJGZͨ͠ίʔυ͕Ͳ͏෮ݩͰ͖Δ͔ڵຯΛ࣋ͪ·͢ΑͶʁ

Slide 43

Slide 43 text

w Ͳ͏΋ී௨͸͜͜·Ͱ͠ͳ͍Β͍͠ w ΞϓϦέʔγϣϯͰ࢖͍ͬͯͯ;ͭ͏ʹෆศ ͳ෦෼ΛΠγϡʔͰڞ༗͢Δͷ͕Ԧಓ w ;ͭ͏ͷϢʔεέʔεͰɺ;ͭ͏ʹ࢖͍ͬͯ ͯɺ;ͭ͏ʹݟ͚ͭΒΕͨΤϥʔ͕Ұ൪ଚ͍ Πγϡʔใࠂ͸ίϯτϦϏϡʔγϣϯ ΠγϡʔͰ૲͕ੜ͑Δ࢓༷ʹ͍ͯ͠Δ(JU)VC͸Α͘ษڧ͍ͯ͠Δ

Slide 44

Slide 44 text

 ιʔγϟϧίʔσΟϯά

Slide 45

Slide 45 text

w ʮιʔγϟϧίʔσΟϯάͱ͍͏ϧωοαϯ εʯCZ!BNBUTVEB JOσϒαϛ  w 044ίϛϡχςΟͰͷϓϨθϯεॏཁ w ·ͣ͸ʮԿΛ΍͍ͬͯΔਓʯͱ஌ͬͯ΋Β͏ w ίʔυ͚ͩͰ͸ͳ͘ൃݴ΍ϨϏϡʔ͸େࣄ ʮΧϧϚΛ্͛ΔʯCZ!ZBIPOEB

Slide 46

Slide 46 text

w ӳޠͱ͍͏ڞ༻ޠ w ౓ʑצҧ͍͞Ε·͕͢ɺࢲ͸ෆಘखͰ͢ w ࣌୅͸"* ΂ΜΓʂ  w ʮฏқͰஸೡͳӳจʹ༁ͯ͠ʯͱୟ͖୆࡞Γ w ףࢺ΍ෳ਺ܗɺडಈଶ΍ೳಈଶΛؾʹֻ͚Δ ίϛϡχέʔγϣϯ

Slide 47

Slide 47 text

w ಉظతͳϛʔςΟϯά͕ͳ͍ͷͰɺ͖ͪΜͱ ίϯςΩετΛจষԽͯ͠఻͑Δඞཁ͕͋Δ w ࣗݾ׬݁ͨ݁͠Ռ͚ͩίʔυʹͯ͠ɺ8IZ͕ ࣗવݴޠͱͯ͠ॻ͔Ε͍ͯͳ͍13͸ࠔΔ w ڞ༗͢Δ͜ͱ͕श׳Խ͞ΕΔ͜ͱ͸ɺ͓னͷ ͓࢓ࣄͰ΋ϓϥεʹಇ͘ޮ༻͕͋Δ͔΋ʁ 044͸஍ٿશମͰͷඇಉظ։ൃ

Slide 48

Slide 48 text

w OP΍OPUΛͪΐͬͱආ͚ͨදݱ Λߟ͑Δ w ಛʹωΨςΟϰϑΟʔυόοΫ Ͱ͸ZPVͷओޠΛආ͚Δ w ೳಈଶΑΓडಈଶʹ͢Δ w ߠఆΛલஔ͖ͯ͠ͷIPXFWFSʙ ʰӳޠͷ඼֨ʱΛߟ͑Δ

Slide 49

Slide 49 text

w ίʔυΛݟ͚ͨͩͰΘ͔Δύον͸؆୯ w ಈ͔͞ͳ͍ͱΘ͔Βͳ͍ύον͸IVCίϚϯ υ΍HIίϚϯυ͕13ͷίʔυऔಘʹศར HIίϚϯυར༻ͷํ͕ΠϚυΩ IVC΍HIίϚϯυͰϩʔΧϧಈ࡞ݕূ $ # Tip: suggests using `eval "$(hub alias -s)"`. $ hub checkout https://github.com/org/repo/pull/42 $ gh pr co https://github.com/org/repo/pull/42

Slide 50

Slide 50 text

 ήʔϛϑΟέʔγϣϯ

Slide 51

Slide 51 text

3VCZ$POG5BJXBOͷҰນ ಉ͜͡ͱΛ܁Γฦͯ͠ ͍ͯ΋໘ന͘ͳ͍ͷͰ ೉қ౓Λ্͛Δ੍໿Λ ͚͍͖ͭͯ·͢ΑͶɻ IUUQTYDPNLPJDTUBUVT Θ͔Δʔɻ

Slide 52

Slide 52 text

w (JU)VCʹຖ೔૲Λੜ΍͚ͩ͢ͳΒ؆୯ʹͳΔ w ಛఆPSH͚ͩͰ΋ຖ೔૲͕ੜ͑ΔΑ͏ʹ͢Δ w ಛఆϦϙδτϦ͚ͩͰ΋ຖ೔૲͕ੜ͑ΔΑ͏ ʹɺϦϙδτϦʹຖ೔ίϛοτ͢Δ w ಛఆϦϙδτϦͷ(JU)VCͷίϛοτϖʔδͰ ΋ຖ೔ࣗ෼ͷίϛοτΛੵΉΑ͏ʹ͢Δ ੍໿Λઃ͚Δ

Slide 53

Slide 53 text

͝౰஍λΠϜελϯϓूΊ $ cd path/to/rubocop $ git log --author=koic --pretty=format:'%aE %ai'|\ awk '{print $4}' | sort | uniq -c 20 +0200 # νΣίɺΠλϦΞɺόνΧϯ (αϚʔλΠϜ) 18 +0300 # τϧί 15 +0800 # ୆࿷ɺதࠃ 3418 +0900 # ೔ຊ 10 -0500 # ϛωΞϙϦεɺγΧΰ (αϚʔλΠϜ) 1 -0700 # αϯϑϥϯγεί (αϚʔλΠϜ) 5 -0800 # ϩαϯθϧε $ git log commit 07501d54dac7dd21f9d42e8d6dd502166daf3565 Author: Koichi ITO Date: Fri Nov 15 09:31:09 2024 +0300 Fix false positives for `Lint/InterpolationCheck` This PR fixes false positives for `Lint/ InterpolationCheck` when using invalid syntax in interpolation. ```console $ cat example.rb

Slide 54

Slide 54 text

w ͝౰஍Ͱߦ͏HJUDPNNJUͷ λΠϜελϯϓͰɺ͝౰஍ͷ λΠϜκʔϯΛಘΔ w ؀ڥม਺5;Ͱِ଄Ͱ͖ͯ΋ ཱྀͷࢥ͍ग़ʹͳΓ·ͤΜͶ w ͕࣌ࠩ૲ʹӨڹ͢Δ఺ʹ஫ҙ λΠϜελϯϓͷλΠϜκʔϯ

Slide 55

Slide 55 text

65$Φϑηοτͩͱ͓Αͦछྨ IUUQTKBXJLJQFEJBPSHXJLJڠఆੈք࣌ͱͷࠩ

Slide 56

Slide 56 text

" #FGPSF%BZT

Slide 57

Slide 57 text

͸͡·ΓͷΠγϡʔ IUUQTCVHTSVCZMBOHPSHJTTVFT

Slide 58

Slide 58 text

w OPCVͷSVCZSVCZ΁ͷύνϞϯແ૒΁ͷಌጦ w CVHTSVCZMBOHPSHJTTVFT΁ͷόάใࠂ ͔Βͷѹ౗త଎౓ͷमਖ਼ w ͷͪͷSVCPDPQSVCPDPQͷόάϨϙʔτ ʹର͢Δɺࣗ਎ͷ޲͖߹͍ํʹͭͳ͕Δ ύονϞϯελʔOPCV΁ͷಌΕ

Slide 59

Slide 59 text

๻ͷલʹ#VH͸ͳ͍ɻ ๻ͷޙΖʹ#VH͸Ͱ͖Δɻ தా৳ӻ IUUQTCMPHBHJMFFTNDPKQFOUSZSVCZLBJHJKVOL

Slide 60

Slide 60 text

Enjoy the OSS community ҿΈʹߦ͘લͷίϛοτΛ๨Εͣʹ