きよくらの備忘録

「三日坊主と呼ばせない!日記」改め。主にソフトウェア開発関連の話題。

TypeScriptの1.6.2が入ってるはずなのにtsc --versionが1.0.3.0を返したら

WindowsVisual Studio と node.js の両方の環境でTypeScriptを使おうとすると遭遇するかもしれない話です。

1.6.2 入ってるのはずなのに 1.0.3.0?

普段TypeScriptの開発をVisual Studioで行っています。が、ちょっとした理由でnode.jsのtscコンパイルをしたいことが発生しました。 さっそくnpmでTypeScriptの1.6.2をインストールし、コマンドラインからtsc hoge.tsみたいな感じでコンパイルを実行……したら、エラーとか出て文句言われました。

??

…気を取り直してtsc --versionでバージョン確認したら……なんと「1.0.3.0 」というバージョンが返ってきました。 『んなアホな』と思いnpm ls -g typescriptで確認すると、やはりnpmではちゃんと1.6.2が入っている模様。

f:id:kiyokura:20151013221731p:plain

 

環境変数のpathから削除する

原因はVSのアドオンとして入ってるTypeScriptコンパイラのパスが環境変数で設定されているから……でした。 システム環境変数のpathからC:\Program Files (x86)\Microsoft SDKs\TypeScript\のエントリを削除すればOK。私の環境では1.0と1.4のパスが存在していました。

 

削除後、再度tscのバージョンを確認すると、ちゃんと1.6.2が返ってきました。

f:id:kiyokura:20151013221759p:plain

なおこの環境変数を削除しても、Visual Studioからのコンパイルは特に問題ないと思います*1*2

 

まとめ?

なお、いくつか手元の環境を確認した限りこれは1.4までで、1.5以降はVSのTypeScriptアドオンをインストールしても環境変数に追加しないようです*3。ので、最近入れた人は問題ないかもしれません。

*1:MSBuild…というかcsprojのTypeScriptバージョンで指定したバージョンでSDKs以下のコンパイラを直接見るので

*2:もちろん、pathにC:\Program Files (x86)\Microsoft SDKs\TypeScript\のtscが指定されていることを期待して書いてるなにかがあればそれは微妙なことになるでしょうから注意

*3:私の環境を見る限りという話なので、ひょっとしたら正しくはないかもしれません

Logicool M570のマイクロスイッチを交換した

Logicoolトラックボール、M570がついに*1チャタリングを起こし始めました。この商品は3年と比較的長めの補償が付いてるのですが、残念ながら丁度この夏くらいに切れたという…。 (下のアフェリエイトは後継型番のM570t)

LOGICOOL ワイヤレストラックボール M570t

LOGICOOL ワイヤレストラックボール M570t

 

M570オーナーの間ではマイクロスイッチの自力交換ももはやあたり前ということで*2、私もサクッと交換しました。 交換に使ったのは、定番のオムロンのD2F-01F。左右あるし*3、もう一台稼働中のM570もあってどうせそのうちキそうなので、5個セットをamazonで購入。

 

交換は特に手間取ることなくサクサクと。電池ボックスのシールに隠れたビスに気が付かなくてちょっと戸惑ったのは内緒。今回使った道具はこれだけ。やっぱり電動の半田吸い取り器は楽で良いですね。 f:id:kiyokura:20151004230236p:plain

 

左のD2F-01Fが新しく取り付けるもの。右のD2FC-F-7Nがもともとついてたもの。3年以内で結構な数壊れて無償交換になるのも本当に珍しくないようなので、最初からこんな劣化版つけなきゃいいのに、とも思いつつ。 f:id:kiyokura:20151004230127p:plain

*1:M570使ってる人の間では常識になるくらいには当たり前に故障する

*2:商品としてどうなのは思う

*3:右はまだ壊れてないし壊れることもないかもしれないけど、左右でクリック感が異なるのはなんか嫌で……

中国地方DB勉強会で「プロジェクト指向オフライン データベース開発」のお話をさせていただきました

OSC 2015 広島の翌日、同じ会場で開催された第十一回 中国地方DB勉強会 in 広島で、『SQL Server のプロジェクト指向オフライン データベース開発を採用してみた話』というタイトルでお話させていただきました。

 

SQL Server では SSDTを利用することで、Visual Studioをフロントエンドにして開発を行うことができます。単にフロントエンドGUIをSSMS*1からVisual Studio に切り替えるという話ではなく、データベース(内のオブジェクト)をVisual Studioのプロジェクトと看做して扱うことになります。

 

このプロジェクト形式でDBを扱う手法は最初はとっつきにくく感じたのですが、部分的に徐々に利用して行ったところ、開発を進める上で感じていた問題を随分解決してくれた……というのが現時点での感想です。 (私の現時点の理解では、単体テスト機能に過度な期待を持ちすぎるとのはちょっとセーブしたほうが良いかなとも思っています。がこれについてはまだまだ色々試行したいとも思っています)

 

もしSSDTに興味を持たれるようでしたら、資料の最後の方にも書いた通り、まずはスキーマ比較(と同期)の機能とバージョン管理システムをを使って、オブジェクトのバージョン管理を行う等から試用をしてみるのがいいのではないかな、と思います。スキーマ比較やデータ比較の機能だけでもづ随分強力なツールだと思います。

 

あと…。 当日の参加者層*2から、単体テストに関連する機能の詳細やドキュメントからは分かり辛いと感じたこと、カスタマイズのポイントなどについてはざっくりと割愛しました。 近々なんらかの形で共有したいと思っています。

*1:SQL Server Management Studio

*2:SQL Serverの利用者が少ない

OSC 2015 HiroshimaでASP.NET 5とかについてお話させていただきました

9/19(土) オープンソースカンファレンス 2015 Hiroshimaにて「オープンソース&クロスプラットホームとなったASP.NET 5」というタイトルでお話させていただきました。資料はこちら。

ASP.NET 5についてというよりも、マイクロソフトの.NET Framewrok回りのOSS&クロスプラットフォームまわりの状況というか雑感というか、そういうあたりが中心になっている点はご容赦ください。

ASP.NET 5は現在betaでまだまだ破壊的変更も入りそうな気配です。実際にモノを作り始めるならRCを待った方が良いとは思いつつも、気になる点に対してissueを投げたりすることで、ASP.NET自体の開発に参加することも可能だと思います。そういう視点でガンガン触っていくはアリだと思います(ぉ

Ubuntu Desktop で ASP.NET 5 Beta7 を CoreCLR で動かす

ASP.NET 5 Beta7がリリースされました。

Announcing Availability of ASP.NET 5 Beta7 – .NET Web Development and Tools Blog – Site Home – MSDN Blogs

そして注目したいのはここ。

"This release also includes the first public preview of the .NET Execution Environment (DNX) for Mac and Linux based on .NET Core – no Mono required."

ついにLinuxMacOSXでもMonoじゃなくて .NET Coreで動く、と。

 

ということで、試してみました。

 

前提とか環境とか

OSはUbuntu Desktop 15.04。 この前段階として、ASP.NET 5 beta6が動く環境が整っていることが前提です。

LinuxでのASP.NET 5の環境構築はまだまだ罠とか嵌りどころが多く、現時点では公式ドキュメントだけ見ていても構築不可能な感じです。 これから設定される場合は、以下の牛尾さんのポストが大変参考になるとおもいます。

ASP.NET5 クロスプラットフォームでアプリケーションの動作環境を構築する

 

coreclrをインストール

さっそく、coreclrをインストールしてみましょう。dnvmコマンドで次のようにすればOKです。

dnvm install latest -r coreclr

以下のSSではmono版のbeta7も入っていますが、これは上記の前に素で「dnvm upgdade」を走らせてしまったためですので、気にせなさらず。

f:id:kiyokura:20150904011159p:plain

 

最新のサンプルプロジェクトを取ってくる

次に、最新のサンプルプロジェクトを取ってきておきます。 GithubにあるASP.NETのサンプルプロジェクト( https://github.com/aspnet/home )を適当にCloneしてきます。

git clone https://github.com/aspnet/Home.git

Cloneが終わったら、サンプルのMVC Webアプリケーションのディレクトリに降りておきましょう。

cd Home/sample/1.0.0-beta7/HelloMVC

 

依存パッケージの取得(NG編)

あとはNuGetで依存パッケージを取得しれくればOKのはずです。やってみます

dnu restore

が、結果は失敗。

エラーを見ると、"libcurlが無い"といわれてるようです。CoreCLRではlibcurlが必要な模様。

 ----------
System.TypeInitializationException: The type initializer for 'System.Net.Http.CurlHandler' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'libcurl': The specified module could not be found.(Exception from HRESULT: 0x8007007E)
 at Interop.libcurl.curl_global_init(Int64 flags)
 at System.Net.Http.CurlHandler..cctor()
 --- End of inner exception stack trace ---
 at System.Net.Http.CurlHandler..ctor()
 at System.Net.Http.HttpClientHandler..ctor()
 at System.Net.Http.HttpClient..ctor()
 at Microsoft.Dnx.Tooling.Restore.NuGet.HttpSource..ctor(String baseUri, String userName, String password, Reports reports)
 at Microsoft.Dnx.Tooling.PackageFeedCache.CreatePackageFeed(PackageSource source, Boolean noCache, Boolean ignoreFailedSources, Reports reports)
 at Microsoft.Dnx.Tooling.PackageFeedCache.<>c__DisplayClass1_0.<GetPackageFeed>b__0(PackageSource _)
 at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
 at Microsoft.Dnx.Tooling.PackageFeedCache.GetPackageFeed(PackageSource source, Boolean noCache, Boolean ignoreFailedSources, Reports reports)
 at Microsoft.Dnx.Tooling.RestoreCommand.AddRemoteProvidersFromSources(List`1 remoteProviders, List`1 effectiveSources, PackageFeedCache packageFeeds, SummaryContext summary)
 at Microsoft.Dnx.Tooling.RestoreCommand.<Execute>d__60.MoveNext()
 ----------
 Restore failedThe type initializer for 'System.Net.Http.CurlHandler' threw an exception.

 

libcurlのインストール

ということで、素直にapt-getでlibcurlを入れてやります。が、普通にapt-get install libcurl-dev とやると、 libcurl-devは以下のパッケージで提供されている仮想パッケージです といわれました。

f:id:kiyokura:20150904011200p:plain

どれを入れるのが一番いいのかよくわからなかったのですが、とりあえずリストの一番上にあるlibcurl4-openssl-devをインストールすることにしました。

sudo apt-get install libcurl4-openssl-dev

依存パッケージの取得(リトライ編)

ということで、再度dnu restoreを実行。

dnu restore

すると、こんどはパッケージの復元に成功しました

 

webサーバを実行

あとは実行するだけです。kestrelで動かしてみましょう。 今回から微妙にdnxコマンドが変わってて(…というか、間に「.」が要らなくなっただけですが)、以下で実行できます。

dnx kestrel

落としてきたサンプルプロジェクトのkestrelがポート5004をlistenするようになっているので、ブラウザで以下のアドレスにアクセスしてみます。

http://localhost:5004/

無事、表示されました! f:id:kiyokura:20150904011201p:plain (囲みは、dnu restoreした時のメッセージで、ちゃんとCoreCLRで実行されるっぽいことが分かります。)