ã¢ããã¥ã¢ã«ããçãå°éåãšéçº
ãã㊠ã¡ãŒã«ã¯ã©ã€ã¢ã³ããéããŸãããäžçã§æãåªãããšã³ãžãã¢ã¯Googleã§åããŠããŸãããããã®éçºã¯å®çŸ©äžãã¢ããã¥ã¢ã«ãã£ãŠäœæããããšã¯ã§ããŸããããšããæçŽãæ¢ã«æžããŠããŸãã ç§ã¯ãããèããããããŸããã
ãã®ãããã¯ã«ã€ããŠã¯èª¬æããŸããã å®å šãªé瀺ïŒç§ã¯ä»¥åGoogleã§åããŠããŸããã ããã¯ãç§ãProtobuffersã䜿çšããæåã®ïŒããããæ®å¿µãªããæåŸã§ã¯ãªãïŒå Žæã§ããã 話ãããåé¡ã¯ãã¹ãŠGoogleã³ãŒãããŒã¹ã«ååšããŸãã ãããããããã¡ã®èª€çšããªã©ã ãã§ã¯ãããŸããã
Protobuffersã®æ倧ã®åé¡ã¯ãã²ã©ãåã·ã¹ãã ã§ãã Javaãã¡ã³ã¯ããã§ãã€ããã§ããã¯ãã§ãããæ®å¿µãªããæåéãã誰ãJavaãé©åã«èšèšãããåã·ã¹ãã ã§ãããšã¯èããŠããŸããã åçåä»ããã£ã³ãã®äººãã¡ã¯äžå¿ èŠãªå¶éã«ã€ããŠäžæºãè¿°ã¹ãŠããŸãããéçåä»ããã£ã³ãã®ä»£è¡šè ãã¡ã¯ãç§ã®ãããªäžå¿ èŠãªå¶éãšãåã·ã¹ãã ã«æ¬åœã«å¿ èŠãªãã®ãã¹ãŠã®æ¬ åŠã«ã€ããŠäžæºãèšã£ãŠããŸãã ã©ã¡ãã®å Žåãè² ãã
ã¢ããã¥ã¢ã«ããçãå°éåãšéçºã¯å¯æ¥ã«é¢é£ããŠããŸãã ä»æ§ã®å€ãã¯ãæåŸã®ç¬éã«ãã«ãã§åºå®ãããŠããããã«èŠãã-ãããŠæåŸã®ç¬éã«æããã«ãã«ãã§åºå®ãããã ããã€ãã®å¶éã¯ãããªããæ¢ããããé ãæ»ãããäžäœäœã ïŒããšå°ããããŸãããããããããã¯ããæ·±ãåé¡ã®çç¶ã§ãã
æããã«ãããããããã¡ã¯ã¢ããã¥ã¢ã«ãã£ãŠäœæãããŸããããã¯ãããç¥ãããæ¢ã«è§£æ±ºæžã¿ã®åé¡ã«å¯Ÿãã貧匱ãªãœãªã¥ãŒã·ã§ã³ãæäŸããããã§ãã
æ§æã®æ¬ åŠ
ããããããã¡ãŒã¯ãäºãã«æ©èœããªãããã€ãã®æ©èœãæäŸããŸãã ããšãã°ãçŽäº€ã®ãªã¹ããèŠãŠãã ãããåæã«ãããã¥ã¡ã³ãã§èŠã€ããã¿ã€ãã³ã°æ©èœãå¶éãããŠããŸãã
- ãã£ãŒã«ãã®1ã€ã
repeated
ããšã¯ã§ããŸããã - ãã£ãŒã«ã
map<k,v>
ã¯ããŒãšå€ã®ç¹å¥ãªæ§æããããŸãããä»ã®ã¿ã€ãã§ã¯äœ¿çšãããŸããã -
map
ãã£ãŒã«ãã¯ãã©ã¡ãŒã¿ãŒåã§ããŸããããŠãŒã¶ãŒå®çŸ©ã¿ã€ãã¯äœ¿çšã§ããªããªããŸããã ããã¯ãäžè¬çãªããŒã¿æ§é ã§ç¬èªã®å°éåãæåã§æå®ããããšã«åºå·ããŠããããšãæå³ããŸãã -
map
ãã£ãŒã«ããrepeated
ããšã¯ã§ããŸããã -
map
ããŒã¯string
ã«ããããšãã§ãbytes
ããbytes
ããããšã¯ã§ã ãŸãã ã EnumãçŠæ¢ãããŠããŸãããåŸè ã¯Protobuffersä»æ§ã®ä»ã®ãã¹ãŠã®éšåã®æŽæ°ãšåçãšèŠãªãããŸãã -
map
å€ãä»ã®map
ããããšã¯ã§ããŸããã
ãã®ã¯ã¬ã€ãžãŒãªå¶éã®ãªã¹ãã¯ãæåŸã®ç¬éã«èšèšãšãã蟌ã¿æ©èœãç¡ååã«éžæããçµæã§ãã ããšãã°ããµã€ãã¿ã€ãã§ã¯ãªããã³ãŒããžã§ãã¬ãŒã¿ãŒãçžäºã«æä»çãªãªãã·ã§ã³ãã£ãŒã«ããçæããããã
oneof
ãã£ãŒã«ãã
repeated
ããšã¯ã§ããŸããã ãã®ãããªå€æã¯ãç¹ç°ãªãã£ãŒã«ãã«å¯ŸããŠã®ã¿æå¹ã§ãïŒåŸã§èª¬æããããã«ãããã§ãæ©èœããŸããïŒã
repeated
ããšã®ã§ããªã
map
ãã£ãŒã«ãã®å¶éã¯ãã»ãŒåããªãã©ããã®ãã®ã§ãããåã·ã¹ãã ã®ç°ãªãå¶éã瀺ããŠããŸãã èå°è£ã§ã¯ã
map<k,v>
ã¯
repeated Pair<k,v>
䌌ããã®ã«å€æãããŸãã ãããŠã
repeated
ã¯èšèªã®éæ³ã®ããŒã¯ãŒãã§ãããéåžžã®åã§ã¯ãªããããããèªäœãšçµåããŸããã
enum
ã®åé¡ã«ã€ããŠã®ããªãã®æšæž¬ã¯ãç§ã®ããã«çå®ã§ãã
ããããã¹ãŠã«ã€ããŠãšãŠãã€ã©ã€ã©ããŠããã®ã¯ãçŸä»£ã®åã·ã¹ãã ãã©ã®ããã«æ©èœãããã«ã€ããŠã®äžååãªç解ã§ãã ãã®ç解ã¯Protobuffers ã®ä»æ§ãåçã«ç°¡çŽ åããåæã«ãã¹ãŠã®ä»»æã®å¶éãåãé€ãã§ãããã
解決çã¯æ¬¡ã®ãšããã§ãã
-
required
ã¡ãã»ãŒãžã®ãã¹ãŠã®ãã£ãŒã«ããäœæããŸãã ããã«ãããåã¡ãã»ãŒãžã補åã¿ã€ãã«ãªããŸãã -
oneof
ãã£ãŒã«ãã®å€ãã¹ã¿ã³ãã¢ãã³ããŒã¿åã«äžããŸãã ããã¯ãé£ç£åã¿ã€ãã«ãªããŸãã - 補åã®ã¿ã€ããšä»ã®ã¿ã€ãã®é£ç£åã®ãã©ã¡ãŒã¿ãŒåãæå¹ã«ããŸãã
以äžã§ãïŒ ãããã®3ã€ã®å€æŽã¯ãå¯èœãªããŒã¿ã決å®ããããã«å¿ èŠãªãã¹ãŠã§ãã ãã®ã·ã³ãã«ãªã·ã¹ãã ã§ã¯ãä»ã®ãã¹ãŠã®Protobuffersä»æ§ãããçŽãããšãã§ããŸãã
ããšãã°ã
optional
ãã£ãŒã«ããããçŽãããšãã§ããŸãã
product Unit { // no fields } coproduct Optional<t> { t value = 0; Unit unset = 1; }
repeated
ãã£ãŒã«ãã®äœæãç°¡åã§ãã
coproduct List<t> { Unit empty = 0; Pair<t, List<t>> cons = 1; }
ãã¡ãããã·ãªã¢ã«åã®å®éã®ããžãã¯ã䜿çšãããšããªã³ã¯ãªã¹ãããããã¯ãŒã¯çµç±ã§ããã·ã¥ãããããè³¢æãªããšãã§ããŸããçµå±ã å®è£ ãšã»ãã³ãã£ã¯ã¹ã¯äºãã«å¯Ÿå¿ããå¿ èŠã¯ãããŸãã ã
çãããéžæ
Javaã¹ã¿ã€ã«ã®ããããããã¡ã¯ã ã¹ã«ã©ãŒã¿ã€ããšã¡ãã»ãŒãžã¿ã€ããåºå¥ããŸãã ã¹ã«ã©ãŒã¯ãã»ãŒ
int32
ã
bool
ã
string
ãªã©ã®ãã·ã³ããªããã£ãã«å¯Ÿå¿ããŠã
string
ã äžæ¹ãã¡ãã»ãŒãžã¿ã€ãã¯ãã¹ãŠæ®ãã§ãã ãã¹ãŠã®ã©ã€ãã©ãªããã³ãŠãŒã¶ãŒã¿ã€ãã¯ã¡ãã»ãŒãžã§ãã
ãã¡ããã2çš®é¡ã®ã¿ã€ãã®ã»ãã³ãã£ã¯ã¹ã¯ãŸã£ããç°ãªããŸãã
ã¹ã«ã©ãŒåã®ãã£ãŒã«ãã¯åžžã«ååšããŸãã ããããã€ã³ã¹ããŒã«ããªãã£ãå Žåã§ãã ç§ã¯ãã§ã«èšã£ãïŒå°ãªããšãproto3 1㧠ïŒããããããã¡ã¯ãããŒã¿ããŸã£ãããªãå Žåã§ããŒãã«åæåãããŠããŸããïŒ ã¹ã«ã©ãŒãã£ãŒã«ãã¯åœã®å€ãååŸããŸããããšãã°ã
uint32
0
ã«åæåããã
string
""
åæåãããŸãã
ããã©ã«ãå€ãå²ãåœãŠãããŠãããã£ãŒã«ããšããããããã¡ã«ãªããã£ãŒã«ããåºå¥ããããšã¯ã§ããŸããã ããããããã®æ±ºå®ã¯ãã¹ã«ã©ãŒã®ããã©ã«ãã転éããªãããã«æé©åã®ããã«è¡ããããã®ã§ãã ããã¥ã¡ã³ãã§ã¯ãã®æé©åã«ã€ããŠèšåããŠããªããããããã¯åãªãä»®å®ã§ãããããã£ãŠãããªãã®ä»®å®ã¯ç§ã®ãã®ããæªããªãããšã¯ãããŸããã
Protobuffersã®äžäœããã³å°æ¥ã®APIäºææ§ã®çæ³çãªãœãªã¥ãŒã·ã§ã³ã®äž»åŒµãè°è«ãããšããæªå®çŸ©ã®å€ãšããã©ã«ãã®å€ãåºå¥ã§ããªãããšã¯æªå€¢ã§ããããšãããããŸãã ç¹ã«ããã£ãŒã«ãçšã«1ãããïŒèšå®ãããã©ããïŒãä¿åãããšããæèçãªæ±ºå®ã§ããå Žåã
ãã®åäœãã¡ãã»ãŒãžã¿ã€ããšæ¯èŒããŸãã ã¹ã«ã©ãŒãã£ãŒã«ãã¯ããã ãã§ãããã¡ãã»ãŒãžãã£ãŒã«ãã®åäœã¯å®å šã«çã£ãŠããŸãã å éšçã«ã¯ãã¡ãã»ãŒãžãã£ãŒã«ãã¯ååšãããããªããã®ã©ã¡ããã§ãããåäœã¯ããããã§ãã ã¢ã¯ã»ãµçšã®å°ããªæ¬äŒŒã³ãŒãã¯ãåèªã«å€ããŸãã ãããJavaãŸãã¯ä»ã®å Žæã§æ³åããŠãã ããã
private Foo m_foo; public Foo foo { // only if `foo` is used as an expression get { if (m_foo != null) return m_foo; else return new Foo(); } // instead if `foo` is used as an lvalue mutable get { if (m_foo = null) m_foo = new Foo(); return m_foo; } }
çè«çã«ã¯ã
foo
ãã£ãŒã«ããèšå®ãããŠããªãå Žåãããã©ã«ãã§åæåãããã³ããŒã衚瀺ãããŸããããããå°ãããã©ããã¯ããããŸããããã³ã³ãããå€æŽããããšã¯ã§ããŸããã ãããã
foo
ãå€æŽãããšããã®èŠªãå€æŽãããŸãïŒ ããã¯ãæªå®çŸ©ã®å€ãäœãæå³ããã®ããç解ããããã«ã
Maybe Foo
ã¿ã€ããšããã«é¢é£ãããé çãã®äœ¿çšãé¿ããããã§ãã
ãã®ãããªè¡åã¯ãæ³åŸã«éåãããããç¹ã«æªè³ªã§ãã ãžã§ã
msg.foo = msg.foo;
åäœããŸããã 代ããã«ãå®è£ ã¯å®éã«
msg
ã
foo
ã³ããŒã«éãã«å€æŽããŸã
msg
ã以åã«ååšããŠããªãã£ãå Žåã¯ããŒãã§åæåããŸãã
ã¹ã«ã©ãŒãã£ãŒã«ããšã¯ç°ãªããå°ãªããšãã¡ãã»ãŒãžãã£ãŒã«ããèšå®ãããŠããªããšå€æã§ããŸãã ããããããã¡ã®èšèªãã€ã³ãã£ã³ã°ã¯ãçæããã
bool has_foo()
ã¡ãœããã®ãããªãã®ãæäŸããŸãã ååšããå Žåãããããããããã¡ããå¥ã®ããããããã¡ã«ã¡ãã»ãŒãžãã£ãŒã«ããé »ç¹ã«ã³ããŒããå Žåã次ã®ã³ãŒããèšè¿°ããå¿ èŠããããŸãã
if (src.has_foo(src)) { dst.set_foo(src.foo()); }
å°ãªããšãéçåä»ãã®èšèªã§ã¯ã
foo()
ã
set_foo()
ããã³
has_foo()
éã®åç®äžã®é¢ä¿ã®ããããã®ãã³ãã¬ãŒããæœè±¡åã§ããªãããšã«æ³šæããŠãã ããã ãããã®é¢æ°ã¯ãã¹ãŠç¬èªã®èå¥åã§ãããããããªããã»ããµãã¯ããé€ããããã°ã©ã ã§çæããæ段ã¯ãããŸããã
#define COPY_IFF_SET(src, dst, field) \ if (src.has_##field(src)) { \ dst.set_##field(src.field()); \ }
ïŒãã ããããªããã»ããµãã¯ãã¯Googleã¹ã¿ã€ã«ã¬ã€ãã§çŠæ¢ãããŠããŸãïŒã
代ããã«ããã¹ãŠã®è¿œå ãã£ãŒã«ãã
Maybe
ãšããŠå®è£ ãããå Žåãæœè±¡åããããã€ã€ã«ãã¢ãå®å šã«é 眮ã§ããŸãã
äž»é¡ãå€ããããã«ãå¥ã®çããã決å®ã«ã€ããŠè©±ããŸãããã
oneof
ãã£ãŒã«ãã®1ã€ãå®çŸ©ã§ããŸããããããã®ã»ãã³ãã£ã¯ã¹ã¯é£ç£åã®ã¿ã€ãã«å¯Ÿå¿ããŠããŸãã ïŒ åå¿è ééãã ãïŒ ä»£ããã«ãåã»ãã¿ãŒã®ãªãã·ã§ã³ãã£ãŒã«ããšã»ãã¿ãŒã®ããžãã¯ã³ãŒããååŸããŸããããã¯ãèšå®ãããŠããå Žåãä»ã®ãã£ãŒã«ããå ã«æ»ãã ãã§ãã
äžèŠãããã¯æ£ããã¿ã€ãã®ãŠããªã³ãšæå³çã«åçã§ããããã«æãããŸãã ãããã代ããã«ããããããããããªèšèã§è¡šããªããšã©ãŒã®åå ã«ãªããŸãïŒ ãã®åäœãäžæ£ãªå®è£ ãšçµã¿åããããå Žå
msg.foo = msg.foo;
ããã®ãããªäžèŠæ£åžžãªå²ãåœãŠã¯ãä»»æã®éã®ããŒã¿ãéãã«åé€ããŸãïŒ
ãã®çµæãããã¯ããã£ãŒã«ãã®1ã€
oneof
æ³åŸãéµå®ãã
Prism
圢æãããã¡ãã»ãŒãžãæ³åŸãéµå®ãã
Lens
圢æããªãããšãæå³ããŸãã ãã°ãªãã§éèŠãªããããããã¡æäœãèšè¿°ããããšããããªãã®å¹žéãç¥ããŸãã protobuffersã«ãæ®éçã§ãšã©ãŒã®ãªãå€æ æ§ã³ãŒããæžãããšã¯ãæåéãäžå¯èœã§ã ã
ããã¯ãç¹ã«æ£å察ã®ããšãçŽæãããã©ã¡ããªãã¯å€åãæããç§ãã¡ã«ãšã£ãŠã¯ãèãã®ã¯ããŸã楜ããããšã§ã¯ãããŸããã
äžäœäºææ§ãšå°æ¥ã®äºææ§
Protobuffersã§ããèšãããããã©ãŒæ©èœãã®1ã€ã¯ããäžäœäºææ§ãšäžäœäºææ§ã®ããAPIãäœæããããã®ãã©ãã«ã®ãªãæ©èœãã§ãã ãã®å£°æã¯çå®ãææ§ã«ããããã«ããªãã®ç®ã®åã«æããããŸããã
ãã®protobuffersã¯å¯å®¹ã§ãã 圌ãã¯ãããªãã®ããŒã¿ãã©ã®ããã«èŠãããã«ã€ããŠå šãçŽæããªãã®ã§ãéå»ãŸãã¯æªæ¥ããã®ã¡ãã»ãŒãžã«å¯ŸåŠããããšãã§ããŸãã ãã¹ãŠããªãã·ã§ã³ã§ãïŒ ãããããããå¿ èŠãªå ŽåãProtobuffersã¯ããããçã«ããªã£ãŠãããã©ããã«é¢ä¿ãªããã¿ã€ããã§ãã¯ã§äœããæºåããããªãã«åãã§æäŸããŸãã
ããã¯ãProtobuffersãçŽæããããã¿ã€ã ãã©ãã«ããå®è¡ãã ããã©ã«ãã§éãã«ééã£ãããšãå®è¡ããããšãæå³ããŸã ã ãã¡ãããæ éãªããã°ã©ããŒã¯ãåãåã£ãããããããã¡ãŒã®æ£ç¢ºãããã§ãã¯ããã³ãŒããæžãããšãã§ããŸãïŒãããŠãããã¹ãã§ãïŒã ãããããã¹ãŠã®ãµã€ãã§ä¿è·ã®æ£åœæ§ãã§ãã¯ãèšè¿°ããå Žåãéã·ãªã¢ã«åæé ã蚱容ç¯å²ãè¶ ããŠããããšãæå³ããŠããã ããããããŸããã æ€èšŒã®ããžãã¯ãæ確ã«å®çŸ©ãããå¢çããåæ£ãããã³ãŒãããŒã¹å šäœã«ã¹ãããžããã ãã§ããã
èããããåŒæ°ã®1ã€ã¯ãprotobuffersãã¡ãã»ãŒãžã§ç解ã§ããªãæ å ±ãä¿åããããšã§ãã ããã¯ãååãšããŠããã®ããŒãžã§ã³ã®ã¹ããŒã ãç解ããŠããªã仲ä»è ãä»ããã¡ãã»ãŒãžã®éç Žå£çãªéä¿¡ãæå³ããŸãã ããã¯æãããªåå©ã§ãããïŒ
ãã¡ãããçŽã®äžã§ã¯ããã¯çŽ æŽãããæ©èœã§ãã ãããããã®ããããã£ãå®éã«ä¿åãããŠããã¢ããªã±ãŒã·ã§ã³ãèŠãããšã¯ãããŸããã ã«ãŒãã£ã³ã°ãœãããŠã§ã¢ãé€ããããã°ã©ã ã¯ã¡ãã»ãŒãžã®ç¹å®ã®ãããã®ã¿ããã§ãã¯ããå€æŽããã«è»¢éããããšãæã¿ãŸããã ããããããã¡äžã®ããã°ã©ã ã®å€§éšåã¯ãã¡ãã»ãŒãžããã³ãŒãããå¥ã®ã¡ãã»ãŒãžã«å€æããŠãå¥ã®å Žæã«éä¿¡ããŸãã æ®å¿µãªããããããã®å€æã¯æ³šæã«å¿ããŠè¡ãããæåã§ãšã³ã³ãŒããããŸãã ãŸããããããããããã¡ããå¥ã®ããããããã¡ãžã®æåå€æã§ã¯ãæåéãæå³ããªããããæªç¥ã®ãã£ãŒã«ãã¯ä¿æãããŸããã
æ®éçã«äºææ§ãããããããããã¡ã«å¯Ÿãããã®éåšçãªæ 床ã¯ãä»ã®èŠèŠããæ¹æ³ã§çŸããŸãã Protobuffersã®ã¹ã¿ã€ã«ã¬ã€ãã¯ãDRYã«ç©æ¥µçã«å察ããå¯èœãªéãã³ãŒãã«å®çŸ©ãåã蟌ãããšãææ¡ããŠããŸãã 圌ãã¯ãããã«ãããå®çŸ©ãç°ãªãå Žåãå°æ¥çã«å¥ã®ã¡ãã»ãŒãžã䜿çšã§ããããã«ãªããšäž»åŒµããŠããŸãã ç§ã¯ã äžãäžã®ããã« ãè¯ãããã°ã©ãã³ã°ã®60幎ã®å®è·µãæŸæ£ããããšãç³ãåºãŠããããšã匷調ããŸããçªç¶ãå°æ¥ãäœããå€æŽããå¿ èŠããããŸãã
åé¡ã®æ ¹æ¬ã¯ãGoogleãããŒã¿ã®æå³ãšãã®ç©ççè¡šçŸãçµã¿åãããŠããããšã§ãã GoogleèŠæš¡ã®å Žåãããã¯çã«ããªã£ãŠããŸãã æçµçã«ã¯ããããã¯ãŒã¯ã䜿çšããããã°ã©ãã®æé絊ãXãã€ããä¿åããã³ã¹ããªã©ãæ¯èŒããå éšããŒã«ããããŸãã ã»ãšãã©ã®ãã¯ãããžãŒäŒæ¥ãšã¯ç°ãªããããã°ã©ããŒã®çµŠäžã¯Googleã®æå°ã®è²»çšé ç®ã®1ã€ã§ãã 財æ¿çã«ã¯ãããã°ã©ããŒãæ°ãã€ããç¯çŽããããã«æéãè²»ããããšã¯çã«ããªã£ãŠããŸãã
倧æãã¯ãããžãŒäŒæ¥5瀟ã«å ããŠãGoogleã®5æ¡ä»¥å ã«ãã人ã¯èª°ãããŸããã ã¹ã¿ãŒãã¢ããã¯ããšã³ãžãã¢ãªã³ã°æéãè²»ãããŠãã€ããç¯çŽããäœè£ã¯ãããŸãã ã ããããããã»ã¹ã®ãã€ãæ°ãç¯çŽããããã°ã©ããŒã®æéã浪費ããããšã¯ãProtobuffersããŸãã«æé©åãããŠãããã®ã§ãã
ããã«çŽé¢ããŸãããã Googleã®èŠæš¡ã«é©åããªããããé©åããŸããã ãGoogleã䜿çšããŠããããšããçç±ã ãã§ãªããããããã¯æ¥çã®ãã¹ããã©ã¯ãã£ã¹ã§ããããšããçç±ã ãã§ããã¯ãããžãŒã®ã«ãŒãŽã«ã«ãã®äœ¿çšããããŸãã
Protobuffersã¯ã³ãŒãããŒã¹ãæ±æããŸã
Protobuffersã®äœ¿çšããããã¯ãŒã¯ã®ã¿ã«å¶éããããšãå¯èœã§ããã°ããã®ãã¯ãããžãŒã«ã€ããŠããã»ã©å³ããã¯èªããŸããã æ®å¿µãªãããååãšããŠããã€ãã®ãœãªã¥ãŒã·ã§ã³ããããŸãããå®éã®ãœãããŠã§ã¢ã§å®éã«äœ¿çšããã®ã«ååãªãœãªã¥ãŒã·ã§ã³ã¯ãããŸããã
ããããããã¡ã¯ãéä¿¡ãã£ãã«ãä»ããŠéä¿¡ããããŒã¿ã«å¯Ÿå¿ããŠããŸãã å€ãã®å Žåãã¢ããªã±ãŒã·ã§ã³ãå®éã«äœ¿çšãããå®éã®ããŒã¿ãšäžèŽããŠããŸããã åäžã§ã¯ãããŸããã ããã«ãããç§ãã¡ã¯äžå¿«ãªç«å Žã«çœ®ãããŸãã次ã®3ã€ã®æªããªãã·ã§ã³ã®ãããããéžæããå¿ èŠããããŸãã
- æ¬åœã«å¿ èŠãªããŒã¿ãèšè¿°ããå¥ã®ã¿ã€ããç¶æããäž¡æ¹ã®ã¿ã€ããåæã«ãµããŒããããããã«ããŸãã
- ã¢ããªã±ãŒã·ã§ã³ãéä¿¡ããã³äœ¿çšããããã®åœ¢åŒã§å®å šãªããŒã¿ãããã¯ããŸãã
- éä¿¡ããããã«çã圢åŒããå¿ èŠãªãã³ã«å®å šãªããŒã¿ãååŸããŸãã
ãªãã·ã§ã³1ã¯æããã«ãæ£ããããœãªã¥ãŒã·ã§ã³ã§ãããProtobuffersã«ã¯é©ããŠããŸããã ãã®èšèªã¯ã2ã€ã®åœ¢åŒã§äºéã«æ©èœããã¿ã€ãããšã³ã³ãŒãããã»ã©åŒ·åã§ã¯ãããŸããã ã€ãŸããå®å šã«ç¬ç«ããããŒã¿åãèšè¿°ããProtobuffersãšåæããŠéçºãã å ·äœçã«ã¯ãããã®ã·ãªã¢ã«åã³ãŒããèšè¿°ããå¿ èŠããããŸã ã ãã ããã»ãšãã©ã®äººã¯Protobuffersã䜿çšããŠã·ãªã¢ã«åã³ãŒããèšè¿°ããªãããã«èŠããããããã®ãªãã·ã§ã³ã¯æããã«å®è£ ãããŠããŸããã
代ããã«ãããããããã¡ãŒã䜿çšããã³ãŒãã«ãããã³ãŒãããŒã¹å šäœã«ããããããã¡ãŒãé åžã§ããŸãã ããã¯çŸå®ã§ãã Googleã§ã®ç§ã®äž»ãªãããžã§ã¯ãã¯ã1ã€ã®ããªãšãŒã·ã§ã³ã®Protobuffersã§èšè¿°ããããããã°ã©ã ããåãåããå¥ã®ããªãšãŒã·ã§ã³ã§åçã®ãããã°ã©ã ããäœæããã³ã³ãã€ã©ãŒã§ããã å ¥å圢åŒãšåºå圢åŒã¯ãŸã£ããç°ãªã£ãŠãããããC ++ã®æ£ãã䞊åããŒãžã§ã³ã¯æ©èœããŸããã§ããã ãã®çµæãProtobuffersããŒã¿ïŒããã³çæãããã³ãŒãïŒãéåžžã«é£ãããèå³æ·±ãåŠçãè¡ãããšãã§ããªãã£ããããç§ã®ã³ãŒãã§ã¯ãªããã³ã³ãã€ã©ãŒã®èšè¿°ææ³ã䜿çšã§ããŸããã§ããã
ãã®çµæã50è¡ã®ååž°ã¹ããŒã ã§ã¯ãªãã10,000è¡ã®ç¹å¥ãªãããã¡ã·ã£ããã«ã䜿çšãããŸããã ç§ãæžãããã£ãã³ãŒãã¯ãããããããã¡ã§ã¯æåéãäžå¯èœã§ããã
ããã¯1ã€ã®ã±ãŒã¹ã§ãããäžæã§ã¯ãããŸããã ã³ãŒãçæã®å³ããæ§è³ªã«ãããèšèªã®ããããããã¡ã®çç¶ã¯æ±ºããŠæ £çšçã§ã¯ãªããã³ãŒããžã§ãã¬ãŒã¿ãæžãçŽããªãéãããããããšã¯ã§ããŸããã
ããããããã§ããã¿ãŒã²ããèšèªã«å®ã£ãœãåã·ã¹ãã ãåã蟌ãåé¡ã¯ãŸã ãããŸãã Protobuffersã®ã»ãšãã©ã®æ©èœã¯ååã«èæ ®ãããŠããªãããããããã®çãããããããã£ã¯ã³ãŒãããŒã¹ã«æŒããŸãã ããã¯ãå®è£ ããã ãã§ãªããProtobuffersãšããåãããããããžã§ã¯ãã§ãããã®æªãã¢ã€ãã¢ã䜿çšããããåŸãªãããšãæå³ããŸãã
å å®ãªåºç€ã§ã¯ãæå³ã®ãªãããšãå®çŸããã®ã¯ç°¡åã§ãããå¥ã®æ¹åã«é²ããšãããããå°é£ã«çŽé¢ããææªã®å Žåãæ¬åœã®å€ä»£ã®ææã«ééããŸãã
äžè¬ã«ããããžã§ã¯ãã«Protobuffersãå®è£ ãã人ã«ã¯åžæããããããŸãã
1.ä»æ¥ãŸã§ãproto2ãšããã£ãŒã«ãã
required
ãšããŠããŒã¯ãã
required
ããããã©ããã«ã€ããŠãGoogleã§æ¿ããè°è«ã
required
ãŸãã ãããã§ã¹ãã
optional
ã¯æ害ãšèŠãªãã
optional
ã ãš ã
required
æ害ãšèŠãªãããŸãããåæã«é åžãããŸãã é 匵ã£ãŠãã ããã â