{"blog_title":"\u7d04\u675f\u306e\u5730","title":"$ gh extension install \u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u7fa4\u306e\u5b9f\u614b\u306f\u3069\u3053\u306b\u3042\u308b\u306e\u304b","image_url":"https://cdn.user.blog.st-hatena.com/default_entry_og_image/459657/1568741889764668","categories":["\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 -> \u8a00\u8a9e -> Go","\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2"],"width":"100%","html":"<iframe src=\"https://hatenablog-parts.com/embed?url=https%3A%2F%2Fobel.hatenablog.jp%2Fentry%2F20250530%2F1748556000\" title=\"$ gh extension install \u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u7fa4\u306e\u5b9f\u614b\u306f\u3069\u3053\u306b\u3042\u308b\u306e\u304b - \u7d04\u675f\u306e\u5730\" class=\"embed-card embed-blogcard\" scrolling=\"no\" frameborder=\"0\" style=\"display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;\"></iframe>","url":"https://obel.hatenablog.jp/entry/20250530/1748556000","type":"rich","blog_url":"https://obel.hatenablog.jp/","published":"2025-05-30 07:00:00","description":"\u7d50\u8ad6 ~/.local/share/gh/extensions \u6839\u62e0 1. manager.go func (m *Manager) installDir() string { return filepath.Join(m.dataDir(), \"extensions\") } 2. config.go func DataDir() string { return ghConfig.DataDir() } 3. config.go func DataDir() string { var path string if a := os.Getenv(xdgDataHome); a != \"\" { p\u2026","author_url":"https://blog.hatena.ne.jp/gregminster/","version":"1.0","provider_url":"https://hatena.blog","author_name":"gregminster","provider_name":"Hatena Blog","height":"190"}