Discord ãµãŒãéå¶ãè£å©ãã Go å®è£ ã®ãããéçº
èªå㯠Discord ãµãŒãã®éå¶ãè¡ã£ãŠããã®ã§ãããã®éå¶ã®è£å©ãããŠãããããã«ãããéçºãè¡ã£ãŠããŸããGo ã§ Discord ããããéçºãã¡ã³ããŒæ°ã®æšç§»ããã°åæãè¡ãã·ã¹ãã ãæ§ç¯ããŠãã話ãšãŸããã®ä»å¹Ÿã€ãæ©èœããã£ãŠããŠæ¥ã ã®äœæ¥ã®å¹çåãå³ã£ãŠããŸãããã®èšäºã§ã¯ãã®ãããã®ç޹ä»ããããŠé ããŸãã ⻠以åã®èšäº https://jedipunkz.github.io/post/discord-exporter/ ã®å 容ãå«ãã§ããŸã ã·ã¹ãã æ§æ ãã®ã·ã¹ãã ã¯ä»¥äžã®3ã€ã®äž»èŠã³ã³ããŒãã³ãã§æ§æãããŠããŸãã Discord ããã(padawan) - Go 補㮠Discord ããã discord-exporter - Go å®è£ ã® Discord ãµãŒãã¡ããªã¯ã¹åéçš Prometheus Exporter åæåºç€ - DuckDB ãçšããæ§é åãã°ã®åæã³ã³ãã æ§æå³ã¯äžèšã«ãªããŸããPrometheus Exporter 㯠Discord API ããæ å ±ãååŸã Prometheus Server ã«ã¡ããªã¯ã¹ãæäŸãPrometheus Server ã¯ãã®ã¡ããªã¯ã¹ãããŒãªã³ã°ãã¹ãã¬ãŒãžã«ããŒã¿ãèç©ãGrafana ã¯ãããããŒã¿ãœãŒã¹ãšããŠåç §ãpadawan 㯠Go å®è£ ã®ãããã§ Discord API ããã®ä»ã²ãŒã çš API çãåç §ãæ©èœæäŸãããããšé£æ¥ããŠãã DuckDB ã³ã³ããã¯ãããã®ãã°ãåæããããã® Go å®è£ ã® CLI ãåããã æ§æã®è©³çް ãããã®æ§æ padawan ãšååã®ããããšãã®ãããã®ãã°ãåæãã DuckDB ã³ã³ããã§æ§æãããŠããŸãã # padawan/docker-compose.yaml services: padawan: build: context: . dockerfile: Dockerfile volumes: - ./data:/root/data - ./logs:/logs restart: always duckdb: build: context: . dockerfile: Dockerfile.duckdb volumes: - ./logs:/logs:ro restart: "no" profiles: - tools discord-exporter ã®æ§æ Go å®è£ ã® Discord API ããæ å ±ãåéãã Exporter ãäžå¿ãšã Grafana, Prometheus Server ãæ§æãšããŠãæã£ãŠããŸãã ...
Claude Code ãã OpenCode ãžç§»è¡ãã話
jedipunkzð ã§ãã æè¿ãAI ã³ãŒãã£ã³ã°ã¢ã·ã¹ã¿ã³ããšããŠäœ¿ã£ãŠãã Claude Code ãã OpenCode ã«ç§»è¡ããŸããããã®èšäºã§ã¯ OpenCode ã®åªããæ©èœãšããªãç§»è¡ã決ããã®ãã®æ±ºããŠã玹ä»ããŸãã æ³šèš (2025-12-28) OpenCode ãããžã§ã¯ãã¯ã2024幎7æã«éçºå ã® Charm 瀟ã«ããè²·åãšéå¶æ¹éãå·¡ã£ãŠãã³ã³ããªãã¥ãŒã¿ãŒéã§è«äºãçºçããŸããããã®åŸãCharm ç㯠Crush ãšããŠãªãã©ã³ããããçŸåšã® OpenCode 㯠SST çµç¹ã«ãã£ãŠ https://github.com/sst/opencode ã§éçºãç¶ç¶ãããŠããŸããäž¡ãããžã§ã¯ãã¯çŸåšãå¥ã ã®ããŒã«ãšããŠååšããŠããããã®èšäºã§ã¯ SST çã® OpenCode ã«ã€ããŠç޹ä»ããŠããŸãã OpenCode ãšã¯ OpenCode ã¯ãã¿ãŒããã«ããŒã¹ã®ãªãŒãã³ãœãŒã¹ AI ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã§ãã75以äžã® LLM ãããã€ããŒããµããŒãããé«åºŠã«ã«ã¹ã¿ãã€ãºå¯èœãªã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããŸãã å ¬åŒãµã€ã: https://opencode.ai/ å ¬åŒããã¥ã¡ã³ã: https://opencode.ai/docs GitHub: https://github.com/opencode-ai/opencode Claude Code ããç§»è¡ããçç± 1. æ¥æ¬èªå ¥å Claude Code ã§ã¯ãæ¥æ¬èªå ¥åã®å€æäžã«æåãæšªã«ãããçŸè±¡ãé »ç¹ã«çºçããéåžžã«ã¹ãã¬ã¹ã§ããã OpenCode ã§ã¯ããã®åé¡ãçºçããæ¥æ¬èªå ¥åãèªç¶ã«è¡ããŸããå°å³ã§ããäžçªèªåã«ãšã£ãŠå€§ããã¡ãªããã ã£ããããããŸããã 2. æè»ãªããŒãã€ã³ãèšå® OpenCode ã®æå€§ã®é åã¯ãããŒãã€ã³ããèªç±ã«ã«ã¹ã¿ãã€ãºã§ããç¹ã§ãã æ¥æ¬èªå ¥å Claude Code ã§ã¯ãæ¥æ¬èªå ¥åã®å€æäžã«æåãæšªã«ãããçŸè±¡ãé »ç¹ã«çºçããéåžžã«ã¹ãã¬ã¹ã§ããã OpenCode ã§ã¯ããã®åé¡ãçºçãããæ¥æ¬èªå ¥åãèªç¶ã«è¡ããŸããTUIïŒTerminal User InterfaceïŒã®å®è£ ãåªããŠãããIME ãšã®çžæ§ãè¯å¥œã§ãã Emacs 颚ã®ããŒãã€ã³ãããµããŒã Emacs 颚ã®ããŒãã€ã³ããèšå®åºæ¥ãç¹ã¯èªåã«ãšã£ãŠã¯å€§ããã£ãã§ããèšå®ãããšãèªç¶ã« Emacs 颚ã«ãã€ã³ããããŠããããŒããããŸãã Ctrl-a: è¡é ã«ç§»å Ctrl-e: è¡æ«ã«ç§»å Ctrl-h: äžæååé€ Ctrl-k: ã«ãŒãœã«äœçœ®ããè¡æ«ãŸã§åé€ Ctrl-f, Ctrl-b: ååŸã«ç§»å "keybinds": { "input_backspace": "backspace,shift+backspace,ctrl+h", "input_delete_to_line_end": "ctrl+k" }, Enter ãš Ctrl-Enter ã䜿ãåãå¯èœ ç¹ã«äŸ¿å©ãªã®ããæ¹è¡ãšã¡ãã»ãŒãžéä¿¡ãåé¢ã§ããç¹ã§ãïŒ ...
Conftest OPA ã§ Terraform ã³ãŒãéçºã«å¶çŽãèšãã
ããã«ã¡ã¯ãjedipunkzð ã§ãã Conftest ãš Open Policy Agent (OPA) ã䜿ã£ã Terraform ã®ããªã·ãŒæ€èšŒãè¡ã£ãã®ã§ãããèšäºã«ããããšæããŸããããªã·ãæžãããšã§ Terraform ã³ãŒãã«å¶çŽãå ããã»ãã¥ãªãã£èŠä»¶(äŸãã°æå·åèŠä»¶ãããŒãéæŸèŠä»¶ç) ãæºãããããã¹ããã©ã¯ãã£ã¹ã«ãã£ãã€ã³ãã©ãæ§ç¯ã§ããŸããæ¯åã¬ãã¥ãŒã§äººã«ãã§ãã¯ãããããã確å®ã«å¶çŽãå®ããããã«ãªãã®ã§ããããã§ãã ãã®èšäºã§ã¯ãConftest ãš OPA ã䜿ã£ãŠãTerraform ã³ãŒãã«èªåçã«ããªã·ãŒãã§ãã¯ãé©çšããæ¹æ³ããã¥ãŒããªã¢ã«åœ¢åŒã§è§£èª¬ããŸãã 1. Conftest æŠèŠãšåºæ¬ãã¥ãŒããªã¢ã« 1.1 Conftest ãšã¯ïŒ Conftest ã¯ãæ§é åãããèšå®ããŒã¿ã«å¯ŸããŠããªã·ãŒããã¹ãããããã®ããŒã«ã§ããOpen Policy Agent (OPA) ã® Rego èšèªã䜿çšããŠããªã·ãŒãèšè¿°ããããŸããŸãªèšå®ãã¡ã€ã«ãæ€èšŒã§ããŸãã Conftest ã®ç¹åŸŽ æ±çšæ§ãé«ã TerraformïŒ.tfãtfplan.jsonïŒ KubernetesïŒYAMLãJSONïŒ Dockerfile ãã®ä»ã® JSON/YAML ãã¡ã€ã« ã·ã³ãã«ã§è»œé åäžã®ãã€ããªã§åäœ å€éšäŸåãªã CI/CD ã«ç°¡åã«çµ±åå¯èœ OPA ã® Rego èšèªãæ¡çš 宣èšçãªããªã·ãŒèšè¿° 匷åãªãã¿ãŒã³ãããã³ã° ãã¹ãå¯èœãªããªã·ãŒã³ãŒã ãªã Conftest ãå¿ èŠãªã®ãïŒ åŸæ¥ã®ã€ã³ãã©ç®¡çã§ã¯ã以äžã®ãããªèª²é¡ããããŸããã ã¬ãã¥ãŒã§æ¯ååãææïŒãæå·åãæå¹ã«ããŠãã ããããªã©ïŒ 人çãã¹ã«ããã»ãã¥ãªãã£ããŒã« ç°å¢éã§ã®èšå®ã®äžæŽå ã³ã³ãã©ã€ã¢ã³ã¹éåã®èŠèœãšã Conftest ã䜿ãããšã§ããããã®èª²é¡ã解決ã§ããŸãã ããªã·ãŒãã³ãŒãã§èªåãã§ã㯠ãããã€åã«åé¡ãæ€åº äžè²«ããã¬ããã³ã¹ã®å®çŸ ã¬ãã¥ãŒè² è·ã®è»œæž 1.2 ã»ããã¢ãã 1.2.1 Conftest ã®ã€ã³ã¹ããŒã« macOS ã®å ŽåïŒ ...
Prometheus Exporter éçºã§ Discord ãµãŒãéå¶ã®å¥å šåãå³ã
èªå㯠Discord ã§ã²ãŒã ã³ãã¥ããã£ãéå¶ããŠã㊠Discord ãµãŒãã管çããŠããŸããéå¶ã®ããã«å¿ èŠãªæ å ±ãéããããšæãããããéçºã Prometheus Exporter ã®éçºãããŠããŸãããã®èšäºã§ã¯ Prometheus Exporter ã«ã€ããŠæžãããšæããŸãã Discord Exporter ã®æŠèŠ Discord Exporter ã¯ãDiscord ãµãŒãã®çµ±èšæ å ±ã Prometheus ã¡ããªã¯ã¹ãšããŠãšã¯ã¹ããŒãããããŒã«ã§ããã¡ã³ããŒæ°ãšåãã£ãã«ã®ã¡ãã»ãŒãžæ°ãåéã Prometheus Exporter ãšããŠã¡ããªã¯ã¹ã Promehteus Server ã«æäŸãããã®ã§ãã https://github.com/jedipunkz/discord-exporter ã³ãŒãã®èŠæèª¬æ Discord Exporter ã®äž»èŠãªåŠçã解説ããŠãããŸãã Discord API åŒã³åºãåŠç ã¡ã³ããŒæ å ±ã®ååŸ updateMemberCount 颿°ã§ã¯ãDiscord ã® GuildMembers API ãšã³ããã€ã³ããåŒã³åºããŠã¡ã³ããŒæ å ±ãååŸããŸããAPI ã®å¶éã«ããæå€§1000ä»¶åäœã§ã¡ã³ããŒãååŸããååŸããã¡ã³ããŒæ°ã Prometheus ã®ã²ãŒãžã¡ããªã¯ã¹ã«èšå®ããŸãã func updateMemberCount(s *discordgo.Session, guildID string) { members, err := s.GuildMembers(guildID, "", 1000) if err != nil { log.Printf("Error fetching members: %v", err) return } memberCountGauge.Set(float64(len(members))) log.Printf("Updated member count: %d", len(members)) } ã¡ãã»ãŒãžã«ãŠã³ãåŠç countChannelMessages 颿°ã§ã¯ããã£ãã«ã®ã¡ãã»ãŒãžã段éçã«ååŸããŸããChannelMessages API ã§100ä»¶ãã€ã¡ãã»ãŒãžãååŸããæçµã¡ãã»ãŒãžã® ID ãæ¬¡ã®ãªã¯ãšã¹ãã®ã¢ã³ã«ãŒãšããŠäœ¿çšããããšã§ãå šã¡ãã»ãŒãžãæ°ãäžãããŸã§ã«ãŒãåŠçãè¡ããŸãã func countChannelMessages(s *discordgo.Session, channelID string) (int, error) { count := 0 lastID := "" for { messages, err := s.ChannelMessages(channelID, 100, lastID, "", "") if err != nil { return 0, err } if len(messages) == 0 { break } count += len(messages) lastID = messages[len(messages)-1].ID } return count, nil } ã¡ããªã¯ã¹åéã®å®è£ 䞊è¡åŠçãšã¬ãŒãå¶é Discord API ãžã®é床ãªåŒã³åºããé²ããããã»ããã©ã䜿çšãã䞊è¡åŠçå¶åŸ¡ãå®è£ ããŠããŸããæå€§5ãã£ãã«ãåæåŠçã§ããããã«å¶éãåãŽã«ãŒãã³ãåŠçåã«ã»ããã©ãååŸãå®äºåŸã«è§£æŸããä»çµã¿ã§å¹ççãã€å®å šã«è€æ°ãã£ãã«ã䞊è¡åŠçããŸãã ...
DuckDB ã«å ¥éããŠã¿ã
ããã«ã¡ã¯ãjedipunkzð ã§ãã ä»å㯠DuckDB ã«ã€ããŠçè§£ããããšããŸãšããããšæããŸãã DuckDB 㯠PostgreSQL äºæã® SQL ã䜿ã£ãŠãJSON ã CSVãParquet ãªã©ã®ãã¡ã€ã«ãçŽæ¥ã¯ãšãªã§ããããŒã¿ããŒã¹ãšã³ãžã³ã§ãããµãŒããŒã®ã»ããã¢ãããäžèŠã§ãNode.js ã Python ãªã©ã®ã¢ããªã±ãŒã·ã§ã³ã«çµã¿èŸŒãã§äœ¿ãããããããŒã¿åæããã°è§£æã®çšéã§æ³šç®ãããŠããŸãã DuckDB ã®ç¹åŸŽ DuckDB ã¯ä»¥äžã®ç¹åŸŽãæã¡ãŸãã çµã¿èŸŒã¿åããŒã¿ããŒã¹: ãµãŒããŒäžèŠã§ãããã»ã¹å ã§åäœ é«éãªåæåŠç: åæåã¹ãã¬ãŒãžãšãã¯ãã«åå®è¡ã«ãã OLAP ã«æé©å 倿§ãªãã©ãŒããã察å¿: JSONãCSVãParquet ãªã©ãçŽæ¥èªã¿èŸŒã¿ PostgreSQL äºæ SQL: æšæºç㪠SQL ã§æäœå¯èœ 軜é: SQLite ã®ããã«åäžãã€ããªã§åäœ ç°å¢ã»ããã¢ãã ä»å㯠Node.js (TypeScript) ã§ DuckDB ã䜿çšããŸãã åºæ¬çãªã»ããã¢ããã³ãŒãã¯ä»¥äžã®éãã§ãã :memory: ãæå®ããããšã§ãã¡ã¢ãªäžã«ããŒã¿ããŒã¹ãäœæããŸããæ°žç¶åãå¿ èŠãªå Žåã¯ããã¡ã€ã«ãã¹ãæå®ããããšãã§ããŸãã import duckdb from "duckdb"; import { promisify } from "util"; const db = new duckdb.Database(":memory:"); const dbAll = promisify(db.all.bind(db)); const dbClose = promisify(db.close.bind(db)); åºæ¬ç㪠SELECT æäœ ãŸãã¯åºæ¬ç㪠SELECT æäœããèŠãŠãããŸãã ãµã³ãã«ããŒã¿ åŸæ¥å¡ããŒã¿ã JSON ãã¡ã€ã«ã§çšæããŸã (employees.json)ã [ {"id": 1, "name": "Alice", "age": 28, "department": "Sales", "salary": 50000}, {"id": 2, "name": "Bob", "age": 35, "department": "Engineering", "salary": 75000}, {"id": 3, "name": "Charlie", "age": 42, "department": "Sales", "salary": 65000}, {"id": 4, "name": "Diana", "age": 31, "department": "Engineering", "salary": 80000}, {"id": 5, "name": "Eve", "age": 29, "department": "HR", "salary": 55000} ] ã¯ãšãªå®è¡ DuckDB ã§ã¯ãJSON ãã¡ã€ã«ãçŽæ¥ FROM å¥ã§æå®ã§ããŸãã ãã€ã³ãã¯ãCREATE TABLE ãªã©ã®äºåæºåãªãã«ããã¡ã€ã«ãã¹ãæå®ããã ãã§ã¯ãšãªãå®è¡ã§ããç¹ã§ããDuckDB ãèªåçã«ã¹ããŒããæšè«ããããŒã¿ãèªã¿èŸŒã¿ãŸãã ...
Zig å ¥é: æ§æé
ããã«ã¡ã¯ @jedipunkz ã§ãã ã³ãŒãã£ã³ã°ãåŠç¿ããæ©äŒãå¢ãããŠããæäžãªã®ã§ãããèªåã¯åºã¬ã€ã€ã奜ããªã®ãæãåºãããŸãããŸã« Mitchell Hashimoto æ°ã Zig ã®ããšãåããŠãã®ãèŠããŠããã®ã§ãçªç¶ Zig ã«å ¥éããããªããŸããã ãšããããšã§åŸã«èªåã§ãèªã¿è¿ãã圢ã«ããããšæã Zig ã®æ§æéãèšããŸãã NOTICE â» çŸæç¹ã§ Stable 㪠0.15.1 ãåæã«èšããŸãã â» æ°ãåãããšãã«èšèªä»æ§ã®å€åã«å¯Ÿå¿ããŠä¿®æ£ããŠããããšæããŸãã ã¯ããã« ãã®ããã¥ã¡ã³ãã¯ãZig èšèªã®äž»èŠãªæ§æãç¶²çŸ çã«ãŸãšãããã¥ãŒããªã¢ã«ã§ãããã¹ãŠã®ãµã³ãã«ã³ãŒãã¯èšäºã®ä¿®æ£æç¹ã§ Stable ãªãªãªãŒã¹ããŒãžã§ã³ã® Zig ã§åäœç¢ºèªããŠããŸãã ç®æ¬¡ åºæ¬æ§æ æŒç®å å¶åŸ¡æ§æ 颿° é åãšã¹ã©ã€ã¹ æ§é äœ åæåãšãŠããªã³ ãã€ã³ã¿ ãšã©ãŒãã³ããªã³ã° ãªãã·ã§ãã«å ã³ã³ãã€ã«æèšç® ã¡ã¢ãªã¢ãã±ãŒã¿ ãã¹ã ã¢ãžã¥ãŒã« 1. åºæ¬æ§æ 倿°å®£èš Zig ã«ã¯ 2 çš®é¡ã®å€æ°å®£èšããããŸããconst ã¯äžå€å€æ°ïŒåä»£å ¥äžå¯ïŒãvar ã¯å¯å€å€æ°ïŒåä»£å ¥å¯èœïŒã衚ããŸãã const cat: i32 = 5; // const: äžå€å€æ°ïŒåä»£å ¥äžå¯ïŒ var dog: i32 = 10; // var: å¯å€å€æ°ïŒåä»£å ¥å¯èœïŒ dog = 15; // OK // cat = 10; // ãšã©ãŒ: const ã¯å€æŽäžå¯ åæšè« åãæç€ºçã«æå®ããªããŠããã³ã³ãã€ã©ãèªåçã«åãæšè«ããŠãããŸãã ...
TypeScript å ¥é: æ§æé
ããã«ã¡ã¯ @jedipunkz ã§ãã TypeScript ã®åŠç¿ãé²ããäžã§æ§æãç¶²çŸ çã«çè§£ããå¿ èŠæ§ãæããŠãµã³ãã«ã³ãŒãäœæãäœæãåäœç¢ºèªããäžã§æ§æéãäœæããŸããããã®èšäºã§ã¯ TypeScript ã®äž»èŠãªæ§æããŸãšããããšæããŸãã â» æ°ãåãããšãã«æ°ããæ§æãåºãŠããéã«æŽæ°ãç¶ããèšäºã«ããããšæã£ãŠããŸãã ç®æ¬¡ 1. åºæ¬çãªåã·ã¹ãã ããªããã£ãå åæ³šéãšåæšè« TypeScript æ¡åŒµå ãªãã©ã«å åã¢ãµãŒã·ã§ã³ 2. è€åå é åãšã¿ãã« ãªããžã§ã¯ãå ãŠããªã³åãšã€ã³ã¿ãŒã»ã¯ã·ã§ã³å åæå Discriminated Unions 3. 颿° 颿°ã®åå®çŸ© 颿°ã®ãªãŒããŒããŒã 4. ã€ã³ã¿ãŒãã§ãŒã¹ åºæ¬çãªã€ã³ã¿ãŒãã§ãŒã¹ ã€ã³ã¿ãŒãã§ãŒã¹ã®ç¶æ¿ 5. ã¯ã©ã¹ ã¯ã©ã¹ã®åºæ¬ ã¢ã¯ã»ã¹ä¿®é£Ÿå ç¶æ¿ãšæœè±¡ã¯ã©ã¹ 6. ãžã§ããªã¯ã¹ ãžã§ããªã¯ã¹ã®åºæ¬ åå¶çŽãšãŠãŒãã£ãªãã£å 7. åãšã€ãªã¢ã¹ 8. ã¢ãžã¥ãŒã« ãšã¯ã¹ããŒããšã€ã³ããŒã 9. é«åºŠãªåæ©èœ åã¬ãŒã é«åºŠãªåæŒç®å ã€ã³ããã¯ã¹ã·ã°ãã㣠ãŠãŒãã£ãªãã£åã®æ¡åŒµ Mapped Types æ¡ä»¶ä»ãå 10. é«åºŠãªæ©èœ ãã³ã¬ãŒã¿ãŒ åå空é åºæ¬çãªåã·ã¹ãã ããªããã£ãå ããªããã£ãå㯠JavaScript ã®åºæ¬çãªããŒã¿åã§ããTypeScript ã§ã¯ãããã«å泚éãä»ããããšã§åå®å šæ§ã確ä¿ã§ããŸãã boolean å - çåœå€ã衚ããŸããtrue ãŸã㯠false ã®ããããã®å€ãæã¡ãŸãã number å - æ°å€ã衚ããŸããæŽæ°ã»å°æ°ã»16 鲿°ã»2 鲿°ã»8 鲿°ãã¹ãŠãã®åã§æ±ããŸããJavaScript ãšåæ§ã«å éšçã«ã¯ãã¹ãŠæµ®åå°æ°ç¹æ°ãšããŠæ±ãããŸãã string å - æååã衚ããŸããããã«ã¯ã©ãŒããã·ã³ã°ã«ã¯ã©ãŒããããã¯ã¯ã©ãŒãïŒãã³ãã¬ãŒããªãã©ã«ïŒã§èšè¿°ã§ããŸãã null åãš undefined å - å€ãååšããªãããšã衚ããŸããnull ã¯æç€ºçã«å€ããªãããšã瀺ããundefined ã¯å€ãæªå®çŸ©ã§ããããšã瀺ããŸãã bigint å - Number.MAX_SAFE_INTEGER ãè¶ ãã倧ããªæŽæ°ãæ±ããŸããæ«å°Ÿã« n ãä»ããŠèšè¿°ããŸãã symbol å - äžæã§äžå€ã®å€ãäœæããŸãããªããžã§ã¯ãã®ããããã£ããŒãšããŠäœ¿çšãããããšãå€ãã§ãã // åºæ¬çãªå const dogName: string = "Buddy"; const dogAge: number = 3; const isDogHungry: boolean = true; console.log(dogName); // åºå: Buddy console.log(dogAge); // åºå: 3 console.log(isDogHungry); // åºå: true // null ãš undefined const location: null = null; let age: undefined = undefined; console.log(location); // åºå: null console.log(age); // åºå: undefined // bigint ãš symbol const weight: bigint = 9007199254740991n; const id: symbol = Symbol("unique"); console.log(weight); // åºå: 9007199254740991n console.log(id); // åºå: Symbol(unique) åæ³šéãšåæšè« åæ³šé (Type Annotation) ã¯å€æ°ã颿°ã«æç€ºçã«åãæå®ããæ©èœã§ãã: åå ã®åœ¢åŒã§èšè¿°ããŸããåæ³šéã«ãããã®å€æ°ã颿°ãæ±ããå€ã®çš®é¡ãæç¢ºã«ã§ããŸãã ...
Terraform Plan å·®åãããŒã¹ãã GitHub Actions ãäœã£ã
ããã«ã¡ã¯ãjedipunkzð ã§ãã Terraform ãéçšããŠãããšããŸã« Plan çµæãã©ãããŠãåºãŠããŸãäºããããŸãããŸã Terraform ã GitHub ã§å®è¡ããç°å¢ãéçšããŠãããš Plan çµæãããŸãæ±ã£ãŠèªååãããã¢ãããŒã·ã§ã³ãæ¹§ããŠããŸãããã®å Žåã« Plan ã®å·®åãããŸãåŠçããŠããã GitHub Action ãããã°ãªãšæã£ãŠäœã£ãŠã¿ãŸããã GitHub Actions äœæãã GitHub Action ã¯äžèšã®ã¬ããžããªã§å ¬éããŠããŸãã https://github.com/jedipunkz/tf-plan-parser å ¥åã»ãªãã·ã§ã³èšå® ãã® GitHub Action ã§ã¯2ã€ã®å ¥åãªãã·ã§ã³ãå©çšå¯èœã§ãïŒ terraform-plan (å¿ é ) ããŒã¹å¯Ÿè±¡ãšãªã Terraform Plan ã®åºåçµæãæå®ããŸããéåžžã¯åã®ã¹ãããã§å®è¡ãã terraform plan ã³ãã³ãã®æšæºåºåãæž¡ããŸãã ignore-resources (ãªãã·ã§ã³) ç¡èŠããããªãœãŒã¹ã¿ã€ããç¹å®ã®ãªãœãŒã¹ãé å圢åŒã§æå®ããŸããããã©ã«ãã¯ç©ºã®é å [] ã§ãã æå®æ¹æ³ã®äŸïŒ ãªãœãŒã¹ã¿ã€ãå šäœãç¡èŠ: ignore-resources: '["null_resource", "local_file"]' ç¹å®ã®ãªãœãŒã¹ã€ã³ã¹ã¿ã³ã¹ãç¡èŠ: ignore-resources: '["null_resource.temporary", "local_file.cache"]' ãªãœãŒã¹ã¿ã€ããšã€ã³ã¹ã¿ã³ã¹ã®æ··åš: ignore-resources: '["null_resource", "aws_s3_bucket.temp", "local_file"]' åºåãããæ å ± ãã® Action ã¯ä»¥äžã®åºåãæäŸããŸãããŸãäžèšã¯ ignore-resources ãªãã·ã§ã³ã®æå®ã«æ²¿ã£ãŠçµæãåºåããŠãããŸãã diff-bool: 倿Žããããã©ããã®çåœå€ïŒtrue ãŸã㯠falseïŒ diff-count: 倿ŽããããªãœãŒã¹ã®æ° diff-resources: 倿ŽããããªãœãŒã¹ã®ã¢ãã¬ã¹äžèЧïŒã«ã³ãåºåãïŒ diff-raw: çã®å·®åããŒã¿ diff-json: såããŒã¿ã® JSON åœ¢åŒ ãããã®åºåã䜿ã£ãŠãåŸç¶ã®ã¹ãããã§æ¡ä»¶åå²ãéç¥ã®å¶åŸ¡ãå¯èœã§ãã ...