clr/h第61回勉強会ライトニングトーク - dns サービス dozens の api を呼び出す...

20
ブログ "Developer@ADJUST" http://devadjust.exblog.jp/ Twitter: @jsakamoto

Upload: jun-ichi-sakamoto

Post on 31-May-2015

1.433 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた

ブログ "Developer@ADJUST"

http://devadjust.exblog.jp/

Twitter: @jsakamoto

Page 2: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた

Dozens (ダズンズ) とは?

クラウド時代に対応した DNS サービス。

無料で12レコード利用可能な Free プランあり。

月額 ¥1,000 の Basic プラン以降は TTL を1分にも変 更可能で、ダイナ ミックDNS として の利用も可能。

Page 3: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた

REST API が公開されています

ゾーンやレコードの追加・取得・編集・削除が可能な REST API (Web API) が公開されている。

生の REST API を直接呼び出すコードを書くのは手間なので、クライアントアクセスライブラリの需要が。

Ruby 版が出現!

Page 4: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた

負けじと Dozens API クライアントを .NET で書いてみた

Dozens API Client for .NET

CodePlex でオープンソース(Ms-PL)として公開

○ http://dozensapiclient.codeplex.com/

ソースコードは C# で記述。

バイナリは NuGet にも登録済み。

Page 5: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた

.NET のアセンブリなので...

いろいろな言語・処理系から、このクライアントライブラリを使って、Dozens API を呼び出せるようになった!

Page 6: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた
Page 7: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた

C#

当然、VB.net でも同様に使えます。

NuGet から容易にプロジェクトに追加可能!

using DozenAPI;

...

static void Main(){

var dozens = new Dozens("UserId","APIKey");

dozens.UpdateRecord("www.hoge.jp", null, "192.168.0.1", 7200);

}

Page 8: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた

Windows Power Shell

Windows Power Shell からは、.NETのクラスライブラリを呼び出し可能なので、当たり前ですね!

インテリセンスとまではいきませんが、Tabキーでメンバを補完・列挙できます。

>[System.Reflection.Assembly]::LoadFile("C:¥Work¥Dozens.dll")

>$dozens = New-Object DozensAPI.Dozens("UserId", "APIKey")

>$dozens.UpdateRecord("hoge.jp","www",$NULL,"192.168.0.1",7200)

Page 9: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた

F# スクリプト カラー構文表示・インテリセンス・パラメータヒント・リアルタイム構文チェック・対話環境が使える、.NET呼び出し放題の最強のスクリプト言語!

もちろん、普通に "F#" のアプリ(.exe)としても使えます。

#I "C:¥¥work"

#r "Dozens.dll"

open DozenAPI

let dozens = new Dozens("UserId", "APIKey")

dozens.UpdateRecord("www.hoge.jp", null, "192.168.0.1", 7200)

Page 10: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた

JScript、VBScript (WSH)他

.NETはCOMとの相互運用が可能。

COM サーバーを呼び出せる処理系なら、Dozens API Client for .NET も、COM サーバーとして呼び出せるのでした!

Win 版 Ruby (Active Ruby) も COM 呼べるので、Ruby からも利用可能なはず!

○ Ruby版はちゃんとありますので、意味ないですが。

Set dozens = CreateObject("DozensAPI.Dozens")

dozens.Auth "UserId", "APIKey"

dozens.UpdateRecord_6 "www.hoge.jp", Nothing, "192.168.0.1", 7200

Page 11: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた

Small Basic (!) 残念ながら Dozens API Client

for .NET を直接は呼び出せません。

そこで、Small Basic 用拡張ライブラリとしてのラッパーを作成!

こちらも CodePlex でオープンソース公開。

くるくる回転するイ ンテリセンスと懇切 丁寧なパラメータヒ ントがステキです!

Page 12: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた

以上、すべて動画あり。 YouTube にアップロード。

Dozens API Client for .NET の CodePlex ページからたどれます。

Page 13: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた

最新の追加情報

MacOS X "Lion" の mono 上の F# での動作も確認できました!

Page 14: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた

まとめ

.NET というプラットフォームを選択したことで、 こんなにも利用可能な場面が広がるんだなー と、改めて実感しました。

当然、Windows OS も XP 以降、32bit/64bit 問わず利用可能です。

Page 15: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた

おまけ

Page 16: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた

PowerShell は.NET4上で動作していなかった。

当初.NET4版で作成していたが、.NET3.5に焼き直し。

PowerShellを.NET4上で動作させるように、レジストリ設定で変更することは可能です。

Page 17: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた

.NET3.5用に焼き直したときに、デフォルト引数が使えたのに一瞬びっくり。

でも、よく考えたら、デフォルト引数はコンパイラの機能であって、ランタイムの機能ではないので、当たり前といえば当たり前。

.NET 2.0用のプロジェクトでも、コンパイラさえ最新なら、var とか拡張メソッドとか使えたでしょう?

Page 18: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた

int? と F# は相性悪かった

C# では「1」とかけば済む引数が、「Nullable 1」 と書かなくてはならず せっかくの F# のシンプルさが台無し!

許せなかったので、int? をやめて object に変更。

Page 19: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた

COM では引数無しコンストラクタしか使えなかった

ユーザーIDとAPI Keyの指定は必須なので、当初はコンストラクタで指定するようにしていた。

しかし、COM クライアントから呼びだされる場合は、コンストラクタに引数を与えることができない。

致し方なく、引数無しのコンストラクタと、Authメソッドを別途実装。

Page 20: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた

オーバーロードと COM は相性悪かった

COM にはオーバーロードの概念がないのでした。

メソッド名の末尾に "~_1" とかのサフィックスがつく羽目に。

例) CreateRecord_2

COM はさすがに着々と過去のものになりつつあると思うので、これに執着するのはあきらめた。