Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
10年でどう変わった? はてなブックマークでのPerlの使い方
INA Lintaro
November 03, 2019
Programming
9
6.9k
10年でどう変わった? はてなブックマークでのPerlの使い方
2019-11-03 YAPC::Nagoya::Tiny 2019
https://yapcjapan.connpass.com/event/146727/
INA Lintaro
November 03, 2019
Tweet
Share
More Decks by INA Lintaro
See All by INA Lintaro
計算ファースト vs. 型ファースト / Computation First vs. Type First
tarao
4
19k
Percolatorを用いたカテゴリ分類
tarao
0
1.5k
Other Decks in Programming
See All in Programming
GraphQL+KMM開発でわかったこと / What we learned from GraphQL+KMM development
kubode
0
130
あなたの会社の古いシステム、なんとかしませんか?~システム刷新から考えるDX化への道筋とバリエーション~/webinar20220420-systems
grapecity_dev
0
130
あなたの会社の古いシステム、なんとかしませんか?~システム刷新から考えるDX化への道筋とバリエーション~/webinar20220420-grapecity
grapecity_dev
0
140
Android入門
hn410
0
310
UI State Modeling 어떤게 좋을까?
laco2951
1
240
スモールチームがAmazon Cognitoでコスパよく作るサービス間連携認証
tacke_jp
2
870
Becoming an Android Librarian
skydoves
3
480
SRE bridge the gap: Feature development to Core API / 機能開発チームとコアAPIチームの架け橋としてのSRE
kenzan100
1
450
Monadic Java
mariofusco
4
270
Nix for Scala folks
kubukoz
0
130
heyにおけるSREの大切さ~マルチプロダクト運用の「楽しさ」と「難しさ」および今後の展望~
fufuhu
3
2.1k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
3
570
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
226
15k
Art, The Web, and Tiny UX
lynnandtonic
280
17k
Bash Introduction
62gerente
596
210k
The World Runs on Bad Software
bkeepers
PRO
56
5.2k
The Illustrated Children's Guide to Kubernetes
chrisshort
14
35k
Build your cross-platform service in a week with App Engine
jlugia
219
17k
What the flash - Photography Introduction
edds
61
10k
Principles of Awesome APIs and How to Build Them.
keavy
113
15k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
38
12k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
181
15k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
12
900
Robots, Beer and Maslow
schacon
152
7.1k
Transcript
10ͰͲ͏มΘͬͨ? ͯͳϒοΫϚʔΫͰͷ Perlͷ͍ํ ҏಸ ྛଠ id:tarao @oarat 2019-11-03 YAPC::Nagoya::Tiny
ࣗݾհ ໊લ ɹ ͍ ͳ ҏಸ ɹ ɹ ΓΜͨΖ͏ ྛଠ
ɹ (id:tarao @oarat) 2008-08 ͯͳΠϯλʔϯ (ϒοΫϚʔΫνʔϜ) 2008-10 ͯͳΞϧόΠτ (ϒοΫϚʔΫνʔϜ) 2010-04 ຊֶज़ৼڵձ ಛผݚڀһ (DC1) 2013-04 ͯͳਖ਼ࣾһ 2013-12 ϒοΫϚʔΫνʔϜ (ޙʹςοΫϦʔυ) ▶ ͍͜͠ͱ୲ ▶ ݕࡧٕज़, ػցֶश ▶ ຊདྷͷઐܕཧ ▶ Scala
None
ͯͳϒοΫϚʔΫͷྺ࢙ 2005 ϦϦʔε 2008 ίʔυϕʔεͷϦϥΠτ (DB ͦͷ··) 2013
σβΠϯͷΈϦχϡʔΞϧ 2015 ϑϧϦϥΠτϓϩδΣΫτ։࢝ 2019 ϑϧϦϥΠτྃ (DB ؚΊͯ͢৽)
ϑϧϦϥΠτ։࢝ ▶ ͯͳϒοΫϚʔΫ in Scala. Scala ؔ Summit 2015.
چγεςϜߏ
چγεςϜͰͷࠔΓͲ͜Ζ ▶ ։ൃͷԼ ▶ ίʔυϕʔε͕ڊେ͔ͭࠞಱ .pm 400,000 ߦ / .t
270,000 ߦ / .html 70,000 ߦ / 30+ gitmodules ▶ ϦϑΝΫλϦϯά͕͍͔ͭͳ͍ ▶ ύϑΥʔϚϯε্ͷ ▶ શҬʹӨڹ͢Δ࠶ઃܭ͕ଟඞཁ ▶ αʔόίετͷ૿େ (σΟϨΫλʔ) ཷ·ͬͨύϑΥʔϚϯε issue ͥΜͿΔͱ ͲΕ͘Β͍͔͔Δ? (ΤϯδχΞ) ... ͏·͍ͬͯ͘ 3 ͱ͔Ͱ͔͢Ͷ
৽γεςϜߏ
ϑϧϦϥΠτͷޮՌ ▶ ϨεϙϯελΠϜେ෯্ ▶ αʔόݮ ▶ ϦϦʔεස 1/week → 1/day
▶ ༷ͷཧ
ࠔ͍ͬͯͨͱ͜Ζ ৽γεςϜͰͲ͏ͳͬͨ?
ϚΠΫϩαʔϏεઓུ ࠔ͍ͬͯͨ ▶ ڊେͳϞϊϦε ▶ ෦తͳஔ͖͕͑ࠔ ▶ ੜαʔϏεͷͨΊͷ༷ʑͳίʔυ͕ࠞ͟Δ ▶ ୯Ұݴޠ
▶ Perl Ͱػցֶश͚ͬ͜͏͍ͨΜ... ▶ ඇಉظॲཧ...
ϚΠΫϩαʔϏεઓུ Ͳ͏ͳͬͨ ▶ ௨৴ํ๏ ▶ جຊతʹ HTTP Ͱ JSON ΛΓͱΓ
▶ جຊతʹಉظత ▶ Ͳ͜Ͱ͚Δ͔ ▶ ڥք͚ͮΒΕͨίϯςΩετ ▶ ࠶ར༻ੑ ▶ ݴޠͷҧ͍ ▶ ϦϦʔεαΠΫϧͷҧ͍ ▶ ݴޠબ Scala, Perl, Go, Python ▶ ༻్ʹ߹Θͤͯ࠷దʹબ ▶ ͱͱࣾϚϧνϦϯΨϧͳਓ͕ଟ͍
ݴޠબ Scala ▶ ΞϓϦέʔγϣϯͷίΞͱͳΔόοΫΤϯυ ▶ υϝΠϯϞσϧΛ͏·͘දݱ͍ͨ͠ ▶ Ϗϡʔ෦ΑΓߋ৽ස͕͍ Perl ▶
BFF (Ϗϡʔ෦) ▶ σβΠφ৮ΔͷͰίϯύΠϧΛͪͨ͘ͳ͍ ▶ ༏ઌͰ׳Ε͍ͯΔ/ॻ͚Δਓ͕ଟ͍ͷ ▶ ߋ৽ස͕ߴ͍
ݴޠબ Go ▶ ඇಉظॲཧΛܹ͘͠ඞཁͱ͢Δͱ͜Ζ ▶ ࣮ߦ༏ઌͳͱ͜Ζ ▶ ͳΔ͘ػೳΛখ͘͞࡞Δ Python ▶
ػցֶश͢Δͱ͜Ζ ▶ ։ൃαΠΫϧ͕ଞͱશ͘ҧ͏
δϣϒΩϡʔ ࠔ͍ͬͯͨ ▶ TheSchwartz + WorkerManager (Perl) ▶ ॏ͍δϣϒʹϦιʔεΛ༗͞Ε͕ͪ ▶
δϣϒ͕ཷ·Γ͗͢ΔͱΩϡʔ͕٧·Δ ▶ Scala Ͱ͑ͳ͍ / ݴޠΛ·ͨ͛ͳ͍ ▶ ϫʔΧڥΛյͯ͠͠·͍͕ͪ ▶ ίʔυϕʔεڞ௨ ▶ ڥηοτΞοϓ͕·Δ͖ΓҟͳΔ ▶ ಈ࡞֬ೝ/खͰδϣϒೖ͕͍ͨΜ
δϣϒΩϡʔ Ͳ͏ͳͬͨ: HTTP ϕʔεͷδϣϒΩϡʔΛ৽ ▶ Fireworq (Go) ▶ Ωϡʔͷॲཧʹઐ೦ ▶
ෳΩϡʔΛఆٛՄೳ (ॏ͍δϣϒΛִ) ▶ ಉ࣌ଓϫʔΧΛಈతʹઃఆՄೳ ▶ ϫʔΧ௨ৗͷ HTTP όοΫΤϯυ (࣮ߦ༰қ) ▶ Go ͱ MySQL Λ༻͍ͨδϣϒΩϡʔγεςϜΛ࡞Δͱ͖ʹߟ͑ͨ͜ͱ Ώ͏͏͖ϒϩά. 2014-12-04.
τϥϯβΫγϣϯ ࠔ͍ͬͯͨ ▶ τϥϯβΫγϣϯॲཧΛ͍ͯ͠ͳ͔ͬͨ ▶ ࠷ॳ MyISAM ͩͬͨͷͰ... ▶ ෆ߹͕ى͖Δ͜ͱ͋ͬͨ
▶ JSON Λڝ߹ͯ͠ॻ͖ࠐΜͰ ϑΟʔϧυ͕ফ͑Δͱ͔... sub write_key_value { # ˞ࣜతͳίʔυ my ($db, $obj id, $field, $value) = @ ; my $row = $db->select_row(qq{ SELECT * FROM some_table WHERE id = ? }, [ $obj id ]); my $json = $row->{json} ? decode json $row->{json} : {}; $json->{$field} = $value; # ॻ͖ࠐΉϑΟʔϧυ͍Ζ͍Ζ $db->query(qq{ UPDATE some_table SET json = ? WHERE id = ? }, [ encode json $json, $obj id ]); }
τϥϯβΫγϣϯ Ͳ͏ͳͬͨ ▶ খ͍͞୯ҐͰͨΓલʹτϥϯβΫγϣϯ ▶ େ͖͍୯ҐͰ݁Ռ߹ੑΛલఏͱ͢Δ ▶ UI ͳͲͦΕલఏͰߟ͑Δ “
ͻͱͭͷํ๏ͱͯ͠ɺ࣮ߦͨ͠ίϚϯυͷύϥϝʔλͱͯ͠ ͨ͠σʔλΛɺϢʔβʔΠϯλʔϑΣΠεʹҰ࣌తʹදࣔͤ͞Δ Α͏ͳઃܭ͕͋ΔɻଟগτϦοΩʔ͕ͩɺ࠷ऴతʹΫΤϦϞσϧ ʹө͞ΕΔͰ͋Ζ͏σʔλΛɺϢʔβʔ͕͙͢ʹݟΒΕΔΑ͏ ʹͳΔɻίϚϯυͷ࣮ߦ͕ޭͨ͠ͱ͖ʹɺ࣮ߦલͷݹ͍σʔλ ΛͲ͏ͯ͠ݟͤͨ͘ͳ͍ͷͳΒɺ͓ͦΒ͘͜Ε͕།Ұͷํ๏ͩ Ζ͏ɻ ▶ ࣮ફυϝΠϯۦಈઃܭ 4.6 ίϚϯυΫΤϦ (CQRS) - ΫΤϦϞσϧͰͷ݁Ռ߹ੑͷѻ͍
ɹ υϝΠϯۦಈઃܭ DDD ɹ — ϨΠϠʔ ࠔ͍ͬͯͨ ▶ ϑΝ οτϞσϧ,
ϑΝ οτίϯτϩʔϥ ▶ ʮΞϓϦέʔγϣϯʯͷׂ͕͙͙ͪ Ͳ͏ͳͬͨ (ओʹ Scala ଆ) ▶ ΫϦʔϯΞʔΩςΫνϟͳͲΛલఏʹΞϨϯδ ▶ ΞϓϦέʔγϣϯͱԿ͔Λ͔ͳΓٞ ▶ ࢦΛυΩϡϝϯτԽ ▶ Perl ଆͷ͚ํେࡶ
ɹ υϝΠϯۦಈઃܭ DDD ɹ — ɹ υϝΠϯΦϒδΣΫτ DO ɹ ࠔ͍ͬͯͨ
— ϑΝ οτϞσϧ ▶ 1 ͭͷΤϯςΟςΟͷΫϥε͕ 5000 ߦऑ ▶ ϝιου͕ͲΜͳ෭࡞༻Λى͔͜͢Θ͔Βͳ͍ Ͳ͏ͳͬͨ — DO ؆ܿʹ ▶ ݪଇͱͯ͠ෆม (ॻ͖͚͑ͨΕίϐʔ) ▶ (Scala) case class ▶ (Perl) Class::Accessor::Lite (::Lazy) ▶ ϑΟʔϧυͷՃ? ▶ (Scala) ަࠩܕͰ (ࣅඇ) ֦ுՄೳϨίʔυ ▶ (Perl) Class::Mix Ͱಈతܧঝ (Scala ͷަࠩܕͰ͍ͬͯΔ͜ͱͷಈత൛)
ɹ υϝΠϯΦϒδΣΫτ DO ɹʹϑΟʔϧυՃ? ͲΜͳͱ͖? ▶ Կ͔ࢠཁૉΛՃ͑ͨͷʹݴٴ͍ͨ͠ͱ͖ ▶ ࢠཁૉΛՃ͑ͨͱ͖͚ͩࢀরͰ͖ͯ΄͍͠ ྫ
my $car = Car->new(...); my $car_with_engine = $car->with_engine($engine); give_me_engine($car_with_engine->engine); my $car_with_bumper = $car->with_bumper($bumper); give_me_bumper($car_with_bumper->bumper); #give_me_engine($car_with_bumper->engine); # Τϥʔʹ͍ͨ͠ my $car_with_engine_and_bumper = $car->with_engine($engine)->with_bumper($bumper); give_me_engine($car_with_engine->engine); give_me_bumper($car_with_bumper->bumper);
ɹ υϝΠϯΦϒδΣΫτ DO ɹʹϑΟʔϧυՃ? package Class::Extensible; use Class::Mix qw(mix_class); sub
import { my $package = caller; *{"${package}::clone_with"} = sub { # Class::Mix ͰΫϥεΛ߹͢Δίʔυ # શͳίʔυ: https://git.io/JeuHU } } package Car; use Class::Accessor::Lite (new => 1); use Class::Extensible qw(clone_with); sub with_engine { $_[0]->clone_with(’WithEngine’, engine => $_[1]); } package Car::WithEngine; use parent qw(Car); use Class::Accessor::Lite (new => 1, ro => [qw(engine)]);
ɹ υϝΠϯۦಈઃܭ DDD ɹ — จԽͷܧঝ ࠔ͍ͬͯͨ id:naoya ᐌ͘ “
υϝΠϯϩδοΫΛ App::* ʹ࣮͠ͳ͍͜ ͱɻ͋͘·ͰϩδοΫجຊ Service::* ͔ MoCo::* ▶ Կ͕υϝΠϯϩδοΫͰԿ͕ͦ͏Ͱͳ͍͔? ▶ νʔϜͰٞͰ͖͍ͯͳ͔ͬͨ ▶ ͕ͯݴ͍͑ͦͷͷ͕ࣦΘΕ... ▶ Ͳ͜·Ͱ͕υϝΠϯϩδοΫ͔ᐆດͩͬͨΓ ▶ App::*͕ϏϡʔͷͨΊ͚ͩʹͳͬͯͨΓ ▶ ίϯτϩʔϥͰυϝΠϯૢ࡞͍ͯͨ͠Γ
ɹ υϝΠϯۦಈઃܭ DDD ɹ — จԽͷܧঝ Ͳ͏ͳͬͨ ▶ ࣾษڧձͷ։࠵ ▶
νϡʔτϦΞϧతͳυΩϡϝϯτΛ֦ॆ ▶ ԿΛͲ͜ʹॻ͔͘ͷࢦΛఏڙ ▶ νʔϜͷಋೖࢿྉͱͯ͠ಡΉ ▶ ʑυϝΠϯϞσϧ͕ద͔Ͳ͏͔ٞ ▶ ϢϏΩλεݴޠͱͷဃʹ͍ͭͯٞ (ຊདྷͷ DDD ͷత)
ް͍FW͔Βͷ٫ ࠔ͍ͬͯͨ — ް͍ϑϨʔϜϫʔΫ ▶ Ridge (WAF) ▶ Ruby on
Rails ͷ ActionPack ϦεϖΫτ ▶ DBIx::MoCo (ORM) ▶ Ruby on Rails ͷ ActiveRecord ϦεϖΫτ ▶ ࣾͰͷར༻ࣄྫ͕ͩΜͩΜݮগ ▶ ࣝऀ͕ݮͬͯݟ͕ͳ͘ͳΔ ▶ ϝϯς͍ͨΜʹ ▶ ͩΜͩΜ͔Β֎Εͨར༻͕૿Ճ “ ڍಈ͕ҙຯෆ໌ ϚδΧϧͳ͜ͱΓ͕ͪ ▶ ΅͘ͷ͔Μ͕͍͖͑ͨ͞ΐ͏ͷ͏͐Ϳ͋Γ͚ʔ͠ΐΜ;ΕʔΉΘʔ͘ id:cho45. YAPC Asia 2011.
ް͍FW͔Βͷ٫ ࠔ͍ͬͯͨ — WAF ▶ Ridge ▶ ҉ͷσΟεύονϧʔϧ (ྫ) /user/add.confirm
→ Engine::User::Add->confirm ▶ ςϯϓϨʔτ͚ͩஔ͍ͯ༗ޮ ▶ ࡉ͔ͳมଇϧʔϧ (.json → json ) ▶ ͲͷΤϯυϙΠϯτ͕༗ޮͳͷ͔͍͠ ▶ before filter, after filter ▶ DRY ͷͨΊͷΜΓػೳͱͯ͠ཚ༻ ▶ ύεͷॻ͖͑ʹ͏ύλʔϯ... ▶ ΞΧϯτج൫ͷϞδϡʔϧ͕͜ΕΛܧঝ...
ް͍FW͔Βͷ٫ Ͳ͏ͳͬͨ — WAF ▶ Plack + Router::Simple + ͘͝؆୯ͳ
DSL ▶ ͯ͢ͷϧʔςΟϯάΛ໌ࣔతʹॻ͘ GET "/{user name:$HATENA ID RE}/add" => require_login => "User" => "add"; GET "/entry/panel/" => session => "Entry::Panel" => "panel"; ▶ ύε͝ͱͷ Plack::Middleware తͳͷ ▶ ྫ => require login ະϩάΠϯ 302 ▶ ίϯςΩετΦϒδΣΫτʹ Role::Tiny ▶ ྫ => session ϝιου->visitor ͕ੜ͑Δ
ް͍FW͔Βͷ٫ ࠔ͍ͬͯͨ — ORM ▶ DBIx::MoCo ▶ มߋηογϣϯྃ࣌ʹ·ͱΊͯॻ͖ग़͠ ▶ ͕ͩଈॻ͖ग़͢->save
͕ݺΕ͕ͪ ▶ ΠϯελϯεΩϟ ογϡͷΈ͕͋Δ ▶ ͕ͩΩϟ ογϡճආ൛ϝιου͕ݺΕ͕ͪ ▶ τϦΨͷΈͰϋϚΓ͕ͪ ▶ Ͳ͜Ͱ DB ΞΫηε͕Δͷ͔Θ͔Γʹ͍͘ ▶ N+1 ΫΤϦ ▶ ͔Ώ͍ͱ͜Ζʹख͕ಧ͔ͣੜΫΤϦॻ͖͕ͪ
ް͍FW͔Βͷ٫ Ͳ͏ͳͬͨ — ORM Θͳ͍ ▶ (Scala) Slick ▶ (Perl)
DBIx::Handler + Scope::Container ▶ ΫΤϦੜͰॻ͘ ▶ N+1 ΫΤϦʹର͢Δ݁ ▶ has-a ؔΛ 1 ͚݅ͩҾ͘ϝιου͕Α͘ͳ͍ ▶ ෳ݅Ҿ͘ϝιου͔͠ͳ͚Ε΄΅ແ ˞શମͷॻ͖ํͷελΠϧʹΑΓ·͢
Perlͷόʔδϣϯ ࠔ͍ͬͯͨ ▶ 5.8 ▶ ͳ͔ͳ্͔͛ΒΕͳ͔ͬͨ ▶ ͦͦ CentOS 5
/ mod perl / yum ڥ ▶ Plack Խ / cpanfile Խ / Docker Խ → ࣦഊ Ͳ͏ͳͬͨ ▶ 5.2x ▶ ً͕͍ͯͯ͢ݟ͑Δ...
ͦͷଞ ▶ Ϟδϡʔϧͷಈతϩʔυͷ͍ͤͰϋϚΔ ▶ → ͳΔ͘Βͳ͍ ▶ σουίʔυ͕ଟ͔ͬͨ ▶ →
͋ͱͰ͘͢͝ࠔΔͷͰফ͢, ͍·͙͢! ▶ Elasticsearch ͷόʔδϣϯ্͛ΒΕͳ͍ ▶ API ͕มΘΔͱै͕͍ͨΜ ▶ ݕূ͕͍ͨ͘͢͝Μ ▶ → Scala ΫϥΠΞϯτܕ͖ͳͷͰ҆৺ ▶ Twitter ߘͷจࣈ੍ݶ ▶ Perl Ͱ࠶ݱ͢Δͷඇৗʹ͍͠ ▶ → Scala ͔Βެࣜ Java ύοέʔδΛར༻
ϓϩδΣΫτΛͲ͏ਐΊ͔ͨ
ਐΊํ 1. PoC ϑΣʔζ 2. ࣾϦϦʔε 3. ஈ֊తͳຊ൪ϦϦʔε 4. ϓϩδΣΫτͷऩଋ
ɹ ֓ ೦ ࣮ ূ PoC ɹϑΣʔζ (2015ʙ) ઃܭ ▶
DB εΩʔϚͱجຊΞʔΩςΫνϟͷૉҊ ▶ ϨϏϡʔ ▶ CTO ▶ νʔϑΤϯδχΞ ▶ Πϯϑϥ෦ ▶ چγεςϜࣝऀ ࣮ ▶ ࣺͯΔͭΓͷԾ࣮Λ։࢝ ▶ ྑ͍ϓϥΫςΟεΛࡧ ▶ ͜͜·ͰͰͨ͠Α͏ͳΓํΛ΄΅֬ఆ ▶ ͏·͍ͬͨͨ͘Ί͚͖ͬΐࣺͯͣ͘ʹར༻
ࣾϦϦʔε (ʙ2016) ▶ جຊػೳ͕ͻͱ௨Γಈ͘ঢ়ଶ·Ͱ࣮ ▶ ϒοΫϚʔΫͰ͖Δ ▶ ࣗͷϒοΫϚʔΫҰཡ͕ݟΒΕΔ ▶ ίϝϯτҰཡ͕ݟΒΕΔ
▶ ਓؾΤϯτϦҰཡ͕ݟΒΕΔ ▶ ͬͯΈΔ ▶ σʔλਅͬ৽ ▶ ઐ༻ϒοΫϚʔΫϨοτΛ࡞ ▶ ࣾάϧʔϓΣΞͳͲͰར༻ͯ͠ΈΔ ▶ ։ൃํࣜ: ී௨ͷ৽ن։ൃͷΞδϟΠϧͱಉ͡
ஈ֊తͳຊ൪ϦϦʔε (ʙ2018) ϦϦʔεઓུ ▶ ໘͝ͱʹ৽γεςϜʹΓସ͑ ▶ ·ͣࢀরܥͷΈΛରͱ͢Δ σʔλಉظ ▶ σʔλ৽چ྆ํʹμϒϧϥΠτ
▶ ໘Ͱඞཁͳσʔλ͝ͱʹҠߦ ▶ ΦϯϥΠϯಉظ։࢝ → όονҠߦ
ϓϩδΣΫτͷऩଋ (ʙ2019) ΓͷΓସ͑ ▶ API ͷΈͷػೳ ▶ ඇಉظॲཧͷΈͰΘΕΔॲཧ ▶ ߋ৽ܥ
શΓସ͑ ▶ چϦιʔε͝ͱʹશґଘؔΛચ͍ग़͠ ▶ ΤϯυϙΠϯτ ˠ ΤϯςΟςΟ/Ϧιʔε ▶ ґଘؔΛసஔ ▶ ֤Ϧιʔε issue ʹ࣮ issue Λྻڍ ▶ ґଘ͕ͳ͘ͳͬͨچϦιʔε͔Βॱ࣍ఫୀ
ϓϩδΣΫτͷऩଋ ચ͍ग़͠࡞ۀ ▶ 2ʙ3ϲ݄͔͚ͯશιʔείʔυΛಡΉ ▶ ݁ՌΛεϓϨουγʔτʹ·ͱΊΔ ▶ υϝΠϯ͕ࣝνʔϜϝϯόʔʹߦ͖Δ
ϓϩδΣΫτͷऩଋ ਐߦཧ ▶ Δ͜ͱͷ૯ྔ (είʔϓ) ܾ·͍ͬͯΔ ▶ ΥʔλʔϑΥʔϧత ▶ ༷Λཧͯ͠ॏཁͷ͍ػೳΛഇࢭ
▶ ରίετͰ༏ઌ͚ͮ ▶ ΞδϟΠϧత
·ͱΊ ▶ ͍·ྑ͍ͱࢥ͑ΔͷΛͨΓલʹ࡞Δ ▶ কདྷͬͱΑ͘͢Δ͜ͱΛߟ͑Δ ▶ ͍·ྑ͍ͱߟ͍͑ͯΔཧ༝Λड͚ܧ͙ ▶ ෦తʹࣺͯΒΕΔΑ͏ʹ͢Δ ▶
ϨΨγʔίʔυͷߟݹֶؾ߹͍