新しもの好きプログラマの耳より情報ブログ

仕事でもあるプログラミングについて役に立ちそうな情報を発信していこうというブログです。役に立たなそうな情報はfacebookで。

Xamarinを使う前にCordovaも検討したほうが良さそう

ちょっと勉強会でクロスプラットフォーム開発の話を聞いてきたので、ポイントをまとめてみる。
私はC#にかなり慣れているのでまずXamarinで一度作ったことがある。WCFも使えたので共通コード部分はかなり書きやすかった印象がある。
しかし一般的にはXamarinは第一選択肢とは言いがたいようだ。
Xamarinを選ぶのは次のどちらかが狙いの場合。
・ネイティブのコントロールやネイティブそのものに近いソースコードをガリガリ書きたい
C#と.NETが使いたい
Xamarinはネイティブ重視という特徴から、手軽さも低いしコードの共通化率もさほど高くならない、という欠点がどうしてもあるらしい。
UI共通化のXamarin.Formsもネイティブ重視の考え方なので使いづらいようだ。「Android/iOS/Windowsのすべてのネイティブに存在するコントロールだけが使える」という最大公約数の発想なのが理由。例えば、チェックボックスiOSにないから使えないとのこと。
とにかく手軽にコードを共通化して書きたいならCordova+UIフレームワーク(OnsenUIとか)という選択肢が第一に浮上してくるようだ。
とりあえずC#使いたいからXamarinというのはちょっと安易であって、プロジェクトの事情に応じて選択する必要があるなあと感じた。

JenkinsをWindowsサーバーに入れるときに引っかかった点

Jenkinsを新しくWindowsサーバーにインストールして、最新版で新しいプラグインを使おうと考えた。

その程度のことなのにいくつも引っかかる点があって結構時間がかかってしまったので、気を付けるべき点としてまとめておこうと思う。

なお、インストールはJenkins単独ではなくTracLightningを使って行なった。

 

.NET3.5が必須である

インストーラの実行中に.NET3.5のインストールが走るようだが、サーバーOSではそのインストールが失敗する。

サーバーの役割画面で別途.NET3.5を追加する必要がある。

 

サービスをインストールするときはJRE必須

バッチファイルからの実行では正常に動いていたが、サービスとしてインストールするとエラーを出すようになった。

java.exeのProcess.Startで例外を出していたため、JREが足りないのだと判断して追加インストールをしたら動くようになった。

また、クライアントOSのようにJREをオンラインインストールしようとするとダウンロードしたファイルがIEのセキュリティ強化の対象になって実行できない。

ダウンロードしたファイルのプロパティを開いてブロックを解除してから実行する必要がある。

 

ここまでくるとようやく必須条件がそろう。

これらの必須条件がないと、原因がはっきりしないエラー(例外など)で失敗する羽目になる。

必須条件はそろったが・・・しかし、まだまだインストール関連の問題は続く。

 

サービスとしてインストールした時は、「Jenkinsを起動」バッチファイルの時とポートが異なる

TracLightningをインストールした時、「Jenkinsを起動」バッチファイルでのポートは80になるようだ。http://localhost/jenkins/でアクセスできる。

ところが、サービスとしてインストールすると別のポートになる。画面上は「Jenkinsを起動しなおして自動でリロードします」のようなことが書かれているので気づきづらいが、サービスでの待ち受けポートは8080。http://localhost:8080/jenkins/にアクセスする必要がある。

 

サービス無しで起動する時は、管理者権限で起動すべき

Windowsサービスとしてインストールしない場合は、スタートメニューにある「Jenkinsを起動」のバッチファイルでJenkinsを起動する。

スタートメニューなのでうっかり普通にクリックしてしまうが、そうするとユーザー権限になる。その状態だと普通に使っている分には動作するが、アップデートやプラグインのインストールが失敗する。ヘタするとそれ以降起動しなくなる。(一度その状態になってしまった)

では「Jenkinsを起動」バッチファイルを右クリックして管理者権限で起動を選べばよいかというと、それだけではまだ足りない。何も言わずに終了してしまう。

 

管理者権限でバッチを叩くときは、カレントフォルダを変更する必要がある

UACでの管理者権限実行をすると、カレントフォルダがバッチファイルの場所ではなくSystem32になってしまう。そのため、「Jenkinsを起動」のバッチファイル(Jenkins.bat)は失敗する。

これを防ぐには、cmd.exeを管理者権限で起動してカレントフォルダをJenkins.batがあるフォルダに移動したうえでJenkins.batを実行すればよい。

何度も使うなら、Jenkins.batの頭に

cd /d %~dp0

を追加すると便利。これはバッチファイル実行フォルダにcdするコマンドなので、System32と同じドライブにバッチファイルがあれば右クリックでの管理者権限起動だけで実行できるようになる。

 

ここまでが、インストール・アップデートをする上での注意事項。

さらに、プラグインをインストールしようとして次の点に引っかかった。

 

Jenkinsをアップデートしたあと、プラグイン一覧を見ても最新情報にはなっていない。

Jenkinsをアップデートすることで、最新版専用のプラグインが使えるようになる。ちなみに今回はWorkflowを使おうとしていた。

しかし、そのプラグインが表示されない。アップデートしたからと言って、プラグイン一覧がリロードされるわけではないらしい。

更新ボタンを押さないと、最新版で使用可能になったプラグインは表示されない。

 

これだけの壁を潜り抜けて、ようやく最新のプラグインを試せる環境が整った。まさかプラグインを使い始める前にこれほど苦労するとは・・・。

この記事が同じような問題で引っかかっている人の参考になれば嬉しい。

コーディング慣れしていると常識だが、初心者には意外と分からない点

チームメンバーの一部の書くコードがトラブルを出しすぎてまともに商用に使えないレベルなので、
半年ほど徹底的なコードレビューに取り組んできた。

どの指摘も「プログラマならできて当たり前」と思っていたのであえて教えたりしていなかったが、どうやら当たり前ではないらしい。
会社での教育資料として使えるように簡単にだが箇条書きにした。
同じようなことで悩んでいる人がいるかもしれないので、ここに転載してみる。会社ではVC++C#Windowsプログラムを作っているので、それを想定したもの。

続きを読む

C#6.0をさっそく使いたくなったポイント

C#6.0の記事をMSDNで見たところ、細かいところでコードを書きやすくなる便利な改善が入っていて俄然楽しみになった。
特に気になった機能をいくつか簡単なコード例付きで説明する。間違っているかもしれないので、原典は最後にリンクするURLを見て欲しい。

続きを読む

ASP.NET Identifyでパスワード0文字を許容する方法

ASP.NET Identityのユーザー情報に既存のDBのレコードを使うものを作ってみた。
この方式だと、ロールごとにページのアクセス権を管理したり一定時間でセッションをタイムアウトしたりといった機能をASP.NET Identityがよろしくやってくれるので
独自にユーザー認証を実装するよりも使いやすいものになる。

その方法自体は次のサイトあたりを参考にすれば良いので、このブログでは触れない。それらのサイトの情報に従って実装したらさほど苦労なく実現できた。素晴らしい情報をまとめてくれた先達に感謝。
>ASP_NET Identityカスタマイズに挑戦 - かずきのBlog@hatena
>http://okazuki.hatenablog.com/entry/2013/11/10/190811
>[めも]ASP_NET Identity 2_0_0 カスタマイズ - CAT EARS
>http://www.cat-ears.net/?p=31697


ここではタイトルの通り、パスワード0文字を許可する方法を紹介する。
大したテクニックではないが、意外と手間取ったので。
パスワード0文字なんてものは普通はセキュリティ上許可しないのだろうが、既存仕様の都合で許可せざるを得なかった。

続きを読む

ASP.NET MVCのRazorでMicrosoft AJAXを使うには依存スクリプトの明示的な読み込みが必要

ASP.NET MVCのRazorでMicrosoft AJAXを使ってみようとして、「部分更新が動かないが、特にエラーも出ない」という困った状況になってしばらくググる羽目になったので、動かすまでに必要なことの情報をまとめておく。使用環境はVisual Studio 2013 Update3。

これが旧方式のASPXだったらかなり情報はあるし、定番のASPX用ライブラリを使うタグをひとつ入れれば良いだけなので多分すぐ解決したのだと思う。しかし新しいRazorはそれ自体が便利な代わりに過去の便利ライブラリが使えない事が多いようだ。これは新しい言語やフレームワークの宿命かもしれない。

 

では起きた問題とその解決方法の話に入る。

 

続きを読む

ASP.NET MVCでjsファイルをViewと同じフォルダに置きたければ工夫が必要

ASP.NET MVCを勉強中で、ちょっとしたサンプルを作っている。
その中で、JavaScriptを外部ファイルとして追加する時にファイルが見つからずに読み込めないという意外な現象ではまったので紹介する。

MSDNの解説などにある通りに「jsファイルは全部Scriptフォルダに入れる」とした場合はこの問題は起きない。
特定のページでしか使わないjsファイルなので、そのページが入っているViewのフォルダに一緒に入れよう、と考えたところこの問題が起きた。

 

続きを読む