---
title: Goでエクセル入出力できるGUIアプリを作った
tags: 
author: [三島賢祐](https://www.docswell.com/user/5543922)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/LJ13Y2MZ7G.jpg?width=480
description: Goでエクセル入出力できるGUIアプリを作った by 三島賢祐
published: January 17, 25
canonical: https://www.docswell.com/s/5543922/56V9N8-Gophers-Gathering-2025-01-18
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/LJ13Y2MZ7G.jpg)

Go でエクセル入出力できる GUI アプリを作った
2025/01/18


# Page. 2

![Page Image](https://bcdn.docswell.com/page/GJWPGR3672.jpg)

1. はじめに
2025/01/18
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/4EZKLRVRE3.jpg)

自己紹介（三島）
社員数百人規模の会社で社内 SE やっています
ほぼ全員が非エンジニアの会社
入社してからは独学でキャッチアップしながらの開発
触ったことがあるプログラム
R（tidyverse）で集計分析したり
Python で Flask のアプリ保守したり
React で簡単な社内アプリ作ったりなど
2025/01/18
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/Y76QWR517V.jpg)

紹介したいこと
Go 言語はほぼ未経験だったがアプリリリースまで進められた
どんなアプリか？
初学者目線からの、触ってみた上での気づき
2025/01/18
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/G75RM8YLE4.jpg)

２．作成アプリの概要
2025/01/18
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/9J2D9KG3JR.jpg)

アプリの全体像
社内業務で利用してもらう想定のアプリです。
色んなデータを取り込んで、分析して、エクセルに書き出します。
2025/01/18
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/DEY24NV8EM.jpg)

想定されるユースケース
利用ユーザは社内メンバーのみ
ツールを利用するのは非エンジニア（Windows）
個人開発
処理時間は多少長くてもよい
⇒
2025/01/18
小規模アプリ
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/VJN8YXM978.jpg)

言語選定
なぜ Go を選んだか？
exe 単体で Windows ユーザに配布できて、バンドルサイズが小さい
言語習得が用意
他言語との比較（GUI のアプリ配布ができる言語）
Node.js：electron が候補だが、バンドルサイズが 200MB（ちょっと重い）
Rust：Tauri も有力だが、Rust は習得コストが高そう
2025/01/18
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/YE9KP8N3E3.jpg)

そもそも、なぜアプリにする必要があるか？
「エクセルでは処理ができない」という理由が大きい
100 万行以上のデータ処理や、複数の大規模データの組み合わせ計算になると、
プログラム開発の選択肢が出てくる
BI ツールや Access などでも集計可能だが、表現の自由度は低い
「プログラムができる屋台のおっちゃん」の需要
「おっちゃん、X のときに Y できるプログラム作ってよ！」
「あいよ！ちょっとまってな！」
⇒ 非 IT がメインの会社では、
2025/01/18
ちょっとした依頼に答えられるフットワークが必要
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/GE8RD8KLJD.jpg)

３．実際に触ってみての感想
2025/01/18
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/LELKMRZQJR.jpg)

exe ファイルでの実行環境配布がとても簡単だった
Go をインストールして、
コード書いて、
go build したら配布できる、というのはめちゃくちゃお手軽だった。
2025/01/18
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/4JM2YR4KJW.jpg)

構造体とインターフェース
Go の第一印象は・・・クラスがない！
他言語では、状態を持ったオブジェクトを操作する場合、「クラス」を知らなけ
ればならない
でも、クラスを使ったとしても状態を「完璧に」管理するのは難しい
なぜクラスがないのか？
クラスを作らない = オブジェクト指向の「沼」にはまらせない、
という言語設計者のやさしさ？
2025/01/18
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/PJRM9RW6E9.jpg)

excelize パッケージの使い勝手の良さ
シンプルな関数設計
ハマる部分もなくエクセル読込みも出力もできたので良かった
特に、リッチテキストに対応していたのは嬉しい
2025/01/18
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/PEXVQRPD7X.jpg)

excelize のセルの文字スタイル設定
Style 構造体を作り、セルに対してフォントを設定する
エクセルでのアウトプットを作りこむ場合、しっかり設計した方がいいかも
2025/01/18
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/3EKQ9RDDED.jpg)

例）あるセルは赤色で太字にしたい
// 赤色太字スタイルを定義
style, err := f.NewStyle(&amp;excelize.Style{
Font: &amp;excelize.Font{
Bold: true,
Color: &quot;FF0000&quot;, // 赤色
},
})
if err != nil {
// エラー処理
}
// セルA1にスタイルを適用
err = f.SetCellStyle(sheetName, &quot;A1&quot;, &quot;A1&quot;, style)
if err != nil {
// エラー処理
}
2025/01/18
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/L73PW8RPE5.jpg)

反省：自動テストはちゃんとしておくべきだった
文法はシンプルだが、設計は大変
HTTP や DB は気にしなくてよかったので、基本文法の範囲でリリースができた
だけど、コード全体を見通しながら依存関係を意識して設計するのは難しかった
気を抜いていたら「エクセル」「分析データ」という２つの巨大な構造体が...
テストしやすい設計手法を理解する
不具合対応や差し込みでの追加要望対応時の検証が大変だった
「データを流すと最後まで流れる」最低限のテストしか用意できなかった
テストコードをうまく管理するノウハウは理解しておきたい
（リファクタリング、レガシーコード改善ガイド、Good Code,Bad Code）
2025/01/18
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/87DLKMY3EG.jpg)

４．機会があれば取り組みたいこと
excelize.StreamWriter を試してみる
GUI に Walk を使ってみたが、TUI アプリで実装してもよいかも
リリースに応じた自動アップデート
2025/01/18
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/VJP2KR6PJ8.jpg)

まとめ
小規模な GUI アプリ開発において、Go は有力な選択肢の 1 つ
excelize パッケージを使えば、エクセルの入出力が簡単に実装できる
言語習得は簡単だが、設計スキルの習得は遠い道のり
2025/01/18
18


