今デスクトップアプリを作るなら何で作りますか?
今デスクトップアプリを作るなら何で作りますか?
「今時そんなものは作りません」という話はさておき、もし作らないといけないとしたら何で作りますか?
.NET でしょうか?
その場合は UWP でしょうか?
それとも Electron でしょうか?
Mac もいけそうで良いですよね。
React Native for Windows はどうなんでしょうか?
性能や配布、保守性や将来性など、どんな観点でも良いので意見があれば教えてください!
自分はRustかなと
- WinでもMacでもLinuxでも
Cargo build
でビルドできる。 - 言語の仕組みとしてバグを作りこみにくい。
- 言語レベルのバグはコンパイラが見つけるので、レビューの効率が良くなる。
- C系のライブラリを喰って動かせる。
コンパイラが賢くて、言語レベルのバグの場所・理由・修正方法の提案までしてくれるのは保守を引き継いだ時にも頼りになります。
特別にライブラリをインストールせずともCargo test
でテストを実行できて、サマリも表示される。
GUI系のCrateも増えてきていて注目してます
crates.io
個人的にはネイティブアプリはHTTPサーバーであることに徹して、UIはブラウザ上に作るのがいいんじゃないかなと思い始めてます。Electronなんてアプリごとにブラウザを持とうぜとかいう頭のおかしい正気の沙汰じゃない発想なので、それなら最初からブラウザでいいじゃんってなります。メモリーにも優しいですね。
大抵の言語でHTTPサーバーはまあかけるはず(Cを除く)なのと、HTTP通信自体とブラウザという概念は多分長生きすると思われるので、その点でも良いです。すくなくともUWPとかいうWindowsPhoneの残り香みたいなのよりは長生きするでしょう。
若干遅延があるという意見もあるかもしれませんが、WebSocketもあるし、ローカルサーバーだし気にならないでしょう。
あるいはマイナンバー絡みで話題になりがちなNative messaging APIを使うでもいいですね。セキュアさが必要ならこっちかな。
採用例としては、intel-driver-support-assistantはまさにそれをやってますね。
おまけで同一LAN内の例えばスマホとかでも使えるかもしれませんね。
この方式のデメリットは、動画を流すのが難しいということです。つまりHLSサーバーを建てないといけないので。音声だけならネイティブで流してしまえばいいのですがね。
まあ亜種としては、WebAPIの発展とWebAssemblyによって、そもそもネイティブアプリが必要になるケースそのものが大幅に減る可能性もありますが。
.NET系といえばXamarin元気にしてるのかな?
Rust系は、クロスプラットフォームなGUIという制約を掛けるととたんに選択肢がGTKくらいしかない印象がありますがどうなんですかね。
C++だと以外にもImGUIが長生きしてますね。
C++標準化委員会ではGUIを標準化するべく、2Dグラフィックスの標準化をしようとしたのですが、頓挫しています。一方でstd::web_view
なんていう奇想天外な提案文章が2018年に出たことがあって話題になりました。
目的によりますが、個人開発であれば「今」なら.NET Core + WPF/WinFormsで作っちゃいますね。UWPは配布考えると…。
JavaScript(やAltJS)が苦じゃない人はElectronが良いと思います。私は苦痛です
.NET系といえばXamarin元気にしてるのかな?
MAUI(.NET Multi-platform App UI)にリブランディングするみたいですね。
趣味でPythonとGodotEngineを触っているものです。
突貫実装ならTinkerでキンコンカンコン
お手軽突貫でよければ各種スクリプト言語のtcl/tkによるウィンドウ描画機能を叩いて作るかなと。Pythonならtinkerでキンコンカンコンと。しかしそういったお手軽突貫で作った爪楊枝程度のプログラムが長生きしてしまうこともしばしばあるんだよなあ……。
もうチョット凝るならGTKやQtに乗っかってしまう
また、自分個人で使っているマシンにはUbuntuしか入っていないのでGladeというGUIデザイナーツールでRADっぽく作るのも一つ。スマートフォン対応も考慮しなければならない場合はKivyを使うかなという空想は常々膨らませています。
余談: メディアコンテンツ的なもの
さらに個人的に(ゴリ)推してるゲームエンジンはGodotEngineですね。このゲームエンジンの為に作られたGDScriptはPythonの様なインデントによる構造表記をしますし、色々Pythonの影響は受けてます。最近は型ヒントも使えるようになったり、半年以内にはVulkan対応したものが安定版リリースされる様子ですし、なんと言ってもゲームエンジン自体はしっかりとオープンソースです。リリースの際に制約があったり請求されるということもないです。
オチ
と、Pythonひいきかつオープンソース(フリーソフトウェア)なところで紹介しましたが、私自身の本業はしがないCSharp, PHP, 他なんか色々のコーダーなので、参考になりますかね?
@yumetodo さんの様なソフトウェア設計も強く賛同したりします。過去にVBnetなどでGUIとGUIの関係ない処理が混同されて書かれている1ファイル5000行超えのプロジェクトとかにしょっちゅう遭遇したので。
みなさん回答ありがとうございます!
自分の知らない世界がたくさんあることを知れて良かったです!
こういう会話ができる人が周りに少ないので嬉しいです。
@yumetodo
アプリにWEBサーバーの機能を持たせてAPIを公開し、ユーザー独自で何か作れるようにできないかなというのは考えたことありました。
確かにこれもありですね。面白いです。
Electronとの違いだと、マルチウィンドウでのアプリが作れないとかブラウザの制約に縛られる点ですかね。それが問題にならないケースであれば良さそうですね。
ちなみにXamarinはめちゃくちゃ好きです。
@gentaro
私も同じ感覚です。
JavaScriptは規模が大きくなると辛いですがTypeScriptなら良いですね。
保守の都合もあり、MAUIの発展を願ってますがどうなることやら・・・
@manzyun
どれも知りませんでした!Pythonで作れることすら知らなかったです。。。
確かに、仮にMVVMで作ったとしても業務ロジックと画面制御のためのロジックと混ざりますもんね。
ちなみに私自身はC#、JavaScript/TypeScript、その他少々でPC/WEB/モバイルのBtoBtoCなアプリ開発してます。最近はWEBやモバイルが多いのでデスクトップで作れと言われると答えがないなと思って今回意見交換の投稿をさせてもらいました。
私ならJavaです。
最近javafxというXMLで簡単にHTMLのようにguiを作れます。
イベント処理もJavaScriptで実装することもできます。
もちろんCSSでスタイリングもできます!
C#大好きなので……
windowsで使うの限定ならWPFですね
まだ何となくUWPは使ってないです
他のOSもとなると、今はまだXamarinだけになるのかな?
WPFを今のC#で作り直すプロジェクトのAvaloniaが頑張っていたけど、MAUIにもっていかれそう
とはいえ、いずれにせよ将来的には色々選択肢が増えますが、基本WPF触っていたら後は方言程度の違いなのでメインPCはwindowsじゃないよって人以外はWPFを選んでおけば大丈夫かと
Electronでアプリを制作しましたが、@megumu-uさんの前歴ですとElectronも十分にアリかと。
Webフロントエンド+node.js+ネイティブアプリ全般の知識が必要になるので、どれか一つ十分な経験がある人が幅を広げて簡易なアプリ(なお容量もメモリもそこそこデカい)を作るにはいいけど、どれも未経験だとどうかなーという印象です。
.NETやWin32を以前はけっこうつかっていましたが、XAMLにやたら苦労させられたり、解決方法がありそうにみえて見つからないWindowsAPIのいけてない所とかWindowsOS間のズレとかに、苦労したことがあるので
デスクトップアプリでも、ElectronとかReactNative系とか、Web系のオープンな技術に投資しておきたいと思っています。
他プラットホームに移植が容易であることで自分の技術投資が無駄にならないように心がけたりもします。
VSCodeという素晴らしいお手本があるので、将来性も感じたりです。
たぶんWPFの方が何もかも簡単だとは思うけれども、、、Macとかで動かなさそうだしね...
どちらにしてもMicrosoftの技術の上にのっかるのかもしれないので、
プラットホームとしてぶれないで下位互換考えながら発展していってもらいたい。
たぶんWPFの方が何もかも簡単だとは思うけれども、、、Macとかで動かなさそうだしね...
XamarinというかMAUIならmacつかえるのでは(xamlで書けるという点で)
「今」ではないですが、今後Flutterの動向には注目すべきです。
まだアルファ版だったりしますが、何より成長率が半端なく、すぐに新しい情報が出てきます。
Googleは確実にモバイル、Web、デスクトップ(Mac・Windows・Linux)アプリのクロスプラットフォーム開発の実現を狙っています。
みなさまご意見ありがとうございます!
@javaboy
大昔はJavaのGUIは遅いというイメージでしたが今は違うんですね
勉強不足でした!
ところでjavaboyって良い名前ですねw
@lensouko
WPF良いですよね
もしパパッとツールをデスクトップアプリとして作るとなれば私の今現在のスキルセット的にはWPFになります
私個人としてはSilverlightから.NETに入門しましたがXaml好きです
@u83unlimited
一瞬、身内なのかと思いましたw
Electronはサンプル程度にしか触ったことないのですがJavaScript/TypeScriptは業務で使ってるので、私のチーム的にはありだなと思ってます
ただ今回意見募集してみて全くことを教えていただいて見識の狭さを認識ました
@standard-software
React自体はReact-DOMと分離してより抽象化されたレイヤーになったりして、各プラットフォーム展開に対する動きが良いなと思ってます
ただ、以前触った時はアップデートが破壊的過ぎてしんどかったので、なんとくElectronの方が安定してそうなイメージを持ってます(全然知らないのであくまでイメージです)
すぐ消えるのかなと思ってましたが、VSCodeの例もあり活躍してますしね
@yumetodo
意外と方言があったりしますが、MAUIになるとどうなるのか・・・
@tepci
Flutter、確かに漏れてました!
私の周りにも試してみてる人いますが、今後楽しみですね。
触ったことないので偏見ですが「全自動で良い感じなUIにします」みたいなイメージがあり、フロントってお客さんの色が強く出る部分なので結果的に大変にならないか気になるところです。
触ったことないので偏見ですが「全自動で良い感じなUIにします」みたいなイメージがあり、フロントってお客さんの色が強く出る部分なので結果的に大変にならないか気になるところです。
マテリアルデザインを採用した場合確かにそんなイメージかもしれませんが、それでもカスタマイズ性はかなり高いですし、勝手にレイアウト決められるとかもなく、書いたコード通りのUIになってくれます。
もちろん、オリジナル全開なUIを作ることもできます。大変ですが。
基本的にはマテリアルデザインを採用しつつ、カスタマイズするだけで大抵の要件には対応可能だと思います。
Flutterで作られたデスクトップアプリ(実用できるがサンプル的なもの)はこんな感じですがどうでしょう?そこまで型に囚われている感じはないと思います。
Flutterのデメリットを挙げるとするならば、「日本語ドキュメントが少ない(英語はめちゃくちゃ多いのに...)」「Google色が強め(マテリアルデザイン寄り、Androidアプリ以外はまだまだ)」くらいしか思いつかないです。
すべてのプラットフォームが確立した頃どうなっていることやら...期待値高めですね。