# .protoファイル (/ja/docs/specs/proto-files)

`.proto`ファイルは、gRPCサービスを記述します。サービスのメソッドと、それらが受け取って返すメッセージです。
ワークスペースに置いておけば、[gRPCリクエスト](/docs/requests/grpc)はサーバに問い合わせずに、メッセージの作成と読み取りにそれを使います。
仕様ページでは、`.proto`ファイルがOpenAPIドキュメントと並んで表示され、専用のエディタとアウトラインを使えます。

Alpenglowの例には、`alpenglow.inventory.v1.Inventory`サービスを持つ`inventory.proto`が1つあります。

<Shot id="specs-proto" alt="仕様ページで開いたinventory.proto。左にソース、右にInventoryサービスのListWarehouses、WatchStock、Reserve（それぞれにプラスボタン付き）と、続いてメッセージが表示されている" />

## ファイルを追加する [#adding-a-file]

仕様のサイドバーで、<strong>仕様</strong>ヘッダーの<strong>+</strong>をクリックします。

- **新規Protoファイル**は、小さなサンプルサービス`Greeter`を持つ`specs/service.proto`を作成します。これを自分のものに置き換えてください。
- <strong>Protoファイルを追加…</strong>は、Macから`.proto`ファイルを`specs`フォルダにコピーします。ほかのファイルをインポートしている場合は、それらも`specs`にコピーしてください。Googleのwell-known types（`google/protobuf/timestamp.proto`など）は組み込まれています。

ファイルは、サイドバーの<strong>Protoファイル</strong>に一覧表示されます。右クリックすると、<strong>Finderに表示</strong>と<strong>削除…</strong>を選べます。
削除する前に確認が表示され、ファイルはゴミ箱に入ります。そのファイルを使っていたgRPCリクエストには、別のファイルかサーバのリフレクションが必要になります。

## 編集 [#editing]

ファイルをクリックして開きます。左にソースがシンタックスハイライト付きで表示されます。上のバーには、ファイル、**Protocol Buffers**、そして**問題なし**、またはパーサが見つけた最初の問題（`inventory.proto:12: expected “;”`など）が表示されます。

右のアウトラインには、ファイルが宣言している内容が表示され、入力に合わせて更新されます。

- 各**サービス**とそのメソッド。各メソッドに、種類（`unary`、`server streaming`など）と、入力および出力のメッセージが表示されます。
- **メッセージ**とそのフィールドおよび型。
- **列挙型**。

解析できないファイルでは、<strong>ファイルを解析できるとアウトラインが表示されます。</strong>と表示されます。

Echolotは、変更のたびに少し待ってからファイルを保存し、別のファイルを開いたときやページを離れたときにも保存します。書き込めない場合は、**Protoファイルを保存できませんでした**と表示され、**再試行**、**コピーを保存…**、**変更内容を破棄**、**編集を続ける**を選べます。
[仕様](/docs/specs/editing#saving)の場合と同じです。編集内容は、保存されるまでエディタに保持されます。

仕様ページで同時に開けるファイルは1つで、`.proto`ファイルかOpenAPI仕様のどちらかです。一方を開くと、もう一方は保存されて閉じます。

## メソッドからリクエストを作成する [#requests-from-methods]

アウトラインでメソッドの横の<strong>+</strong>をクリックすると、そのメソッドのgRPCリクエストが作成されます。
リクエストはこの`.proto`ファイルを使い、そのサービスとメソッドを呼び出し、すべてのフィールドにサンプル値を入れたメッセージから始まります。URLを自分のサーバに向けて送信します。
[gRPC](/docs/requests/grpc)では、送信、ストリーミングメソッド、ファイルの代わりにサーバのリフレクションからメソッドを取得する方法を説明しています。

## コマンドラインから [#from-the-command-line]

`echolot grpc describe --proto api.proto`は、ファイルのサービス、メソッド、フィールドを一覧表示し、`echolot grpc call`はメソッドを呼び出します。[echolot grpc](/docs/cli/grpc)を参照してください。
