Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

Windows Live Writer用のプラグインを開発する

Windows Live Writer自作プラグインの開発

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/07/25 14:00

Windows Live Writer用のプラグインの書き方を紹介します。開始する方法から、デバッグ方法、そして最終的なプラグインとしてパッケージ化する方法まで説明します。

目次

はじめに

 Windows Live WriterはMicrosoftが無償で提供しているデスクトップブログオーサリングツールです。Live Writerを使用すると、オフライン状態でもデスクトップからブログエントリを書くことができます。Live WriterはMicrosoftの専用ブログサイト(Windows Live Spaces)をサポートするだけでなく、MetaWeblog APIまたはAtom Publishing Protocolに対応する任意のブログエンジンをサポートしており、たとえばWordpress、Community Server、LiveJournal、Bloggerなどのブログエンジンで使用できます。Live Writerではユーザーのブログスタイルをダウンロードし、それをテンプレートとして使用できるので、自分のブログのスタイルでブログエントリを書くことができます。

 ブログを始めたばかりの初心者でも、ブログ歴が長い人でも、Live Writerを使用すればブログの使い勝手は格段に向上します。しかも、Live Writerに含まれていない機能をプラグインとして追加することができます。

編集者注
 この記事はもともとCoDe Focus Magazineの「Windows Live」エディション(2008, Vol. 5, Issue 2)に掲載されたものですが、許可を得てここに転載しました。

必要な開発環境

 Live Writerのプラグインは.NETで開発します。.NET 1.1を使用することもできますが、Microsoftでは.NET 2.0以上を使用するように推奨しています。Visual Studio 2005以上をインストールしておく必要があります。Visual Studio 2005または2008のバージョンは問いません(Express Editionsも可)。また、Windows Live Writerをダウンロードすることも必要です。Windows Live Writerには、プラグインの基礎となる必須のAPI DLLが含まれています。

著者注
 プラグインの開発にはどの.NET言語を使用してもかまいませんが、本稿の例ではC#を使用しています。

プラグインを書く

 Visual Studioを開き、新しいクラスライブラリプロジェクトを作成して、プラグインとして意味のある名前を付けます。既定名の「class1.cs」を「plugin.cs」に変えましょう(これは必須ではありませんが、こうするとメインのプラグインクラスが一目でわかります)。

 次にWindows Live Writer APIの参照を追加する必要があります。[Add Reference]ウィンドウを開き、Windows Live Writerのインストールフォルダ(通常はC:\Program Files\Windows Live\Writer\)にあるWindowsLive.Writer.API.dllを選択します。この参照については、Copy Localプロパティをfalseに設定することをお勧めします(これにより、以前のバージョンのAPI DLLがLive WriterのPluginsフォルダにコピーされなくなります)。plugin.csを開き、次のusingステートメントを含めます。

using WindowsLive.Writer.Api;

 Windows Forms名前空間への参照も追加する必要があるので、System.Windows.Formsを参照として追加し、次のステートメントも含めます。

using System.Windows.Forms;

 次は、プラグインの属性を追加します。これらの属性は、プラグインの作成者、開発者のWebサイトへのリンク、説明、プラグインのオプションの有無、およびLive Writer UI内でプラグインのアイコンとして使用するイメージの場所をLive Writerに知らせるためのものです。この属性は名前空間の直後(メインクラスの前)に記述します。

 具体的なコードを次に示します。

[WriterPlugin ("d39bba2b-9522-49b1-8731-61030ccd6c95",
   "My First Plugin",
   Description = "This is my first plugin",
   HasEditableOptions = false,
   Name = "My First Plugin",
   PublisherUrl = "http://www.liveside.net")]
[InsertableContentSource ("Bold Text")]

 なお、GUIDはプラグインごとに一意のものであり、これを他のプラグインで再使用してはなりません。そのようなことをすると、Writerで問題が起こり、目的のプラグインをロードできない可能性があります。

 プラグインのアイコンを追加するには、次のコードを含めます。

ImagePath = "icon.gif",

 この属性の値に、使用したいアイコンのファイル名を指定します。ファイルの場所はプロジェクト内での相対パスで指定します。イメージ自体のサイズは20×18ピクセルでなければなりません。

 この後、プラグインクラスを作成する必要があります。このプラグインクラスはLive Writer APIから継承する必要があります。継承元として、ContentSourceとSmartContentSourceという2つの選択肢があります。ContentSource系プラグインは非常に基本的なものであり、テキストをブログエントリに挿入するだけで、そのテキストを再度変更することはできません。一方、SmartContentSource系プラグインでは、これよりもずっと多くのことができます。この最初のサンプルではContentSourceインタフェースを継承します。

public class LiveWriterExamplePlugin : ContentSource

 プラグインでテキストをどのように挿入するかを指定する必要があります。次の3つの方法があります。

  • CreateContent ― [Insert]メニューから挿入
  • CreateContentFromUrl ― URLをブログエントリ領域に貼り付けたとき、または[Blog This]アクションから挿入
  • CreateContentFromLiveClipboard ― LiveClipboardを使用(ただし、ドキュメントの問題からLiveClipboardのコンテンツがあまりないので、このメソッドは一部でしか使用されていない)

 最もよく使われている方法はCreateContentです。プラグインコードでは、これらのメソッドをすべてオーバーライドします。また、これらは相互排他的な関係ではなく、1つのプラグインで2種類以上を使用できます。

CreateContentメソッドをオーバーライドする

 下記のコードの、コンテンツが含まれる文字列参照(content)に注目してください。この参照については、次の2点に注意する必要があります。

  1. 編集ウィンドウ内で選択されているものがある場合は、それがこのコンテンツの初期値となります。選択されているテキストがない場合、contentは空になります。テキストが選択されている場合、contentは選択されているテキストのフルHTMLコードになります。
  2. プラグインは、このメソッドが終了する時点でcontentに入っているものをブログエントリに戻します。つまり、contentにはプラグインの機能に必要なHTMLフォーマットが含まれていなければなりません。

 挿入された基本コードは単なるプレースホルダなので削除します。この最初のサンプルでは、単にDialogResult.OKを返します。このサンプルは、選択されているテキストをボールドにする単純なプラグインとなります。したがって、CreateContentメソッドのコードもごくシンプルです。

public override DialogResult CreateContent
   (IWin32Window dialogOwner, 
   ref string content)
{
   if (!string.IsNullOrEmpty(content))
      content = string.Format(
      "<b>{0}</b>", content);
   return DialogResult.OK;
}

 このコードを使用すると、プラグインは選択されているテキストを受け取り、そのコンテンツをHTMLボールドタグで囲みます。リスト1を見ると、このLive Writerプラグインのコードがどれだけ簡単かがわかります。

リスト1 プラグインのコード
using System;
using System.Collections.Generic;
using System.Text;
using WindowsLive.Writer.Api;
using System.Windows.Forms;
namespace LiveWriterExample
{
   [WriterPlugin("d2c99304-8648-4696-9ef1-6a82a2d070c9", 
   "LiveWriterExamplePlugin",
   Description = "Makes highlighted text bold.",
   HasEditableOptions = true,
   ImagePath = "icon.gif",
   Name = "Bold Text Plugin",
   PublisherUrl = "http://www.liveside.net")]

   [InsertableContentSource("Bold Text")]
   public class LiveWriterExamplePlugin : ContentSource
   {
      public override DialogResult CreateContent
         (IWin32Window dialogOwner, ref string content)
      {

         // If nothing is highlighted, content will be empty.
         // If this is the case, the plugin does nothing.
         if (!string.IsNullOrEmpty(content))
            content = string.Format("<b>{0}</b>", content);
         return DialogResult.OK;
      }
   }
}

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • Scott Lovegrove(Scott Lovegrove)

    Windows Live MVP for Microsoftであり、Windows Live Writerだけでなく、Windows Live全般に深く関係している。Windows Live専用のコミュニティWebサイト「LiveSide.net」の主要な寄稿者の1人であり、Windows Live...

  • japan.internet.com(ジャパンインターネットコム)

    japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.c...

バックナンバー

連載:japan.internet.com翻訳記事

もっと読む

All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5