APIが用意されていないようなサービスは選択肢から真っ先に除外しましょう

APIが用意されていないサービスは選択肢から真っ先に除外しましょう この記事の内容 計算量(オーダー)の考え方を、ソフトウェアだけでなく業務運用にも適用すべきという話です 顧客数やコンテンツ数が増えると、手作業の運用は O(n²) 的に破綻することがあります 「とりあえず動けばいい」で最初の仕組みを作ると、後から運用する人が苦労します APIがあるサービスを選ぶことで自動化が可能になり、スケール問題を回避できます サービス・プロダクトを選定する際は、APIの有無を最初の判断基準にしましょう 計算量(オーダー)の話 今回は少し雑談ベースでお伝えします。話したいテーマは大きく2つあります。1つ目は作業や計算のオーダー(計算量)を考えましょうという話、2つ目はAPIを持っているサービスやプロダクトを必ず選択しましょうという話です。 どちらも当たり前すぎる話ではあるのですが、目の前の「とりあえず最初の一歩」だけを考えて「うまく動いているからこれでいいじゃん」となりがちな部分があるため、改めてお伝えしたいと思います。 まず、計算量やオーダーについての話です。ソフトウェアのアルゴリズムを勉強した方なら常識かと思いますが、愚直に処理を書いてしまうと計算量が O(n²) のオーダーになってしまうことがあります。 グラフで示すと、O(n)(線形) の場合は数が増えてもそれに比例してゆるやかに増加していきます。一方で O(n²)(二乗) の場合は、小さいうちはほとんど問題ありませんが、数が増えるにつれてあっという間に計算量が爆発的に増え、処理時間が膨大になっていきます。 ソフトウェア開発においては「良いアルゴリズムを選ぶ」「高速なアルゴリズムを採用する」というのが常識ですが、この考え方は普段のシステム設計や業務運用にも同じように当てはまります。 業務運用における「オーダー」の問題 わかりやすい例として、人間が手作業で運用をカバーするケースを考えてみましょう。 スケールしやすいケース(O(n) に近い) お客さんが1件増えるたびに決まった作業を1回だけ実施して、それで完結する場合、お客さんの数が増えてもその分だけ同じ作業をすればよいだけです。これはいわば O(n) のイメージ で、そこまで破綻しません。 スケールしにくいケース(O(n²) に近い) 一方で、次のような状況を考えてみましょう。 顧客数が増えると、既存のすべての顧客にも追加の作業が発生する コンテンツが更新されるたびに、すべての顧客にそのコンテンツを配布しなければならない 顧客数もコンテンツ数も両方増えていく このような場合、コンテンツを1つ更新するだけで「全顧客 × 全コンテンツ」の展開作業が必要になります。これは O(n²) 的に作業量が増えていく構造 です。 最初は顧客が1〜2件、10件程度であれば全く問題ありません。しかし50件になり、100件になると、手作業の量はものすごい勢いで積み上がっていきます。 「とりあえず動けばいい」が後から苦労を生む こうした状況は、最初に仕組みを作る人が、後で運用する人のことを考えないことで生まれがちです。 「とりあえずこれで動いているからいいでしょ」という状態で最初の仕組みを作ってしまい、その後どう変化していくか、数がどう変わっていくかを考慮しないまま設計してしまうのです。その結果、何年もその仕組みを使い続ける運用担当者が苦労することになります。 月次レポートの作成なども典型例です。管理するシステム数が増えるたびに作成するレポートの数が増え、さらにカスタマイズ要件が入ってきたらすべてのシステムに対してその変更を適用しなければならない——こうした状況が積み重なっていきます。 解決策はAPIのあるサービスを選ぶこと では、どうすればいいか。結論はAPIがあるものを使いましょうということです。 APIがあるということは、自動化ができるということです。人間が手作業でやっている作業は、APIがあればすべてプログラムに置き換えることができます。 逆に言えば、APIがないと人間がすべてを手作業でやることしかできません。 手作業を自動化しようとすれば、RPAのような話になってきます。RPAで自動化すること自体を否定するわけではありませんが、APIがある場合に比べて汎用性や安定性に課題が出てくることが多いです。 サービス選定時にAPIの有無を最初に確認すべき理由 サービスやプロダクトを選定する際、機能の豊富さや画面の使いやすさに目が向きがちです。しかし、APIが用意されているかどうかは最も最初に確認すべき条件の一つです。 APIがないサービスは、業務が拡大するにつれて必ず運用の壁にぶつかります。最初は小さな規模だから問題なく回っていたとしても、顧客数やデータ量が増えた瞬間に手作業の工数が爆発的に増え、人員を増やすか、仕組みを作り直すかという選択を迫られることになります。 そうした将来的なコストを避けるためにも、APIが用意されていないサービスは選択肢から真っ先に除外するという判断基準を持つことが大切です。 まとめ 計算量(オーダー)の考え方は業務運用にも当てはまります。 O(n²) 的に作業が増える仕組みは、規模が小さいうちは問題なくても、成長とともに必ず破綻します。 最初の設計が後から運用する人の苦労を決めます。 「とりあえず動けばいい」で作られた仕組みは、長期的に大きな負債になります。 APIがあるサービスを選ぶことで自動化が可能になり、スケールの問題を根本から解決できます。 サービス・プロダクトを選定する際は、APIの有無を最初の判断基準に置くようにしましょう。APIがないサービスは、原則として選択肢から外すくらいの意識が重要です。

July 19, 2025 · 1 min · 胡田昌彦

Obsidianにあれこれと情報を自動収集したい

ObsidianにあれこれとSNS活動記録を自動収集する仕組みを作る この記事の内容 YouTubeやはてなブックマークの活動記録をObsidianデイリーノートへ自動集約するアーキテクチャを解説 X(旧Twitter)APIの有料化という壁と、Blueskyをハブにした代替アーキテクチャの検討 Obsidianプラグイン・iPaaS・自作スクリプトの3つの実装方針を比較 日次バッチ+常駐クロスポストの2スクリプト構成による実装方針を紹介 自分のデータを一元管理することで、将来的なAI活用に備える考え方を共有 なぜ情報を自動収集するのか Obsidianには日々のタスクや思考をまとめるデイリーノートがあります。ここに、YouTubeへの動画投稿、はてなブックマークへの登録、X(旧Twitter)へのポストなど、様々なプラットフォームでの活動記録を自動で集約できたら——そんな仕組みを構築しています。 Kindleのハイライトが自動同期されるように、自分の活動が半自動的にObsidianへ記録され、一元管理できる状態が理想です。散在しがちな情報を一箇所にまとめることで、将来的に知識として活用できると期待しています。 すでに実現できていること いくつかの連携は、Pythonスクリプトを書いてすでに実現しています。 YouTube連携 動画を投稿すると、YouTube API経由でURLや文字起こしデータを取得し、Obsidian内に自動でノートを作成します。さらに、その日のデイリーノートにリンクを追記する処理も組み込んでいます。LLMを使って文字起こしをブログ形式に整形・要約させる処理も含まれており、非常にうまく機能しています。 はてなブックマーク連携 その日にブックマークした記事の情報を取得し、同様にObsidianノートとして保存する仕組みも完成しています。 これらの仕組みにより、活動の一部は着実にObsidianへ蓄積されるようになっています。 最大の課題:X(旧Twitter)との連携 大きな壁として立ちはだかっているのが、X(旧Twitter)との連携です。 2007年から十数年続けているXへの投稿も、ぜひObsidianに記録したいと考えていました。しかし、現在のX APIは仕様が変更されており、自分の投稿データを取得するだけでも月額100ドル(約15,000円)ほどの高額な有料プランへの加入が必須となっています。 個人のつぶやきを記録するためだけにこのコストを支払うのは現実的ではありません。かつてのTwitter時代には無料で自由にできていたことが、今は非常に困難になってしまいました。 解決策:Blueskyを新たなハブにする Xでの直接連携を諦め、代替案として検討したのが「Bluesky」をハブとして利用する方法です。BlueskyはAPIが公開されており、データ連携が比較的容易です。 考えたアーキテクチャは以下の通りです。 投稿: PCやスマートフォンのアプリから、まずBlueskyに投稿する 記録: Blueskyへの投稿をトリガーに、API経由でその内容を取得し、Obsidianのデイリーノートへ自動記録する クロスポスト: 同時に、Blueskyへの投稿をX・Mastodon・Discordなどへ自動転送(クロスポスト)する この仕組みが実現すれば、Blueskyに一度投稿するだけで、Obsidianへの記録と他SNSへの展開がすべて自動で行われるようになります。 実装方針の比較検討 このアーキテクチャを実現する方法として、3つの選択肢を検討しました。 方法 メリット デメリット Obsidianプラグイン Obsidian内で完結 アプリを開いている時しか動作しない iPaaS(Zapierなど) 手軽に構築できる 外部サービス依存・追加コストの懸念 自作スクリプト 柔軟性が高く既存環境を活用できる 開発の手間がかかる リアルタイム性は必須ではなく、1日1回まとめて記録できれば十分と判断し、自作スクリプトで構築することに決めました。常時稼働中のVMがすでにあるため、追加コストも発生しません。 実装する2つのスクリプト 自作スクリプトの構成として、以下の2つを作成します。 1. 日次バッチスクリプト 1日1回、その日のBluesky全投稿を取得し、Obsidianのデイリーノートに書き込みます。既存の日次処理の仕組みに組み込む形で実装します。 [ B l u e s k y A P I ] → ( 日 次 バ ッ チ ) → [ O b s i d i a n デ イ リ ー ノ ー ト ] 2. 常駐クロスポストスクリプト 常時稼働しているVM上で動作し、Blueskyの新規投稿を監視します。投稿があれば即座にXなどへ転送します。 ...

July 13, 2025 · 2 min · 胡田昌彦