created: 2023-05-24T07:38:54.499Z

gmailctl で認証するところまでを細かく

認証情報を設定してない状態で gmailctl init をたたくとこのようなメッセージが出る。メッセージは丁寧にかかれているが英語表記になっている。GCPのコンソールが日本語設定の場合の操作をメモっておく。

$ gmailctl init
The credentials are not initialized.

To do so, head to

1. Create a new project if you don't have one.
1. Go to 'Enable API and services', search for Gmail and enable it.
2. Go to 'OAuth consent screen'.
    2a. If your account is managed by an organization, you have to
        select 'Internal' as 'User Type'. For individual accounts
        select 'External'.
    2b. Set an application name (e.g. 'gmailctl').
    2c. Use your email for 'User support email' and 'Developer
        contact information'. Save and continue.
    3c. Select 'Add or remove scopes' and add:
    3d. Save and continue until you're back to the dashboard.
3. You now have a choice. You can either:
    * Click on 'Publish App' and avoid 'Submitting for
      verification'. This will result in scary confirmation
      screens or error messages when you authorize gmailctl with
      your account (but for some users it works), OR
    * You could add your email as 'Test user' and keep the app in
      'Testing' mode. In this case everything will work, but
      you'll have to login and confirm the access every week (token
4.  Go to Credentials on the left.
    4a. Click 'Create credentials'.
    4b. Select 'OAuth client ID'.
    4c. Select 'Desktop app' as 'Application type' and give it a name.
    4d. Create.
5. Download the credentials file into "$HOME/.gmailctl/credentials.json" and execute the 'init'
   command again.

Documentation about Gmail API authorization can be found

前庭として仕事で使う(GoogleWorkspaceにひもづいた)Googleアカウントに紐づけた状態で gmailctl を使う。


横着して既存のGCPプロジェクトにぶら下げない方がよい。プロジェクトは思ったより簡単に作れる。gmailctl-oauth みたいな名前になっていれば後からわかるかなと思う。

OAuth クライアント ID を作成するために、同意画面を設定

  • 内部(所属組織の中というか自分のみで使うので)
    • 連絡先のメールアドレスを2つ埋める
    • アイコンとか承認済みドメインは入れなくても設定ボタンが押せる
  • スコープを追加。検索してチェックを入れて 更新 ボタン


  • 認証情報
    • 認証情報を作成
      • OAuth クライアント ID の作成
        • デスクトップアプリ


作成 ボタンを押すと json をダウンロードできるのでこれを ~/.gmailctl/credentials.json におく

$ mv ~/Downloads/ ~/etc/gmailctl/work1/credentials.json
# symlinkでも動く
$ ln -s ~/etc/gmailctl/work1/credentials.json ~/.gmailctl/credentials.json

gmailctl init

もう一回 gmailctl init を叩くとURLが出力されるので、Googleアカウントでログインできているブラウザでアクセスして権限を許可すればOK。

$ gmailctl init
missing or invalid cached token: open ~/.gmailctl/token.json: no such file or directory

Go to the following link in your browser and authorize gmailctl: (長い)

NOTE that gmailctl runs a webserver on your local machine to
collect the token as returned from Google. This only runs until
the token is saved. If your browser is on another machine
without access to the local network, this will not work.
Saving credential file to ~/.gmailctl/token.json

You have correctly configured gmailctl to use Gmail APIs.


Successfully authenticated with Google OAuth2.
You may now close this page and return to the terminal.


ためしに gmailctl download してみると認証されているか動作確認できる。

$ gmailctl download | head -20
// Auto-imported filters by 'gmailctl download'.
// WARNING: This functionality is experimental. Before making any
// changes, check that no diff is detected with the remote filters by
// using the 'diff' command.

// Uncomment if you want to use the standard library.
// local lib = import 'gmailctl.libsonnet';
  version: "v1alpha3",
  author: {
    name: "YOUR NAME HERE (auto imported)",
    email: ""
  // Note: labels management is optional. If you prefer to use the
  // GMail interface to add and remove labels, you can safely remove
  // this section of the config.
  labels: [
      name: "warn,crit",

jsonnet でフィルタとラベルを操作できるのはとてもいい。