✏️

【Flutter × Notion API】Notion投稿専用アプリを作ってみた

2021/06/19に公開

最近Notionの便利さに目覚めたのですが、時を同じくしてNotion APIがベータ版として公開されたのを知って、勢いでアプリを作ってみました。

本記事では、アプリの紹介(メイン)と技術的なことを軽くご紹介できればと思います。(Notion APIを使う上でハマりどころもあったので、別記事で書ければ書きたいです。)

Quick Notion

https://play.google.com/store/apps/details?id=app.tsumuchan.quick_notion
https://apps.apple.com/jp/app/id1569851996

できることとしては、

  • Notion認証して、
  • 投稿したいページの選択して、
  • テキストの投稿する。

という、かなりシンプルなNotion投稿専用アプリになっています。

Flutter周りの実装について

アーキテクチャ

アーキテクチャに関しては、Provider × StateNotifier × Freezed というオーソドックスな形を採用しました。
それにプラスしてRepositoryを設けてAPIの処理をするようにしています。

また、普段はAndroid開発をしており、MVVMで実装したほうが何かとわかりやすかったので、

TopPage <-> TopViewModel <-> XXXRepository

という感じで命名などを揃えました。

パッケージ

今回利用した主なパッケージでいうと、下記の通りとなっています。

Notion API呼び出しで dio を初めて使いましたが、使いやすくてなかなか便利でした。

認証する際にURLスキームの処理が必要だったので uni_links も使っています。

https://pub.dev/packages/dio

https://pub.dev/packages/uni_links

https://pub.dev/packages/shared_preferences

https://pub.dev/packages/url_launcher

https://pub.dev/packages/modal_bottom_sheet

https://pub.dev/packages/fluttertoast

Notion APIに関して

ドキュメントがわかりやすい

はい、基本的にはドキュメントを見れば十分でした。(というか公開されて日も浅いのでネット上にあまり情報も転がってないのでドキュメントを見るしかなかった)
https://developers.notion.com/

まだベータ版

公開されはしたものの、まだベータ版なので、仕様変更で動かなくなったりする可能性もあるのかなぁと思っています。

Changelog を日頃チェックするのも必要かもしれません。

Quick Notionで使用したAPI

Notion認証、投稿したいページの選択、テキストの投稿の3つでそれぞれAPIを使いました。

認証

https://developers.notion.com/docs/authorization
Notionの認証で使いました。

現状だと、workspaceのadminじゃないと認証できないようです。
また、同じworkspaceに対しては1つのaccess tokenしか認められないようです。(複数ユーザーが同じworkspaceに対して認証できない?)

ページの選択

https://developers.notion.com/reference/post-search
投稿先のページを選択するのに使いました。

本来の使い方としてあっているのかは不明ですが、検索のqueryを空文字で指定すると全部のページ(最大100ページまでの制限あり)が取得できるようです。

投稿

https://developers.notion.com/docs/working-with-page-content#appending-blocks-to-a-page
テキストの投稿で使いました。

現状、投稿のみで編集や削除はできないようです。

終わりに

ざっくりとですが、アプリの紹介と技術的なことを軽くご紹介しました。

興味がある方はぜひインストールして使っていただけると幸いです!

(記事に関しておかしなところ・間違っているところ、アプリのバグなどがありましたら優しく指摘いただけると嬉しいです。)

Discussion