Kotlinã§å ¬ééµæå·æ¹å¼ã®éµãæ±ãã¨ãã®åå¿é²ã¨ãJWTã®çæã¨ã
ç®ç
Kotlinã§JWTãçæãããã
å®éã¯Ktorã§ãµã¼ãã¼æ¸ãã¦JWTè¿ãå¦çãæ¸ãããã©ãããã¯å²æã
æºå
opensslã§ç§å¯éµã®çæã
$ openssl genrsa -out private.key 2048
Javaã®PKCS8EncodedKeySpecã§ç§å¯éµã®ã¤ã³ã¹ã¿ã³ã¹ãä½ãã®ã«ç§å¯éµã PKCS 8 å½¢å¼ã«ãã¦ããã
$ openssl pkcs8 -in private.key -topk8 -nocrypt -out private.key.pk8
å ¬ééµã¯ç¹å¥ãªãã¨ã¯ããä½æã
$ openssl rsa -in private.key -pubout -out public.key
éµãã©ããã£ã¦æ±ãã
éµãã¡ã¤ã«ããã®ã¾ã¾æ±ãã®ã¯æ£ç´é¢åãªã®ã§ãç°å¢å¤æ°ã«æ ¼ç´ãã¦æ±ãããã
ãã ããã¡ã¤ã«ã®å 容ããã®ã¾ã¾ç°å¢å¤æ°ã«å ¥ãããã¨ãã¦ãæ¹è¡ãå ¥ã£ã¦ããã®ã§ãã®ã¾ã¾æ±ãã®ã¯é¿ãããã
æ±ããªãããã§ã¯ãªããã©ãæ¹è¡ã³ã¼ãã®æ±ãã ã£ããDotenvã®ã¢ã¬ã³ã¬ã§ãããã®ãå«ãªã®ã§æ¹è¡ãªãã®æååã¨ãã¦æ±ããããã«ãã¦ãã¾ãã
- æ¹è¡ã³ã¼ããå«ãã æååãç°å¢å¤æ°ã§èªã¿è¾¼ãã¨ãã«åµã£ã話 · Konboi Note
- symfony/dotenvã§æ¹è¡æåãå«ãç°å¢å¤æ°ãè¨å®ãã | QUARTETCOM TECH BLOG
以ä¸ã®ãããªæãã§ã½ã¤ã¤ã£ã¨Base64ã¨ã³ã³ã¼ããã¡ãããã§ããããç°å¢å¤æ°ã ã£ãã.envã«è¨å®ããã
ããããéµã®ä¸èº«èªä½Base64ã¨ã³ã³ã¼ãããã¦ãã¦ãããªã§ã¼ã·ã«æãããã©ã½ã¬ã¯ã½ã¬ã
$ base64 -i private.key.pk8 $ base64 -i public.key
ä½ã£ãéµã使ã£ã¦JWTãçæãã
JWTã®çæã¯ä»¥ä¸ãå©ç¨ã
éµã®æååããããããã®KeySpecãã¤ããã¨ããã¯ããã®ã¾ã¾ä»¥ä¸ã®ããã°ãåèã«ããã
PemReader.readFirstSectionAndClose
ã使ããããããã«ä»¥ä¸ãå
¥ãã¦ãã¾ã£ã¦ããã®ã§ãæ°ã«ãªã人ã¯èªåã§æ¸ãã¦ãè¯ãã¨æãã
private val dotenv = dotenv { ignoreIfMissing = true } private val privateKeyString = Base64.getDecoder().decode(dotenv.get("RSA_PRIVATE_KEY")).decodeToString() private val publicKeyString = Base64.getDecoder().decode(dotenv.get("RSA_PUBLIC_KEY")).decodeToString() private val keyFactory: KeyFactory = KeyFactory.getInstance("RSA") private val privateKey = keyFactory.generatePrivate(privateKeyString.fromPKCS8toKeySpec()) as RSAPrivateKey private val publicKey = keyFactory.generatePublic(publicKeyString.fromX509toKeySpec()) as RSAPublicKey private val algorithm: Algorithm = Algorithm.RSA256(publicKey, privateKey) fun create(contract: PostContract): String { return JWT.create() .withIssuer("hogehoge") .withExpiresAt(Date.from(ZonedDateTime.now(ZoneOffset.UTC).plusDays(1L).toInstant())) .withIssuedAt(Date.from(ZonedDateTime.now(ZoneOffset.UTC).toInstant())) .sign(algorithm) } private fun String.fromPKCS8toKeySpec(): PKCS8EncodedKeySpec { return PKCS8EncodedKeySpec(PemReader.readFirstSectionAndClose(StringReader(this)).base64DecodedBytes) } private fun String.fromX509toKeySpec(): X509EncodedKeySpec { return X509EncodedKeySpec(PemReader.readFirstSectionAndClose(StringReader(this)).base64DecodedBytes) }
DevLOVEã¨ãã¶ãã®10å¹´ãããããã®10å¹´
6/22, 23ã«DevLOVE Xã«åå ãã¦ãã¾ããã
ã¾ãã¯ãéå¶ã®ã¿ãªãããä¼å ´ãæä¾ãã¦ãããNAVITIMEããããããã¨ããããã¾ããã
ä»å¹´åº¦ããå½¹è·ã«ãªã£ããã¨ããããããã¸ã¡ã³ããçµç¹ã®è©±ã8å²ãæè¡ç³»ã®è©±ã2å²ãããã®å²åã§è´è¬ãã¾ããã
ã¡ã¢ããã£ã±ãæ¸ãããã®ã®ãã»ã¨ãã©è³æã¯å ¬éããã¦ããã®ã§ããã¶ãã®10å¹´ãæ¯ãè¿ã£ã¦ã¿ããããªã¨æãã¾ããï¼ã¡ã¢ã¯æ¶ãã¡ãã£ãï¼
ãªã®ã§ã以ä¸ã¯ãã¨ã ã
ããã¾ã§ã®10å¹´
æ°åã§ç¾å¨ã®ä¼ç¤¾ã«å ¥ç¤¾ãã¦ä¸¸10å¹´ãç¾å¨11å¹´ç®ãªã®ã§ãDevLOVEã¨åæã§ããï¼ DevLOVEã¯ãç§ãç¾å¨æå±ãã¦ããä¼ç¤¾ã®ç¤¾å ã¤ãã³ããéå§ã®ããã«ã±ã ã¨èãã¦ãã¾ãã"èãã¦ãã¾ã"ã¨ãã表ç¾ãããã®ã¯ãåå ãããã¨ããªãã£ãããã
10å¹´åã®ç§ã¯æ å ±æ度ãä½ãã社å ã®ã¤ãã³ãã®åå¨ãããã¾ããã§ããããããããã¤ãã³ãã®ãã¨ãç¥ã£ã¦ãã¦ãåå ããªãã£ãããã«æãã¾ãã
ç§ã¯å ¥ç¤¾å¾ãã¯ã¬ã¸ããã«ã¼ãã®åºå¹¹ç³»ã·ã¹ãã ï¼ä¼å¡ç®¡çã¨ãã«ã¼ãçºè¡ã¨ãï¼ã®ä¿å®éçºã2å¹´åã»ã©ãã£ã¦ãã¾ããã ãã®å¾ãåæ§ã«ã¯ã¬ã¸ããã«ã¼ãåºå¹¹ç³»ã·ã¹ãã ã®å¤§è¦æ¨¡ãªãã¬ã¼ã¹æ¡ä»¶ã«é£ç¶ãã¦åç»ãã¾ããã確ãã2011å¹´ã®ãã¨ã ã£ãã¨æãã¾ãã1件ç®ã®å¤§è¦æ¨¡éçºã§ã¯20人ã»ã©ãããã¼ã ã®ããã¯ãªã¼ãã¨ãã¦æ¨ªæçã«å¿ è¦ãªå¦çã®éçºããæ§æ管ç(å½æã¯Subversionã§ãããâ¦ï¼ãCIç°å¢ã®æ§ç¯ãRedmineãå©ç¨ãããã±ããé§åéçºã®å°å ¥ãªããããã¾ããã
ããã§ãã©ãRedmineã使ã£ã¦ããã®ãè¯ããã @yohhatu ããã«ç¸è«ãããã¨ããã³ãã¥ããã£ã¨ãããã®ã«å°ãã¥ã¤é¢ããããã«ãªãã¾ãã
yohhatuããã«èªãã社å ã®Redmineåå¼·ä¼ã§çºè¡¨ããã®ããåãã¦åå¼·ä¼ã¨ãããã®ã«åå ããçµé¨ã ã£ãããã«æãã¾ãã ãããã¸ãã®ææã«ã¢ã¸ã£ã¤ã«ã¨ãããã®ã«åºä¼ãã社å ã§éå¬ããã¦ããã¢ã¸ã£ã¤ã«ãµã ã©ã¤èªæ¸ä¼ã«åå ãã¦ãã¾ã(ãããæçµåâ¦ï¼ï¼
ãã®å¾ãç¶ç¶ãã¦ã大éªã¨æ±äº¬ããã¬ãä¼è°ã§ã¤ãªãã§ä½åãèªæ¸ä¼ãç¶ç¶ãã¾ãããä½èªãã ããªï¼ããä¸å¨ã¢ã¸ã£ã¤ã«ãµã ã©ã¤ã¨ããã¬ã¬ã·ã¼ã³ã¼ãæ¹åã¬ã¤ãã¨ãã
ä»ã§ãè¦ãã¦ããã®ã¯ãã¬ã¬ã·ã¼ã³ã¼ãæ¹åã¬ã¤ãã大éªã®ååã¨èªãã§ããã¨ãã«ããäºãã®ç¶æ³ãã©ãå¤ãããããï¼ã¿ãããªè©±ããããã®ã§ãããå½¼ãä¿å®ãã¦ããã·ã¹ãã ã§ä½¿ã£ã¦ããè¨èªãRPGã¨ããè¨èªã§ãèªåãã¹ãâ¦ç¡çã ãããâ¦ã¨ç¡åæãæããã®ãè¦ãã¦ãã¾ãã
å½æã¯å½¼ã¨èªåã¯å ¨ç¶å¥ã®æå±ã ã£ãã®ã§ãããç¾å¨ã¯åãé¨éã§åãã¦ãããããªããªScalaãAkkaã使ã£ã¦ããã®ã§ããããªããã®ã§ãã
大ä½æãåãããã¦ãyohhatuããã¨åæ§ã«ç§ã®ã¨ã³ã¸ãã¢äººçã«å¤§ããªå½±é¿ãä¸ãã@kawasima ããã¨åºä¼ãã¾ãã 確ãã社å ã®ã¢ã¼ããã¯ããéãã¦ã¤ãã³ãããããã¨ãããã¨ã§ãç§ã¯è¥ææ ã§å¼ãã§ãããã¾ããã
å½æSIerãªã¯ã³ã³èª¬ã®å ¨çæã§ãèªèº«ã®ãã£ãªã¢ã«æ©ãã§ããææã§ãããã¾ãããï¼ä»ã§ãæ©ãã§ãã¾ããã©ãï¼ï¼ DevLOVE Xã®å貫ããã® ã»ãã·ã§ã³ ã§ããã£ãéããããã¸ã¡ã³ãã®ä¼ç¤¾ãããã¸ã¡ã³ãåéã®ææã§ãå 輩ãä¸å¸ã®ä»äºã£ã·ããè¦ã¦ãå ¨ç¶æ¥½ãããã«æãã¾ããã§ããã
ãããªãªããkawasimaããã¯ãã³ãã³æ¬å½ã«æ¥½ãããã«ç¤¾å ã·ã¹ãã ãHackãã話ãï¼Felicaãã¼ãã§Suicaãèªã¿åã£ã¦èªåã§çµè²»ç²¾ç®ããä»çµã¿ã¨ãï¼ããkawasima/virn: vim clone (U.S.O) ãªã©ä½ã£ãOSSã®è©±ãããã¦ãã¾ããã(ããï¼Emacsæ´¾ã ããªâ¦)
ãã®å§¿ãã¢ã¤ã¢ã¤ãã¦ããèªåã«ã¨ã£ã¦æ°é®®ã§ãè¡æçã§â¦
ãããèªåã«ã¨ã£ã¦ã®ãè³ã®ãã¬ã¼ããå£ããåºä¼ãã ã£ãã®ã ããã¨æãã¾ãã
ãããã家ã§åå¼·ãããã³ã¼ããæ¸ãããããããã«ãªãã¾ãããã社å ã§Rubyã®åå¼·ä¼ãéãããããã¾ããã 社å¤ã ã¨ãDevLOVEãã¢ã¸ã£ã¤ã«çéã®ã³ãã¥ããã£ã«ããåå ãã¦ãã¾ããã
ããããä»äºé¢ã¯æã£ãããã«ãã£ã¦ããããããããAgile or dieã¿ãããªâ¦ã
ã³ãã¥ããã£ã«åå ããããæ¬ã§èªãã§åå¼·ãããã¢ã¸ã£ã¤ã«éçºãã¹ã¯ã©ã ãããããï¼ãã©ä¼ç¤¾ããçµç¹ããã客ããããè²ã ä¸æºãæºããã°ãã°ãè¨ã£ã¦ããææã§ããã
å¤ã®ä¸çã¨èªç¤¾ã¨ã®ã®ã£ããã«è¦ããã ããåä¾ãçã¾ããã¨ãããã¨ããããå¤é¨ã®ã³ãã¥ããã£ï¼ç¹ã«ã¢ã¸ã£ã¤ã«ãã¹ã¯ã©ã ï¼ãåå¼·ä¼ããè·é¢ãç½®ãããã«ãªãã¾ããâ¦Javaçéã«ã¯é¡ãåºãã¦ããæ°ããããªï¼ï¼
社å ã§ã¯åå¼·ä¼ï¼ãç¶ç¶çã«ãã£ã¦ãã¦ãæ¯é±éææ¥ã®æ7:30ããã¹ã¿ã¼ããã¯ã¹ã§æ¬ãèªãã ãã³ã¼ããæ¸ããããã¦ãã¾ããã @_siosioããã@syobochimã@uggdsã¨ä¸ç·ã«ãã£ã¦ãããã©ãsyobochimã¯ããã£ã¡ã ãå¯åãã¦å± ãªãã£ããªã¼ï½
ããããããããã¯IntelliJ IDEAã®ä½¿ãæ¹æãã£ãããããã¸ã§ã¯ãã®èª²é¡ã®ç¸è«ã«ä¹ã£ã¦ããã£ããâ¦æ¬å½ã«åå¼·ã«ãªãã¾ãããããããããã¯ã½ããã¦ã§ã¢ã¨ã³ã¸ãã¢ã¨ãã¦ã®ã¡ã³ã¿ã¼ã¨ãããã師å ã¨ããããããªæãã§ããã
ããããããã¤ãéçºããã¸ã§ã¯ããçµé¨ãã2016å¹´é ã«æ¥æ¬åã®ãã¤ã¡ã³ããµã¼ãã¹ã®éçºã«åç»ãã¾ããããããã¾ã大å¤ã§ãçä¸ãããè¡çªãããããªããéããã¦ãã¾ããã
ãã®æãããªãããªããªããªããããã¬ãã·ã£ã¼ãã¹ãã¬ã¹ãæããªããä»äºããã¦ããã®ã§ãããçä¸ã®ç«æ¶ãã§å ¥ã£ã¦ãããããã¼ã¸ã£ã¼ã«ã俺ã¯æè¡ã®ãã¨ããããªããã©ããåãæè¡åãé«ãã®ã¯ãããããåãä¿¡é ¼ãã¦ä»»ããããã大å¤ã ãã©é å¼µã£ã¦ããã責任ã¯ä¿ºãåããããçãªãã¨ï¼ãã¥ã¢ã³ã¹ã¯éãããï¼ãè¨ããã¦ãä¸æ°ã«èª²é¡ã«éä¸ã§ããããã«ãªãã¾ããããããããã¸ã¡ã³ãã ãªã¼ã¨æã£ãåä½é¨ã§ãããã
ãã®ä¸å¸ã¨ã¯ãã®å¾ãããã¤ãä¸ç·ã«ä»äºãããä»ãã¡ããã¡ããä¸ç·ã«ã©ã³ãã«è¡ã£ã¦éè«ããã仲ã§ããããããåå¨ã¯æ¬å½ã«ãããããã§ãã
Iããè¦ã¦ãã¼ï¼ï¼¼(^o^)ï¼
ã¡ãªã¿ã«ãã®ã·ã¹ãã ã¯ãå¤ãã®ååã«å©ãããã¦ç¡äºãªãªã¼ã¹ãã大ããªé害ããªãä»æ¥ã¾ã§æ¥ã¦ãã¾ãããã¶ãã
ãã®å¾ã社å ãã客ãããã¢ã¸ã£ã¤ã«éçºãããã¨ããæ©éãé«ã¾ã£ã¦ããããã§ãiOSã¢ããªéçºãã£ããã¹ã¯ã©ã ãã¹ã¿ã¼ãã£ãããE2Eã®ãã¹ãå°å ¥æ¯æ´ããããã¹ã¯ã©ã ã®å°å ¥æ¯æ´ãã£ããâ¦è²ã ãã£ã¦ãã¾ããã
ããããã°ãèªå®ã¹ã¯ã©ã ãã¹ã¿ã¼ã®ç ä¿®ãä¼ç¤¾ã«è²»ç¨ãåºãã¦ããã£ã¦åãããã¦ããã£ãã®ããã®ææã§ãããæ±ç«¯ããã®ç ä¿®ãé ã¶ãæ®´ãããæãããã£ã¦æé«ã ã£ããªã¼ã
å»å¹´ãä»å¹´ã¯å ¨ç¤¾ãã°ã«ã¼ãä¼ç¤¾å ¨ä½ã®ãµã¼ãã¹éçºããã¾ãè¡ãããã«ãã¹ããæ½çãä¼ç»ãææ¡ããè¨ç»ãæ¨é²ããããã¦ãã¾ããã ä¸å¸ã«ãæµã¾ãã¦ãã¨ã³ã¸ãã¢ã¨ãã¦ãããã¼ã¸ã£ã¼ã¨ãã¦ãã人éã¨ãã¦ãå°æ¬ã§ãããã¹ã®ä¸ã§åãã¦ãã¾ãã
è¦åº§ãä¸ããè¦åº§ãä¸ããã¨ä»äººããè¨ãããã®ã¯å¥½ããããªãã®ã§ãããè¦åº§ãä¸ãã£ããªã¼ã¨æã2å¹´éã§ããã
å人çã«ã¯ãè¦åº§ãä¸ããã ãã§ãªãä¸ãããï¼ä½ãªãå·¦å³ã«ãï¼ã解å度ãä¸ãããä¸ãããã§ããã®ãè¯ããªã¨æã£ã¦ãã¾ãã
10å¹´â¦è²ã ããã¾ããããæ¯ãè¿ã£ã¦ã¿ãã¨äººã«æµã¾ãã10å¹´éã§ããã ããã¯ãã®ä¼ç¤¾ãããªãã¨å¾ãããªãã£ã財ç£ã ã¨æãã®ã§ãæ¬å½ã«è¯ãä¼ç¤¾ã«å ¥ç¤¾ããã¨æã£ã¦ãã¾ãã
ããããã®10å¹´
å½¹è·ã«ä¸ãã£ã¦éããªãã®ã§ãã¾ã ã¢ã¤ã¢ã¤ãã¦ããé¨åãæ£ç´ãã£ãããã¾ãã ã³ã¼ããã¾ã ã¾ã æ¸ãããæ°æã¡ãããã¤ã¤ï¼æè¿å ¨ç¶æ¸ãã¦ããªãï¼ãããã¸ã¡ã³ãã«ãèå³ããããçµç¹ããã¸ã¡ã³ãã«ãèå³ãåºã¦ãããããã¦ãããã ãããã管çãã¿ãããªèª°ããã£ã¦ãåããããªä»äºã¯ããããªãã®ã§ãããã¯æèãã¤ã¤ä»äºããã¦ãããããªã¨æã£ã¦ãã¾ãã
10å¹´â¦é·ãã®ã§ãã½ããã¦ã§ã¢ã¨ã³ã¸ãã¢ããã¶ã¤ãã¼ããã¼ã±ã¿ã¼ãå¶æ¥â¦å ¨å¡ããäºãããªã¹ãã¯ããããã楽ãããå¦ç¿ããªãããéã稼ãããè²°ãããããªçµç¹ã¨ãä½ãããè¯ããªã¼ãªãã¦æã£ã¦ãã¾ãã
ãã®10å¹´ã®éã«ããã¼ã¸ã£ã¼ãã¨ã³ã¸ãã¢ã®ä¸¡æ¹ãè¡ã£ããæ¥ãããå¥ã®ãã¨ãã£ããã§ãããé¢ç½ãããªã¼ã
ã¾ã10å¹´é·ãã§ããããã
10å¹´åã«ç¾å¨ã®èªåãæ³åã§ãã¦ããªãã£ããããã®å 10å¹´ãã©ããæ³åãã¦ããªãã£ãå ´æã«åããã ããããããã®æã ã§åãåã£ã¦ãããããªãããªã¨æã£ã¦ãã¾ãã
2æ¥ç®ãéä¸ã®ã¯ã¼ã¯ã§æ¸ããããã¾ã§ã®10å¹´ã¨ããããã®10å¹´â
DevLOVE X
èªç¤¾ã®è¥æãä½äººãï¼ãããã£ãåå¼·ä¼ã«æ¥ãã®åãã¦ã£ã¦äººã大åï¼æ¥ã¦ããã®ã§ãOBã ã£ããç¥äººãç´¹ä»ããããã¾ãããã話ãããã¦ãããã¿ãªããããããã¨ããããã¾ããï¼
ã»ãã·ã§ã³ã¯æ¥½ãããããªï¼ä½ããæã£ã¦å¸°ããããªï¼ä½ãæã£ã¦å¸°ãã¦ãããè¯ããªã¼
ä¹ ã ã®DevLOVEã ã£ãã®ã§ãä¹ ã ã®äººã¨è©±ãããã§ãã¦æ¥½ããã£ãã§ããèªåã3ã4å¹´ç®ã®æã«ç¥ãåã£ã人ãçµæ§ãã¦ããã®æããã®èªèº«ã®æé·ãå®æã§ããã®ãã¨ã¦ãè¯ãã£ãã§ãã
DevLOVEã«æ¥ãã¨è²ã ãªäººã¨è©±ãããã§ããã®ã§ã話ããã¨ã§èªåã®æ¬å¿ã ã£ããèããæ´çããã¾ããã
æã¯ä¼ç¤¾ã®ãã¨ã¨ãçµç¹ã«å¯¾ãã¦ä¸æºã ã£ããæç´ãå¤ãã£ããã©ãä»åã¯ç´ ç´ã«ãä»äºæ¥½ããã§ããï¼ãã¨ããåãã«ã楽ããã§ãï¼ãã¨è¿ãã¾ããã ãããå人çã«åãè¯ãã£ãã§ãã
10å¹´ããã¦ä¿¡é ¼è²¯éãå¾ã¦ãè£éãä¸ããããããã«ãªã£ã¦ãèªåã§ä»äºããã©ã¤ããã¦ããããã楽ãããã¨è¨ããé¨åãããã¨æã£ã¦ãã¾ãããçµç¹ã®é°å²æ°ã ã£ãããä¼ç¤¾ã®å¶åº¦ã ã£ãããè¯ããªã£ã¦ãã¦ããã®ã§ãç´ ç´ã«ãè¦ãã§ããä¼ç¤¾ã«ãªã£ã¦ãã¾ããã
OBã§ããå貫ããã«ãä¼ãããã¦å¬ããã£ãã
å貫ããã«æ¨æ¶ã§ããããT社è¯ããªã£ã¦ãã¦ã¾ããï¼è¸ãå¼µã£ã¦å§ããããããã«ãªãã¾ããï¼ï¼
— ã¦ãã¦ãð (@tenten0213) 2019å¹´6æ23æ¥
ã¨ä¼ããããã®ã§ã¨ã¦ãææ ¨æ·±ãã
â¦æè¿æ¡ç¨ã«é¢ãã£ã¦ãã¾ãã¦ãèå³ãããæ¹ã¯ãé£çµ¡ããã ããã°ã¨â¦ï¼ï¼ï¼ï¼
æå¾ã¯å®£ä¼ã§ãããã
ä¹ ã ã®DevLOVEæé«ã§ããï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼
å½¹è·ã«ãªã£ã
2019å¹´4æããææ ¼ãã¦ãå½¹è·ã«ãªãã¾ããã â¦å½¹è·ã£ã¦ãªãã ï¼
ç¹ã«ç®¡çè·ã®ãã¨ãæã
ãªãã»ã©ï¼
ã¡ãªã¿ã«ãå½¹è·ã«ãªã£ã¦ãç¹ã«ãããã¨ã¯å¤ãããªãâ¦ã¨æãã
å¤æ 管çã¨ãäºç®ã®ç®¡çã¨ããã¡ã³ãã¼ã®è©ä¾¡ã¨ã追å ã«ãªãæãã
ä¸å¿æ¨©éã¨ãã¯å¢ãã¦ããã¯ãã
ä¸å¿å½¹è·ãªã®ã§æ®æ¥ä»£ãã§ãªããªãã
ãã®ä»£ããï¼è£éå´åå¶ã«ãªããåºæ¬çµ¦ãã¬ãã¨ä¸ãã£ãã½(=´â½`=)ï¾
ãã¨ãã¨ã³ã¢ã¿ã¤ã ç¡ãã®ãã¬ãã¯ã¹ã ã£ãã®ã§ãåãæ¹ã¯ãã¾ãå¤ãããªããã
課é·ã¨ããããã£ããã®ã§ã¯ãªãã®ã§ãæ確ã«é¨ä¸ã£ã¦ãã®ãåå¨ããããã§ããªãã
ã¨ããããåãå½¹è·ã¨2人ã§ä»äºãã¦ããã
ãããªæãã ãã©ã楽ããåããçµç¹ã«ãããããæé·ã§ããçµç¹ã«ãããããã¡ããã¨ä¼ç¤¾ã«è²¢ç®ãã¦ããçµç¹ã«ãã¦ããããã
è²ã
ããã°ã£ã¦ãããã
以ä¸ãèªãã§è¯ããªã¨æã£ãã®ã§æ¸ããã¨ãã¦ãããã©ããªããªãæ¸ãçµãããªãã
é å¼µã£ã¦æ¸ãâ¦æ¸ãã£ããæ¸ãã
ææ ¼ç¥ãã«å¾è¼©(å
)ããæ¬ãããã£ãã
å¬ããã¦æ³£ããããã
ããåºæ¥ãå¾è¼©ã«æ¥ããªãããç²¾é²ãããã æ¬èªãã§åå¼·ãã¾ãã
æ人çºéçè«ã«ããè½åã®æé· ãã¤ãããã¯ã¹ãã«çè«ã®å®è·µçæ´»ç¨æ³
- ä½è : å è¤æ´å¹³
- åºç社/ã¡ã¼ã«ã¼: æ¥æ¬è½çåä¼ããã¸ã¡ã³ãã»ã³ã¿ã¼
- çºå£²æ¥: 2017/06/15
- ã¡ãã£ã¢: åè¡æ¬
- ãã®ååãå«ãããã°ãè¦ã
ããã¡ã°ãããããGit&GitHubã®ææ¬ãã¯ã¿ã¤ãã«éãããããã«æº¢ãã¦ãã
å®è³ç¥ããã横ç°ããããåºçããã§ã¨ããããã¾ãï¼
å ååã§ããå®è³ç¥ãã(@syobochim) ããé ããã®ã§ãèªãã ææ³ãæ¸ããã¨æãã¾ãã
ææ³
ã¿ã¤ãã«ã« ãã¡ã°ããããã ã表ç´ã« ã¯ããã¦ã§ããæ«æãã¾ããã ã¨æ¸ããã¦ããã®ã§ãããè¨èã®éãã ã㪠ãããããããã æ¸ããã¦ãã¾ãã
ç®æ¬¡ã¯ä»¥ä¸ã®éãã§ãGitãã©ããã£ããã®ãªã®ãããªãå¿ è¦ãªã®ãããå§ã¾ããGitã®ã¤ã³ã¹ãã¼ã«ãåºæ¬çãªæä½ãGitHubã使ã£ãå ±åä½æ¥ã®ããããã¾ã§æ¸ããã¦ãã¾ããç§èªèº«ã¯æ®æ®µããGitãå©ç¨ãã¦ããããããµã¯ãµã¯èªã¿é²ãã¦4æéã»ã©ã§èªã¿çµãã¾ãããGitãåãã¦ä½¿ãã¨ãã人ãæä½ããªããèªã¿é²ãã¦ããæãã2æ¥ã¯ããããªãã§éçºã«åå ã§ããããã«ãªãããªãã¨ãã£ãããªã¥ã¼ã æã§ãã
- Chapter 1 Gitã®åºæ¬ãå¦ã¼ã
- Chapter 2 Gitã使ãæºåãããã
- Chapter 3 ãã¡ã¤ã«ããã¼ã¸ã§ã³ç®¡çãã¦ã¿ãã
- Chapter 4 GitHubã®ãªãã¸ããªããã½ã³ã³ã«åå¾ããã
- Chapter 5 ãã©ã³ãã使ã£ã¦ãã¡ã¤ã«ãæ´æ°ããã
- Chapter 6 è¤æ°ãã©ã³ããåæã«ä½¿ã£ã¦ãã¡ã¤ã«ãä½æ¥ããã
- Chapter 7 ã³ã³ããªã¯ãã«å¯¾å¦ããã
- Chapter 8 GitHubãããã«ä½¿ãããªãã
ã©ã"ãããã" ã®ã
å ¨ä½ãéãã¦ããã£ããã£ãå³ãå¤ã使ããã¦ãã¾ããGitâ¦ã¨ãããDVCSã¯ç¹æã®ã¨ã£ã¤ãã«ãããããããã«æãã®ã§ãããå³ã使ããã¨ã§ãã¨ã¦ãããããããä¼ãã¦ãã¾ãã以ä¸ã®ãªã³ã¯ãã試ãèªã¿ãã§ããã®ã§ãã©ããªæããæ°ã«ãªãæ¹ã¯èªãã§ã¿ãã¨è¯ãã¨æãã¾ãã
- 試ãèªã¿ https://impress.tameshiyo.me/9784295005247
æ¬æã§ã¯åºæ¬çã«CUIã«ããæä½ã§å¦ã¶ãã¨ãæ¨å¥¨ãã¦ããã®ã§ãããã©ããã¦ã馴æããªã人ã«å¯¾ãã¦GUIã®å©ç¨ã«ã¤ãã¦ããã©ãã¼ãã¦ãã¾ãã
å人çã«è¯ããªã¨æã£ãã®ã 大åãªã®ã¯ãã¼ã«ã§ã¯ãªããGitã§ä½ãã§ããã®ããç解ããå®éã«ãã¼ã¸ã§ã³ç®¡çãã§ããç¶æ
ã«ãªããã¨ã§ãã
(p.66) ã®ä¸æã§ããGitããã¼ã«ã ãã¨ããããã³ãã¯ããã¦ããã¦ãæ¬è³ªçã«å¤§åãªç¹ãå¦ãã§ã»ããç¹ã表ãã¦ããããã«æãã¾ããã
CUIã«é¢ãã¦ã¯ã pwd
ã mkdir
ãªã©åºæ¬çãªã³ãã³ãã¾ã§ä¸å¯§ã«èª¬æãã¦ãããæ«æã®ããããç¡ãæãã§ãã
éã«ãæ®æ®µã½ããã¦ã§ã¢éçºãªã©ãè¡ã£ã¦ãã人ã«ã¨ã£ã¦ã¯åé·ã«æããããããã¾ããã
ãã®ä»ãèªã¿é²ãã¦ããã¨äººæ°è¬å¸«(ï¼ï¼)ã®ãäºäººã«è¤ããããï¼ã¿ã¤ãã³ã°ããããæé·ãæããããç¹ãè¯ããªã¨æãã¾ããã
(çç¥)⦠å°ããã¤ãã§ãçå®ã«ãã§ãããã¨ãå¢ãã¦ãã¾ããï¼
ãªã©ã
ç¦ç¹ãçµã£ã¦å®è·µçãªå 容ãã³ã³ãã¯ãã«ã¾ã¨ãã¦ãã
ããã¯å人çã«æãããã¨ãªã®ã§ãããããã¦å 容ãããªãçµã£ã¦ããããã«æãã¾ãããæ¬ã§ç´¹ä»ããã¦ããã³ãã³ãã«ã¯ãtagã®ä½æããrevert, rebase(GitHubã®ãã¼ã¸ã®ãªãã·ã§ã³ã§è»½ã触ãã¦ããç¨åº¦)ãstashãªã©ã¯å«ã¾ãã¦ãã¾ããããã®ä»£ãããåºæ¬çãªå 容ãä¸å¯§ã«ã230ãã¼ã¸ç¨ã®ããªã¥ã¼ã (ãããå³ããã£ããã£ãããªãå¤ã)ã§ç解ã§ããããã«ã¾ã¨ã¾ã£ã¦ãã¾ãã
ä¸è¨ã§è¡¨ãã¨ãã½ããã¦ã§ã¢éçºã«å¿
è¦ã¨ãªãGitã®åºæ¬çãªæä½ã»ç¥èãã³ã³ãã¯ãã«ãä¸å¯§ã«èª¬æãã¦ããæ¬
ããªã¨æãã¾ãã
Gitãå©ç¨ããéçºããããã¨ãç¡ã人ããæ°äººç ä¿®ãªã©ã«é©ãã¦ããããã«æãã¾ããã ã¾ããé°å²æ°ã ãç解ãã¦Gitãå©ç¨ãã¦ãã人ã«ã¨ã£ã¦ããç解ãæ·±ããããè¯ãæ¬ã ã¨æãã¾ãã
ã¾ã㯠ãã¡ã°ãããããGit&GitHubã®ææ¬ ãèªã¿ãPro Git ãä»ã®Gitã®æ¬ã§æ´ã«æ·±ãå¦ã¶ã®ãè¯ãããã§ãã
å°ãæ°ã«ãªã£ãç¹
Lesson 21 Gitã§ç®¡çããªããã¡ã¤ã«ãè¨å®ãã¾ããã
㧠.gitignoreãã¡ã¤ã«ã¯ãã¼ã«ã«ãªãã¸ããªé
ä¸ã§ããã°ã©ãã«ç½®ãã¦ãããã§ããã.gitignoreãã¡ã¤ã«ãé
ç½®ããããã£ã¬ã¯ããªé
ä¸ã®ãã¹ã«ããå¹æãããã¾ããã
(p.104) ã¨æ¸ããã¦ãã¾ããã以ä¸ã®ããã«ã¦ã¼ã¶ã¼ã®ãã¼ã ãã£ã¬ã¯ããªã«é
ç½®ããã¨ãã©ã®ãã¼ã«ã«ãªãã¸ããªé
ä¸ã§ãæå¹ã«åä½ãã¾ãã以ä¸ã§ã¯ .gitignore_global
ã¨ãããã¡ã¤ã«ãä½ã£ã¦ããã®ã§ .gitignore_global
ã®æ¹ãè¯ãã®ããããã¾ãããâ¦
$ cat ~/.gitignore *.swp *.swo *.vim .idea .iml files.list tags .netrwhist *.log .DS_STORE node_modules $ git status On branch master Your branch is up-to-date with 'origin/master'. nothing to commit, working tree clean $ touch hoge.log $ git status On branch master Your branch is up-to-date with 'origin/master'. nothing to commit, working tree clean
ããã¼ã¡ãã¨ã®æãåº
ããã¼ã¡ãã¨ã¯ã2015å¹´ã®ä»é ã®å£ç¯ã«åãããã¸ã§ã¯ãã§åãã¦ãã¾ããã
ãã®ããã¸ã§ã¯ãã¯æ±ºæ¸ãµã¼ãã¹ã®éçºããã¸ã§ã¯ãã§ãç§ã¨ããã¼ã¡ãã¯ã¢ããªã±ã¼ã·ã§ã³ã®åºç¤ãã¼ã ã®ãããªé¨éã«æå±ãã¦ãã¾ããã
ã¢ããªã±ã¼ã·ã§ã³ã主ã«éçºããé¨éã¯ä»ã¾ã§Subversionããã£ã¨å©ç¨ãã¦ãã¦ãããã¯ã¬ã¸ããã«ã¼ãã®åºå¹¹ã·ã¹ãã ãªã©ã®åºãé åããã£ã¨æ å½ãã¦ãã人ãã¡ã§ãããå½ç¶Gitãå©ç¨ãããã¨ããã人ãªã©çç¡ã§ããããã¦ã20人以ä¸ããéçºè ãä¸æã«éçºãã¹ã¿ã¼ãããªããã°ãããªããããªç¶æ ã§ããã
ããããããã¸ã§ã¯ãã®ã³ã³ããã¹ãã¨ãã¦ã
- åæã«éçºãé²ãæ¥ç¶å
- æ°å¤ãå ¥ãã§ãããä»æ§å¤æ´
- 並è¡ãã¦é²ãç®çã®ç°ãªããã¹ã
ãªã©ãªã©ã®è¦å ããããæè»ãªæ§æ管çãå¿ è¦ã ã¨å¤æããæãåã£ã¦Gitãæ¡ç¨ãã¾ããã
å½ç¶åãã¦Gitã使ã人ã20人ãããã®ã§å°å ¥ã¯å®¹æã§ã¯ç¡ãã®ã§ãããããã¼ã¡ããä¸å¯§ãªã¬ã¤ããä½ã£ã¦ããããããã§å¤§ããæ··ä¹±ããªãéçºãé²ãããã¨ãã§ãã¾ããã
ããã¸ã§ã¯ãã®ç¶æ³ã«åãããã©ããã©ã³ããä½ãããã©ã¤ãã©ãªã®ãã¼ã¸ã§ãã³ã°ãã©ãããããä¸ç·ã«èãã¦èª¬æããã®ã¯è¯ãæãåºã§ãã
ãæ¥ãããã
— ããã¼ã¡ã (@syobochim) 2018å¹´12æ21æ¥
ãã£ãããã¨ããï¼ï¼ï¼
— ããã¼ã¡ã (@syobochim) 2018å¹´12æ21æ¥
çµæ§ãªå¤§ä½ã§ãSubversionãã使ã£ã¦ããªãã£ãï¼VSSã使ã£ã¦ãããããããã©ï¼éçºé¨éã®ãããã¼ããã¼ããã¼ããã大ãã¦å°ããªãã£ããããªã¼ã
— ã¦ãã¦ãð (@tenten0213) 2018å¹´12æ21æ¥
ã¢ãã¢ããæ´»ãã¦ãã®æ¬ããããã ãããªã
å½ææ¸ããè³æãã©ãæ¸ãããå½¼ãã«ç解ãã¦ããããããããããæ©ã¿ãªããä½ã£ããã ã¨æãã¾ãã ä»ååºçãããæ¬ãèªã¿ãå½æä¼¼ããããªå³ãæ¸ãã¦ãããªã¼ã¨æãåºããããã¾ããã
ãã®æã®çµé¨ãä»ã«æ´»ãããã¦ããã®ã ãããªã¨ãææ ¨æ·±ãèªã¾ãã¦ããã ãã¾ããã
â¦â¦
ããã§ãã®è³æãå°å°ã§ããï¼ï¼
ãã¡ã°ãããããGit&GitHubã®ææ¬ ã渡ãã°ããã§æ¸ãã®ã§ã¯ï¼ï¼ï¼ï¼
ãããGitãããã¾ããããªãã¦è¨ãããªããÙ©(à¹`^´à¹)Û¶
è¯ãæ¬ãæ¸ãã¦ããã¦ãããã¨ã¼ï¼ï¼
ã·ãªã³ã³ãã¬ã¼å¼ æå¼·ã®è²ã¦æ¹ â 人æããã¸ã¡ã³ãã®æ°ãã常è 1 on1ãã¼ãã£ã³ã° ãèªãã
ããã§ãã
- ä½è : ä¸å¤è©ä¸
- åºç社/ã¡ã¼ã«ã¼: ãããåºç
- çºå£²æ¥: 2017/09/13
- ã¡ãã£ã¢: åè¡æ¬ï¼ã½ããã«ãã¼ï¼
- ãã®ååãå«ãããã°ãè¦ã
æè¿ããã¼ã ã®ããã¸ã¡ã³ããè¡ã£ã¦ãã¾ãã
ä½å¹´ãåããã¡ã³ã¿ã¼ãä¸å¸ã¨1 on 1ããã¦ãããã®ã®ãåããå´ããçµé¨ããªãã£ãã®ã§ä½ç³»çã«å¦ã¶ããã«èªãã§ã¿ã¾ããã
1 on 1ã¯å人ã«ç¦ç¹ãå½ã¦ã対話
æ®æ®µããã¸ã§ã¯ããéãã¦åãã¦ããã¨ãåé¡è§£æ±ºã®ããã®æã¡åããããã¼ã ã¨ãã¦ã®å¯¾è©±ãã¡ã¤ã³ã¨ãªããå人ã¨ã®å¯¾è©±ã¯æ¥å¸¸çãªéè«ãããããããã¾ããã
1 on 1ã§ã¯ãå¿
ç¶çã«1 対 1ã«ãªãã®ã§ãå人ã«ç¦ç¹ãå½ã¦ã対話ã«ãªãã¾ãã
1 on 1ã«ãã£ã¦ãã©ã¤ãã¼ãã®ç解ãå¿èº«ã®ç¶æ ã®ææ¡ãã¢ããã¼ã·ã§ã³ã¢ãããªã©ãéãã¦ä¿¡é ¼é¢ä¿ãç¯ããã¨ãã§ãã¾ãã ã¾ããæé·ã®æ¯æ´ãè¡ãå ´ã«ããªãã¾ãã
1 on 1ã§ãªã«ã話ãã®ãï¼
æ¬ã§ã¯ãé¨ä¸ã¨ã®é¢ä¿(ã¹ãã¼ã¸)ãç¶æ³ã«ãã£ã¦è©±ããã¼ããå¤ãããã¨ãæ¸ããã¦ãã¾ãã ããã¸ã§ã¯ãã®éå§æãåæã®ç®æ¨è¨å®æãè©ä¾¡æãªã©ã§ãã話ãã¦ããªããªã¨æãé ç®ãå¤ããæèãã¦ããããã¨æãã¾ããã
ä¿¡é ¼é¢ä¿ã¥ããã¹ãã¼ã¸
- ãã©ã¤ãã¼ãç¸äºç解
- å¿èº«ã®å¥åº·ãã§ãã¯
- ã¢ããã¼ã·ã§ã³ã¢ãã
æé·æ¯æ´ã¹ãã¼ã¸
- æ¥åã»çµç¹èª²é¡ã®æ¹å
- ç®æ¨è¨å® / è©ä¾¡
- è½åéçº / ãã£ãªã¢æ¯æ´
- æ¦ç¥ã»æ¹éã®ä¼é
å ·ä½çãªé²ãæ¹
- å®æ½ããç®çãå 容ãåæãã
- ã¹ã±ã¸ã¥ã¼ãªã³ã°ãã
å®ä¾å
ããªã- å®ä¾ã«ãªãã¨"ãã¤ãã¨åã"ã¨ãããªãã«ãªããã¡(å®æçã«è¡ãã®ã¯å¤§äº)
- ã¤ãã³ãã¨ãã¦æãã
- å ´æã決ãã
- ãã¤ãåãå ´æãããªãã¦ãè¯ã
- è¿ãã®ã«ãã§ã¨ãã§ãè¯ãããï¼
- æºåãã
- ãèåãªã©ããã¨ãªã©ãã¯ã¹ãã
- ä»ç®ããã³
- ã¢ã¸ã§ã³ãã¨æéå²
- ååã®1 on 1ã®ã¡ã¢
ç¶ç¶ãããã¨ã大äº
å¿ãããé¢åããªã©çç±ã¯ãããã§ãããã¾ãããç¶ãããã¨ã大äºã ã¨æ¸ããã¦ãã¾ãã åå¹´ãããã¯ã ãºã ãºãã(ï¼)ãããªãã¨ãæ¸ããã¦ããã®ã§ãã¾ãã¯ç¶ç¶ãã¦ãããã¨æãã¾ãã
æ¬ãèªãã§ããããã¨æã£ããã¨
æ¬ã§ã¯Evernoteã使ã£ã¦ã¡ã¢ãæ®ããããªãã¨ãæ¸ããã¦ãã¾ããããèªåãªãã«ä½¿ãããããã©ã¼ãããããã¼ã«ã模索ãããã¨æãã¾ããã
ãã¼ã ã®ç°åã¯ãããªãã«ããã®ã§ããã1 on 1ã®è¨é²ãæ®ã£ã¦ããã°æ§ã ãªé¢ã®å¼ãç¶ãã«ãæç¨ããã§ãã
ã¾ã¨ã
æ¬æ¸ã«ã¯ "ãªã1 on 1ã大äºãªã®ã"ã"1 on 1ã§ä½ã話ãã®ã"ã"1 on 1ãã©ãé²ããã®ã"ãå¹³æãªè¨èã§ããããããæ¸ããã¦ãã¾ããã ã¯ãã㦠1 on 1ãå®æ½ãã人ã«ã¯ããããã§ããä¸åã ã¨æãã¾ãã
AWS Lambdaã®COBOLãµãã¼ãã«ã¤ãã¦å°ã調ã¹ã¦ã¿ã
AWS re:Invent 2018ã§ãLambdaã§Rubyã使ããããã«ãªã£ãã¨çºè¡¨ãããã¾ããã åããã¦ãã«ã¹ã¿ã ã©ã³ã¿ã¤ã ã¨ãã¦ããããããã°ã©ã è¨èªãå©ç¨ã§ããããã«ãªãããã§ãã
ã¾ããErlangãPHP ãCOBOLã®ã©ã³ã¿ã¤ã ããã¼ããã¼ã«ããæä¾ããããã¨ãçºè¡¨ããã¦ãã¾ãã
â¦ãããCOBOLã§ãã
éè¦ããã®ãï¼ãããé¢ç½ãããï¼ã©ãã ããâ¦
SIerã¨ãã¦ã¯ã©ããã¦ãæ°ã«ãªãCOBOLã
æ°åã§éèç³»ã®é¨éã«é å±ãããæ°äººç ä¿®ã§å¦ãã COBOLã3å¹´ç®ãããã¾ã§ã¯æ¸ãã¦ããCOBOLã
ã©ãããã¼ããã¼ã¨ãã¦ã©ã³ã¿ã¤ã ãæä¾ãã¦ãã©ããªçããããã®ãæ°ã«ãªã£ãã®ã§çºè¡¨ããã¦ããä¼ç¤¾ã調ã¹ã¦ã¿ã¾ããã
COBOLã®ã©ã³ã¿ã¤ã 㯠Blu Age ã¨ããä¼ç¤¾ãæä¾ããããã§ãã
ã©ããªä¼ç¤¾ãªã®ããªï¼ã¨è¦ã¦ã¿ãã¨ãã¡ã¤ã³ãã¬ã¼ã ä¸ã§åãã¦ããCOBOLãPL / IãRPGãªã©ã§æ¸ãããã¬ã¬ã·ã¼ã¢ããªã±ã¼ã·ã§ã³ããã¤ã°ã¬ã¼ã·ã§ã³ã ã£ããè¿ä»£åããã®ãå¾æãªä¼ç¤¾ã®ããã§ãã
AWS Lambdaã§ã®COBOLãµãã¼ãã«ã¤ãã¦ã¯ã以ä¸ã«çããã¢ã¼ããã¯ãã£ã«ã¤ãã¦ã®èª¬æãæ¸ããã¦ãã¾ãã
çãã¨ãã¦ã¯ãã¡ã¤ã³ãã¬ã¼ã ä¸ã§åããã¦ããCOBOLãæ¸ãæãããã¨ãªããµã¼ãã¬ã¹ã¢ã¼ããã¯ãã£ã«ç§»è¡ãããã¨ãã§ãããããã«ããéç¨ã³ã¹ããå¤§å¹ ã«åæ¸ã§ããâ¦ã¨ã確ãã«ã¡ã¤ã³ãã¬ã¼ã ã®ç¶æè²»ç¨ããªããªãã°å¤§å¹ ã«ã³ã¹ãæ¸ã§ãããã§ããå®éã«ç§»è¡ããã«ã¯ãã£ã¨è¤éã§ã¯ããã¨æãã¾ãããããã¯ããã¨ãã¦ã
ã©ããã£ã¦åããã®ãã¨ããã¨ãçºè¡¨ãããAWS Lambda Layersæ©è½ãæ´»ç¨ããJava 8 ã©ã³ã¿ã¤ã ã®ä¸ã«COBOLãå®è¡ããããã®ã©ã³ã¿ã¤ã ã©ã¤ãã©ãªãæä¾ãããã¨ã®ãã¨ã
â¦ãï¼ãããCOBOLãã³ã³ãã¤ã«ãã¦JVMä¸ã§åãããã«ãã¦ããããCOBOLâJavaã«ãã¦ããå®è¡å¯è½ãªå½¢ã«ãã¦ããããã§ã¯ï¼
ã ã¨ããã¨ãååèµ·åãé ãã¨ãã¡ã¢ãªä½¿ç¨éãå¤ãã¨ãJavaã¨åãå¾åãåºãã®ã§ããããã 使ããããã«ãªã£ãã試ãã¦ã¿ããã§ããã
Spring Fest 2018ã«åå ãã¦ãã¾ãã
Spring Fest 2018 ã«åå ãã¦ãã¾ããã
åå ããã»ãã·ã§ã³ã¯ä»¥ä¸ã®éãã§ãã
ãã¼ãã¼ããçµæ§çãä¸ãã£ã¦ããã®ã§ãããåä¾ãä¿è²åã«éã£ã¦ããè¡ã£ããéã«åããâ¦
- 決æ¸ã·ã¹ãã ã®å 製åã¸ã®æ - Springã¨PCFã§ä½ãã¯ã©ã¦ããã¤ãã£ããªã·ã¹ãã éçº
- å®éã®ããã¸ã§ã¯ãã§Springã¢ããªãKotlinã§éçºãã¦å¾ãæ°ã¥ãé
- Knative: Serving your Serverless Java Service on Kubernetes the 12-Factor way
- 500+ã®ãµã¼ãã¼ã§åãLINE Ads PlatformãããããSpring
- Spring Boot with Kotlin, functional configuration and GraalVM
- Micrometer/Prometheusã«ãã大è¦æ¨¡ã·ã¹ãã ã¢ãã¿ãªã³ã° ãã¤ãã¼ã¤ã³ã¿ã¼ãããåºåã·ã¹ãã ã§ã®å°å ¥äºä¾ã
ããããè´è¬ããææ³ãã
決æ¸ã·ã¹ãã ã®å 製åã¸ã®æ - Springã¨PCFã§ä½ãã¯ã©ã¦ããã¤ãã£ããªã·ã¹ãã éçº
èªèº«ã®ãã£ãªã¢ã¨ãã¦ãã¯ã¬ã¸ããã«ã¼ãã®åºå¹¹ã·ã¹ãã ã決æ¸ã·ã¹ãã ã«å¤ãæºãã£ã¦ããã®ã§ã¨ã¦ãèå³ããã£ãã»ãã·ã§ã³ã§ãã
å 容ã¨ãã¦ã¯ãéçºããã³ãã¼ã«ä»»ãããã ã£ãç¶æ ããã
- éç¨ä½æ¥ã®èªåå
- éçºåºç¤ã®æ´å(GitHub EnterpriseãSlackãConfluenceãJiraã®å°å ¥)
- ãµã¼ãã¹ç£è¦ã®å°å ¥(Elastic Stack)
- CIã®å°å ¥(Jenkins, Nexus, SonarQube)
- Spring BootãSpring Cloudã¸
ã¨èº«è¿ãªã§ããã¨ããããé²ããä½å¶ãå¢ãããªããæ¹åãé²ãã¦ããã¨ããåæ¯ãããå§ã¾ãã¾ããã æ£ç´ãããã¾ã§ã§ååããããªã£ã¦æãã ã£ãã®ã§ããããã®å¾ãã©ãããã©ã¼ã ã¨ã㦠Pivotal Application Serviceï¼PASï¼ ãæ¡ç¨ãConcourse CI ã§ãã«ããã¤ãã©ã¤ã³ã®æ§ç¯ãéçºç°å¢ã§ã¯å¸¸ã«CI/CDãå®è¡ãããProductionã¸ã¯ã¯ã³ã¯ãªãã¯ã§ãããã¤ãããã¨ããã¢ãã³ãªæ§æã¾ã§æã£ã¦ãã£ã¦ãã¦åãã§ããâ¦ããã³ãã¼ã«ä»»ããããã2,3å¹´ã§ããã¾ã§æ¥ãã£ã¦æãã¨ãã¨ã³ãã¼(SIer)å´ã®ç«å ´ããè¦ã¦è²ã æãã¨ãããããã¾ããã
è³æã§ããããããã£ãã®ã¯ãéçºããã¸ã§ã¯ãã®ä½å¶ã¨è²¬ä»»åçã£ã¦ç®æãã¢ããªã±ã¼ã·ã§ã³éçºè ã¯ã¢ããªã±ã¼ã·ã§ã³ã¨ãã¼ã¿ã¾ã§ãThe Twelve-Factor Appãå®ããã¨ãã£ã¦ã¨ãããæå¿«ã§ç解ããããã£ãã§ãã
ãã®ã»ãã
- Javaã®è¤æ°ãã¼ã¸ã§ã³ã§CIãå®æ½ãã¦ãã
- ãã¼ã¸ã§ã³ã¢ããåããå®æ½ãã¦ããã®ã§ããã¼ã¸ã§ã³ã¢ããããéã«å®å¿ãã¦ããããã(ãªãã»ã©ï¼)
- æ¬çªã®Javaãã¼ã¸ã§ã³ä»¥å¤ã§CIã失æãã¦ãã¦ãæ¬çªã®ãã¼ã¸ã§ã³ã®CIãéã£ã¦ããã°OKã¨ããå ´åããã¤ã³ã±ãç®æãç´ããã ããï¼(ããã«ãã ã¨æããã©åªå é ä½ãä½ããªããã¡ã«ãªãããã«æãã¦ãæ¾ç½®ãããªãã®ããªã¼ã¨ã)
- Javaã®ãã¼ã¸ã§ã³ã¢ããã«ã¤ãã¦ãã姿å¢è¯ãã
æ»ãã¦å®ã
ï¼ï¼
- JMeterã§ã®æ§è½ãã¹ããæ¯æ¥ç¶ç¶ãã¦å®è¡ãSlackã«ã¬ãã¼ããéãã®è¯ã
- AWSãªã©ã使ãã¨é£ããã(ã³ã¹ãé¢ãç³è«ãªã©ã§)
- ã¢ããªã±ã¼ã·ã§ã³æ§æã®ç« ã®ãããã¿ãåãã£ã
- ä»å çåºã«å½±é¿ãã§ãªãããã«ä½ãè¾¼ãã ãã¨ãããªã¼ã¨ã
- æ¥ç¶å å¤ãã¨å¤§å¤ã ããã¼ã¨ã
- 決æ¸æ©é¢ã¨ãç¹æ®ãª ãããã³ã«ã§ããã¨ãããããè²ã é¢åãè¦å´ãããã¨æããã ãã©ããããã¸ããèãããã£ããæ親ä¼åºãã°ããã£ãã¼
ãªã©ãªã©è²ã ææ³ãåºã¦ãã¦ãã¨ã¦ã楽ããã£ãã§ãï¼ ã¾ã æ°ã·ã¹ãã ããªãªã¼ã¹ãã¦ããªãã¨ã®ãã¨ã ã£ãã®ã§ããªãªã¼ã¹å¾ã«ã©ããªã£ããèãã¦ã¿ããã¨æãã¾ããã
å®éã®ããã¸ã§ã¯ãã§Springã¢ããªãKotlinã§éçºãã¦å¾ãæ°ã¥ãé
æè¿Androidã¢ããªãKotlinã§æ¸ãã¦ããããã®ã§(ãã£ã¡ãåå¿è )ãèå³ã®ãã£ãKotlinã®ã»ãã·ã§ã³ã¸ã
ã»ãã·ã§ã³ã¯ãSpringã¨Kotlinã®é¢ä¿(仲è¯ãï¼)ããKotlinã®ããããã¨Springå©ç¨æã®æ³¨æç¹ãSpring WebFluxã¨Coroutinesãããã®è©±ããSpringã®ã¢ããã¼ã·ã§ã³ãæ¸ãããKotlinã§ã®ãã¹ããã¨ãã£ãå 容ã§ããã
SpringãKotlinã§å©ç¨ããå ´åã®æ³¨æç¹ãªã©ã¯ãåå¿è ãªèªåã«ããããããããã¨ã¦ããããããã£ãã§ãã
Spring WebFluxã§Coroutinesã使ã話ããããã¯ãã£ããè³æèªãã ãããã¥ã¡ã³ãèªã¾ãªãã¨èªåã«ã¯å³ããã§ãã(´ã»Ïã»`) ãã ãKotlinã®Coroutinesãå©ç¨ããã¨ã¹ãããªãã¦èªã¿ããããæ¸ãããããªããã¨ã¯åãã£ãã®ã§æ©ä¼ããã£ãéã®é¸æè¢ã«ã¯ãªãããªã¨æãã¾ãã ä»äºä¸ããããã¸ãã®æè¡ã使ãæ©ä¼ãããã®ãæªããã§ããâ¦
ã¢ããã¼ã·ã§ã³ãæ¶ãã¦ããã£ã¦ã¨ããã¯ããã¾ãã¡ã¢ããã¼ã·ã§ã³ãåãããªãã£ãã§ãããèµ·åé度ãæ©ããªãã®ã¯è¯ããªã¨æãã¾ããã
ãã¹ãã«ã¤ãã¦ã¯JUnit5ãå©ç¨ãã¦ãããã¢ãã¯ã¯MockKãå©ç¨ãã¦ããã ç¹å®ã®æèã§ããå¼ã³åºããªãCoroutineã®å¼ã³åºãã ã£ãããããã©ã«ã finalã«ãªãã¯ã©ã¹ãã¢ãã¯ã«ã§ããã®ã§MockKã¯ä¾¿å©(ã¨ããããã以å¤è¯ãé¸æè¢ããªãããï¼)ã
ã³ã¼ãã£ã³ã°ã¯ ktlint: An anti-bikeshedding Kotlin linter with built-in formatter ã«å¾ã£ã¦ããããã以å¤ã«ã¤ãã¦ã¯Ubie社ã§Kotlinã®ã³ã¼ãã£ã³ã°ã¹ã¿ã¤ã«ã¬ã¤ããä½æããããã«å¾ã£ã¦ããã¨ã®ãã¨ãããlateinitã¨ãæ®éã«ä½¿ã£ã¦ããªâ¦
Knative: Serving your Serverless Java Service on Kubernetes the 12-Factor way
Knativeã®è©±ããèãããã¦è¡ã£ãã®ã§ãããã»ã¨ãã©ç¡ãã¦æ®å¿µã§ããã ããããååã®åæ¯ãã§ç²ãã¦èå¿ã®Knativeã®èª¬æé¨åãéä¸ãã¦èããâ¦
ServerlessãFaaSã®èª¬æã¯ã»ã©ã»ã©ã«ãKnativeã®è©±ãããã£ã¨ãã¦ã»ããã£ãâ¦
500+ã®ãµã¼ãã¼ã§åãLINE Ads PlatformãããããSpring
LINEã®åºåãã©ãããã©ã¼ã ã®è©±ã LINEã®åºåã¯7800ä¸äºº(MAU) ã«ãªã¼ãã§ãã(åãâ¦)ãã©ãããã©ã¼ã ãåºåã¯æ§ã ãªããªã¨ã¼ã·ã§ã³ãã¬ã¤ã¢ã¦ãããã©ã¼ãããã§åºãå¿ è¦ããããããã50ms以å ã«ãªã¼ã¯ã·ã§ã³ãã¦ã¬ã¹ãã³ã¹ãè¿ããªããã°ãªããªãå³ããã·ã¹ãã ã¨ã®ãã¨ã
åºåç³»ã®åèªãå¤ããç解ãã¥ããç¹ãããã¾ããããããããé¢åãªãã¨ãçéã§ãããªããã°ãªããªã大å¤ãã滲ã¿åºã¦ãã¾ããã
ã¢ã¼ããã¯ãã£å¨ãã¯ãåºæ¬çã«ã¯ã¡ã¢ãªã«ä¹ããã®ã¯ä¹ããããã¡ãªãRedisãã¿ãããªæãã§é度ãããªãæèãã¦ããæãã§ãã ãµã¼ãã¹éã®é£æºã¯Kafkaã使ã£ã¦ãã¦ãããªã使ãåãã¦ããããã§ãã
GCãæ°ã«ãªãããGoã«ããã£ã¦è©±ãã¨ããã¼ããå¢ããã¦å¯¾å¿ããã£ã¦è©±ãããã£ã¦ãGoã«ããã¨ãã©ãã«ããªã£ãã®ã§ã¯ï¼ã¨ãæãã¾ããã ã¡ãªã¿ã«ãG1GCãé¸æãã¦ããããã§ããããã¼ãå¢ããåã®4Gã¯å°ãªãããããªãããªï¼ã¨æãã¾ããã
Spring Boot with Kotlin, functional configuration and GraalVM
ç²åºã¼ããããµã¼ã Spring Bootã§ã¢ããã¼ã·ã§ã³ã§è¨å®ãã¦ããã¨ãããé¢æ°(lambda)ã§è¨å®ãããè¨å®ã¯Kofu, Jafuã¨ããDSLã§è¨è¼ããâ¦ã£ã¦æãï¼
翻訳ããã¨ã¤ãã¤
ãããããã®ã»ãã·ã§ã³ã§ããã£ãããã«ãã¯ã©ã¹ãã¹ã¹ãã£ã³ãç¡ããªãã®ã§èµ·åé度ãæ©ããªãã¨ããç¹ã¨ãã¡ã¢ãªæ¶è²»éãå°ãªããªããGraalVMãã¤ãã£ãã¤ã¡ã¼ã¸ãã¬ã³ããªã¼ã¨ãã£ãç¹å¾´ãããããã§ãã
ãã¼ãã¼ãã§ãã¢ããã®ããªï¼ç¸å½èµ·åé度ãæ©ããããªã®ã§ãã³ã³ããã ã£ããFaaSã®é åã§æ´»ãã¦ããã¨é¢ç½ããªã¼ã¨æãã¾ããã æ®æ®µã®éçºæã¯ãããã«ãã¤ãã£ãã¤ã¡ã¼ã¸ããã«ããããªãããµã¤ãã«ãµã¼ãç«ã¡ä¸ããã®ããªï¼éçºããããã¤ã®ããã»ã¹ã£ã¦ã©ããªããã ããï¼
Micrometer/Prometheusã«ãã大è¦æ¨¡ã·ã¹ãã ã¢ãã¿ãªã³ã° ãã¤ãã¼ã¤ã³ã¿ã¼ãããåºåã·ã¹ãã ã§ã®å°å ¥äºä¾ã
Micrometerã¨Prometheusã使ã£ã¦ã3000以ä¸ã®Springã¢ããªãæ°å ã¤ã³ã¹ã¿ã³ã¹ã®ç£è¦ãè¡ã£ã¦ããã¨ã®ãã¨ã ãã©ãããã©ã¼ã ã¯å¤æ§ã§ãOpenStackãk8sãPCFãªã©ãå©ç¨ãã¦ãããå¦çã®æ¹å¼ããWebãWeb APIãããããPub/Subãªã©æ§ã ã
ãã®ç£è¦ã»éç¨ã§å°ã£ããã¨ã工夫ãããã¨ãªã©ãèªã£ã¦ãã¾ããã å ·ä½çãªããããã¤ã³ãã¨ãã©ã解決ããããèªããã¦ãã¦ãMicrometer, Prometheusãå©ç¨ãã¦ãã人ã«ã¯åèã«ãªãããã§ããã ã¡ã¢ã¯ãã¦ããã®ã§ãããåã£ã¦ãããä¸å®ãªã®ã§â¦è³æå ¬éãããã®ãæå¾ ãã¦ãã¾ãï¼
ãããã«
å社ã®äºä¾ã¨ãå°ã£ãæè¡ã®è©±ããä¸å¿ã«èãã¾ããã äºä¾ã¯åããªã£ã¦æããã®ããåèã«ãªããã®ãå¤ãåå¼·ã«ãªãã¾ãããå°ã£ãæè¡ã®è©±ã¯ç解ã§ããªãç®æãå¤ãã£ãã§ãããæ¥å¹´ãåæ¥å¹´ãããã©ãå¤ãã£ã¦ããããªï¼ã¨èããã¨é¢ç½ãã£ãã§ãã
éå¶ããã¦ãã ãã£ãã¿ãªãããJSUGã®ã¿ãªããããããã¨ããããã¾ããï¼ï¼