窓を作っては壊していた人のブログ

提督の窓や成績の窓を作ってました.今では適当に好き勝手に開発をしてます.

WebSharpを触ってみた(導入編

Xamarinの強い人たちのツイートを眺めていたらこんな記述がありました.(会話の内容は省略)

なにこの見るからに面白そうなもの…ということで実際にサンプルだけでも触ってみることにしました.

そこそこ詳しくこっちに書いたのでこちらも併せてごらんください. qiita.com

追記に追記(2017年2月20日) 追記(2017年1月27日)

さて,現在開発をmacで行っているのですが,dotnet core のバージョンが 1.0.0-rc4-004616 こんな感じといいますか, project.jsonでプロジェクトを管理するのではなくcsprojで管理し始めたものになると,binding.gypとかを書き換える必要が出てきます. ちょっとdiffを用意し忘れましたが,見ればすぐわかります(雑

ちなみにそれでビルドは全部通ったのですが,スタックオーバーフロー起こしてElectronで起動できませんでした,現在原因調べてます.

予想はついてはいましたが,1.0.0-preview2-1-003177とかに戻すと動きますね…dotnet coreの最新のrc4のものをリネームしてpreview2を指すようにするという対処法で行っていますが, あまり良い方法ではないですね…

edge.jsのプロジェクトにglobal.jsonを加えてビルドするようにしたら問題ないですね.自分のフォークしたリポジトリに入れたのでそれを見ていただければと…

導入

GitHub - xamarin/WebSharp: Support for running C# on the web browser.

からリポジトリをクローンしてきて,その中のExampleをとりあえず眺めてみることに.

Pre-requisitesとして挙げられているものを確認してみると

  • Node.js
  • Native Abstractions for Node.js
  • PepperPlugin

の3つ.Electron触ったことある人ならNode.jsは入ってるだろうし問題無し.

nanはネイティブライブラリをラップしたりしてたことのある人ならば入っているだろうけど,入っていなかったらnpm i nanでインストール

最後のPepperPluginだけれども,この名前を聞くとChromeのあれかな…と勘違いしてしまう.あ,流行ってる(?)PPAPでもないです.ということで,このPepperPluginのインストールについて触れてみることにする.

リンク先に飛んでみると,

If you have never setup WebSharp before, use the make setup makefile target, this will download the dependencies for the build: Pepper SDK and NuGet:

make setup

と言われてるので大人しくmake setupを叩いてみると make: *** No rule to make target `setup'. Stop.

おいREADME!!!!!!!となるのですが,文章を見て察しろということなんでしょうね,WebSharpを一度もsetupしたことがないのであれば,と言っているので,リポジトリのルートディレクトリに行ってmake buildを叩くと無事に関連物がポンポンダウンロードされます.あとは言われた通りにmake buildを叩けば準備完了…と行きたいところですが, 私が以前に書いた Visual Studio for Macをインストールしてmono4.8+が無いと怒られた時の対処法 - Qiita を実践し,monoが4.8.0になっていた場合, mono/utils/mono-dl.hがないとか言われて怒られます.

なのでその時は

sudo ln -nfs /Library/Frameworks/Mono.framework/Versions/4.6.2 /Library/Frameworks/Mono.framework/Versions/Current

みたいにして以前のバージョンに戻してください.(この辺り.zshrcとかに関数用意しておこうかなあ…)

追記(2017年2月20日)

上記のリンクに載せたQiitaの記事に色々と対策やら考察やら書きました. とりあえずPKG_CONFIG_PATHを設定すればln -sとかをしなくて良さそうです.あとはmono 4.8.0 のバージョンを新しめの物にかえれば問題なく動作しそうですね.

あとは言われた通りに写経すれば動くはずです.動かないなーっていう人は,使われてるElectronが自分でglobalに入れたものでバージョンがあっていないとかその辺の問題だと思いますので,node_modules/.bin/electronあたりのものを使って起動しましょう.

とPepperPlugin必要なのかーという感じではありますが,機能を限れば不要でした.

というのもDotNetSamplesのサンプルを試した時はPepperPluginのインストールをしない状態で始めた時に動作していたからです. 詳しい理由とかは調べるのが めんどう たいへんなので,誰か詳しい方お願いします.

触ってみた感想としてはcsxみたいなものかーという感想です. 私はjs書くのが非常に苦手だったので,C# で書けるのはだいぶ負担が減って良いと思います(jsじゃなくてtsという選択肢もあってそっちも使ってたけど,やっぱりC# の方がいい).

すぐ試したいことはネイティブライブラリをラップしたやつでも容易に呼び出すことができるか,またReactの中に埋め込んでごにょごにょ出来るかって感じですかね.

ViewをReactで書いてモデル部をC# で書くとかごった煮感あってすごい楽しみ…Electronで使えるから,GUIアプリケーションもある意味C# で書ける環境が作られつつあるって考えてもいいんですよねやったーーー