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
conanが使いづらいのでpoacを作っている話 / conan-to-poac
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Ken Matsui
August 26, 2018
Programming
890
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
conanが使いづらいのでpoacを作っている話 / conan-to-poac
Learn Languages 2018 in ODC でのプレゼン資料です
Ken Matsui
August 26, 2018
More Decks by Ken Matsui
See All by Ken Matsui
C++のパッケージマネージャ「poac」を開発した話 / Poac is a package manager for C++
matken
0
1.6k
Other Decks in Programming
See All in Programming
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
180
AIと壁打ちしながら進めるコスト管理
fufuhu
2
2k
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
0
400
業務時間外もAIに働いてもらう話
colorful12
3
10k
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
55
36k
LLMは4年分のCompose移行を再現できるのか?実プロダクト279件のXMLで探る自動化の境界線
makun
0
440
一参加者から『中の人』へ 〜全通PHPerがブースに立って学んだ、カンファレンスを100倍楽しむコツ〜
wp_daisuke
0
130
『寄り添うラジオ』をAIで作る 体験価値から逆算した、会話しないUXと品質設計
theoriatec2024
3
130
Hono + Inertia + React で LP を構築した話
oukayuka
2
220
不幸な GC
chencmd
0
890
週末にAI-DLCを本気で回したら$1,600溶けた
hbashimizu
0
130
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
880
Featured
See All Featured
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
890
Why Our Code Smells
bkeepers
PRO
340
58k
How to Talk to Developers About Accessibility
jct
2
540
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.3k
So, you think you're a good person
axbom
PRO
2
2.1k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
410
A Modern Web Designer's Workflow
chriscoyier
698
190k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
200
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
970
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Transcript
DPOBO͕͍ʹ͍͘ͷͰQPBDΛ࡞ͬͨ NBULFO
DPOBO͕͍ʹ͍͘ͷͰQPBDΛ࡞ͬͨ NBULFO ࡞͍ͬͯΔ
ࣗݾհ ▸ দҪɹ݈ʢ,FO.BUTVJʣ ▸ ໋ཱؗେֶใཧֶ෦̎ੜ ▸ ະ౿ΫϦΤʔλ ▸ $ &MJYJS
&MN
▸ /PEFKTͷOQNZBSO ▸ &MJYJSͷIFY ▸ $ ͷDPOBO ▸ 3VTUͷDBSHP ▸
)BTLFMMͷDBCBM ৭ʑͳύοέʔδϚωʔδϟ
$ ͷDPOBO͍ͮΒ͍
ύοέʔδͷࢦఆ͕Θ͔ΓͮΒ͍ DPOBOpMFUYU <SFRVJSFT> )FMMP!NFNTIBSEUFTUJOH ύοέʔδ໊ όʔδϣϯ Ϣʔβ໊ νϟϯωϧ!?
ύοέʔδͷݕࡧํ๏͕Θ͔ΓͮΒ͍ url= h)ps:/ /api.bintray.com/conan/conan/conan-transit conan remote add conan-transit $url conan
search "Hello" -r=conan-transit
Ͳ͜Λݕࡧ͢ΕΑ͍ͷ͔Θ͔ΓͮΒ͍
Ͳ͜Λݕࡧ͢ΕΑ͍ͷ͔Θ͔ΓͮΒ͍
Ͳ͜Λݕࡧ͢ΕΑ͍ͷ͔Θ͔ΓͮΒ͍
Ͳ͜Λݕࡧ͢ΕΑ͍ͷ͔Θ͔ΓͮΒ͍
Ͳ͜Λݕࡧ͢ΕΑ͍ͷ͔Θ͔ΓͮΒ͍
ϓϩδΣΫτ໊ poac
ϓϩδΣΫτ໊ͷ༝དྷᶃ Plus of Cͷpocͩͱඪ͕େྔʹऔΒΕ͍ͯͯා͔ͬͨ
ϓϩδΣΫτ໊ͷ༝དྷᶃ ൃԻʹӨڹΛ༩͑ͳͦ͞͏ͳԻΛೖΕͯɼpoacʹͨ͠
ϓϩδΣΫτ໊ͷ༝དྷᶄ ίϚϯυͱͯ͠Կೖྗ͢ΔͷͰɼ ଧͪ͘͢ɼยख͚ͩʹෛ୲͕ภΒͳ͍ࣄΛॏࢹ ྲྀΕΔΑ͏ʹଧͭ͜ͱ͕Մೳ P, O ӈख A, C ࠨख
ϓϩδΣΫτ໊ͷ༝དྷᶅ /p/࠷໌Δ͍ҹΛ༩͑Δ ग़యɿຊޠΦϊϚτϖͷجຊײ࣍ݩͱຊޠԻײૉͷجຊϨϕϧʹ͍ͭͯ (http://hdl.handle.net/10112/12311)
ϓϩδΣΫτ໊ͷ༝དྷᶅ /p/࠷ॊΒ͔͍ҹΛ༩͑Δ ग़యɿຊޠΦϊϚτϖͷجຊײ࣍ݩͱຊޠԻײૉͷجຊϨϕϧʹ͍ͭͯ (http://hdl.handle.net/10112/12311)
ެ։ GitHub: https://github.com/poacpm Website: https://poac.pm (pm = package manager)
શମͷ֓ཁ Elm Frontend Elixir Backend 4FSWFS Kubernetes AWS EC2 $MJFOU
C++
ΫϥΠΞϯταΠυ main.cpp inference.hpp install.hpp exception [ subcmd or option?, arg2,
arg3 ] subcmd or option? -> install [ arg2, arg3 ] $ poac install arg2 arg3
ΫϥΠΞϯταΠυͷਪաఔ template <typename S, typename OpTypeE, typename VS, typename =
std::enable_if_t<std::is_rvalue_reference_v<VS&&>> > auto _apply(S&& func, const OpTypeE& cmd, VS&& arg) { return branch(std::move(func), cmd, std::move(arg)); } template <typename S, typename VS, typename = std::enable_if_t<std::is_rvalue_reference_v<VS&&>> > std::string apply(S&& func, const S& cmd, VS&& arg) { namespace except = core::exception; if (auto itr = subcmd_map.find(cmd); itr != subcmd_map.end()) return _apply(std::move(func), itr->second, std::move(arg)); else if (itr = option_map.find(cmd); itr != option_map.end()) return _apply(std::move(func), itr->second, std::move(arg)); else throw except::invalid_first_arg("Invalid argument"); }
ΫϥΠΞϯταΠυͷਪաఔ // Create function pointer table: { &func<0>, &func<1>, ...
} // Execute function: &func<idx>[idx]() template <size_t... Is, typename VS, typename = std::enable_if_t<std::is_rvalue_reference_v<VS&&>>> static auto execute(std::index_sequence<Is...>, int idx, VS&& vs) { // Return ""(empty string) because match the type to the other two functions. return make_array({ +[](VS&& vs){ return (op_type_list_t::at_t<Is>()(std::move(vs)), ""); }... })[idx] (std::move(vs)); } template <size_t... Is> static auto summary(std::index_sequence<Is...>, int idx) { return make_array({ +[]{ return op_type_list_t::at_t<Is>::summary(); }... })[idx](); } template <size_t... Is> static auto options(std::index_sequence<Is...>, int idx) { return make_array({ +[]{ return op_type_list_t::at_t<Is>::options(); }... })[idx](); }
αϒίϚϯυ ▸ JOTUBMM ύοέʔδΛΠϯετʔϧ ▸ VOJOTUBMM
ύοέʔδΛΞϯΠϯετʔϧ ▸ TFBSDI ύοέʔδΛݕࡧ ▸ JOJU QPBDZNMϑΝΠϧΛੜ ▸ OFX ϓϩδΣΫτςϯϓϨʔτΛੜ ▸ QVCMJTI ࣗ࡞ύοέʔδΛެ։ ▸ MPHJO ϩάΠϯ͢Δ ▸ SPPU QPBDͷΠϯετʔϧઌύεΛදࣔ ▸ DBDIF DBDIFͷૢ࡞Λߦ͏ ▸ VQEBUF ύοέʔδΛΞοϓσʔτ ▸ EPD υΩϡϝϯτΛੜ ▸ CVJME Ϗϧυ͢Δ ▸ SVO Ϗϧυͱ࣮ߦΛߦ͏ ͕࣌ؒ ͋Ε ࣮༧ఆ
αϒίϚϯυ ▸ ύοέʔδͷΠϯετʔϧઌΛϓϩδΣΫτ͚ͩʹہॴԽͰ͖Δʢ ڥΛԚ͞ͳ͍ʣɼ͘͠άϩʔόϧԽͰ͖Δ ▸ $ ͷͷૉΒ͍͠ࢿ࢈ΛҰͭͷج൫ͰవΊ্͛Δ͜ͱ͕Ͱ͖Δ ▸ ΧϨϯτσΟϨΫτϦʹґଘؔΛవΊΔͱɼΠϯΫϧʔυαʔνύ εͳͲΛࢦఆ͢Δඞཁ͕͋Δ͕ɼͦΕΒΛϥοϐϯάͯ͠Ϣʔβ͕ҙ
ࣝ͢Δ͜ͱͳ͘ɼϏϧυ࣮ߦͳͲΛϚωδϝϯτͯ͘͠ΕΔ ▸ DBDIFΛར༻͢Δ͜ͱͰɼߴͳΠϯετʔϧɾϏϧυ͕Ͱ͖Δ ▸ υΩϡϝϯτͷੜΛߦͳͬͯ͘ΕΔ
αʔόʔαΠυ Website্ͰͰ͖Δ͜ͱɾ࣮ݱ͢Δ͜ͱ ▸ (JU)VCΞΧϯτΛ༻ͯ͠ΞΧϯτ࡞ ͱϩάΠϯ ▸ ύοέʔδͷݕࡧɾμϯϩʔυ ▸ $-*༻ͷ"DDFTTUPLFOͷੜ ▸
υΩϡϝϯτͷӾཡ
࠷ऴඪ ▸ $ Ͱͷ։ൃʹ͓͍͔ͯܽͤͳ͍ ύοέʔδϚωʔδϟ ▸ υΩϡϝϯτΛಡ·ͳͯ͘༻Ͱ͖Δײతͳ ΠϯλϑΣʔε ▸ ՄೳͰ͋ΕɼೖॻͰऔΓѻΘΕΔਫ४ͷ
҆ఆੑɾ৴པੑ