NiconamaCommentViewer(ニコ生コメントビューア)のプラグイン作成法 1


ニコニコ生放送用のコメントビューアであるNiconamaCommentViewerのプラグインの作成法メモです。

今回は、開発環境の準備方法、基本的なプラグインの作成法について記載。
 
2011/03/24 追記 VisualStudio2010で新規開発する場合の注意事項(.NET Frameworkを4.0→3.5にする旨)


開発環境の準備


・開発環境

 本記事では無料の開発環境であるMicrosoft Visual C# Express Editionを使用します。
  (バージョンは2005, 2008, 2010どれでもいけます。言語もVB,C++でもいけるかと。リンク先は最新版です。)

・プラグインに組み込むDLLファイル

 コメビュ本体に同梱されているDLLを用意します。
 NiconamaCommentViewerのサイトからコメビュ本体をDLしてきます。
 DLしたZIPファイルを解凍し、以下ファイルがあることを確認します(本記事執筆時点ではncv_0084.zipでした。)

 Plugin.dll
 NicoLibrary.dll

 ※前者は、プラグイン実装に必要なクラス(プラグイン実装用IFクラス(IPlugin)、
 ビューア本体とのIF(IPluginHost))を提供、
 後者は、ニコニコ生放送APIとのインターフェイス
 (コメントデータ等の型(NicoLibrary.NicoLiveData)など)を提供するようです。

 上記2つのDLLを、後ほど作成するプラグイン用プロジェクトに組み込んで使用します。

・プラグイン開発者用ドキュメント


 コメビュ開発者の方がプラグイン作成用ドキュメントを用意してくれています。
 以下ページの「プラグインを製作したい方へ」の項目からドキュメントをDLしておきます。
 (本記事執筆時点では「Plugin_Doc.chm」という名前。)
 http://www.posite-c.com/application/ncv/plugin.html


 
 中身が見れない場合は、右クリック->プロパティで「ブロックの解除」を行います。

プラグイン作成方法


①VisualStudio新規プロジェクトの作成


 VisualStudioを立ち上げ、ファイル->新しいプロジェクト>クラスライブラリを選択し(C#)、ソリューション(プロジェクト)名を入力し、新規ソリューション(プロジェクト)を作成します。
 (例:NCV_Plugin_Sample)

・VisualStudio2010で新規開発する場合
対象となる.NET Frameworkをデフォルトの4.0から3.5に下げる必要があります。
ソリューションエクスプローラ上で、プロジェクト名を右クリックして、プロパティを開きます。
「対象のフレームワーク」はデフォルトでは.NET Framework 4.0になっていますので、.NET Framework 3.5にしておきます。



②DLLをプロジェクトに組み込む


 ソリューションエクスプローラの参照設定の部分で右クリックし、
 参照の追加を選択、(またはプロジェクト->参照の追加 メニューを選択)し、「参照の追加」ダイアログを表示させます。
 参照タブから前述のDLLを選び、プロジェクトに追加します。



 プロジェクトに参照が2つ追加されていることを確認します。



③IPluginインタフェースの実装

 コーディングに入ります。
 まず、コメビュ本体からプラグインとして認識されるためのクラスである、
 IPluginインターフェイスを実装したクラスを作成します。
 IPluginインターフェイスについては、開発者用ドキュメントのIPlugin Membersの項目を参照してください。
 
 1からコーディングする場合は、 public class Class1 : Plugin.IPluginと記入し、
 ”Plugin”の部分にマウスカーソルをのせ「インターフェイス’IPlugin’を実装します」を選択すると、
 ある程度自動的にコーディングされます。
 あとは、throw new NotImplementedException();を置き換えるように機能を実装していきます。

 以下、何もしないプラグイン「サンプルプラグイン」の実装例です。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Plugin;
namespace NCV_Plugin_Sample
{
    public class Class1 : IPlugin
    {
        private IPluginHost _host = null;

        #region IPlugin メンバ

        /// <summary>
        /// IsAutoRunがtrueの場合、アプリケーション起動時に自動実行される
        /// </summary>
        public void AutoRun()
        {
            //throw new NotImplementedException();
        }

        /// <summary>
        /// プラグインの説明
        /// </summary>
        public string Description
        {
            //get { throw new NotImplementedException(); }
            get { return "プラグインのサンプルです"; }
        }

        /// <summary>
        /// プラグインのホスト
        /// </summary>
        public IPluginHost Host
        {
            get
            {
                //throw new NotImplementedException();
                return this._host;
            }
            set
            {
                //throw new NotImplementedException();
                this._host = value;
            }
        }

        /// <summary>
        /// アプリケーション起動時にプラグインを自動実行するかどうか
        /// </summary>
        public bool IsAutoRun
        {
            //get { throw new NotImplementedException(); }
            get { return false; }
        }

        /// <summary>
        /// プラグインの名前
        /// </summary>
        public string Name
        {
            //get { throw new NotImplementedException(); }
            get { return "サンプルプラグイン"; }
        }

        /// <summary>
        /// プログインを実行する
        /// </summary>
        public void Run()
        {
            //throw new NotImplementedException();
        }

        /// <summary>
        /// プラグインのバージョン
        /// </summary>
        public string Version
        {
            //get { throw new NotImplementedException(); }
            get { return "1.0"; }
        }

        #endregion
    }
}

④ビルド


 プロジェクトをビルドし、DLLファイルが生成されることを確認します。
 本サンプルでは(NCV_Plugin_Sample.dll)

 このDLLファイルがNiconamaCommentViewerのプラグインファイルとなります。
 
 
 

⑤プラグインの動作テスト


 作成したDLLファイルをNiconamaCommentViewerのpluginsフォルダに格納し、NiconamaCommentViewerを立ち上げます。
 プラグインメニューに作成したプラグインが追加されていることを確認します。

 以上で何もしないプラグインが作成できました。


プラグインにフォームを追加する



 今回は基本的なプラグインとして、何もしないプラグインを作成しました。
 次回はプラグインにフォームを追加したいと思います。
 →NiconamaCommentViewer(ニコ生コメントビューア)のプラグイン作成法 2

 次々回あたりでコメント文字列の取得方法など扱う予定です。

25件のコメント

  1. mizyです。
    こういうのはとてもありがたいですね(^^
    C#でも何にしろ、開発環境の操作手順とか覚えるのが大変なんですよ…Eclipseとか(笑)

    あと今、必死でC#のnamespaceについて勉強しているところです。。。
    javaのpackageと微妙に意味が違うので、混乱しているんですよね(^^;

  2. コメントありがとうございます。
    つたない文章ですが作業メモを残してみました。プラグイン開発者のお力添えができれば幸いです。

    javaとC#はよく比較されるようですね。異なっている点を押さえると効率よく学習できそうですね。
    javaは全く分からないので私に教えてくださいw

  3. ピンバック:NiconamaCommentViewer(ニコ生コメントビューア)のプラグイン作成法 2 « 夏研ブログ

  4. ピンバック:NiconamaCommentViewer(ニコ生コメントビューア)のプラグイン作成法 3 « 夏研ブログ

  5. こんにちは、NCVのプラグインを作ろうと思って検索してこちらにたどり着きました。
    ncv_0089のバージョンのNCVを使ってるのですが、ここに説明してある通りに作ったのですがNCVを起動すると「プラグイン」の中に何も表示されません。何故でしょうか?

  6. >#3 by stellaさん
    こんにちわ、こちらでも再現しました。
    以下に該当していないでしょうか?

    VisualStudio2010で新規でプラグインを作成すると、
    デフォルトで.NET Framework 4.0対象とする開発となるのですが、
    この場合、コメビュ本体から認識されないようです。

    そこで、プロジェクトのプロパティで「対象のフレームワーク」を
    .NET Framework 3.5に下げることでコメビュ本体から認識されるようになります。

    この操作はVisual Studio 2005や2008 での開発では必要ありません。
    ブログ本文の方も更新しておこうと思います。

  7. ピンバック:NiconamaCommentViewer(ニコ生コメントビューア)のプラグイン作成法 デバッグ編 « 夏研ブログ

  8. ピンバック:クラスライブラリ(DLL)プロジェクトのデバッグ方法 | 夏研ブログ

  9. こんにちは。
    まったくの初心者には助かります。ただ、VS2010ですが、3.5に落とすと
    参照設定でバージョンが低いと注意が出ます。最新のα132だと4.0らしいので、
    そのせいでしょうか?

    あと、
    >>1からコーディングする場合は、 public class Class1 : Plugin.IPluginと記入し、
    これをどこに記入したらいいのかわかりません。

    よろしくお願いします。

  10. ロフトくん

    >ぶりさん
    こんにちは。
    NCVα127以降は.NET4.0になったようですね。
    プラグインもNCV本体に合わせて、.NET4.0でよいかと思います。

    public class Class1 : Plugin.IPluginは
    サンプルコードの8行目の部分です。

    ソリューションエクスプローラーにClass1.csという項目が
    あると思いますので、
    右クリック->コードの表示を選択すると編集画面が表示されます。

    その編集画面に
    public class Class1
    とコーディングされていると思いますので、
    public class Class1 : Plugin.IPlugin
    のように書き換えて、プラグインの機能を実装していきます。
    その後の記述内容は、サンプルコードをご参照下さい。

  11. できました。
    public class Class1 : Plugin.IPlugin
    ではなく、サンプルコードどおりに、
    public class Class1 : IPlugin
    と打ち込み、続けましたら、できました。
    まずは第一歩ですね。うれしいです。

  12. ロフトくん

    >ぶりさん
    こんにちは。
    よかったです。オリジナルプラグインの作成頑張ってください。

  13. 2の内容から戻したら、ビルドエラーが出るようになってしまいました。
    何が原因でしょうか?
    最初にビルドしたときはうまく行ったのですが。

    エラー 1 型 ‘NCV_Plugin_Sample.Class1’ は ‘Description’ の定義を既に含んでいます。 C:\Users\owner\documents\visual studio 2010\Projects\NCV_Plugin_Sample\NCV_Plugin_Sample\Class1.cs 94 23 NCV_Plugin_Sample
    エラー 2 型 ‘NCV_Plugin_Sample.Class1’ は ‘Host’ の定義を既に含んでいます。 C:\Users\owner\documents\visual studio 2010\Projects\NCV_Plugin_Sample\NCV_Plugin_Sample\Class1.cs 103 28 NCV_Plugin_Sample
    エラー 3 型 ‘NCV_Plugin_Sample.Class1’ は ‘IsAutoRun’ の定義を既に含んでいます。 C:\Users\owner\documents\visual studio 2010\Projects\NCV_Plugin_Sample\NCV_Plugin_Sample\Class1.cs 120 21 NCV_Plugin_Sample
    エラー 5 型 ‘NCV_Plugin_Sample.Class1′ は、’Run’ と呼ばれるメンバーを同じパラメーターの型で既に定義しています。 C:\Users\owner\documents\visual studio 2010\Projects\NCV_Plugin_Sample\NCV_Plugin_Sample\Class1.cs 138 21 NCV_Plugin_Sample
    エラー 4 修飾子 ‘public’ がこの項目に対して有効ではありません。 C:\Users\owner\documents\visual studio 2010\Projects\NCV_Plugin_Sample\NCV_Plugin_Sample\Class1.cs 129 24 NCV_Plugin_Sample
    エラー 6 修飾子 ‘public’ がこの項目に対して有効ではありません。 C:\Users\owner\documents\visual studio 2010\Projects\NCV_Plugin_Sample\NCV_Plugin_Sample\Class1.cs 146 24 NCV_Plugin_Sample

  14. ロフトくん

    >ぶりさん
    こんにちは。

    エラー 1 型 ‘NCV_Plugin_Sample.Class1′ は ‘Description’ の定義を既に含んでいます。 C:\Users\owner\documents\visual studio 2010\Projects\NCV_Plugin_Sample\NCV_Plugin_Sample\Class1.cs 94 23 NCV_Plugin_Sample

    まず上記だけに着目します。
    上記はDescriptionの定義がかぶってるという内容です。

    ソースコードを”Description”で検索してみて、
    以下の様な記述が複数個ないか確認してみて下さい。

    public string Description
    {
               :(略)
    }
    

    なお、Class1.csの94行目が怒られているようですね、
    サンプルコードは85行程度ですので、
    編集しているうちにソースが長くなっているかもしれません。
    一度、サンプルコードと全く同じ状態に戻すのも手かと思います。

  15. 律木戸(りっきど)

    NCVのプラグインを開発しているものですが
    他の人のNCVでは自分のプラグインを認識してもらず
    その人に自分のNCV ver.α133 を送ったところ動きました。(その人のNCVのver.はα133です。)
    原因を調べていますがおそらくわからないままに終わるような気がします。
    解決法には心当たりがないでしょうか?

  16. ロフトくん

    >律木戸(りっきど)さん
    こんにちは。
    ・プラグインの使い方の確認
     その方は、他の人が公開しているプラグインは普通に使えている方でしょうか?
     その方のプラグインの導入方法に間違いはなさそうでしょうか?
      例えば圧縮ファイル(zipとか)のまま格納してるとか、
      pluginsフォルダ以外の場所に格納してるとか
      α133を使ってると思ってたけど実は古いバージョンだったとか
    ・プラグインが認識しなくなる現象の事例のご紹介
     昔、NCV本体が.NET3.5で作成されていた頃、
     プラグインを.NET4で作ると認識されなくなるという事例はありました。
     現在はNCV本体が.NET4ですね、プラグインは3.5でも4でもいいのか、
     4じゃないといけないのかはちょっと試してないので不明

    これくらいですかねえ、あまり情報持ってなくて恐縮です。

    • 律木戸(りっきど)

      細かくかけなくてすいません。
      自分の作成していたフレームワークは4.0です。
      その人とはskypeでチャットしながらだったのでα133です。
      またnet3,4両方で作り試してもらいましたが先述の通りになってしまいます。

  17. プラグイン作成しようとして、①をして、②DLLをプロジェクトに組み込むをしたのですが、参照設定にNicoLibrary.dllとPiugin.dllを追加したのですが、エラーがでて「利用可能でないか、またビルドされていないため、このプロジェクトをオブジェクトブラウザで表示することができません。プロジェクトが利用可能でビルド済みであることを確認してください。」と表示されました。
    初心者でビルドなどが全く分からず行き詰っています
    解決策などがあればご教示お願い致します。

  18. ロフトくん

    >masakiさん
    こんにちは。Twitterにて返信致しました。
    最新版のVisual Studio (Visual Studio 2015 Community)にて開発されてみてください。

  19. はじめまして。全くの初心者なのですが、NCVのプラグインでiTinesかWMPのトラック情報をニコ生の主コメントに投稿して曲名・アーティスト名をテキストで出力し、アルバムワークをjpegでそれぞれOBSで加工して画面表示させたいと考えています。あと可能かどうかなのですが、リスナーコメントでリクエスト機能も付けたいと思います。
    ただ、やはり初心者のため何もわからず、このページのソースを打ち込んでみましたが、エラーの連発でくじけています。実はそれ以前に謎があります。64bitのPCでVisual C# 2017を使用していますが問題ないのでしょうか?x86じゃないと無理でしょうか?
    よろしくお願いします。

  20. ロフトくん

    > なおpさん
    はじめまして。
    まずはこのページでご紹介しているような、
    何もしないプラグインが作れると良いですね。

    エラーの内容を書いていただけると何か分かるかもしれません。
    また、よろしければどこかのアップローダーに
    ソリューション一式をアップロードして頂ければこちらでも内容を確認してみます。

    欲しい機能を追加していくのはその後に取り組んだほうがよいです。
    64bitのPCを使われているのは問題ないです、最近は64bitのPCが主流ですね。

  21. ありがとうございます。
    エラーが多く出ています。TXTファイルにしましたので確認お願いします。

    https://ux.getuploader.com/naopy34/

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です