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
9.5k
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
20k
仮想関数テーブルと型クラスを見比べる
tarao
1
2k
ジョブキューシステムFireworqのアーキテクチャ設計と運用時のベストプラクティス
tarao
1
5.8k
計算ファースト vs. 型ファースト / Computation First vs. Type First
tarao
4
22k
Percolatorを用いたカテゴリ分類
tarao
0
3.5k
Other Decks in Programming
See All in Programming
Namespace and Its Future
tagomoris
6
700
Claude Codeで挑むOSSコントリビュート
eycjur
0
200
2025 年のコーディングエージェントの現在地とエンジニアの仕事の変化について
azukiazusa1
18
9.8k
サーバーサイドのビルド時間87倍高速化
plaidtech
PRO
0
710
Laravel Boost 超入門
fire_arlo
2
210
Vue・React マルチプロダクト開発を支える Vite
andpad
0
110
ソフトウェアテスト徹底指南書の紹介
goyoki
1
140
AI Coding Agentのセキュリティリスク:PRの自己承認とメルカリの対策
s3h
0
110
フロントエンドのmonorepo化と責務分離のリアーキテクト
kajitack
2
160
「待たせ上手」なスケルトンスクリーン、 そのUXの裏側
teamlab
PRO
0
300
オープンセミナー2025@広島「君はどこで動かすか?」アンケート結果
satoshi256kbyte
0
240
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
250
Featured
See All Featured
RailsConf 2023
tenderlove
30
1.2k
Practical Orchestrator
shlominoach
190
11k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Producing Creativity
orderedlist
PRO
347
40k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
187
54k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.5k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
How GitHub (no longer) Works
holman
315
140k
Why Our Code Smells
bkeepers
PRO
339
57k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.1k
Building an army of robots
kneath
306
46k
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ϲ݄͔͚ͯશιʔείʔυΛಡΉ ▶ ݁ՌΛεϓϨουγʔτʹ·ͱΊΔ ▶ υϝΠϯ͕ࣝνʔϜϝϯόʔʹߦ͖Δ
ϓϩδΣΫτͷऩଋ ਐߦཧ ▶ Δ͜ͱͷ૯ྔ (είʔϓ) ܾ·͍ͬͯΔ ▶ ΥʔλʔϑΥʔϧత ▶ ༷Λཧͯ͠ॏཁͷ͍ػೳΛഇࢭ
▶ ରίετͰ༏ઌ͚ͮ ▶ ΞδϟΠϧత
·ͱΊ ▶ ͍·ྑ͍ͱࢥ͑ΔͷΛͨΓલʹ࡞Δ ▶ কདྷͬͱΑ͘͢Δ͜ͱΛߟ͑Δ ▶ ͍·ྑ͍ͱߟ͍͑ͯΔཧ༝Λड͚ܧ͙ ▶ ෦తʹࣺͯΒΕΔΑ͏ʹ͢Δ ▶
ϨΨγʔίʔυͷߟݹֶؾ߹͍