論文ページからワンクリックでTeamsに共有できるChrome拡張を作った(というかほぼClaudeに作ってもらった)

はじめに

矢野雅貴さん(@masayano_)がXで「Claudeにお願いしたら,ジャーナル論文のウェブサイトでクリックするだけで,タイトルや簡単な概要・解説を研究室のDiscordに投稿するアドオン作れた」と投稿されていて,これめちゃくちゃ便利やんと思いました。

私はゼミではDiscordではなくTeamsを使っているので,Teamsで同じことができないかと試してみたところ,できました。Gemini APIの無料枠を使えば,論文の日本語解説まで自動生成して一緒に投稿できます。とはいえ,ウェブで取ってこれる情報に依存するので,論文全体を読んでの解説ができるものとできないものに分かれるのかなとは思います。「解説」は今の段階ではアブストの日本語訳って感じですね。

コードはGitHubに公開しています。

https://github.com/tam07pb915/paper-to-chat

完成イメージ

論文ページで拡張のアイコンをクリックすると,こんな感じのポップアップが出ます。

拡張のポップアップ画面(論文情報が表示された状態)

「投稿する」を押すと,TeamsのチャンネルにGeminiが生成した日本語解説付きで投稿されます。数秒かかりますが,Geminiが解説を生成しているのでしょうがないです。

Teamsに投稿された結果(解説が途中で省略されます)
Teamsに投稿された結果(詳細表示後はこうなります)

仕組み

やっていることはシンプルで,Chrome拡張が論文ページからメタデータ(タイトル,著者,DOIなど)を抽出して,Gemini APIで日本語解説を作って,Power AutomateのWebhook経由でTeamsに投稿する,という流れです。Highwire Press標準の citation_* メタタグに対応しているので,PubMed,Wiley,ScienceDirect,JSTAGE,CiNiiあたりはだいたい動くらしいです(あまりよくわかっていない)。

セットアップ

1. Chrome拡張のインストール

GitHubからZIPをダウンロードして解凍したら,chrome://extensions/ を開いてデベロッパーモードをONにし,「パッケージ化されていない拡張機能を読み込む」から解凍したフォルダを選ぶだけです。インストールできたら,アドレスバー右のパズルアイコンからピン留めしておくと使いやすいです。

2. Power Automateの設定(ここが一番面倒)

ここが一番の沼でした。2025年末にTeamsの旧Incoming Webhook(コネクタ方式)が廃止されていて,「to be retired」と表示されているのに新規追加しようとしてもできないようでした。Power Automate経由にするしかないんですね,今は。これも時間が経つと変わるかもです。

Power Automateにアクセスして,「インスタント クラウド フロー」を作成,トリガーに「Teams Webhook 要求を受信したとき」を選びます。

トリガーの下にアクションを追加して,「チャットまたはチャネルでメッセージを投稿する」を選択。投稿先のチームとチャンネルを設定して,メッセージ欄には fx(式)タブ から triggerBody()?['message'] と入力します。ここは⚡(動的コンテンツ)タブではなくfxタブです。最初そこで詰まりました。

保存したら,トリガーを展開してHTTP URLをコピーします。これがWebhook URLになります。

もう一点ハマったのが認証の話で,トリガーの認証設定が「すべてのユーザー」になっていないと拡張からの投稿がエラーになります。OAuth認証が求められる場合はトリガーの設定で認証を外してください。

あと,Power Automateには「カードを投稿する」(Adaptive Card)というアクションもあるんですが,外部からのJSONに対する制約が厳しくて何度もエラーが出たので,「メッセージを投稿する」のほうを使うのが無難らしいです。

私はブラウザ版Teamsを使っていますが,デスクトップ版でも「…」メニューに「ワークフロー」が表示されなかったので,そういうときはPower Automateに直接アクセスして設定したほうが早いとClaudeに言われてこういうめんどくさいことをやりました。

3. Gemini APIキーの取得(無料,カード不要)

Google AI StudioにGoogleアカウントでログインして,「Create API Key」をクリックするだけです。無料枠が1日1,500リクエストまであるらしく,論文共有に使う分には全く問題ないと思います。

4. 拡張の設定

拡張のアイコン → ⚙ (歯車アイコン)設定を開いて,Webhook URLとGemini APIキーを貼り付けて,「Gemini APIで解説を自動生成」をONにして保存します。解説不要で素早く投稿したい場合はこれをOFFにすれば即投稿されます。

研究室での使い方

これはTeamsの使い方に依存すると思います。みんなが見れるチャンネルに情報共有的な意味合いで論文貼るみたいなことだと,全体のチャンネルに投稿することになるでしょう。私は,自分含めて学生の名前のついた個別のチャンネルを作って,そこに自分の研究の進捗だとかメモだとかそういうのを書き込んでいくという方針でやろうと思っています。私のチャンネルがあるのは,自分が率先して「思考をみんなが見れる場所に投稿していく」というモデルになれればという気持ちです。そういうわけで,私の個人チャンネルに投稿できるような設定にしました。もちろん,院生にも同じ拡張をインストールしてもらって各自のWebhook URLを設定すれば,院生が自分用メモとして自分のチャンネルに投稿できるようになります。文献共有の専用チャンネル作って各自がそのチャンネルのWebhook URLを共有して設定すれば,輪読候補の論文ストックとして扱うみたいなこともできるのかもしれません。「面白い論文見つけたけどそれをとりえあずどこかにストックしておくのが面倒」という摩擦を下げるのが目的なので,そこは運用してみないとわかりません。ちなみに,論文自体はZoteroとNotionDBを連携して学生にはそちらにストックしていくように指導にしようと思っているので,そういう意味では今後やってみて運用方針を変える可能性は大いにありそうです。

おわりに

矢野さんのアイデアはDiscord + Claude APIでしたが,Teamsに合わせてPower Automate経由にして,コスト面からGemini APIに差し替えました。アイデアをシェアしてくださった矢野さんに感謝します。

Chrome拡張を更新(リロード)した後は論文ページもF5で再読み込みしないとcontent scriptが再注入されないので注意です。これも地味に引っかかりました。

コードはGitHubに公開しています。改善提案やPull Requestも歓迎です。

GitHub: https://github.com/tam07pb915/paper-to-chat

なにをゆう たむらゆう

おしまい。

コメントを残す