概要
Go言語で分散サービスを書く方法を学びたいと思い立ち、「[Go言語による分散サービス
―信頼性、拡張性、保守性の高いシステムの構築]」(https://www.oreilly.co.jp/books/9784873119977/) で勉強を始めました。
その中「2.4 プロトコルバッファのコンパイル」で次のエラーで困った時の解決法のメモです。
~/proglog/StructureDataWithProtobuf$ protoc api/v1/*.proto --go_out=. --go_opt=paths=source_relative --proto_path=.
protoc-gen-go: program not found or is not executable
Please specify a program using absolute path or make sure the program is available in your PATH system variable
--go_out: protoc-gen-go: Plugin failed with status code 1.
protoc-gen-go は、プロトコルバッファ ランタイムと呼ばれるもので、コンパイラをインストールとともに、ランタイムが必要となります。
Protobuf コンパイラのインストール
コンパイラーとランタイムは、それぞれ異なるリポジトリで管理されているので、それぞれからダウンロードして、インストールしなければなりません。
https://github.com/protocolbuffers/protobuf/releases/tag/v24.1
この実行例では、インストール先は、/usr/lcoal/protobuf
にしました。
バージョンはリリースページを参照して、執筆時の最新を指定してあります。
COMPILER_VER=24.1
$ curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v${COMPILER_VER}/protoc-${COMPILER_VER}-linux-x86_64.zip
$ sudo unzip protoc-${VER}-linux-x86_64.zip -d /usr/local/protobuf
インストールすると、下記のようにインクルードファイルも一緒に展開されます。
$ tree /usr/local/protobuf/
/usr/local/protobuf/
├── bin
│ └── protoc
├── include
│ └── google
│ └── protobuf
│ ├── any.proto
│ ├── api.proto
│ ├── compiler
│ │ └── plugin.proto
│ ├── descriptor.proto
│ ├── duration.proto
│ ├── empty.proto
│ ├── field_mask.proto
│ ├── source_context.proto
│ ├── struct.proto
│ ├── timestamp.proto
│ ├── type.proto
│ └── wrappers.proto
└── readme.txt
Protobuf ランタイムのインストール
次のランタイムも、ビルド済の実行形式を/usr/local/protobuf/bin
にインストールします。
https://github.com/protocolbuffers/protobuf-go/releases
RUNTIME_VER=v1.31.0
$ curl -OL https://github.com/protocolbuffers/protobuf-go/releases/download/v1.31.0/protoc-gen-go.${RUNTIME_VER}.linux.amd64.tar.gz
$ sudo tar xzvf protoc-gen-go.${RUNTIME_VER}.linux.amd64.tar.gz -C /usr/local/protobuf/bin
パスの設定
Makefileで実行できるように、PATHを追加します。
export PATH=$PATH:/usr/local/protobuf/bin
実行結果の確認
次のように、コマンドを実行できればOKです。
$ ls -la /usr/local/protobuf/bin
total 14384
drwxr-xr-x 2 root root 4096 8月 20 08:38 .
drwxr-xr-x 4 root root 4096 8月 20 07:51 ..
-r-xr-xr-x 1 root root 8532152 1月 1 1980 protoc
-rwxrwxr-x 1 root root 6184960 1月 1 1970 protoc-gen-go
$ protoc --version
libprotoc 24.1
$ protoc-gen-go --version
protoc-gen-go v1.31.0