May 2, 2018

WSLENVでWSLとWindowsの環境変数を共有する(Go開発環境編)

見た目は地味だが役に立つ Windows 10 April 2018 Update (別名: バージョン1803)がリリースされました。タイムラインなど目立つ機能が注目されていますが、開発者支援系の機能、ツールも拡充されています。特に、WSL/Windowsの連携、相互運用まわりは着実に進化しています。そのうちのひとつが、このエントリーで紹介するWSLENVです。 WSLENVは、WSL/Windows間で環境変数を共有する仕組みです。ただ単純に共有するだけでなく、ルールに従って変換も行います。これが地味に便利。でも地味だから、あまり話題になっていない。なので具体例で紹介しよう、というのがこのエントリーの目的です。 TL;DR 英語が読めて、「あ、それ便利ね」とピンとくる人は以下を。 Share Environment Vars between WSL and Windows Go開発環境を例に 前述のリンクでも紹介されていますが、Goの開発環境はWSLENVの代表的なユースケースです。GOPATHをいい感じにWSL/Windowsで共有できます。掘り下げていきましょう。 想定開発者像、ペルソナ Windows端末を使っている Go言語を使っている CLIはbash/WSL中心 スクリプト書くならPowerShellもいいけど、インタラクティブな操作はbashが楽 アプリをDockerコンテナーとしてビルドするなど、OSSエコシステム、ツールとの連携を考慮 とはいえエディタ/IDEはWindows側で動かしたい、最近はVS Code中心 前提条件 WSL、WindowsそれぞれにGoを導入 バージョン管理のためにも、パッケージマネージャーがおすすめ わたしはWSL(Ubuntu)でapt、WindowsではChocolateyを使ってGoを導入しています GOPATHは %USERPROFILE%go とする ユーザー名を tomakabeとすると C:\Users\tomakabe\go setx GOPATH “$env:USERPROFILE\go” で設定 WSLでもこのディレクトリをGOPATHとする VS Code + Go拡張をWindowsに導入 WindowsのCLIはPowerShellを利用 そぞろ歩き その1(WindowsでのGo開発) では、何が課題で、WSLがどのようにそれを解決するか、見ていきましょう。 まず、Windowsで環境変数GOPATHを確認します。 PS C:\WINDOWS\system32> Get-ChildItem env:GOPATH Name Value ---- ----- GOPATH C:\Users\tomakabe\go GOPATHに移動し、ディレクトリ構造を確認します。この環境にはすでにディレクトリbinとsrcがあり、binにはいくつかexeが入っています。VS CodeのGo拡張を入れると導入を促されるツール群は、ここに格納され、構文チェックや補完でVS Codeと連動します。 Read more

December 4, 2017

Windows上でLinux向けGoバイナリをDockerでビルドする

小ネタです Goはクロスプラットフォーム開発しやすい言語なのですが、Windows上でLinux向けバイナリーをビルドするなら、gccが要ります。正直なところ入れたくありません。なのでDockerでやります。 条件 Docker for Windows Linuxモード ドライブ共有 PowerShell窓で実行 ビルドしたいGoのソースがあるディレクトリで以下のコマンドを実行します。Linux向けバイナリーが同じディレクトリに出来ます。 docker run --rm -it -e GOPATH=/go --mount type=bind,source=${env:GOPATH},target=/go --mount type=bind,source=${PWD},target=/work -w /work golang:1.9.2-alpine go build -a -tags netgo -installsuffix netgo -o yourapp_linux golang:1.9.2-alpine DockerイメージはGOPATHに/goを設定してビルドされていますが、念のため実行時にも設定 -v オプションでのマウントは非推奨になったので –mount で スタティックリンク

November 28, 2017

Azure Blob アップローダーをGoで書いた、そしてその理由

Azure Blob アップローダーをGoで書いた ふたつほど理由があり、GolangでAzure Blobのファイルアップローダーを書きました。 ひとつめの理由: SDKが新しくなったから 最近公式ブログで紹介された通り、Azure Storage SDK for Goが再設計され、プレビューが始まりました。GoはDockerやKubernetes、Terraformなど最近話題のプラットフォームやツールを書くのに使われており、ユーザーも増えています。再設計してもっと使いやすくしてちょ、という要望が多かったのも、うなずけます。 ということで、新しいSDKで書いてみたかった、というのがひとつめの理由です。ローカルにあるファイルを読んでBlobにアップロードするコードは、こんな感じ。 (2018/6/17) 更新 SDKバージョンを 2017-07-29 へ変更 関数 UploadStreamToBlockBlob を UploadFileToBlockBlob に変更 Parallelism オプションを追加 ヘルパー関数 handleErrors を追加 package main import ( "context" "flag" "fmt" "log" "net/url" "os" "github.com/Azure/azure-storage-blob-go/2017-07-29/azblob" ) var ( accountName string accountKey string containerName string fileName string blockSize int64 blockSizeBytes int64 parallelism int64 ) func init() { flag.StringVar(&accountName, "account-name", "", "(Required) Storage Account Name") flag.StringVar(&accountKey, "account-key", "", "(Required) Storage Account Key") flag. Read more

© Copyright 2019 Toru Makabe

Powered by Hugo & Kiss.