Slide 1

Slide 1 text

Goで作って配布する Azureコマンドラインユーティリティ de:code夏まつり 〜よりコミュニティを楽しくするためのコミュニティのすすめ the FINAL 2020-08-08 ⼋重樫 剛史 Takeshi Yaegashi

Slide 2

Slide 2 text

⾃⼰紹介 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

Slide 3

Slide 3 text

今⽇の話題 3 § 私の de:code 2020 § Go と Gophers と Azure § azbill の紹介とクラウド利⽤費⽤可視化のねらい § Go による Azure プログラミング § Go によるクロスプラットフォーム・シングルバイナリ CLI ツール開発

Slide 4

Slide 4 text

私の 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を活⽤した開発インフラのクラウドシフトとアプリ設計事例紹介

Slide 5

Slide 5 text

Go について 5 https://golang.org § Google 製のプログラミング⾔語 (2009) § C ライクでシンプルな⽂法、豊富なライブラリ § サーバー、インフラ、コマンドライン (CLI) ツールが得意分野 - Docker, Kubernetes, Terraform など現代のクラウドインフラの実装主⼒⾔語 § クロスプラットフォーム開発サポート - Linux, macOS, Windows など各OS・CPU向け実⾏ファイルが簡単に作れる § マスコット Gopher (ホリネズミ) - Go コミュニティの⼈たちを Gophers と呼ぶこともあります

Slide 6

Slide 6 text

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 もたくさんいます

Slide 7

Slide 7 text

azbill の紹介 7 https://github.com/yaegashi/azbill § Go ⾔語によるコマンドライン (CLI) ユーティリティ § Azure で使った費⽤の利⽤明細を JSONL や CSV の形式でエクスポートする § オフラインのコスト分析のためのデータを⽣成する § Qiita の紹介記事 https://qiita.com/yaegashi/items/dfde7206f7eaf009c345

Slide 8

Slide 8 text

azbill 開発の動機 8 § 最近の仕事:開発インフラのクラウド導⼊推進 - 2019 年度は社内の Azure 利⽤実績を伸ばし Enterprise Agreement 導⼊に成功! - Azure サブスクリプションが作り放題となり、構成の⾃由度・柔軟性が⾶躍的に増す § クラウド利⽤コストの可視化 - どの部署・プロジェクトがどれだけ Azure を使っているかを誰でもわかるようにして、 新規利⽤開始の敷居をさらに下げ、相互チェックも働くようにしたい azbill

Slide 9

Slide 9 text

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 までしか使えない

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

Visual Studio Code と development container による Go 開発環境セットアップ § 開発環境構築の悩み - Go でなにか作ってみたいけどインストール と設定がめんどくさい… - AutoRest CLI を使おうと思ったら Node.js と か .NET Core のインストールも必要… § VSCode の development container が便利 - Linux 開発環境の Docker コンテナを⾃動的に 作ってシェルを起動してくれる - azbill も .devcontainer を⽤意しているので最 新版の開発・テストにすぐ参加できる - Go の開発においては CLI に限らず JAMstack アプリなどあらゆる案件でおすすめできる 11

Slide 12

Slide 12 text

Go によるクロスプラットフォーム・ シングルバイナリ配布 § azbill のバイナリ配布 - Linux, macOS, Windows 向けがある - Windows なら zip の中の約 9MB の実⾏ファ イル azbill.exe だけで動く § シングルバイナリが便利なところ - ダウンロードしてすぐに使ってもらえる - コンテナに簡単に組み込める § Go によるクロスプラットフォーム・シン グルバイナリ CLI の例 - kubectl, hugo, docker-compose, などなど - az aks install-cli 12

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

まとめ 15 § Go と Azure とクラウド導⼊の話を中⼼にお伝えしました - Go と Gophers と Azure - azbill とクラウド費⽤可視化の取り組み - Go の得意なクロスプラットフォーム・シングルバイナリ CLI ツール § これからもいろいろなコミュニティへのアウトプットを頑張っていきます!

Slide 16

Slide 16 text

おわり 16