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
10年でどう変わった? はてなブックマークでのPerlの使い方
Search
INA Lintaro
November 03, 2019
Programming
10
8.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
record4s --- Extensible Records for Scala 3, and Domain Modeling with Structural Types
tarao
2
14k
仮想関数テーブルと型クラスを見比べる
tarao
1
1.3k
ジョブキューシステムFireworqのアーキテクチャ設計と運用時のベストプラクティス
tarao
1
4.6k
計算ファースト vs. 型ファースト / Computation First vs. Type First
tarao
4
21k
Percolatorを用いたカテゴリ分類
tarao
0
3k
Other Decks in Programming
See All in Programming
Perl 5 OOP機構30年史 - Perl 5's OOP Mechanism over the past 30 years
moznion
1
760
What is TDD?
urakawa_jinsei
1
190
Pydantic x Database API:turu-pyの開発
yassun7010
1
300
タイミーにおけるデータの利用シーンと データ基盤の挑戦
marufeuille
4
3k
AWS Lambda Web Adapterを活用する新しいサーバーレスの実装パターン
tmokmss
6
5.2k
NANIMACHI
naokiito
0
920
tsconfig.jsonの最近の新機能 ファイルパス編
uhyo
5
950
データサイエンスのフルサイクル開発を実現する機械学習パイプライン
xcnkx
2
420
Assembling the Future: crafting the missing pieces of the Ruby on Wasm puzzle
skryukov
0
120
Beyond the RuboCop Defaults
koic
2
460
クラウドサービスの 利用コストを削減する技術 - 円安の真南風を感じて -
pyama86
3
230
Go製CLIツールGatling Commanderによる負荷試験実施の自動化
okmtz
3
560
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
49
4.7k
From Idea to $5000 a Month in 5 Months
shpigford
380
46k
Large-scale JavaScript Application Architecture
addyosmani
509
110k
Designing for Performance
lara
604
68k
Six Lessons from altMBA
skipperchong
26
3.4k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
25
640
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
32k
Gamification - CAS2011
davidbonilla
79
5k
KATA
mclloyd
27
13k
How STYLIGHT went responsive
nonsquared
93
5.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ϲ݄͔͚ͯશιʔείʔυΛಡΉ ▶ ݁ՌΛεϓϨουγʔτʹ·ͱΊΔ ▶ υϝΠϯ͕ࣝνʔϜϝϯόʔʹߦ͖Δ
ϓϩδΣΫτͷऩଋ ਐߦཧ ▶ Δ͜ͱͷ૯ྔ (είʔϓ) ܾ·͍ͬͯΔ ▶ ΥʔλʔϑΥʔϧత ▶ ༷Λཧͯ͠ॏཁͷ͍ػೳΛഇࢭ
▶ ରίετͰ༏ઌ͚ͮ ▶ ΞδϟΠϧత
·ͱΊ ▶ ͍·ྑ͍ͱࢥ͑ΔͷΛͨΓલʹ࡞Δ ▶ কདྷͬͱΑ͘͢Δ͜ͱΛߟ͑Δ ▶ ͍·ྑ͍ͱߟ͍͑ͯΔཧ༝Λड͚ܧ͙ ▶ ෦తʹࣺͯΒΕΔΑ͏ʹ͢Δ ▶
ϨΨγʔίʔυͷߟݹֶؾ߹͍