Goで作って配布する
Azureコマンドラインユーティリティ
de:code夏まつり ~よりコミュニティを楽しくするためのコミュニティのすすめ the FINAL
2020-08-08 八重樫 剛史 Takeshi Yaegashi
自己紹介
2
八重樫 剛史 Takeshi Yaegashi
株式会社バンダイナムコスタジオ所属
Linux・Unix・OSS・Go 言語が好きなエンジニア
組み込みシステム開発、ゲームサーバ開発、CI/CD インフラ開発、
開発環境のクラウドシフトなどの業務に従事
活動場所
ホームページ・ブログ https://l0w.dev
GitHub https://github.com/yaegashi
GitLab https://gitlab.com/yaegashi
Twitter https://twitter.com/hogegashi
今日の話題
3
 私の de:code 2020
 Go と Gophers と Azure
 azbill の紹介とクラウド利用費用可視化のねらい
 Go による Azure プログラミング
 Go によるクロスプラットフォーム・シングルバイナリ CLI ツール開発
私の de:code 2020
4
 ゲーム会社の開発インフラのクラウド導入を推進する立場にいるので、
テクニカルな話題だけでなく、DX・組織変革の話題も大いに参考になりました
 全部は見てませんが参考になったセッションや企画
 A12 A13 2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう!
 S09 Apps on Azure AD - アプリケーション連携 WHY と HOW
 Z05 ビジネスをアジャイルに変革する「Cloud Center of Excellence」とは
 de:code 夏まつり ~よりコミュニティを楽しくするためのコミュニティのすすめ
 実は de:code 2019 では自分も登壇していました
 DT01 ゲームメーカー目線でAzureを活用した開発インフラのクラウドシフトとアプリ設計事例紹介
Go について
5
https://golang.org
 Google 製のプログラミング言語 (2009)
 C ライクでシンプルな文法、豊富なライブラリ
 サーバー、インフラ、コマンドライン (CLI) ツールが得意分野
 Docker, Kubernetes, Terraform など現代のクラウドインフラの実装主力言語
 クロスプラットフォーム開発サポート
 Linux, macOS, Windows など各OS・CPU向け実行ファイルが簡単に作れる
 マスコット Gopher (ホリネズミ)
 Go コミュニティの人たちを Gophers と呼ぶこともあります
Gophers にとっての Microsoft/Windows/Azure
6
 フロンティアもしくはブルーオーシャン (のひとつ)
 Go にとって未踏のサービス・OS・API がたくさんある
 Go・Azure・インフラなど様々なコミュニティで先駆者になれるチャンス
 事例 msgraph.go https://github.com/yaegashi/msgraph.go
 拙作の Microsoft Graph のクライアントライブラリ
このような重要な API のライブラリがまだないのが Go と Azure の世界
 msgraph.go 利用プロジェクト
 Terraform (Goで開発) の各種プロバイダ: msgraph, outlook
 matterbridge チャットブリッジサーバ: Teams 対応に msgraph.go を利用
 Gophers Slack の #microsoft #azure-sdk-for-go などで交流しましょう
 Microsoft 勤務の Gophers もたくさんいます
azbill の紹介
7
https://github.com/yaegashi/azbill
 Go 言語によるコマンドライン (CLI) ユーティリティ
 Azure で使った費用の利用明細を JSONL や CSV の形式でエクスポートする
 オフラインのコスト分析のためのデータを生成する
 Qiita の紹介記事
https://qiita.com/yaegashi/items/dfde7206f7eaf009c345
azbill 開発の動機
8
 最近の仕事:開発インフラのクラウド導入推進
 2019 年度は社内の Azure 利用実績を伸ばし Enterprise Agreement 導入に成功!
 Azure サブスクリプションが作り放題となり、構成の自由度・柔軟性が飛躍的に増す
 クラウド利用コストの可視化
 どの部署・プロジェクトがどれだけ Azure を使っているかを誰でもわかるようにして、
新規利用開始の敷居をさらに下げ、相互チェックも働くようにしたい
azbill
Go による Azure プログラミング
9
https://github.com/Azure/azure-sdk-for-go
 Azure SDK for Go
 Azure Resource Manager (ARM) の REST API を発行できる Go のライブラリ
 VM を作成・起動・停止したり、請求書を照会したりが Go プログラムでできる
 Azure SDK の問題点 (Go に限らない話)
 Azure SDK の更新が最新の ARM REST API に追いついていないことが多い
 例: 新しい形式の利用明細を照会するために Consumption API のバージョン 2019-10-01 を使い
たいが Azure SDK for Go ではバージョン 2019-01-01 までしか使えない
AutoRest による Azure SDK コード生成
10
https://github.com/Azure/autorest
 AutoRest CLI で最新の ARM REST API の定義から SDK コードが生成できる
 azure-rest-api-specs: REST API の OpenAPI 定義
 AutoRest CLI: SDK コード生成 CLI ツール (Node.js)
 autorest.go: Go コード生成プラグイン (C# .NET Core)
$ npm install -g autorest
$ git clone --depth=1 https://github.com/Azure/azure-rest-api-specs.git specs
$ autorest --go 
--tag=package-2019-10 
--output-folder=./azure-sdk/consumption 
--package-name=github.com/foo/bar/azure-sdk/consumption 
specs/specification/consumption/resource-manager
Visual Studio Code と development container による
Go 開発環境セットアップ
 開発環境構築の悩み
 Go でなにか作ってみたいけどインストール
と設定がめんどくさい…
 AutoRest CLI を使おうと思ったら Node.js と
か .NET Core のインストールも必要…
 VSCode の development container が便利
 Linux 開発環境の Docker コンテナを自動的に
作ってシェルを起動してくれる
 azbill も .devcontainer を用意しているので最
新版の開発・テストにすぐ参加できる
 Go の開発においては CLI に限らず JAMstack
アプリなどあらゆる案件でおすすめできる
11
Go によるクロスプラットフォーム・
シングルバイナリ配布
 azbill のバイナリ配布
 Linux, macOS, Windows 向けがある
 Windows なら zip の中の約 9MB の実行ファ
イル azbill.exe だけで動く
 シングルバイナリが便利なところ
 ダウンロードしてすぐに使ってもらえる
 コンテナに簡単に組み込める
 Go によるクロスプラットフォーム・シン
グルバイナリ CLI の例
 kubectl, hugo, docker-compose, などなど
 az aks install-cli
12
GoReleaser によるビルド・リリース
13
https://goreleaser.com
 各OS・CPU向けのビルド・リリースを自動化してくれる CLI ツール
 GitHub Actions, GitLab CI, CircleCI など様々な CI/CD サービスをサポート
 azbill のようなクロスプラットフォーム CLI ツールに最適
 .goreleaser.yml を書くことで設定する
project_name: azbill
builds:
- goos: [linux, darwin, windows]
goarch: [amd64]
archives:
- name_template: '{{.ProjectName}}_v{{.Version}}_{{.Os}}_{{.Arch}}'
format_overrides:
- goos: windows
format: zip
Go による CLI ツール開発
14
 spf13/cobra https://github.com/spf13/cobra
 Go で最も使われている CLI 構築ライブラリ
 コマンドラインオプション解析や bash/zsh 補完などをサポートする
 kubectl などもこれを使っている
 yaegashi/cobra-cmder https://github.com/yaegashi/cobra-cmder
 spf13/cobra の拡張
 階層コマンドの記述とテストがやりやすくなる
 Qiita の記事
https://qiita.com/yaegashi/items/9acc1d22bcc247542a4e
まとめ
15
 Go と Azure とクラウド導入の話を中心にお伝えしました
 Go と Gophers と Azure
 azbill とクラウド費用可視化の取り組み
 Go の得意なクロスプラットフォーム・シングルバイナリ CLI ツール
 これからもいろいろなコミュニティへのアウトプットを頑張っていきます!
おわり
16

Goで作って配布するAzureコマンドラインユーティリティ

  • 1.
  • 2.
    自己紹介 2 八重樫 剛史 TakeshiYaegashi 株式会社バンダイナムコスタジオ所属 Linux・Unix・OSS・Go 言語が好きなエンジニア 組み込みシステム開発、ゲームサーバ開発、CI/CD インフラ開発、 開発環境のクラウドシフトなどの業務に従事 活動場所 ホームページ・ブログ https://l0w.dev GitHub https://github.com/yaegashi GitLab https://gitlab.com/yaegashi Twitter https://twitter.com/hogegashi
  • 3.
    今日の話題 3  私の de:code2020  Go と Gophers と Azure  azbill の紹介とクラウド利用費用可視化のねらい  Go による Azure プログラミング  Go によるクロスプラットフォーム・シングルバイナリ CLI ツール開発
  • 4.
    私の de:code 2020 4 ゲーム会社の開発インフラのクラウド導入を推進する立場にいるので、 テクニカルな話題だけでなく、DX・組織変革の話題も大いに参考になりました  全部は見てませんが参考になったセッションや企画  A12 A13 2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう!  S09 Apps on Azure AD - アプリケーション連携 WHY と HOW  Z05 ビジネスをアジャイルに変革する「Cloud Center of Excellence」とは  de:code 夏まつり ~よりコミュニティを楽しくするためのコミュニティのすすめ  実は de:code 2019 では自分も登壇していました  DT01 ゲームメーカー目線でAzureを活用した開発インフラのクラウドシフトとアプリ設計事例紹介
  • 5.
    Go について 5 https://golang.org  Google製のプログラミング言語 (2009)  C ライクでシンプルな文法、豊富なライブラリ  サーバー、インフラ、コマンドライン (CLI) ツールが得意分野  Docker, Kubernetes, Terraform など現代のクラウドインフラの実装主力言語  クロスプラットフォーム開発サポート  Linux, macOS, Windows など各OS・CPU向け実行ファイルが簡単に作れる  マスコット Gopher (ホリネズミ)  Go コミュニティの人たちを Gophers と呼ぶこともあります
  • 6.
    Gophers にとっての Microsoft/Windows/Azure 6 フロンティアもしくはブルーオーシャン (のひとつ)  Go にとって未踏のサービス・OS・API がたくさんある  Go・Azure・インフラなど様々なコミュニティで先駆者になれるチャンス  事例 msgraph.go https://github.com/yaegashi/msgraph.go  拙作の Microsoft Graph のクライアントライブラリ このような重要な API のライブラリがまだないのが Go と Azure の世界  msgraph.go 利用プロジェクト  Terraform (Goで開発) の各種プロバイダ: msgraph, outlook  matterbridge チャットブリッジサーバ: Teams 対応に msgraph.go を利用  Gophers Slack の #microsoft #azure-sdk-for-go などで交流しましょう  Microsoft 勤務の Gophers もたくさんいます
  • 7.
    azbill の紹介 7 https://github.com/yaegashi/azbill  Go言語によるコマンドライン (CLI) ユーティリティ  Azure で使った費用の利用明細を JSONL や CSV の形式でエクスポートする  オフラインのコスト分析のためのデータを生成する  Qiita の紹介記事 https://qiita.com/yaegashi/items/dfde7206f7eaf009c345
  • 8.
    azbill 開発の動機 8  最近の仕事:開発インフラのクラウド導入推進 2019 年度は社内の Azure 利用実績を伸ばし Enterprise Agreement 導入に成功!  Azure サブスクリプションが作り放題となり、構成の自由度・柔軟性が飛躍的に増す  クラウド利用コストの可視化  どの部署・プロジェクトがどれだけ Azure を使っているかを誰でもわかるようにして、 新規利用開始の敷居をさらに下げ、相互チェックも働くようにしたい azbill
  • 9.
    Go による Azureプログラミング 9 https://github.com/Azure/azure-sdk-for-go  Azure SDK for Go  Azure Resource Manager (ARM) の REST API を発行できる Go のライブラリ  VM を作成・起動・停止したり、請求書を照会したりが Go プログラムでできる  Azure SDK の問題点 (Go に限らない話)  Azure SDK の更新が最新の ARM REST API に追いついていないことが多い  例: 新しい形式の利用明細を照会するために Consumption API のバージョン 2019-10-01 を使い たいが Azure SDK for Go ではバージョン 2019-01-01 までしか使えない
  • 10.
    AutoRest による AzureSDK コード生成 10 https://github.com/Azure/autorest  AutoRest CLI で最新の ARM REST API の定義から SDK コードが生成できる  azure-rest-api-specs: REST API の OpenAPI 定義  AutoRest CLI: SDK コード生成 CLI ツール (Node.js)  autorest.go: Go コード生成プラグイン (C# .NET Core) $ npm install -g autorest $ git clone --depth=1 https://github.com/Azure/azure-rest-api-specs.git specs $ autorest --go --tag=package-2019-10 --output-folder=./azure-sdk/consumption --package-name=github.com/foo/bar/azure-sdk/consumption specs/specification/consumption/resource-manager
  • 11.
    Visual Studio Codeと development container による Go 開発環境セットアップ  開発環境構築の悩み  Go でなにか作ってみたいけどインストール と設定がめんどくさい…  AutoRest CLI を使おうと思ったら Node.js と か .NET Core のインストールも必要…  VSCode の development container が便利  Linux 開発環境の Docker コンテナを自動的に 作ってシェルを起動してくれる  azbill も .devcontainer を用意しているので最 新版の開発・テストにすぐ参加できる  Go の開発においては CLI に限らず JAMstack アプリなどあらゆる案件でおすすめできる 11
  • 12.
    Go によるクロスプラットフォーム・ シングルバイナリ配布  azbillのバイナリ配布  Linux, macOS, Windows 向けがある  Windows なら zip の中の約 9MB の実行ファ イル azbill.exe だけで動く  シングルバイナリが便利なところ  ダウンロードしてすぐに使ってもらえる  コンテナに簡単に組み込める  Go によるクロスプラットフォーム・シン グルバイナリ CLI の例  kubectl, hugo, docker-compose, などなど  az aks install-cli 12
  • 13.
    GoReleaser によるビルド・リリース 13 https://goreleaser.com  各OS・CPU向けのビルド・リリースを自動化してくれるCLI ツール  GitHub Actions, GitLab CI, CircleCI など様々な CI/CD サービスをサポート  azbill のようなクロスプラットフォーム CLI ツールに最適  .goreleaser.yml を書くことで設定する project_name: azbill builds: - goos: [linux, darwin, windows] goarch: [amd64] archives: - name_template: '{{.ProjectName}}_v{{.Version}}_{{.Os}}_{{.Arch}}' format_overrides: - goos: windows format: zip
  • 14.
    Go による CLIツール開発 14  spf13/cobra https://github.com/spf13/cobra  Go で最も使われている CLI 構築ライブラリ  コマンドラインオプション解析や bash/zsh 補完などをサポートする  kubectl などもこれを使っている  yaegashi/cobra-cmder https://github.com/yaegashi/cobra-cmder  spf13/cobra の拡張  階層コマンドの記述とテストがやりやすくなる  Qiita の記事 https://qiita.com/yaegashi/items/9acc1d22bcc247542a4e
  • 15.
    まとめ 15  Go とAzure とクラウド導入の話を中心にお伝えしました  Go と Gophers と Azure  azbill とクラウド費用可視化の取り組み  Go の得意なクロスプラットフォーム・シングルバイナリ CLI ツール  これからもいろいろなコミュニティへのアウトプットを頑張っていきます!
  • 16.

Editor's Notes