LoginSignup
0
0

[プロトコルバッファ] protoc-gen-go: program not found or is not executable の解決方法

Last updated at Posted at 2023-08-20

概要

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

参考リンク

0
0
0

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
0
0