<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>VSCode on Arch使いの日記</title>
    <link>https://blog.grainrigi.net/tags/vscode/</link>
    <description>Recent content in VSCode on Arch使いの日記</description>
    <generator>Hugo -- gohugo.io</generator>
    <copyright>Copyright © 2022, grainrigi; all rights reserved.</copyright>
    <lastBuildDate>Thu, 01 Dec 2022 20:34:33 +0900</lastBuildDate><atom:link href="https://blog.grainrigi.net/tags/vscode/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>VSCode Dev Container内で保存したファイルのパーミッション問題に対処する</title>
      <link>https://blog.grainrigi.net/post/vscode-dev-container-permission/</link>
      <pubDate>Thu, 01 Dec 2022 20:34:33 +0900</pubDate>
      
      <guid>https://blog.grainrigi.net/post/vscode-dev-container-permission/</guid>
      <description>
        
          
            VSCode Dev Container内で保存したファイルの所有者はコンテナの実行ユーザーになってしまうため、 rootで立ち上がったコンテナを使って作業をすると、保存したファイルをホスト側から編集できなくなる(Permission Deniedとなる)という問題が生じる (Windowsの場合は発生しない)。 この問題に対処するため、Dev Containerの実行ユーザーをホスト側と揃えるようにするための方法を見ていく。
なお、今回の基本的なアイデアはこちらのページを参考にしている。
VSCode Dev Container on WSL2のPermission問題メモ - Qiita
設定ファイルの編集 devcontainer.jsonの編集 まず、devcontainer.jsonに以下の設定を追加する。
1{ 2 &amp;#34;initializeCommand&amp;#34;: &amp;#34;${localWorkspaceFolder}/.devcontainer/getuid&amp;#34;, 3} initializeCommandは、DevContainerの起動時にホスト側で実行するスクリプトを指定するオプションである。
今回は、getuid(シェルスクリプト)にて現在のユーザーのUID, GID, ユーザー名を抽出するのに使用する。
getuid, getuid.cmdの作成 まず、以下の内容でgetuidというファイルを作成する。
1#!/bin/bash 2echo &amp;#34;UID=$(id -u $USER)&amp;#34; &amp;gt; .devcontainer/.env 3echo &amp;#34;GID=$(id -g $USER)&amp;#34; &amp;gt;&amp;gt; .devcontainer/.env 4echo &amp;#34;USERNAME_=$USER&amp;#34; &amp;gt;&amp;gt; .devcontainer/.env さらに、一応実行権限を付与する。
1$ chmod +x .devcontainer/getuid Mac, Linuxの場合はこれでうまくUID, GID, ユーザー名を抽出できる。 ここで保存された.envは次節で示すdocker-compose.ymlで自動的に読み込まれる。
ちなみに、4行目でUSERNAME_=(アンダースコア付)としているのは、USERNAMEがWindowsの環境変数で既に定義されており干渉するためである。
Windows対応 Windowsの場合はUID, GIDの概念がなく、そもそもこのパーミッション問題自体が発生しないので抽出する必要がない。 今回は、Windowsの場合にはそもそも.envを作成しないようにする。
以下の内容でgetuid.cmdというファイルを作成する。
1@echo off 2 3REM .envがあれば削除 4if exist .
          
          
        
      </description>
    </item>
    
    <item>
      <title>VSCodeのDev Containerを真面目にセットアップしてみる(Golang)</title>
      <link>https://blog.grainrigi.net/post/vscode-dev-container/</link>
      <pubDate>Wed, 30 Nov 2022 19:56:42 +0900</pubDate>
      
      <guid>https://blog.grainrigi.net/post/vscode-dev-container/</guid>
      <description>
        
          
            アプリケーション開発を行う上で、開発環境の構築は地味に煩わしい作業の一つである。 VSCodeの拡張機能「Dev Containers」を使うことで、 Dockerfileにより定義された一貫した開発環境を簡単に配布・利用することが可能となる。 今回はGolangを使った実際のアプリケーション開発を想定してDev Containerをセットアップしてみる。
はじめに 今回はGolang+PostgreSQLによるWebアプリケーション開発を想定し、 以下の要件を満たせるようにする。
PostgreSQLの開発用データベースが自動的にセットアップされる Golangの言語ツール(補完等)を使えるようにする なお、検証に用いた環境は以下のとおりである。
ArchLinux x86_64 Visual Studio Code (binary) 1.73.0 Dev Containers 0.262.3 Docker 20.10.21 Dev Container設定ファイルの作成 Dev Containerの設定ファイルはすべて.devcontainer/以下に作成していく。
今回作成するファイルは以下の通り。
1.devcontainer 2├── devcontainer.json 3├── docker-compose.yml 4└── Dockerfile docker-compose.ymlの作成 今回は開発用のコンテナの他にDB用のコンテナも必要なので、 それらをまとめて立ち上げるためにdocker-compose.ymlを用意する。
1version: &amp;#39;3&amp;#39; 2 3services: 4 dev: 5 build: . 6 stdin_open: true 7 volumes: 8 - ../:/workspace 9 psql: 10 image: postgres:15-alpine 11 volumes: 12 - pgdata:/var/lib/postgresql/data 13 environment: 14 - POSTGRES_PASSWORD=test 15 - POSTGRES_USER=test 16 - POSTGRES_DB=test 17 18volumes: 19 pgdata: docker-composeを自前で用意する場合、ワークスペース(プロジェクトのディレクトリ)は自力でマウントする必要がある。 今回は.
          
          
        
      </description>
    </item>
    
  </channel>
</rss>
