{"id":1662,"date":"2022-06-23T08:30:00","date_gmt":"2022-06-22T23:30:00","guid":{"rendered":"https:\/\/www.miracleave.co.jp\/contents\/?p=1662"},"modified":"2023-05-22T11:56:01","modified_gmt":"2023-05-22T02:56:01","slug":"vscode-golang-next-modify","status":"publish","type":"post","link":"https:\/\/www.miracleave.co.jp\/contents\/1662\/vscode-golang-next-modify\/","title":{"rendered":"Golang\u2716\ufe0eNext.js\u306e\u958b\u767a\u74b0\u5883\u3092\u898b\u76f4\u3057\u3066\u307f\u305f"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u306f\u3058\u3081\u306b<\/h2>\n\n\n\n<p>\u4e0a\u91ce\u3067\u3059\uff01<br>\u4ee5\u524d\u306b\u300c<a href=\"https:\/\/www.miracleave.co.jp\/contents\/1509\/vscode-golang-next\/\" target=\"_blank\" rel=\"noreferrer noopener\">VSCode\u3067Golang\u2716\ufe0eNext.js\u306e\u958b\u767a\u74b0\u5883\u3092\u69cb\u7bc9\u3057\u3066\u307f\u305f<\/a>\u300d\u3068\u3044\u3046\u8a18\u4e8b\u3092\u6295\u7a3f\u3057\u305f\u306e\u3067\u3059\u304c\u3001\u8a18\u4e8b\u306e\u5185\u5bb9\u901a\u308a\u306e\u74b0\u5883\u3060\u3068\u8272\u3005\u3068\u4e0d\u4fbf\u306a\u3053\u3068\u304c\u51fa\u3066\u304d\u305f\u306e\u3067\u3001\u6539\u3081\u3066\u958b\u767a\u74b0\u5883\u3092\u898b\u76f4\u3057\u3066\u307f\u307e\u3057\u305f\u3002<br>\u7279\u306b\u4e0d\u4fbf\u3060\u3068\u611f\u3058\u305f\u306e\u304c\u3001Golang\u3068Next.js\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u5225\u3005\u306b\u306a\u3063\u3066\u3044\u308b\u3053\u3068\u306b\u3088\u3063\u3066\u3001VSCode\u306eWindow\u3092\u4e8c\u3064\u958b\u304b\u306a\u3044\u3068\u3044\u3051\u306a\u3044\u306e\u304c\u7279\u306b\u4e0d\u4fbf\u306b\u611f\u3058\u307e\u3057\u305f\u3002\u3069\u3046\u305b\u306a\u3089\u3001\u4e00\u3064\u306eWindow\u3067\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306e\u7de8\u96c6\u3067\u304d\u308c\u3070\u697d\u3060\u3068\u3044\u3046\u3053\u3068\u306b\u6c17\u3065\u304d\u307e\u3057\u305f&#8230;<\/p>\n\n\n\n<p>\u3068\u3044\u3046\u3053\u3068\u3067\u3001\u4eca\u56de\u306f\u4e00\u3064\u306e\u30b3\u30f3\u30c6\u30ca\u4e0a\u3067Golang\u3068Node.js\u304c\u52d5\u4f5c\u3059\u308b\u74b0\u5883\u3092\u4f5c\u6210\u3057\u3001\u305d\u306e\u30b3\u30f3\u30c6\u30ca\u306bVSCode\u3067\u63a5\u7d9a\u3057\u3066\u958b\u767a\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u304d\u305f\u3044\u3068\u601d\u3044\u307e\u3059\uff01<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Golang\u3068Node.js\u304c\u52d5\u4f5c\u3059\u308bDockerfile\u3092\u4f5c\u6210<\/h2>\n\n\n\n<p>\u30d5\u30a9\u30eb\u30c0\u69cb\u6210\u306f\u4ee5\u524d\u306e\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<br>\u4ee5\u524d\u306e\u300c<a href=\"https:\/\/www.miracleave.co.jp\/contents\/1509\/vscode-golang-next\/\" target=\"_blank\" rel=\"noreferrer noopener\">VSCode\u3067Golang\u2716\ufe0eNext.js\u306e\u958b\u767a\u74b0\u5883\u3092\u69cb\u7bc9\u3057\u3066\u307f\u305f<\/a>\u300d\u306e\u8a18\u4e8b\u3092\u53c2\u8003\u306bGolang\u2716\ufe0eNext.js\u306e\u30d5\u30a9\u30eb\u30c0\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<p>\u65b0\u3057\u304f\u8ffd\u52a0\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u306b\u95a2\u3057\u3066\u306f\u300c(New)\u300d\u3068\u8a18\u8f09\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>go-next\n|_.devcontainer\n|       |_devcontainer.json (New)\n|\n|_.vscode\n|       |_launch.json (New)\n|\n|_server\n|       |_.devcontainer\n|       |           |_devcontainer.json\n|       |_.vscode\n|       |           |_launch.json\n|       |_Dockerfile  \n|       |_.air.toml\n|       |_main.go\n|\n|_client\n|       |_.devcontainer\n|       |           |_devcontainer.json\n|       |_Dockerfile  \n|\n|_docker-compose.yml\n|\n|_Dockerfile.dev (New)<\/code><\/pre>\n\n\n\n<p>\u3067\u306f\u3001\u6700\u521d\u306bDockerfile.dev\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code># ------------------------ Golang ---------------------------\nFROM golang:1.17-alpine AS golang\n\n# \u74b0\u5883\u5909\u6570\u8a2d\u5b9a\nENV ROOT=\/go\/src\/app\n\nWORKDIR ${ROOT}\n\nRUN apk update &amp;&amp; apk add git\n\nRUN go install golang.org\/x\/tools\/cmd\/goimports@latest \\\n    &amp;&amp; go install golang.org\/x\/tools\/gopls@latest \\\n    &amp;&amp; go install golang.org\/x\/tools\/cmd\/godoc@latest \\\n    &amp;&amp; go install golang.org\/x\/lint\/golint@latest \\\n    &amp;&amp; go install github.com\/rogpeppe\/godef@latest \\\n    &amp;&amp; go install github.com\/nsf\/gocode@latest \\\n    # hot relord\n    &amp;&amp; go install github.com\/cosmtrek\/air@latest \\\n    # debug\n    &amp;&amp; go install github.com\/go-delve\/delve\/cmd\/dlv@latest\n\nADD .\/server\/shell\/mysqldef.sh ${ROOT}\/shell\/mysqldef.sh\n\nRUN sh ${ROOT}\/shell\/mysqldef.sh\n\n# GO MODULE\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\nCOPY .\/server\/go.mod .\nCOPY .\/server\/go.sum .\nRUN go mod download\n\n# # ------------------------ Node ---------------------------\nFROM node:17-alpine as node\n\n# # ------------------------ Develop ---------------------------\nFROM alpine as dev\n\n# \u74b0\u5883\u5909\u6570\u8a2d\u5b9a(GO)\nENV GOPATH=\/root\/go\nENV PATH $PATH:\/usr\/local\/go\/bin\/:\/usr\/local\/go\/bin\/go:\/go\/bin\nENV GO111MODULE=on\n\nWORKDIR \/app\n\nRUN apk update &amp;&amp; \\\n    apk add --no-cache &amp;&amp; \\\n    apk add curl &amp;&amp; \\\n    apk add tzdata &amp;&amp; \\\n    apk add git &amp;&amp; \\\n    apk add openssh &amp;&amp; \\\n    apk add make\n\n# Golang\u7528\nCOPY --from=golang \/usr\/local\/bin \/usr\/local\/bin\nCOPY --from=golang \/usr\/local\/go \/usr\/local\/go\nCOPY --from=golang \/go\/bin \/go\/bin\nCOPY --from=golang \/go\/pkg ${GOPATH}\/pkg\n\n# Node.js\u7528\nCOPY --from=node \/usr\/local\/bin \/usr\/local\/bin\nCOPY --from=node \/usr\/local\/lib\/node_modules\/npm \/usr\/local\/lib\/node_modules\/npm\nCOPY --from=node \/opt\/yarn* \/opt\/yarn\n\nRUN ln -fs \/opt\/yarn\/bin\/yarn \/usr\/local\/bin\/yarn &amp;&amp; \\\n    ln -fs \/opt\/yarn\/bin\/yarnpkg \/usr\/local\/bin\/yarnpkg\n\n# Gin Port\nEXPOSE 8080\n# Next.js Port\nEXPOSE 3000<\/code><\/pre><\/div>\n\n\n\n<p>\u3053\u3061\u3089\u306eDockerifle\u3067\u306f\u3001\u30de\u30eb\u30c1\u30b9\u30c6\u30fc\u30b8\u30d3\u30eb\u30c9\u3092\u5229\u7528\u3057\u3066\u3044\u307e\u3059\u3002<br>Golang\u3068Node.js\u306e\u30b9\u30c6\u30fc\u30b8\u304b\u3089\u5fc5\u8981\u306a\u30d5\u30a9\u30eb\u30c0\u62bd\u51fa\u3057alpine\u30b9\u30c6\u30fc\u30b8\u306b\u30b3\u30d4\u30fc\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u6b21\u306b.devcontainer\/devcontainer.json\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-json\" data-lang=\"JSON\"><code>{\n  &quot;name&quot;: &quot;Go devcontainer&quot;,\n  &quot;build&quot;: {\n    &quot;dockerfile&quot;: &quot;..\/Dockerfile.dev&quot;,\n    &quot;target&quot;: &quot;dev&quot;\n  },\n  &quot;mounts&quot;: [\n    &quot;source=${localWorkspaceFolder},target=\/app,type=bind,consistency=cached&quot;\n  ],\n  &quot;workspaceFolder&quot;: &quot;\/app&quot;,\n  &quot;appPort&quot;: [&quot;7777:8080&quot;, &quot;3434:3000&quot;],\n  &quot;settings&quot;: {\n    &quot;editor.tabSize&quot;: 2,\n    &quot;editor.formatOnPaste&quot;: true,\n    &quot;editor.formatOnType&quot;: true,\n    &quot;editor.renderWhitespace&quot;: &quot;all&quot;,\n    &quot;editor.bracketPairColorization.enabled&quot;: true,\n    &quot;editor.guides.bracketPairs&quot;: &quot;active&quot;,\n    &quot;files.trimTrailingWhitespace&quot;: true,\n    &quot;files.trimFinalNewlines&quot;: true,\n    &quot;go.toolsManagement.checkForUpdates&quot;: &quot;off&quot;,\n    &quot;go.inferGopath&quot;: true,\n    &quot;go.useLanguageServer&quot;: true,\n    &quot;eslint.packageManager&quot;: &quot;yarn&quot;,\n    &quot;eslint.run&quot;: &quot;onSave&quot;,\n    &quot;eslint.nodePath&quot;: &quot;\/app\/client&quot;,\n    &quot;editor.defaultFormatter&quot;: &quot;esbenp.prettier-vscode&quot;,\n    &quot;editor.codeActionsOnSave&quot;: {\n      &quot;source.fixAll.eslint&quot;: true\n    },\n    &quot;[go]&quot;: {\n      &quot;editor.defaultFormatter&quot;: &quot;golang.go&quot;,\n      &quot;editor.insertSpaces&quot;: true,\n      &quot;editor.formatOnSave&quot;: true,\n      &quot;editor.codeActionsOnSave&quot;: {\n        &quot;source.organizeImports&quot;: true\n      },\n      &quot;editor.suggest.snippetsPreventQuickSuggestions&quot;: false\n    },\n    &quot;[javascript]&quot;: {\n      &quot;editor.formatOnSave&quot;: true\n    },\n    &quot;[typescript]&quot;: {\n      &quot;editor.formatOnSave&quot;: true\n    },\n    &quot;eslint.validate&quot;: [\n      &quot;javascript&quot;,\n      &quot;javascriptreact&quot;,\n      &quot;typescript&quot;,\n      &quot;typescriptreact&quot;\n    ]\n  },\n  &quot;extensions&quot;: [\n    &quot;golang.go&quot;,\n    &quot;esbenp.prettier-vscode&quot;,\n    &quot;dbaeumer.vscode-eslint&quot;,\n  ],\n  &quot;shutdownAction&quot;: &quot;none&quot;\n}<\/code><\/pre><\/div>\n\n\n\n<p>devcontainer\u30d5\u30a1\u30a4\u30eb\u306f\u4ee5\u524d\u306eGolang\u3068Node.js\u306edevcontainer\u30d5\u30a1\u30a4\u30eb\u3092\u5408\u4f53\u3055\u305b\u305f\u3082\u306e\u306b\u306a\u308a\u307e\u3059\u3002<br>\u7570\u306a\u3063\u3066\u3044\u308b\u70b9\u3068\u3057\u3066\u306f\u3001docker-compose\u30d5\u30a1\u30a4\u30eb\u306e\u6307\u5b9a\u304b\u3089Dockerfile\u306e\u6307\u5b9a\u306b\u306a\u3063\u3066\u3044\u308b\u70b9\u3067\u3059\u3002<\/p>\n\n\n\n<p>Golang\u3067\u30c7\u30d0\u30c3\u30af\u304c\u3067\u304d\u308b\u3088\u3046.vscode\/launch.json\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-json\" data-lang=\"JSON\"><code>{\n  &quot;version&quot;: &quot;0.2.0&quot;,\n  &quot;configurations&quot;: [\n    {\n      &quot;name&quot;: &quot;Go&quot;,\n      &quot;type&quot;: &quot;go&quot;,\n      &quot;debugAdapter&quot;: &quot;dlv-dap&quot;,\n      &quot;request&quot;: &quot;attach&quot;,\n      &quot;mode&quot;: &quot;remote&quot;,\n      &quot;cwd&quot;: &quot;${workspaceFolder}\/server&quot;,\n      &quot;port&quot;: 2345,\n      &quot;host&quot;: &quot;0.0.0.0&quot;,\n      &quot;showLog&quot;: true,\n    }\n  ]\n}<\/code><\/pre><\/div>\n\n\n\n<p>\u4ee5\u4e0a\u3067\u30b3\u30f3\u30c6\u30ca\u4e00\u3064\u3067\u958b\u767a\u304c\u3067\u304d\u308b\u74b0\u5883\u304c\u3067\u304d\u307e\u3057\u305f\u3002<br>\u958b\u767a\u3059\u308b\u969b\u306f\u3001VSCode\u306e\u4e00\u756a\u5de6\u4e0b\u306e\u30dc\u30bf\u30f3\u304b\u3089\u300cReopen in Container\u300d\u3092\u9078\u629e\u3057\u63a5\u7d9a\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u307e\u3068\u3081<\/h2>\n\n\n\n<p>\u4ee5\u524d\u306e\u958b\u767a\u74b0\u5883\u3060\u3068\u308f\u3056\u308f\u3056\u4e8c\u3064\u306ewindow\u3092\u958b\u304b\u306a\u3044\u3068\u3044\u3051\u305a\u3001git\u306e\u64cd\u4f5c\u3082\u4ee5\u524d\u306e\u74b0\u5883\u3060\u3068\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u305f\u3060\u3001\u4eca\u56de\u306e\u4e00\u3064\u306e\u30b3\u30f3\u30c6\u30ca\u306b\u63a5\u7d9a\u3057\u3066\u958b\u767a\u3059\u308b\u65b9\u6cd5\u3060\u3068\u4e00\u3064\u306ewindow\u3092\u958b\u304f\u3060\u3051\u3067\u6e08\u307f\u3001\u304b\u3064git\u306e\u64cd\u4f5c\u3082\u30b3\u30f3\u30c6\u30ca\u5185\u3067\u884c\u3048\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u4eca\u5f8c\u306f\u3053\u306e\u958b\u767a\u74b0\u5883\u3092\u30d9\u30fc\u30b9\u306bGolang\u3068Next.js\u306e\u30a2\u30d7\u30ea\u3092\u4f5c\u3063\u3066\u307f\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4eca\u56de\u306f\u4ee5\u4e0a\u3068\u306a\u308a\u307e\u3059\u3002\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3057\u305f\uff01<br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u306f\u3058\u3081\u306b \u4e0a\u91ce\u3067\u3059\uff01\u4ee5\u524d\u306b\u300cVSCode\u3067Golang\u2716\ufe0eNext.js\u306e\u958b\u767a\u74b0\u5883\u3092\u69cb\u7bc9\u3057\u3066\u307f\u305f\u300d\u3068\u3044\u3046\u8a18\u4e8b\u3092\u6295\u7a3f\u3057\u305f\u306e\u3067\u3059\u304c\u3001\u8a18\u4e8b\u306e\u5185\u5bb9\u901a\u308a\u306e\u74b0\u5883\u3060\u3068\u8272\u3005\u3068\u4e0d\u4fbf\u306a\u3053\u3068\u304c\u51fa\u3066\u304d\u305f\u306e\u3067\u3001\u6539\u3081\u3066\u958b\u767a\u74b0\u5883\u3092\u898b\u76f4\u3057\u3066\u307f\u307e\u3057\u305f\u3002\u7279 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1516,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"swell_btn_cv_data":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[122,24,17,104,121,2,120],"class_list":["post-1662","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech","tag-devcontainer","tag-docker","tag-golang","tag-next-js","tag-node-js","tag-react","tag-vscode"],"jetpack_featured_media_url":"https:\/\/www.miracleave.co.jp\/contents\/wp-content\/uploads\/2022\/04\/Visual_Studio_Code_1.35_icon.svg_.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.miracleave.co.jp\/contents\/wp-json\/wp\/v2\/posts\/1662","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.miracleave.co.jp\/contents\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.miracleave.co.jp\/contents\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.miracleave.co.jp\/contents\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.miracleave.co.jp\/contents\/wp-json\/wp\/v2\/comments?post=1662"}],"version-history":[{"count":8,"href":"https:\/\/www.miracleave.co.jp\/contents\/wp-json\/wp\/v2\/posts\/1662\/revisions"}],"predecessor-version":[{"id":2349,"href":"https:\/\/www.miracleave.co.jp\/contents\/wp-json\/wp\/v2\/posts\/1662\/revisions\/2349"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.miracleave.co.jp\/contents\/wp-json\/wp\/v2\/media\/1516"}],"wp:attachment":[{"href":"https:\/\/www.miracleave.co.jp\/contents\/wp-json\/wp\/v2\/media?parent=1662"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.miracleave.co.jp\/contents\/wp-json\/wp\/v2\/categories?post=1662"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.miracleave.co.jp\/contents\/wp-json\/wp\/v2\/tags?post=1662"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}