月: 2024年6月

  • Go 開発環境: GOROOT、GOPATH、および VSCode 設定の理解

    Go 開発環境: GOROOT、GOPATH、および VSCode 設定の理解

    Go の開発環境を設定する際に、特に VSCode や asdf を使用する場合は、GOROOTGOPATH の役割を理解し、正しく設定することが重要です。
    この記事では、これらのコンポーネントとその関係を整理し、スムーズな開発環境を実現するための設定方法を説明します。

    GOROOT: Go のインストールディレクトリ

    定義: GOROOT は、Go がインストールされているディレクトリを指す環境変数です。Go のバイナリ、標準ライブラリのソースコード、およびコンパイラツールが含まれています。

    目的: GOROOT は Go のツールチェーンに対して、コアライブラリやバイナリの場所を教える役割を果たします。Go をインストールすると自動的に設定されるため、通常は変更する必要はありません。ただし、複数の Go バージョンをインストールしている場合は設定が必要です。

    :asdf を使って Go のバージョン 1.22.1 をインストールした場合、GOROOT は次のようになります。

    /Users/your.name/.asdf/installs/golang/1.22.1/go

    GOPATH: ワークスペースディレクトリ

    定義: GOPATH は、Go のコード、依存関係、およびバイナリが保存されるワークスペースのルートを指定する環境変数です。

    目的: GOPATH は、Go のツールチェーンに対してプロジェクトのソースコードやサードパーティパッケージのインストール場所を教えます。GOROOT とは異なり、GOPATH は任意のディレクトリに設定できます。

    : 一般的な GOPATH の設定は次のようになります。

    /Users/your.name/go

    VSCode 設定: GOROOT と GOPATH の設定

    VSCode を使用して Go の開発を行う場合、エディタに対して Go のインストール場所(GOROOT)とワークスペース(GOPATH)を知らせる設定が必要です。

    VSCode 設定:

    • go.goroot: この設定は VSCode に Go のインストール場所を教えます。asdf が管理する Go のインストールパス内の go ディレクトリを指す必要があります。
    • go.gopath: この設定は VSCode に Go のワークスペースの場所を教えます。GOPATH に設定したディレクトリを指します。

    設定例:

    { "go.gopath": "/Users/your.name/go", "go.goroot": "/Users/your.name/.asdf/installs/golang/1.22.1/go" }

    なぜ GOROOT と GOPATH は異なるパスなのか?

    GOROOTGOPATH は異なる目的を持つため、別々のパスを設定する必要があります。

    • GOROOT は Go のインストール自体を指します。Go コンパイラ、標準ライブラリ、ツールチェーンが含まれています。
    • GOPATH は個人の Go ワークスペースを指します。プロジェクトのソースコード、ダウンロードした依存関係、ビルドしたバイナリが含まれます。

    asdf を使用すると、複数の Go バージョンを管理できますが、それぞれのバージョンに対して GOROOT が異なります。一方、GOPATH は一貫して個人のワークスペースを指します。

    実際の設定例: 環境のセットアップ

    1. Go のインストール(asdf を使用):
      asdf install golang 1.22.1
      asdf global golang 1.22.1
    2. 環境変数の設定: シェルの設定ファイル(~/.bashrc, ~/.zshrc など)に以下を追加します。

      export GOROOT=$HOME/.asdf/installs/golang/1.22.1/go export GOPATH=$HOME/go export PATH=$GOROOT/bin:$PATH
    3. VSCode の設定: settings.json を開き、次の設定を追加します。

      { "go.gopath": "/Users/your.name/go", "go.goroot": "/Users/your.name/.asdf/installs/golang/1.22.1/go" }

    結論

    GOROOTGOPATH の違いと、それを VSCode に設定する方法を理解することは、スムーズな Go 開発環境を構築するために非常に重要です。これらのパスを正しく設定することで、Go のツールやエディタが必要なファイルや依存関係を正しく見つけることができ、設定に関連するエラーのリスクを減らすことができます。

    詳細については、公式の Go ドキュメント「Go 開発環境のセットアップ」を参照してください。

  • Dockerを使ってMySQL 8.0をパスワードなしでローカル接続する

    Dockerを使ってMySQL 8.0をパスワードなしでローカル接続する

    以下の手順で、MySQL 8.0をDockerで起動し、パスワードなしでローカル接続できるように設定する方法を説明します。

    手順 1: Dockerコンテナの起動

    まず、パスワードなしでMySQLコンテナを起動します。MYSQL_ALLOW_EMPTY_PASSWORD環境変数をyesに設定します。

    docker run --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d -p 3306:3306 mysql:8.0

    このコマンドは、以下のことを行います:

    1. mysqlという名前のコンテナを作成
    2. MySQLのルートユーザーのパスワードを空に設定
    3. コンテナをバックグラウンドで実行
    4. ローカルの3306ポートをコンテナの3306ポートにマッピング

    手順 2: MySQLクライアントで接続

    次に、ローカルのMySQLクライアントを使ってMySQLサーバーに接続します。パスワードなしで接続するために、-pオプションを省略します。

    mysql -h 127.0.0.1 -P 3306 -u root

    注: mysql のコンテナが立ち上がるまでの間

    ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 2

    というエラーが表示されます。その際数秒待って再度接続を試みてください。

    トラブルシューティング

    コンテナが正しく起動しているか確認:

    docker ps -a

    コンテナのログを確認:

    docker logs mysql

    MySQLサーバーが正しく起動していない場合、ログを確認してエラーメッセージをチェックし、適切な対策を講じてください。

  • ローカル環境でHTTPSサーバーを立ち上げる

    ローカル環境でHTTPSサーバーを立ち上げる

    OpenSSLとNode.jsの http-server モジュールを使って、ローカル環境でHTTPSサーバーを立ち上げる方法を説明。

    Subject Alternative Name (SAN) を設定する

    vim SAN.txt
    ---
    subjectAltName = DNS:sumito.jp

    この手順では、SANを指定するためのファイル SAN.txt を作成します。ここでは sumito.jp をSANとして指定していますが、適宜変更してください。

    秘密鍵と証明書の作成

    openssl genrsa -out server.key 2048
    openssl req -out server.csr -key server.key -new
    openssl x509 -req -days 3650 -signkey server.key -in server.csr -out server.crt -extfile SAN.txt

    この一連のコマンドで、2048ビットの秘密鍵 server.key と、その秘密鍵に基づく証明書署名リクエスト(CSR) server.csr を作成します。最後に、CSRと秘密鍵から、有効期限3650日の自己署名証明書 server.crt を作成しています。この際、先ほど作成した SAN.txt ファイルを使ってSANを設定しています。

    HTTPSサーバーの起動

    http-server -S -C server.crt -K server.key -p 443

    最後に、http-server コマンドを実行して、HTTPSサーバーを起動します。このコマンドでは、作成した server.crtserver.key を指定し、ポート443でリッスンするように指定しています。

    hosts に以下の通り記載します

    127.0.0.1       sumito.jp

    これで、ローカル環境でHTTPSサーバーが立ち上がりました。ブラウザで https://sumito.jp/ にアクセスすると、自己署名証明書の警告が出る場合がありますが、それを無視して進めばウェブサーバーにアクセスできます。

    注意点として、この方法で作成した証明書は自己署名なので、実際の運用環境では使えません。

    本番環境で使う場合は、認証局から発行された適切な証明書を取得する必要があります