Local Images Plusで解決するObsidian Web Clipperの画像問題

yourpalm.jubenoum.com

私はかつてJoplinユーザーでした。JoplinからObsidianへの移行は、同期の安定性やナレッジグラフの魅力に惹かれてのことでしたが、移行後にひとつだけ「退化」を感じた点がありました。それがWeb Clipperによる画像のローカル保存です。

この記事では、Obsidian Web Clipperの「不満点」と、それを解消してくれたLocal Images Plusプラグインについて紹介します。

Joplin Web Clipperが当たり前にしていたこと

JoplinのWeb Clipperは、Webページをクリップする際に画像を自動的にダウンロードし、ローカルストレージに保存してくれます。これにより、元のWebページが削除されても、オフライン環境でも、保存したノートは画像を含めて完全に閲覧可能でした。

私はこれを「当たり前」だと思っていました。Web Clipperとは、そういうものだと。

Obsidian Web Clipperの「仕様」という壁

Obsidianに移行し、公式のObsidian Web Clipperを導入したとき、私は違和感を覚えました。クリップしたページの画像が、URLへの参照として保存されているのです。

これはObsidian Web Clipperの設計上の選択です。公式ドキュメントやフォーラムでの議論によると、この仕様には以下のような理由があるとされています:

  • Vaultの容量を節約する:大量の画像をローカルに保存すると、Vaultが肥大化する
  • モバイル同期の問題を避ける:特にモバイル環境では、大容量の添付ファイルが同期の遅延やエラーを引き起こす可能性がある

合理的な判断ではあります。しかし、私にとっては「Webページが消えたらノートの画像も消える」というリスクは許容できませんでした。情報をローカルに保存することこそが、私がJoplinを、そしてObsidianを選んだ理由だったからです。

続きを読む

AIと共に耕す知識の庭:PARA × GTD × Obsidianで作る第二の脳

日々押し寄せるタスク、閃いたアイデア、あとで読もうと思った記事。これらが整理されないまま蓄積していく様は、まるで途中でミスをしたテトリスのようです。ブロック(情報)は降り止まず、適切に処理しなければ盤面(脳のキャパシティ)はいずれ埋め尽くされてしまいます。

私はこの問題に対し、Obsidian上でPARAメソッドGTDを組み合わせたシステムを構築し、さらにAIによる自動化ワークフローを導入することで、持続可能な知識管理を実現しています。

今回は、このシステムの「設計思想」から「日々の運用の実際」までをご紹介します。 まとめて書いておかないと、自分でも忘れてしまいそうなのでね…。

なぜ「運用」まで語るのか

世の中には優れた情報整理メソッドがたくさんあります。しかし、「良い仕組みは、運用されて初めて価値を持つ」というのが、私がたどり着いた結論です。 今まで三日坊主…とは言わないまでも途中で放棄されてしまった情報整理の方法論が思い出されるところです。 今やっているやりかたはAIツールを活用して、1か月継続できているので、この先も継続できそうな手ごたえがあります。

この記事では、構造の設計運用の自動化の両輪を回すことで、仕組みを生かし続ける方法をお伝えします。

続きを読む

JoplinからObsidianへ:移行を決意した理由とその手順

JoplinからObisidianへの移行

私は長年、情報管理ツールを探し続けてきました。仕事でのメモ、学習ノート、プライベートのアイデア──これらを一元管理し、どこからでもアクセスできる環境を求めていたのです。その旅路はJoplinから始まり、今はObsidianに落ち着いています。

この記事では、なぜ私がJoplinからObsidianへ移行したのか、そしてその過程で学んだことを共有します。

JoplinとObsidian:両者に共通する魅力

JoplinとObsidianは、どちらもMarkdownベースのメモアプリとして、多くの共通点を持っています。私がこの二つのツールに惹かれた理由は、以下の点にあります。

マルチプラットフォーム対応

複数の環境で動作することは、私にとって譲れない条件でした。Windows、Mac、Linux、さらにはスマートフォンやタブレットでも同じノートにアクセスできること──これは現代の働き方において必須の機能だと考えています。

JoplinもObsidianも、主要なプラットフォームをカバーしており、デスクトップからモバイルまでシームレスに利用できます。

Markdownによるシンプルな記述

Markdown記法は、テキストベースでありながら、見出し、リスト、コードブロック、画像埋め込みなど、十分な表現力を持っています。私はこのシンプルさに惹かれました。

特に重要なのは、Markdownファイルはプレーンテキストであるため、特定のアプリケーションに依存しないという点です。将来的にツールを変更したくなっても、データの移行が容易です。

画像を含む豊富なコンテンツ管理

メモは文字だけではありません。スクリーンショット、図表、PDFなど、さまざまなファイルをノートに添付できることも重要です。両ツールとも、画像をMarkdown内に簡単に埋め込めるため、視覚的な情報も一元管理できます。

Joplin同期の問題点

Joplinを選んだ当初、私が魅力に感じたのはNextCloud経由での同期でした。自前のサーバーにデータを保存し、複数デバイス間で同期できる──セルフホスティング派の私にとっては理想的に思えました。

しかし、実際に使い始めると、いくつかの問題に直面しました。

タイムアウトエラーとの戦い

ノートが増えるにつれて、タイムアウトエラー(ETIMEDOUT)が頻発するようになりました。特に大きなノートや添付ファイルを含む場合、同期に時間がかかりすぎてエラーになることがありました。

この問題は、ネットワーク環境だけでなく、NextCloudサーバーの応答速度にも依存するため、根本的な解決が難しかったのです。

デスクトップとモバイルでの挙動の違い

さらに困ったのは、デスクトップ版では同期できるのに、モバイル版では失敗するという現象です。同じアカウント、同じ設定でも、デバイスによって挙動が異なることがありました。

安定した同期環境を構築するのは困難でした。

バージョン不一致と設定の煩雑さ

JoplinやNextCloudのバージョンが更新されるたびに、同期設定を見直す必要がありました。MKCOL errorPROPFIND errorといった技術的なエラーメッセージと格闘する日々が続きました。

同期の問題を解決するために費やす時間が、だんだんと負担に感じてきました。

Obsidianへの移行

移行を決意した理由

Obsidianに移行した理由は、大きく分けて三つあります。

  1. GitHubを使った同期方式への切り替え:GitHubを使った同期は、開発者にとって馴染み深く、信頼性が高い
  2. 豊富なプラグインエコシステム:コミュニティが活発で、必要な機能を柔軟に拡張できる
  3. ノート間リンクとグラフビュー:知識のネットワークを視覚化し、「第二の脳」として活用できる

移行手順:JoplinからObsidianへ

以下に具体的な手順を示します。

1. Joplinからのエクスポート

JoplinでMarkdown形式のノートをエクスポートします。

  1. Joplinを開く
  2. 「File」→「Export All」→「MD – Markdown + Front Matter」を選択
  3. 出力先のフォルダを指定

これにより、Joplinノートブックの構造を保ったまま.mdファイルが出力されます。添付ファイルは「_resources」フォルダにまとめて出力されます。

[!TIP] 「MD – Markdown + Front Matter」形式を選ぶと、タグなどのメタデータがObsidianでも認識される形式で保持されます。

2. Obsidian Vaultへのインポート

Obsidianでは、エクスポートしたフォルダをそのままVaultとして開くことができます。

  1. Obsidianを起動
  2. 「フォルダをVaultとして開く」を選択
  3. Joplinからエクスポートしたフォルダを指定

これだけで、Joplinのノートがすべて読み込まれます。

3. 添付ファイルの設定

Joplinから引き継いだ「_resources」フォルダを、Obsidianの添付ファイル保存先として設定しておくと、既存のリンクがそのまま機能します。

GitHubでの同期設定

NextCloudに代わる同期方法として、私はGitHubを選びました。

詳細な手順については下記の記事で述べたとおりです。

yourpalm.jubenoum.com

なぜGitHubなのか

  • バージョン管理:Gitの強力な履歴管理機能により、変更を追跡できる
  • 信頼性:クラウドサービスとしての安定性が高い
  • 無料:プライベートリポジトリも無料で利用できる

設定手順

  1. GitHubでプライベートリポジトリを作成
  2. ObsidianにGitプラグイン(Vinzent, Denis Olehov作)をインストール
  3. ユーザー名とPersonal Access Tokenを設定
  4. 自動プッシュ・プルの間隔を設定

この設定により、デスクトップ、スマートフォン、タブレット間でノートが自動的に同期されるようになりました。

[!WARNING] Personal Access Tokenには有効期限があります(通常90日)。期限切れになる前に再生成することを忘れないでください。

まとめ:自分に合ったツールを選ぶということ

JoplinからObsidianへの移行は、私にとって大きな決断でした。しかし、振り返ってみると、これは道具を自分の目的に合わせて選び直すという、とても自然なプロセスだったと思います。

Joplinは素晴らしいツールです。オープンソースであること、多様な同期オプションを持つこと、これらは大きな魅力です。しかし、私の環境では同期の問題が解決しきれなかったのもまた事実です。

Obsidianは、Gitで同期できるというのが大きな魅力でした。ノート管理の方法も生成AIとの相性がよく大変気に入っています。

どちらが優れているというわけではありません。自分のワークフローに合ったツールを選ぶこと、これが最も重要なのではないでしょうか。

と、無難にまとめて閉じたいと思います。JoplinからObsidianへの移行を検討している人の参考になれば幸いです。


参考資料

移行関連

jqコマンド入門:コマンドラインでJSONを自在に操る技術

はじめに:なぜjqを学ぶのか

私は日頃からさまざまなワークフローの自動化を試みています。その中で繰り返し登場するのが、JSONデータの処理という課題です。

たとえば、YouTube動画のメタデータを取得して整形したり、APIのレスポンスから必要な情報だけを抜き出したり。こうした作業を手作業で行うのは現実的ではありません。かといって、毎回Pythonスクリプトを書くのも少々重たい。

そこで活躍するのが jq です。

jqは「コマンドラインのJSON処理ツール」と表現されることが多いのですが、私はむしろ「JSONに対するSQL」のようなものだと捉えています。データベースからSQLでデータを抽出するように、jqはJSONから必要な情報を抽出・変換・整形できます。

この記事では、jqの基本概念から実践的な使い方までを解説します。これを読むと、シェルスクリプトとjqを組み合わせた効率的なワークフローを構築できるようになるはずです。

続きを読む

視覚的コンテキストの自動生成:Antigravityでブログのアイキャッチ作成を自動化する

アイキャッチ画像を作成するのは面倒

私は文章を書くことそのものには喜びを感じますが、それをWeb上の「記事」としてパッケージングする工程、とりわけアイキャッチ画像の選定には、常に一種の精神的摩擦を感じてきました。 (端的に言えば「めんどくさい」の一言です)

テキストエディタで文章を書いた後に、画像素材サイトを開き、検索窓にキーワードを打ち込む。あるいは、画像編集ソフトを立ち上げて文字を配置する。その瞬間、脳のモードは「論理的構築(Writer)」から「視覚的作業(Designer)」へと強制的に切り替えられます。このコンテキストスイッチこそが、執筆のフロー状態を断ち切る最大のノイズではないかと、常々感じていたのです。(繰り返しになりますが、端的に言えば「めんどくさい」の一言です。そして私には画像編集のセンスがないのであります)

Nano Banana Proを使えば、一貫性を保ったうえで、文字も含んだ画像生成ができる

これまでの画像生成AIは「きれいな絵」を作ることは得意でしたが、ブログのアイキャッチとして使うには2つの大きな壁がありました。

  1. 文字の壁: AIは意味のある文字列を描写するのが苦手で、結局あとからPhotoshopなどでタイトルを入れる必要があった。
  2. 一貫性の壁: 毎回画風が変わり、ブログとしてのブランドイメージ(トンマナ)が定まらない。

しかし、Antigravityに搭載されているモデル「Nano Banana Pro」を検証する中で、これらの壁が技術的に突破されていることに気づきました。

1. 「言葉」をそのまま描く能力

Nano Banana Proは、プロンプトに指定した日本語テキストを、驚くほど正確に画像内にレンダリングします。「上から文字を合成する」のではなく、「画像の一部として文字を生成する」のです。これにより、光の反射や質感を含んだ、違和感のないタイポグラフィが自動で完成します。

2. アバターによる「自己」の投影

さらに、自分自身の化身であるアバター(VRMキャラクターのレンダリング画像)を参照画像として渡すことで、生成される世界の中に「私」を存在させることができます。

これは単なる合成ではありません。AIは「ノートPCを操作する」という文脈を理解し、私のキャラクターにその演技をさせ、背景のサイバーパンクな世界観と馴染ませます。結果として、「テックブログである」という雰囲気を一貫して保てるようになります。

Application:ミニマリストのための自動化ワークフロー

私は以下のシンプルなワークフローを構築しました。複雑な画像編集ソフトはもう開きません。

  1. Prompting (Antigravity): 記事のタイトルと、私のキャラクター画像をAntigravityに渡します。「未来的なAIの世界で、このキャラクターがノートPCを操作している。中央に『視覚的コンテキストの自動生成』と書いて」と指示するだけです。

  2. Generation (Nano Banana Pro): 数秒後、文字入り・キャラクター入りの正方形画像が生成されます。

  3. Refining (Python Script): 16:9比率に合わせるため、Pythonスクリプト(create_eyecatch.py)を走らせます。これは単純なクロップ処理を行うだけの軽量なツールです。

完成したのが、この記事のトップにある画像です。

まとめ

私たちは今、「素材を探して加工する」時代から、「意味を伝えて生成する」時代へと移行しています。

文字入れも、キャラクターの配置も、AIが処理してくれます。これにより、執筆者は純粋な思考の出力に、より深く没入できるようになるのではないでしょうか。 (もっと記事を書きたい気持ちになれるといいな)


以下、 create_eyecatch.py の内容です。

#!/usr/bin/env python3
import sys
import os
from PIL import Image

# Usage: python3 create_eyecatch.py <input_image> <output_image>

def create_eyecatch(input_path, output_path):
    try:
        img = Image.open(input_path).convert("RGBA")
    except Exception as e:
        print(f"Error opening image: {e}")
        return

    w, h = img.size
    
    # Target 16:9
    target_ratio = 16/9
    
    # We want to keep the center, so we crop evenly from top/bottom
    # A 1024x1024 image cropped to 16:9 would be 1024x576
    
    new_h = w / target_ratio
    if new_h > h:
        # Image is too wide (unlikely for square), crop width
        new_w = h * target_ratio
        left = (w - new_w) / 2
        img = img.crop((left, 0, left + new_w, h))
    else:
        # Image is too tall (square case), crop height
        top = (h - new_h) / 2
        img = img.crop((0, top, w, top + new_h))
    
    # Resize to HD (1280x720) for consistency
    if hasattr(Image, 'Resampling'):
        resample_method = Image.Resampling.LANCZOS
    else:
        resample_method = Image.LANCZOS

    img = img.resize((1280, 720), resample_method)
    
    # Save
    img.save(output_path)
    print(f"Successfully saved 16:9 eyecatch to {output_path}")

if __name__ == "__main__":
    if len(sys.argv) < 3:
        print("Usage: python3 create_eyecatch.py <input> <output>")
        sys.exit(1)
        
    input_f = sys.argv[1]
    output_f = sys.argv[2]
    
    create_eyecatch(input_f, output_f)

知識の自動化:AntigravityでYouTube動画をObsidianノートに変換

「あとで見る」リストに溜まっていくYouTube動画たち。 良質なコンテンツが増えた現代において、これらを消化しきれないことは、多くの人にとって共通の悩みではないでしょうか。私もその一人です。

ただ動画を流し見するだけでは、知識として定着しません。かといって、毎回メモを取りながら見るのは時間がかかりすぎる。 そこで今回は、Google DeepmindのAIエージェント「Antigravity」の手を借りて、YouTube動画を半自動的に「使える知識(Obsidianノート)」に変換するワークフローを構築してみました。

これが予想以上に快適だったので、備忘録としてまとめておきます。

続きを読む

10年前に仕事をゲームにたとえて書いていたことが今でも結構使えるなと思った件

10年から15年ほど前に自分が書いたブログを読み返す機会がありました。『信長の野望』や『ジンギスカン』、果ては『遙かなる時空の中で』や『金色のコルダ』(光栄のゲームばっかりや…)を持ち出して、仕事の進め方をとらえようとしていた自分の姿がそこにはありました。

今、ゲームのルールは少し変わったかもしれませんし、SlackやTeamsでのコミュニケーションが主になり、働き場所も自由になりました。けれど、仕事という「ゲーム」の根幹にあるOSのようなものは、実は何も変わっていないのではないか、と。

そこで今回は、あの頃の自分が書き散らした3つの記事を、一本の「統合版」としてまとめてみたいと思います。

yourpalm.jubenoum.com

yourpalm.jubenoum.com

yourpalm.jubenoum.com

続きを読む