クロスプラットフォームのネイティブなアプリ開発

Lazarus(というかObject Pascal/Free Pascal)の良い点は、真の意味でのクロスプラットフォームでなおかつネイティブ(native and also cross-platform)なアプリ開発が出来る事。

Object Pascal/Free Pascalは、”write once compile anywhere” だから。

「真の意味で」と「ネイティブな」はどういうことかと言うと。。。

1)各OSで、ネイティブのバイナリ実行形式のアプリケーションが開発出来るという事。つまり、ランタイムとかスクリプトのインタープリターとかを介するPython, Java, Ruby, JS, 等々は全然ネイティブじゃない。ネイティブじゃないと、出来ることも大幅に制約されるし、速度やリソースの面で劣る。一般ユーザーに、「動かすにはPython/Java/etc入れてね」とか環境汚さないで欲しい。。。

2)各OSで、そのOSのネイティブなウィジェット(ウィンドウやボタンなど)を使ったデスクトップGUI生成、つまりWindowsならWinAPI, LinuxならQTなりGTK、macOSならCarbonとか。そうじゃないと、各OSのルック&フィールや文化に合わず、とても違和感のある使いづらいUIになってしまい、こまかな制御も効かず、まったく使い物にならない。大昔、これでJavaが大失敗した(Swingだっけ?)。

3)サンドボックスの中ではない。つまりサンドボックス(ブラウザ内のWebアプリだったり所謂ハイブリッドProgressive Web AppsーPWAだったりWindowsのUWP)だと、ローカルのリソースにアクセス出来ない。例えば、ローカル(ネットワーク)のDBサーバーとかプリンター(単なる印刷でなく帳票とか)、普通のファイルにすらアクセスできない場合もある。これだったら無理せず普通のWebアプリでやるか、ネイティブアプリで作った方が良い。無理してElectronのようなのを使って。。。、というのに利点があるのはレアなケースだと思う。

ものによっては、1)が出来て2)が出来ない、または2)が出来て1)でない、というのも存在するけれど、基本両方をちゃんと満たすには、C/C++でガリガリやるしか方法はない。。。ただ、C/C++で各OS意識したクロスプラットフォームGUI開発はすんごくめんどい、はず。

けど、しかし! Lazarus(というかObject Pascal/Free Pascal)を使えば、サクッとクロスプラットフォームでネイティブなアプリ開発が出来る。OSごとに色々(サードパーティー製コンポーネントの対応状況に差が)ありますが…ボソ。

Lazarus(というかObject Pascal/Free Pascal)であれば、Linux/Windows両方で動くDaemon/Service系とかワンソースでOKだし、デスクトップアプリでも(ActiveXとかサードパーティー製アプリ使わなければ)普通にOK。単に、その環境でソースをコンパイルするだけでネイティブなバイナリが生成される。Electronみたいなのも作ろうと思えば作れる。

問題は、最近マイクロソフトが、Windowsからネイティブのアプリを締め出しにかかっていること。。。まぁ昔からだけど(ロングホーンとか、あれはなんだったのか)。だけど、現実的にはほとんどのアプリ、ブラウザを含めてWin32アプリだから、WindowsからWin32ネイティブアプリは無くせない。もし、ストアアプリ(UWP)のみ、強制!って事になったら、普通にWindowsを使うのを辞めるだけw

http://bto-pc.jp/btopc-com/select/windows-10-s-2017-05.html

 

参考:
“What would you use to make cross-platform desktop application?”
https://news.ycombinator.com/item?id=14066784

追記:これは非常に共感できる。自分もオールドタイマーw

https://qiita.com/Urushibara01/items/0b0d21cea5e6044102c3

 

続き
2018年におけるクライアント・サーバー型システム

 

補足:

デスクトップPCと携帯・スマホは、まったく別モノ(別デバイス)と考えるべきもので、クロスプラットフォーム(cross-platform)というより、クロスデバイス(cross-device)と言った方が良い。元々のUWPの思想であるまったく同じアプリを携帯とPCで動かす、というのはベリーバッドのアイデア。タッチ操作とキーボード+マウスの操作性は根本的に違う上に、ディスプレイのサイズによる一覧性の違い(4Kディスプレイと携帯画面)考えると、GUIの設計思想やウィジェットからして、デスクトップとスマホは根本的に別物であるべき。

Appleでの話しだけど、分かってる人は分かってる。

iOS has no concept of a mouse cursor and runs only on touchscreen devices. MacOS has no support for touchscreen devices and requires a mouse pointer. “One user experience” is neither possible nor desirable.

 

https://applech2.com/archives/20171227-marzipan-cross-platform-frameworks-for-macos-and-ios.html

同じアプリで異なるデバイスにおいて共通のUXを、なんて無理であって、望ましくもない、と。それぞれ最適のUIを使え、と。

つまり、UWPは存在意義が。。。

なぜUWPは「ダメ」なのか

・C#は.Netランタイム上で動くから「ネイティブ」じゃないけど、Windows上ではネイティブ扱いにしたいマイクロソフト、といった所でしょうか。。。今の所、WindowsでしかGUIはない。ひょっとしたら、今後、XamarinのXamarin.Formsが化けるかも。

・Javaは糞。WindowsではJavaは容量を無駄にするゴミ。オラクルが糞。どこでも動くとか大ウソ。GUIもだめ。以上。

・Electron はいかにPCスペックが良くても重すぎる。普段使いはしたくない。(GitHub Desktopは使っているけれど^^)それに、これって、大昔あった、HTA(.hta) – HTML Applications – の豪華版でしょ?違うかな?HTAって、ブラウザ内にHTML+Javascript表示しているだけってやつ。ブラウザ内でサンドボックスのはずが何故かローカル権限をもって、セキュリティ的に危険って一時話題になってあまり使われなくなったやつ。

・DelphiのFiremonkeyは、クロスプラットフォームでネイティブの実行ファイルだけど、ウィジェットが独自(一応、自動で各OS向けに似せて表示されるそうだけど)。

Leave a Reply