/home/amgsk

AIスマートグラス「Even G2」を買った話

· amgsk

TOC


買ってしまった

Even Realities製のAIスマートグラス「Even G2」を購入した。

Even G2
Even G2

Even G2ってどんなもの

Even G2はEven Realities社が出しているAIスマートグラス。見た目は普通のメガネに近いが、レンズにMicro-LEDの小型ディスプレイが内蔵されていて、レンズに情報を表示できる。

カメラもスピーカーも搭載していないのが特徴で、「常に身に着けていても周囲に警戒心を与えない」ことを意識した設計になっている。Rokidやmeta等のスマートグラスとは異なる点がココで、声で操作できるというのは同じだけど、カメラが搭載されていないため、相手からしたら普通のメガネでしかなく、プライバシーに考慮した設計であるとも言える。

AIスマートグラスというカテゴリの商品は数多くあるけど、購入の決め手になったのは以下。

  • カメラが物理的に付いていない
  • スマートグラスを触ること無く、音声や他の手段で操作が可能
  • 自宅のデスクトップマシンと接続して使用できる機能を有している

これらの条件に当てはまるものはEven G2 + R1の組み合わせだった。
購入前にEven G2とR1のレビューは数多くの動画を見ていたけど、自分の使い方にフィットするかは正直不安な部分があった。
しかし、実際に触ってみると期待通りの感じで、操作出来ていると感じている。

届いてから

箱を開けると、本体・充電ケース・クリーニングクロスといったシンプルな構成。
充電ケースは持ち運びもできる作りでしっかりしている。
背面には滑り止めがあって、目の前に置いておくような使い方をちゃんと想定してデザインされていることがわかる。

セットアップはスマホアプリ(Even Hub)と繋ぐ形で、Bluetoothでペアリングするだけ。 早速着用してみると、思った以上に視認性が良くファーストインプレッションとしては感動があった。

even-g2-demo
アプリ内の機能でキャプチャしたもの。これとほぼ同じ様に見えると思って良い

レビュー等は事前に読み漁っていたが、思っていたよりも視認性が高く驚きだった。

  • ディスプレイの表示はグリーンのモノクロで、視野の右下あたりに情報が浮かぶイメージ
  • 最初は目線をそこに向けるのに少し慣れが必要だったけど、数十分使えば気にならなくない
  • 明るい屋外だと少し見づらい場面もあるが、それは周囲の明るさによって見えづらいのではなく、視界の背景色によって見えづらさが決まる。黒系の背景に被せることで見えやすくなる

音声の認識の精度は割と良いほうで、ちゃんと喋ればちゃんと認識してくれ期待通りといった印象。
しかし、ノイズを拾いやすく、テレビや音楽の音を拾って認識してしまうほどマイク精度が高いので、スピーカーを常用している場合は気をつける必要がありそう。

  • 自分の滑舌が悪いということはさておき、ちゃんと喋ればちゃんと認識してくれる
  • 認識の速度はワンテンポ送れる印象は有るが、それを精度がカバーしてくれている

ターミナルモードの設定は数秒で完了し、エンジニアであれば躓く部分は一切ないと思う。
Tailscaleは自PCは勿論、サーバ機のProxmox環境で既に運用中で新たに設定する部分は何もなかった。
ターミナルは常時起動が必要で、とりあえずはメインPCの電源は付けたままでモニタの電源だけ落として運用しようと思っている。

Even R1 着用イメージ
Even R1 着用イメージ

Even R1の方の操作感は ★ 4.2 といったところ。
自分は少し操作ミスをするケースが多いが、これは慣れなのかもしれない。
どうしても、リングという形状であるがゆえに、微妙に位置が変わると操作感も変わってしまうというのも有る。

もはや、ボルトの緩みを視覚的に把握するようなマーカーが必要なんじゃないかなと思っている…

リングと指にマーカーを引いたイメージ
こんなのダサすぎる(AI生成)

第2関節で固定するのが使用しやすい、というレビューを見かけたが、私の場合は指の根っこまでリングを着用している。
そして、若干角度を右に傾けるようにした。こすうると、親指を自然と人差し指にくっつけるように自然に操作が出来る。

R1を購入する場合は、事前にサイジングキットを利用してサイズを計測しておくのがよい。
公式から購入する場合は、サイジングキットをカートに入れて購入する必要があり、R1単独では購入ができないもよう。 しかしヨドバシでならサイジングキットが単品で安く購入できて、合わなそうと思ったら買わないという選択肢も取りやすい金額。

私のユースケース

EvenG2には、通常モードとターミナルモードの2種類がある。
通常モードでは「hey、イーブン」というワードで使用可能なEvenAIや会話モードやプラグインのような操作が利用できるが、ターミナルモードはClaudeなどのLLMとの対話を目的として作られたもの。
つまりremote-controlの操作をEvenG2を介して行えるという機能になる。

even-terminal

TailscaleをスマホとPCのそれぞれにセットアップしていて、VPN経由でこのターミナルモードを常用している。
スマホを使用すること無く、外出先から音声操作で以下のようなことが出来る。

  • 先日出したXXXのPRの状況を確認して、結果だけ教えて
  • XXXの事実をメモに残しておいて。また、ブログ記事のdraftを書いておいて
  • CIの状況を確認して。失敗しているCIを再実行して
  • Copilotによる指摘が有るから、suggestを受け入れてPRをマージして
  • 「今から帰る」とメッセージを送信して
  • XXXをタスクに追加しておいて
  • XXXというアイデアをメモリに残しておいて

MCPやskillで出来ることが、そのままEvenG2の音声操作を介して出来るようになったというイメージ。
通常はキーボード・マウス・モニタが操作と表示のインタフェースだが、Even G2とR1がそれらに取って代わる。
その先ではClaudeが操作を待ち受けて処理していて、既存のエコシステムに自然に乗っかってきた、という表現がしっくり来る。

タスク管理等もEvenAIに任せるのではなく、自身で管理しているMCP経由で管理する方が都合が良い。そうなればPCで作業した際に同じタスクを参照し、同期なしに作業を継続できる。

なにより画面の文字情報が見えづらいので、コードレビュー等の入出力が多いタスクには向いていない。
投げやりで済むように簡易的なタスクや、状況を確認して結果のみを知りたい場合などに向いていると感じている。

ターミナルモードにおける音声入力のトリガは、EvenR1によるタップもしくはメガネのケツの方にあるセンサの操作が必要で、センサの操作は手を耳の後ろに持っていく行為が必要。これが作業にフォーカスしている間だと一瞬で集中から引き剥がされるので、是非R1での操作をおすすめしたい。

EvenG2向けに出力を簡素化する方法

EvenG2のディスプレイは576x288で、一度に表示できる文字数がかなり少ない。 PC向けの感覚で長文を返されるとグラス上では読みきれないので、Claude CodeのUserPromptSubmit Hookを利用して、EvenG2からのリクエストのときだけ「短く返せ」という指示を注入する仕組みを作った。

UserPromptSubmit Hookは、プロンプトを送信するたびに任意のスクリプトが実行され、スクリプトがadditionalContextを返すとその内容がコンテキストとしてモデルに渡される、という仕組み。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
"hooks": {
  "UserPromptSubmit": [
    {
      "hooks": [
        {
          "type": "command",
          "command": "/home/amgsk/.claude/hooks/display-context.sh",
          "timeout": 5
        }
      ]
    }
  ]
}

ポイントは「EvenG2からのセッションかどうか」の判定方法。 even-terminalは常駐サーバなので、単に「プロセスが存在するか」で見てしまうと、同じPCの通常ターミナルで開いたセッションまで全部巻き込んでしまう。 なのでHookスクリプト自身の祖先プロセスを/procで遡り、その中にeven-terminalがいるかで判定するようにした。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# $PPID (claude CLI) から親を遡る
running_under_even_terminal() {
  local pid=$PPID
  local depth=0

  while [ "$pid" -gt 1 ] && [ "$depth" -lt 30 ]; do
    [ -r "/proc/$pid/cmdline" ] || return 1

    is_even_terminal "$pid" && return 0

    pid=$(awk '{ sub(/^.*\) /, ""); print $2 }' "/proc/$pid/stat" 2>/dev/null) || return 1
    [ -n "$pid" ] || return 1
    depth=$((depth + 1))
  done

  return 1
}

running_under_even_terminal || exit 0

これならeven-terminal経由で起動したClaude Codeのセッションだけが該当し、通常のターミナルから起動したセッションでは何も出力せずに終了するので、サーバを常駐させたままでもPC側の応答には影響しない。

注入している指示は、ディスプレイの制約に合わせたこんな内容。

  • 箇条書きで簡潔に書き、1行は25文字未満に収める
  • 折り返しの字下げをしない(グラス上で崩れる)
  • 応答全体は7行以内。収まらないなら結論だけ返して「続きが要るか」を1行で聞く
  • 前置き・自明な説明・結論の繰り返しを書かない
  • コードは原則貼らず、変更したファイル名と要点だけを伝える
  • 細かい選択は確認せず自分で判断して進める。確認は破壊的操作のときだけ

これで、EvenG2からのリクエストのときだけ出力がかなりシンプルになり、グラス上でも把握しやすくなった。

ターミナルモード時のモデルの制限について

使っていて気づいたのが、ターミナルモードでは普段使っているモデルではなくOpus 4.6で応答が返ってくること。 even-terminal(v0.8.1時点)のソースを確認したところ、Claude Agent SDKのquery()を呼ぶ箇所でモデルがハードコードされていた。

1
2
3
4
5
6
7
8
// dist/claude/session.js
const q = query({
    prompt,
    options: {
        resume: this.sessionId,
        cwd: this.lockedCwd,
        model: "claude-opus-4-6",
        ...

そして、これを外から上書きする手段は用意されていない。

  • 環境変数はEVEN_HOST_MODEEVEN_TERMINAL_NAME等のホスト・表示名系のみで、モデル関連のものは無い
  • CLIオプションにもモデル指定は無く、READMEにも言及が無い
  • settings.jsonは読み込まれる作りになっているが、SDKではquery()に明示的に渡されたmodelが優先されるため、デフォルトモデルを設定していてもここには効かない

つまり、普段Claude Codeでどのモデルを使っていようと、even-terminal経由のセッションだけは強制的にOpus 4.6で動くことになる。

これを回避したい場合は、インストールされたdist/claude/session.jsの該当行を自分でパッチするしかない。 ただし当然ながら、パッケージをアップデートするとパッチは消えるので、バージョンを上げるたびに当て直す必要がある。 グラス用途は短い応答しか求めないので軽いモデルで十分だと思っていて、モデルを指定できるオプションが用意されることに期待したい。

感想

集中できる時間が特に集中できるようになり、密度は挙がったように感じている。 また、外出中や子どもの着替え等をさせながらでも、プロンプトで指示が出来る。コレが割とデカい。 使い倒してまた改めてレビューをしようと思う。

EOF