旧世代プログラマが今時のクロスプラットフォーム開発環境にワクワク

※これはただの懐古厨のポエムです。

#プログラマーはめんどくさがりなんだ！

長くプログラマー人生を歩んできた人なら、例えばこんなことに心当たりはないですか？

- HDDが壊れた！うわあああ蓄積した開発環境があああああ！
- OSを変えた。うわあああ○☓△□が動かなくなったあああああ！
- 部署が変わって違うPCを使うことになった。カスタマイズされた前のPCが恋しいいいいい！

![Clipboard02.png](https://qiita-image-store.s3.amazonaws.com/0/102207/0c4a450f-38d5-3bb2-3a03-6ed79492b400.png)

やったって無駄なので
カスタマイズすることをやめた

#ぼくらはクロスプラットフォーム開発にワクワクするんだ
そんな経験をすると、異なる環境で同じ動作をするプログラムを作りたいと願い始める。

そこに現れる救世主達。

- Java
- Kylix
- Flash, Air
- etc. etc.

うひょおおおおクロスプラットフォーム開発たのしいいいいい！！！

自分の書いたプログラムがいろんな環境で動いているのを見るとほんとうに嬉しい。いろんか環境でみんなが使ってくれるのを見るとニヤけるのだ。ぐふふプログラマー冥利に尽きる。

**そこに訪れる悲劇**

- トレンドが変わってお気に入りの開発環境が時代遅れになった。うわああああ！（ｒｙ

楽しかったんだ本当にたのしかったんだ・・・。

ひとつの開発環境や言語
にこだわって
のプロフェッショナルになって、ひたすら化石化して他に誰も保守できなくなったプログラムを
悪態をつきながら
管理するだけの人生でいいのか？答えは否だ！！これはもう避けようがない。流れに身を任せるしか無い。三度の飯よりプログラミング好きにこの程度で音を上げる事はないと信じ自分に言い聞かせるのだ。

新しいフレームワークの覇権争いに巻き込まれることはよくある。
プログラム言語の歴史は古来から宗教戦争のようなものだ。
C vs PASCAL、BASIC vs COBOL、VB6 vs Delphi、PHP vs Perl、C++ vs LISP ...etc

それは昔も今もかわらない。

![image](https://qiita-image-store.s3.amazonaws.com/0/102207/12e34551-934e-6077-5dba-5289ad64efc9.png)

- [Cordova](https://cordova.apache.org/) HTML5とJavascriptを使って開発。iOS/Android/Winアプリが作れる。
- [Electron](http://electron.atom.io/) 同じくHTML5とJavascriptを使って開発。デスクトップアプリ用でブラウザ内蔵のバイナリが作れるのでライブラリいらずスタンドアロンで起動できる優れもの。
- [Xamarin](https://www.xamarin.com/) C#のクロスプラットフォーム版。まんまKylix的な路線。ネイティブコードで動くので速い。デスクトップアプリもスマホアプリも作れる。Windowsで作ったC#の資産をMacに持ってくとかもできる。※無加工では無理

なんというワクワク感！！！
どれも非常に魅力的である。

しかし！Cordova、Electron は 旧世代の人たちには、拒絶反応があるかもしれない。

#VB6世代は気をつけろ！嫌でもWPFフォームデザイナをつかっとけ！
開発環境自体は古い常識から少しずつ変わってきて、覚えないといけないことも増えてきたけど、その先のワクワクを原動力に覚えておきたい。

##Cordova
- **メリット**<br>
パッケージ配布になるのでライブラリ依存なプログラムであるものの、昔のJavaみたいなVM必須とかVisualStudio製品のDLL地獄とかは無く自動インストール。
<br>
HTMLベースでデザインできるのでWebが得意な人なら楽に開発できるはず。<br>
馴染みのJavascriptライブラリが使える。<br>
- **デメリット**<br>
重い。激しいアニメーションなんかが使われるとホッカイロ化間違い無し。アイスノン必須。<br>
泣いても笑ってもまんまHTMLベースやで！

##Electron
- **メリット**<br>
スタンドアロンなデスクトップアプリがHTMLベースで書ける。<br>
馴染みのJavascriptライブラリが使える。<br>
Webデザイナーさんでもデスクトップアプリを作れる。
- **デメリット**<br>
重い。ファイルサイズがでかい。(それは仕方ないと思う。だってブラウザまるっと入ってるんだもん)<br>
しかし3Dゲームとかも作るならまだしも、デスクトップアプリならそこはそんな気にしなくてもいいはず。<br>
もちろんHTMLベース！多少でもWebデザインに慣れてないとデザイン段階で苦しみます。

##Xamarin(Visual Studio)
- **メリット**<br>
C#でかんたんに書ける！
ネイティブコードで生成されるから速い(はず)
デスクトップアプリケーションしか作ったことなくてもモバイルアプリとか作れちゃう。
- **デメリット**<br>
.NET初心者が触ると、最初のコンパイルエラーでつまづく。(リンクされてないライブラリがある)<br>
複雑な入力コンポーネントになると自作しないといけなくなる。<br>
C#の資産がまるっと使えるわけではない。Windowsフォームの場合デザイン関係はほぼ作り直し。WPFならいけるっぽい。
もちろんペタペタ貼るだけでいけてた昔からのWindowsフォームデザイナに特化した人には苦痛のWPFフォームデザイナだ。
あと、GrapeCityとかのWindows専用コンポーネント使ってたら別途WPF版買い直し。

個人的にはXamarinオススメ。
.NETな知識がそのまま使えて、Java、VBとかから入ってもなんとかなるはず！
フォームデザイナはもう、慣れるしか無い。(Java出身なら問題ないか)

ただXamarinにはもっと頑張って欲しい。
普通にインストールしてサンプルからHello Worldすら起動できないとかダメ絶対！

#おわりに

プログラマー育成にプログラム言語自体の敷居を下げるのは必須だと思う。
昔だって最初はみんなインタープリター言語のBASICを触って入門したはず。
だからあの世代のプログラマー人口は非常に多い。

それなのに、その間の世代のプログラマーが急速に減ってしまった。
なぜかというと、オブジェクト指向大革命とかなんかで、なんやら難しい議論ばっかしててプログラムの敷居が若干あがったこと。
（それはある意味我々お年寄り世代のせいでもあるかも）
FLASHスクリプトやCGIやVBAマクロなんかから入った人もいるかもしれないけど、やっぱり独学で始めた人は少ないと思う。

そういう意味でCordovaとElectronはHTML5とJavascriptで作れるのが素晴らしい。
ブラウザで人様のソースコードが見れるのも良い。

重い、遅いとかのデメリットは超えられない壁だけど、それはそれでメリットは有ると思う。
だってネイティブなほうをを勉強しようという気にさせてくれるじゃないの。

それは昔の子たちがBASICの遅さに立ち向かうためマシン語を覚えようとしたことと変わらないと思うのだ。