25
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Go言語で作った実行ファイルを小さくしよう!

Posted at

#Go実行ファイルを小さくしたい!
Go言語で作った実行ファイルは基本的に外部のライブラリに依存せず、
静的にライブラリをリンクしてスタンドアローンな実行ファイルです。
そのため、hello worldアプリでもファイルサイズが余裕で2MBを超えたりします。
この実行ファイルを少しでも小さくしようーって事です。

方法は簡単。UPX使えばいいです(そのまんま)
UPXは実行ファイルを圧縮してくれる素敵ソフト。
もちろん圧縮されたそのままで実行ができます。
(一度圧縮した物を展開する方法は知らないです・・・)
#準備
Ubuntu環境であれば、
sudo apt-get install upx-ucl
これでUPXコマンドがインストールできます。
upx [実行ファイル」
で、実行ファイルを圧縮してくれるのですが、
Go言語実行ファイルはそのままでは圧縮後の実行ファイルが実行できません・・・
・・・の、はずだったんだけど、あれ?今テストしてみたら実行できるや・・・
少し前まで、圧縮に失敗して出来上がった実行ファイルが走らなかったんだけどなぁ・・・
それでGo言語用に修正してくれるgoupxってのを使って圧縮する感じだったんだけど・・・?

ちなみに、goupxは、
go get github.com/pwaller/goupx
これでインストールできます。
$GOPATH/bin にパスが通っていれば、そのまま goupx で実行できます。
環境によっては普通のupxでは実行ファイルが壊れるかも。
そんな時はgoupxを通して使えば解決です。

これだけでファイルサイズは元の実行ファイルの40%くらいになります(すごい!)
#さらに小さくしよう!
しかし、さらに小さくできるのです!
upxで実行ファイルを圧縮する「前に」ストリップにかけます。
strip [実行ファイル]
stripコマンドは、ubuntuであれば普通は標準で入ってます。
stripコマンドは実行ファイルからデバッグ情報とか不要情報を削除するコマンド。
(・・・だと思っているけど、間違っているかも)
※「strip」だけのキーワードで検索するとえっちぃーのが出てきたりするので気を付ける事

#実行ファイルの圧縮で実行する順番
以上の事を次の順番でします。
1、go build で実行ファイルを作成。
2、stripコマンドで実行ファイルを掃除。
3、upxコマンド(goupxコマンド)で実行ファイルを圧縮。
※2番と3番を逆にするとゴミファイルが完成します。上記順番厳守です。
これで、元の実行ファイルの20%くらいになります(超すごい!)

#実行ファイルを小さくする意味
ファイルサイズを小さくする利点はほとんどないです・・・
実行する時には圧縮されている実行ファイルをメモリ内で展開して実行しているらしいので、
利点どころか逆にその展開しないといけない分一手間増えて負荷が増えるらしいです・・・
今の時代、数十MBくらいなんともない大容量の時代ですし、ちょっと小さくなってもなんとも・・・
実行ファイル圧縮というのは浪漫機能なのかもしれません・・・
・・・それでもまぁ、俺は必ず実行ファイル圧縮してるけどね!

#注意
ちなみに・・・
上記の方法で圧縮した実行ファイルを使っても、俺の環境下では不具合や不思議挙動などは見られません。
しかし、もしも何か不具合などが発生したとしても俺は責任持てませんので自己責任で実行してくださいませ。

ちなみにちなみに・・・
上記方法は、Ubuntuで行う場合の方法です。
その他の環境では・・・ちょっとわかんないです。

25
25
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?