Rubyã³ããã¿ãŒã»Yuguiã«åŠã¶ãã³ãŒãã«æžãã¹ããé©åãªã³ã¡ã³ãããšãé©åãªå Žæã
Rubyã³ããã¿ãŒã»åç°è£è²ŽïŒYuguiïŒããããé·å¹Žã®çµéšã§äœåŸãããœãŒã¹ã³ãŒãã«æžãã¹ããã³ã¡ã³ãã®ææ³ããæããŠãããŸããã
ããã°ã©ãã³ã°ã«ãããŠãã©ããªåå¿è ã§ãæžããããã©ãé©åã«æžãã®ã¯äžçŽè ã§ãªããšé£ãããã®ããããã³ã¡ã³ãïŒ=ãœãŒã¹ã³ãŒãã«æžãããŠããæ³šéãã¡ã¢ïŒã§ãã
äžé©åãªã³ã¡ã³ããã€ããŠããããã°ã©ã ã®åäœã«ã¯åœ±é¿ããŸãããããããæžãæ¹ã®å·§æã«ãã£ãŠãã³ãŒãã®å¯èªæ§ãçè§£ã®ããããã«ã¯é²æ³¥ã®å·®ãåºãŸããè¯è³ªãªã³ã¡ã³ããè¯è³ªãªã³ãŒããã€ããã®ã§ãã
ä»åã¯Rubyã³ããã¿ãŒã§ããgrpc-gatewayã®éçºè ã§ãããSupershipæ ªåŒäŒç€Ÿã®åç°è£è²ŽïŒYuguiïŒããã«ãåªãããšã³ãžãã¢ãã©ããªèгç¹ãæã¡ãã©ããªã³ã¡ã³ããæžããŠããã®ããèããŸããã
- åç° è£è²ŽïŒãã®ã ã»ãããïŒ
@yuguiïŒ
- æžç±ãåããŠã®RubyãïŒãªã©ã€ãªãŒãžã£ãã³ïŒã®å·çè ã§ãããRubyã³ããã¿ãã¹ã±ãŒã«ã¢ãŠãïŒçŸSupershipïŒã®åæäžå¿ã¡ã³ããŒã®äžäººãšããŠæŽ»èºãããåŸãGoogle JapanãGengoãçµãŠSupershipã«åºæ»ããå šç€Ÿæšªæçãªæ¥åæ¹åã«åãçµãã§ããã
ãã³ã¡ã³ãã®ææ³1ãå€éšãšã®æ¥ç¹ã«æžã
ââåç°ããã¯ã©ããªç®æã«ã³ã¡ã³ããæžããŠãããæããŠãã ããã
åç°ïŒãŸããå€éšãšã®æ¥ç¹ã«ã¯ã³ã¡ã³ããæžãã¹ãã ãšèããŠããŸããèŠããã«ãããã±ãŒãžãã¢ãžã¥ãŒã«ãªã©ã®æ©èœã§ãå€ããå©çšãããããšãæ³å®ããŠãããã®ããããæåã®åè£ã§ãã
ãªãããšãããšãããã°ã©ã ãããŸãã¢ãžã¥ãŒã«åãããŠãããªãã°å©çšè ã¯ã³ãŒãã®å éšãç¥ãå¿ èŠã¯ãªãã§ãããåŒã³åºãã«åœãããã©ããªæ¯ãèããããã®ãããäœã«æ°ãä»ããã¹ããããšãã£ãæ å ±ã¯ç¥ã£ãŠããå¿ èŠãããããã§ãã
äŸãã°ãåŒæ°ãæåååã ãšããŠãã©ããªåœ¢åŒã®æååã§ããã¹ããªã®ãããŸã§ãèšèªä»æ§ã§å¶éã§ãããã®ã¯ãããªã«ãªãã§ããããå°ãªããšããã¡ã€ã³ã¹ããªãŒã ã§äœ¿ãããŠããããã°ã©ãã³ã°èšèªãšããŠã¯ããã«ã¯æãåœãããŸããã
ããã±ãŒãžãã¢ãžã¥ãŒã«ãå€éšããå©çšãã人ã«ã¯ãã©ããªåœ¢åŒã®æååãæåŸ ããã®ãæ å ±æäŸããªããã°ãªããŸãããã€ãŸããä»è ããã®ã³ãŒããå©çšããããšãåæãšããŠãã³ãŒãã ãã§ã¯äŒãåããªãæ å ±ãä»å±çã«äŒããããããã³ã¡ã³ããæžãã¹ãç®æã®åºæ¬çãªèãæ¹ã§ãã
ââã§ã¯ãå€éšãšã®ã€ã³ã¿ãŒãã§ãŒã¹ã«ã¯å ·äœçã«äœãæžãã¹ãã§ããããïŒ
åç°ïŒäžè¬è«ãšããŠæåã«æ€èšããã¹ãåè£ã¯ãããŸãããïŒ1ïŒäºåæ¡ä»¶ããïŒ2ïŒäºåŸæ¡ä»¶ããïŒ3ïŒäžå€æ¡ä»¶ããïŒ4ïŒå ¥åã®æå³ããïŒ5ïŒåºåã®æå³ããïŒ6ïŒå¯äœçšããïŒ7ïŒèšç®éãã§ããèŠããã«ãå©çšããåŽãç¥ã£ãŠããã¹ãã ããã©ãã³ãŒãã®äžèº«ãèŠãªããã°å®¹æã«ã¯åãããªããã®ã§ãã
##
# Evaluates Jsonnet source.
#
# @param [String] jsonnet Jsonnet source string.
# Must be encoded in an ASCII-compatible encoding.
# @param [String] filename filename of the source. Used in stacktrace.
# @param [Boolean] multi enables multi-mode
# @return [String] a JSON representation of the evaluation result
# @raise [EvaluationError] raised when the evaluation results an error.
# @raise [UnsupportedEncodingError] raised when the encoding of jsonnet
# is not ASCII-compatible.
# @note It is recommended to encode the source string in UTF-8 because
# Jsonnet expects it is ASCII-compatible, the result JSON string
# shall be UTF-{8,16,32} according to RFC 7159 thus the only
# intersection between the requirements is UTF-8.
yugui/ruby-jsonnetããåŒçšãåç°ãããæããŠãããããªèгç¹ã«åºã¥ããã³ã¡ã³ããèšèŒãããŠãã
ãã ã究極çãªçãã¯ã©ãããŠãã±ãŒã¹ãã€ã±ãŒã¹ã«ãªã£ãŠããŸããŸããäŸãã°ãã¢ãžã¥ãŒã«åã®ããã«ããã±ãŒãžãåããŠã¯ããããã©ãããã®ããã±ãŒãžãèªåãã䜿ããªã確信ãããã°ãã³ã¡ã³ãã¯æžããªããŠããã
ã ãããã©ã€ã»ã³ã¹ïŒå©çšèš±è«ŸïŒãããŒã äœå¶ãªã©ãããã°ã©ã ãã©ããªäººã«ã©ã䜿ãããã®ããããã³ã¡ã³ããæžãæžããªãã®å€æææã«ãªã£ãŠãããšæããŸãã
ãã³ã¡ã³ãã®ææ³2ãã©ããªèªè ãèªãã®ããèãã
ââãœãŒã¹ã³ãŒãã®åŠçå éšã§ã³ã¡ã³ããèšèŒããç®æã®åè£ãæãããšããã°ïŒ
åç°ïŒåè£ãæ€èšããã«åœããèæ ®ãã¹ãã¯ãã©ããªèªè ãã³ã¡ã³ããèªãã®ããã§ããèªè ãã©ããªã¹ãã«ãæã£ãŠããŠãäœãç¥ã£ãŠããã®ãããããèžãŸããããšãéèŠã«ãªããŸãã
yugui/ruby-jsonnetã®ã¡ã€ã³ã®åŠçãæ ãåã¢ãžã¥ãŒã«ïŒext/jsonneté äžã«ãããã®ïŒã«ã¯ã詳现ãªã³ã¡ã³ãã¯ããŸãæžãããŠããªãããœãŒã¹ã³ãŒããèªãèªè ããRubyã®æ¡åŒµæ©èœãéçºã§ããããã¢ãžã¥ãŒã«ãå®çŸãããåŠçã®æŠèŠãçè§£ã§ããããšããã¹ãã«ãæã£ãŠããããšãåæãšããŠããããã
ããã§èšãæ³å®èªè ãšã¯ãä»ã®ããŒã ã¡ã³ããŒãããã¯å°æ¥ã®èªåã§ãããã®äººãã¡ã«åããŠãã³ãŒããæ¥åžžçã«èªã人ãç¥ããªããã°ãããªãæ å ±ããèšèŒããŠããå¿ èŠããããŸãã
ââãšãããšãå ·äœçã«ã¯ïŒ
åç°ïŒè€éãªã¢ã«ãŽãªãºã ã«ã¯ã³ã¡ã³ããæžãã¹ãã§ããããããã ãã©ãã ãè©³çŽ°ã«æžãã¹ããã¯ãã¯ãã±ãŒã¹ãã€ã±ãŒã¹ãããŒã ã¡ã³ããŒãŸãã¯èªåèªèº«ã®å¹³åçãªã¹ãã«ã¬ãã«ã«äŸåãããšæããŸãã
äŸãã°ãç§ã¯ä»¥åãããããžã§ã¯ãã§ã¯ãŒã·ã£ã«ããã€ãæ³ã®å®è£ ãå¿ èŠã«ãªããã³ãŒããæžããããšããããŸãããã®ã³ã¡ã³ãã«ãã¯ãŒã·ã£ã«ããã€ãæ³ããšæžããWikipediaãžã®ãªã³ã¯ã貌ããŸããã
ãªããªããç§ã¯ããã»ã©ç«¶æããã°ã©ãã³ã°ã«ã¯åŒ·ããªãããã§ããå幎åŸãããã«èªåããã®ã³ãŒããèŠããšããäœã®ã¢ã«ãŽãªãºã ãäžç®ã§ã¯å€å¥ã§ããªãå¯èœæ§ãããã ãããšèããŸããã
ã§ããç«¶æããã°ã©ãã³ã°ã«åŒ·ãã¡ã³ããŒãããããããäŒç€ŸããããŸãããããããã£ããšã³ãžãã¢ãªãã°ã³ãŒããèŠãã°ã¯ãŒã·ã£ã«ããã€ãæ³ã ãšåãããŸããã ããæžãå¿ èŠã¯ãªãã§ãããã
ãã³ã¡ã³ãã®ææ³3ãã³ãã¥ããã£ã®æ¹éã«åããã
ââããã°ã©ãã³ã°èšèªã»ãã¬ãŒã ã¯ãŒã¯ã®éçºã³ãã¥ããã£ã®ããã«ãã¹ãã«ã®é«ããšã³ãžãã¢ãéãŸãããšãåæããšããå ŽåãèšèŒãã¹ãã³ã¡ã³ãã®éãå¿ ç¶çã«æžããŸããïŒ
åç°ïŒããã§ããã倧åãªã®ã¯ãèªè ããããžã§ã¯ãã«äœãæåŸ ããŠããã®ãããèããããšã§ãã
ââäŸãã°ïŒ
åç°ïŒãããžã§ã¯ãã®ç¹å®ã®ç®æã§ãAããšããæ¹éã§ã³ãŒããæžãããŠãããªãã°ãèªè ã¯ä»ã®ç®æã§ããAããšããæ¹éã貫ãããŠããããšãæåŸ ããŸãããããžã§ã¯ãå šäœã®äžè²«æ§ãæ±ããããã§ãã
äŸãã°ãé«ãã¹ãã«ãå€ãã®ç¥èãåæãšãããããžã§ã¯ããªãã°ãæåããèªè ã¯ãã®å 容ãå匷ããŠåç»ããã®ã§ãåé·ãªã³ã¡ã³ãã¯äžèŠãªã¯ãã§ããã«ããããããããã©ãã³ã¡ã³ãããããšéªéã§ããããé 匵ã£ãŠæžããŠãèªè ã®å®³ã«ãããªããªãã®ã§ããããæžãã¹ãã§ã¯ãªãã§ãããã
ã ãããã©ãã³ã¡ã³ããæžãã¹ããã«ã€ããŠã®ãã1ã€ã®çãã¯ããããžã§ã¯ãã®äžè²«æ§ãæ±ããŠããèªè ã®ããã«ãåšãïŒã³ãã¥ããã£ã®æ¹éïŒã«åãããããšãã§ãã
ruby/rubyåç §ãRubyèšèªã®ã¡ã€ã³ã®åŠçãæ ãåã¢ãžã¥ãŒã«ïŒexté äžã«ãããã®ïŒã¯ãã©ã®ãœãŒã¹ã³ãŒããèªãã§ãã³ã¡ã³ãã®æžãæ¹ã«äžè²«æ§ãä¿ãããŠãã
ãã³ã¡ã³ãã®ææ³4ãäŒç€ŸãããŒã ã®æ £ç¿ã«èµ·å ããå å®¹ãæžã
ââä»ã«ã³ã¡ã³ããèšèŒãã¹ãç®æã¯ïŒ
åç°ïŒäŒç€ŸãããŒã ãæã€ãåºæã®æ £ç¿ã«èµ·å ãããã®ã¯æžããŠããæ¹ããããšæããŸãããªããªããæ°ãããšã³ãžãã¢ãåå ããéã«ãåºæã®ç¥èãçµéšããªãããã«æ£ãã倿ãäžããªãããšããã±ãŒã¹ãé¿ããªããã°ãããªãããã§ãã
// You can learn more about gRPC API Service descriptions from google's documentation // at https://cloud.google.com/endpoints/docs/grpc/grpc-service-config
grpc-ecosystem/grpc-gatewayããåŒçšïŒè©²åœã¢ãžã¥ãŒã«ã®contributorã¯Stefan Hackeræ°ïŒãã¢ãžã¥ãŒã«ã®å®è£ ã«åœããç¥ã£ãŠãããšäŸ¿å©ãªãgRPC API Serviceãã®ç¥èããGoogleã®ããã¥ã¡ã³ãããåŠã¹ãããšã«ã€ããŠèšèŒãããŠãã
ââç¬ç¹ã®æ £ç¿ããããæ¥çç¥èãæ±ãããããã¿ãŒã³ãšãããšãéèæ¥çãããã«åœããããã§ããã
åç°ïŒããã§ããããã ããã®å Žåã¯ã³ã¡ã³ããæžãåã«ãŸã培åºãã¹ãããšããããŸããæ¥çç¥èãšããæŽçãããç¥èäœç³»ããã³ãŒãã®æ§é ã«åæ ãããããšã§ããäœç³»ã説æããããã®åé·ãªã³ã¡ã³ããå°ãªãã§ããŸãããã
ãã®äžã§ãã³ãŒãããããŒãèœã¡ãŠããŸããããªæ å ±ãã³ã¡ã³ãã«æžããŠãããšããã§ããããã
ãã³ã¡ã³ãã®ææ³5ãæ€èšããããã©ãããªãã£ãããšãæžã
åç°ïŒæ€èšããããã©ãããªãã£ãããšããææ³ã®æŠèŠãšãããŸããããªãçç±ãã»ããã«ããŠã³ã¡ã³ãã«æžãã¹ãã§ãããããã¯ãå°ããªåé¡ãä¿®æ£ããããšãããšã³ãŒããè€éã«ãªã£ããæ§èœãèœã¡ããããã®ã§ããããŠæŸçœ®ããããšããããŸãã
ãããªãšãã«ã¯åé¡ã®æŠèŠãšæŸçœ®ããçç±ãæžãã¹ãã§ãããã
ãã£ãããšã¯å šãŠã³ãŒãã«æžããŠãããŸããã詊ãããã©ããŸããããªãã£ãã¢ãããŒãã¯ã³ãŒãã«ã¯è¡šããŸããããã®æ å ±ãèšèŒããŠããããšã§ãä»ã®ãšã³ãžãã¢ãäžæ¯ãªåªåãããŠããŸãå¯èœæ§ãåé¿ã§ããŸãã
æåã®ããªã¥ãŒã ãå€ããã°ãå€éšããã¥ã¡ã³ãã«æžããªã³ã¯ã§é£ã°ããŠãè¯ãã§ãããã
// HasQueryParam determines if the binding needs parameters in query string. // // It sometimes returns true even though actually the binding does not need. // But it is not serious because it just results in a small amount of extra codes generated.
grpc-ecosystem/grpc-gatewayããåŒçšããããŠãå°ããªåé¡ãæŸçœ®ããçç±ãæžãããŠãã
ãã³ã¡ã³ãã®ææ³6ããã¶ã€ã³ã¹ãã«ãåäžããã°ãäžèŠãªã³ã¡ã³ãã¯æžããã
ââæžãã³ã¡ã³ãã®å 容ã¯ãéå»ãšçŸåšãšã§å€ãããŸãããïŒ
åç°ïŒå€ãã£ãŠããŸããããæã¯äžé©åãªã³ã¡ã³ãã®éãå€ãã£ããšæããŸãã
ââããã¯äœã«èµ·å ããŠããŸããïŒ
åç°ïŒãŸãããã€ãŠã®ç§ã¯äžèŠãªã³ã¡ã³ããã€ããããåŸãªãã»ã©ãã¶ã€ã³ïŒèšèšïŒãäžæã ã£ãããã§ãã
äŸãã°ãéå»ã«ãââã®æé ãšâ³â³ã®æé ãèžãã§ããâ¡â¡ãåŒã³åºãããšãããã¶ã€ã³ã®ã¢ãžã¥ãŒã«ãäœãéãåŒã³åºãæé ã®æ å ±ãã³ã¡ã³ãã«æžããŠããŸããã
ã§ããã©ãããŠãã³ã¡ã³ããèªã¿é£ã°ããŠããŸã人ãããã®ã§ãåããŸããããšããèŠæ ãæ¥ãŠãããã§ããã§ããã°ãããããåããã现ããããšãæ°ã«ããã«äœ¿ããã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããŠããã¹ãã ã£ããã³ã¡ã³ãã¯è§£æ±ºçã§ã¯ãªããšããæèšãåŠã³ãŸããã
ââãã³ã¡ã³ãã¯è§£æ±ºçã§ã¯ãªãããšã¯è±¡åŸŽçãªãã¬ãŒãºã§ããã
åç°ïŒãã¡ããã³ã¡ã³ãã解決çãšãªãã±ãŒã¹ãå€ã ãããŸããã©ãã
ãã1ã€ã¯ãä»ã®èªåãªããã³ã¡ã³ããæžããªããŠããããšå€æã§ãããã®ã§ãããæèšã§ããªãã£ãããéã«ä»ã®èªåãªããããã¯æžããªããã°ãããªãããšèãããããã®ããªããšããªããšçãèŠãŠããŸã£ãŠãããããŠããŸããã
ç¥èãšçµéšã«ãã£ãŠãã¶ã€ã³ã®ã¹ãã«ãåäžããã®ã§äžå¿ èŠãªã³ã¡ã³ããæžã£ãã®ãšãçµéšã«ãã£ãŠã³ã¡ã³ããèªãèªè ã®å¹³åçãªã¹ãã«ãæ³å®ã§ããããã«ãªããé©åãªå€æãäžããããã«ãªããŸããã
ââè¥æãšã³ãžãã¢ãããããã¹ãã«ã身ã«ä»ããã«ã¯ãã©ããªç¥èãçµéšãå¿ èŠã ãšæããŸããïŒ
åç°ïŒããããããå€èããšæã人ããããããããªãã§ããã©ãç¥èã®èгç¹ã§èšãã°ããã¶ã€ã³ãã¿ãŒã³ããã¡ããšç¥ã£ãŠããã®ã¯æå¹ã§ãã
äžçªæåãªGoFïŒGang of FourïŒãªã©ã§ã¯çŸä»£ã§ããçšããããããã°ã©ãã³ã°èšèªã§ã¯äžèŠã«ãªã£ãææ³ãäžå®ã®å²åå«ãŸããŠããŸãããããããäžåãã»ã©çŸä»£ã§ãæçãªãã¿ãŒã³ããããããããŸãããã¶ã€ã³ãã¿ãŒã³ãçšããããšã§ã䜿çšã«æ³šæããããããªäžé©åãªèšèšãå°ãªãã§ããã®ã§ã泚æåèµ·ã®ãããªã³ã¡ã³ãããªããããšæããŸãã
ããã«ããã¶ã€ã³ãã¿ãŒã³ã¯å ±éèšèªã§ãããããã«ã®ã£ãšã£ãåœåãæ§é ã«ããŠããããšã§æ®éçã«ã©ããªãšã³ãžãã¢ã«ãçè§£ããŠããããŸãããšãªãã°ãããã³ã¡ã³ãã®éã¯æžãããŸãã
ããããRubyã®ã³ããã¿ãŒã¯ãé©åãªååãä»ããããšããšãïŒRubyã®æ©èœã§ããïŒãããã¯ãé©åã«äœ¿çšããããšãããšãŠã倧äºã«ããŸãã
åä»ãã«ãããŠæãæ°ã«ããã®ã¯âäžè²«æ§âã§ãããæšæºã©ã€ãã©ãªã®ââãšããæ©èœã¯ããããåœåäœç³»ãªã®ã«ããã¡ãã¯éãããšãªããšãèªè ã¯ãããããããèŠããªããã°ãããªããªã£ãŠããŸããŸãããã
åããããªæ¯ãèãããããã®ã«ã¯åããããªååãä»ããããšã§ãèªè ãç¥ã£ãŠããã¹ãäºåæ å ±ã®éãæžããããšãã§ããŸãã
ããããããããã¯ã䜿ããšãã®ç¯å²ã ããªãœãŒã¹ãæå¹ã«ãªããŸããããè§£æŸããããã®ã³ãŒããããã°ã©ãèªèº«ãæžãå¿ èŠããªããªããŸããããããã°ãè§£æŸãä¿ããããªã³ã¡ã³ãã¯äžèŠã«ãªããŸãããã
åèšèªãæã£ãŠããã³ãŒãã®å®å šæ§ãæ ä¿ããããã®æ©èœãäžæã«äœ¿ãããããã³ã¡ã³ãã®é©æ£åã®ããã«éèŠã ãšæããŸãã
ââç¥èã®è©±ã¯çŽåŸã®ãããã®ãå€ãã§ãããçµéšãšããŠã¯ãã©ããªããšããã¹ãã§ããããïŒ
åç°ïŒããã¯ç§ã®å人çäœéšãããŒã¹ãšãã話ã«ãªããŸãããã³ãŒãã£ã³ã°ã«ãŒã«ã®æå³ãèããŠã³ãŒããæžãããšã倧äºã§ãã
ææ³ã説æããŠããªããŠããããããã£ãã³ã¡ã³ããæžããªããããšãã£ãã³ãŒãã£ã³ã°ã«ãŒã«ã®æå®ã£ãŠãã¡ãã¡ã®ãããžã§ã¯ãã§ãããããªãã§ããããã®ã«ãŒã«ã«æ²¿ã£ãŠæãåãããŠãããã¡ã«ããªãã»ã©ãããããæå³ãªãã ããšå¯ããã€ãããã«ãªããŸããã
ããã«ãå ã»ã©ã話ããããã«ãç§èªèº«ãäžé©åãªèšèšãã³ã¡ã³ãã«ãã£ãŠèª°ããèŠãããŠããŸããããèŠããã§ãããã§ããããããçµéšããã£ããããããè¯ãèšèšãšã¯äœããè¯ãã³ã¡ã³ããšã¯äœããã®ç¥èŠãåŸãŠãããããã ãšæããŸãã
ââæ·±ãç¥èãšçµéšã«è£æã¡ãããããŠããŠããšãŠãåèã«ãªããŸãããã©ããããããšãããããŸããïŒ
åæã»å·çïŒäžèæŽïŒãµã ã©ã€ãïŒïŒåçïŒéŽæšæºå




