1. はじめに
これは「Notion Community Advent Calendar 2022」の1日目の記事です。 adventar.org
ということで、今日から Notion Community のアドベントカレンダーが始まりました。執筆陣は以下のようになっております。すごい人が集まっていますよ。楽しみですね。
初日なのでアンバサダーの私から軽く始めてみたいと思います。
2. Notion AI と遊ぶ
今の時点で Notion AI で遊べているのは、申し訳ないですがアンバサダーだけとなっていると思います。いろんな人が Twitter や動画、YouTube ライブなどで披露しているので楽しみにしている人が多いと思います。待っただけの甲斐はあると思うので、順番が回ってきたらたくさん遊んでください。色々な人にデモした結果をこちらのページにまとめているので、興味があったらみてください。
その中で、「Ruby で NotionRubyMapping を使って、page を作成するコードを書いてください。」と指示してみました。書かれたコードはこちらです。
require 'notion_ruby_mapping' # Connect to Notion NotionRubyMapping.configure do |config| config.token = 'your-token-here' end # Create a new page page = NotionRubyMapping::Page.create( title: 'Hello, world!', body: 'This is a test page.' ) # Save the page to Notion page.save
これ、かなりいい線をついているし、見やすいコードです(このままでは動きませんが)。特に configure でトークンをセットするのは Ruby っぽい書き方で格好いいですね。悔しくなったので、この config の書き方をできるようにしてみました。
3. 現状把握
NotionRubyMapping は当初自分で API アクセスをせず、notion-ruby-client という別の gem を使って、API アクセスをしていました。このクライアントを作るという動作のため、トークンの設定は以下のような記述方法になっていました。
NotionCache.instance.create_client "secret_XXXXXXXXXXXXXXXXXXXX" # write directly
このメソッドは以前は、内部で notion-ruby-client のオブジェクトを作成し、それにキーを渡すような処理をしていました。しかし、notion-ruby-client のバージョンアップがなかなかされず、それが原因で NotionRubyMapping 自体もアップデートできないという問題が発生しました。そのため、現在では notion-ruby-client に依存せず、自分で API アクセスを実行するように変更させました。
このため、このメソッドは単にシングルトンの NotionCache オブジェクトに変数を設定するだけの関数に成り下がっています。notion_token は単に @notion_token というインスタンス変数に入れているだけですね。その他にも wait という API 呼び出しごとに待つ秒数もセットできるようにしています。Notion API は 3アクセス/秒の制限があるため、デフォルトで 1/3 秒のウエイトを入れています。3回以下のアクセスしかしないようなプログラムの場合には、wait = 0 も選べるようになっています。
def create_client(notion_token, wait: 0.3333, debug: false) @notion_token = notion_token @wait = wait @debug = debug self end
4. NotionRubyMapping.configure の作成
やりたいことは上記変数群を configure で設定できるようにすることです。これらの変数を持っているのは NotionCache のシングルトンオブジェクトなので、それを yield で渡してあげればいいわけです。ということで、notion_ruby_mapping.rb に configure メソッドを追加しました。
module NotionRubyMapping def configure yield NotionRubyMapping::NotionCache.instance end module_function :configure end
そして、NotionCache クラスに attr_accessor を追加しました。以上で改修は終わりです。
attr_accessor :notion_token, :wait, :debug
5. 新しいインテグレーションの使い方
上記の修正で NotionRubyMapping.configure が使えるようになっています。そのため、こんな文章を README.md に追加しました。
v0.7.0 から NotionRubyMapping.configuration
で設定できるようになりました。
NotionRubyMapping.configuration do |config| config.notion_token = "secret_XXXXXXXXXXXXXXXXXXXX" # write directly config.wait = 0 end
NotionRubyMapping.configuration { |c| c.notion_token = ENV["NOTION_API_TOKEN"] } # from environment
5. おわりに
Notion AI にいい書き方を教えてもらいました。ちょっと格好よくなりましたね。ということで、この記事とともに gem を 12/1 に v0.7.0 として公開します。すでに使っている人も新しい書き方を使うようにしてみてください(コードは消していないので、古い書き方もそのまま使えます)。
初日なのでこんな軽いネタにしてみました。執筆陣は色々な方向に長けた方々ばかりなので、同じ Notion ネタでもさまざまなネタが出てくると思います。私も楽しみです。
明日は Tsuburaya | Notion 公式アンバサダー (@___35d) / Twitter さんの「2022年 Notion 振り返り / 2022年の Notion アップデート内容を振り返り」です。お楽しみに。