質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Haskell

Haskellは高い機能性をもった関数型プログラミング言語で、他の手続き型プログラミング言語では難しいとされている関数でも容易に行うことができます。強い静的型付け、遅延評価などに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

LISP

LISPはプログラミング言語の一種であり、関数型言語に分類されています。 特徴として、括弧を多様する独特の構文を持ちます。

Q&A

解決済

4回答

5993閲覧

アプリが作られる仕組みが知りたいです

yu-ki0

総合スコア69

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Haskell

Haskellは高い機能性をもった関数型プログラミング言語で、他の手続き型プログラミング言語では難しいとされている関数でも容易に行うことができます。強い静的型付け、遅延評価などに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

LISP

LISPはプログラミング言語の一種であり、関数型言語に分類されています。 特徴として、括弧を多様する独特の構文を持ちます。

2グッド

7クリップ

投稿2016/01/29 09:02

編集2016/01/29 14:23

デスクトップアプリや業務アプリなどの便利なアプリがどのような原理で作られるのか知りたいです。

開発について調べていると,どの言語でも得手不得手はあるけど、どんなアプリでも作れるとありました。
C言語やjavaなどのメジャーな言語ならライブラリやフレームワークが用意してあって、出来そうな感じがするのですが、haskellやlispなどの言語でアプリを作りたいときはどうすれば良いのでしょうか?

また、開発をするためのフレームワークはどうやって作られているのでしょうか?
(例えばhaskellでwebアプリを作れるYesodなど)
OSとやりとりしたりする命令を書いたりするんでしょうか?

回答よろしくおねがいします。

知識に乏しいため、言っていることがわからなかったら申し訳ありません。
その点を指摘してくだされば、補足します。

補足
アプリを作ってみたいのですが、プログラミングの書籍では、開発の仕方がいまいち分からなかったので質問させていただきました。
プログラミングの基礎を開発につなげるための知識がなく、どのようなキーワードを調べればよいかもわからなかったので…
もしよろしければ参考になる書籍やサイト、キーワードなどを教えていただけるとありがたいです。
よろしくお願いします。

raccy, thom.jp👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/01/29 12:46

こちらの質問が他のユーザから「プログラミングに関係がない質問」という指摘を受けました teratailでは、プログラミングに関して困っていることがないと思われる質問を推奨していません。 「質問を編集する」ボタンから編集を行い、具体的に困っている理由や解決したいことを明確に記入していただくと、回答が得られやすくなります。
guest

回答4

0

このサイトの趣旨からは外れるかもしれませんが、
自分が重要な問題だと思うので、回答させていただきます。

「原理」というお話ですので、原理原則までさかのぼった話をします。
若干抽象的な話になってしまいますが、かまわなければ読んでください。

「アプリケーション開発」には、大きく分けて二つの異なった作業があります。

1.何を作るのかを決める
2.決めたものを実現する

このサイトで話題になっている技術の大半は、2.に関するものです。
しかし、「便利なアプリ」を作るために本当に重要なのは 1. です。
アプリケーションが便利なものとして完成する「原理」は 1. の中にあって、2. にはありません。
1.の段階で便利でないものを 2.の段階の技術で便利にすることはほぼ不可能です。

ですから、あなたに「どうしても作りたい」アプリがあり、それが便利なものであるという絶対の自信があり、
それを他人に伝える能力があり、しかしながらアプリというものの作り方がよくわからない、という状態であるなら、
それを「便利なアプリ」として完成させるためにあなたが注力すべき作業は1.です。
1.のための時間が足りないのでしたら、2. の作業を能力のある他人に任せるべきです。
なぜなら、あなたが考えたアプリに関して 2.は他人でもできますが、1.はあなたにしかできないからです。

  1. の作業がきちんとできないならば、そのプログラムが「便利なアプリ」として完成する可能性は

限りなく低くなります。

もちろん、「どうしても作りたい」のでなければ、そこまで極端考える必要はありません。
「アプリをプログラミングする」という作業を、
ホビーとして楽しみたい、または教養として知りたい、仕事で使う技術を身に着けるためにやってみたい、
というならこの限りではありません。
その場合は「便利なアプリを作ること」は手段であって目的ではないからです。
「なんか使いにくいけど面白いからいいや」で済んでしまいますからね。

「便利なアプリを作ること」を第一の目的とするならば、
アプリケーション開発にとって一番重要なことは、言語でもフレームワークでもOSでもありません。
そういうものをいくら勉強しても便利なアプリケーションを開発する方法はわかりません。
わかるのは、すでに何をするのかきちん決まっているアプリの設計を
コンピュータプログラムとして実現する手段だけです。

アプリは問題を解決したり、目的を達成するための手段です。
ですから、最も重要なのは「そのアプリがなんであるか、目的は何か」をしっかり決めることです。

本当に便利なアプリは、目的の作業を行うための手順などがよく考えられていて、
ユーザが無駄なことをしなくても済むように、やるべきことがすぐわかるように、さまざまな工夫が凝らされています。
そのような工夫をこらして、そのアプリがどのようなものか、何をすべきかを決めた人が「便利なアプリ」を作った人です、
プログラマはそれをコードとして実行可能な形にしたに過ぎません。
その作業や技術は自体は十分価値のあるものですが、
「アプリの便利さ」を決定付ける要素ではありません、代替えの効くものです。

haskellやlispなどの言語でアプリを作りたいときはどうすれば良いのでしょうか?

特定技術においてアプリを実装する場合の作業は、
アプリの目的とその技術の機能の付きあわせです。
足りない部分は新規開発するなりライブラリを探すなりします。
一般にそういった作業のコストが予算をオーバーするような(しそうだと予想されるような)場合は、
責任者はその技術を使うことを断念する判断をして別の技術を検討し始めます。
チューリング完全であれば理屈の上ではなんでもできますが、
実装コストが見合うかどうかは別問題です。

もしよろしければ参考になる書籍やサイト、キーワードなどを教えていただけるとありがたいです。
よろしくお願いします。

問題解決や要件定義に関する本を読まれるのがいいと思います

少し古いですが・・(ソフトウェア開発の話はほぼ出てきません)

ライト、ついてますか―問題発見の人間学 単行本 – 1987/10/25
ドナルド・C・ゴース (著), G.M.ワインバーグ (著), 木村 泉 (翻訳)

投稿2016/01/30 02:48

編集2016/01/30 10:46
kozuchi

総合スコア1193

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Chironian

2016/01/30 03:31 編集

こんにちは。 > アプリは問題を解決したり、目的を達成するための手段です。 > ですから、最も重要なのは「そのアプリがなんであるか、目的は何か」をしっかり決めることです。 その通りですね。アプリを開発する際にもそのアプリの目的を見失ってはいけません。 しかし、見失うことも多々ありますので、常々心掛けるべき重要なことと思います。 > それさえしっかりできれば、「アプリを実装する方法」は開発力のあるベンダーに丸投げしてしまえばいいのです でも、これはアプリを使う側の人やシステム開発のコンサルタントの場合です。 アプリを開発する側の人がアプリ開発を丸投げしちゃいけませんよ。その人の付加価値はなんなの?ってことになりますから。 「丸投げも可能なのだから、より重要な問題解決や要件定義に関する本を読まれるのがいいと思います」とおっしゃっているように見えちゃいます。 アプリを開発する側は丸投げしてはいけませんが、やっぱり「問題解決や要件定義に関する本を読まれるのがいいと思います」よ。 極端な場合アプリを開発しなくても問題解決できることがありますが、そのようなアプリ開発に工数を投資してしまったら悲惨なことになりますし。でも、悲しいことに時々見かけちゃいますね。
kozuchi

2016/01/30 07:06 編集

Chironian さん こんにちわ >でも、これはアプリを使う側の人やシステム開発のコンサルタントの場合です。 >アプリを開発する側の人がアプリ開発を丸投げしちゃいけませんよ。その人の付加価値はなんなの?ってことになりますから。 ある特定の問題において役にたたないことと、 その人の付加価値(おそらくプロとしての仕事の上での価値という話だと推察してお答えしますが)はあまり関係ありません。 たいていの人間の職能が特定の問題領域を対象としています。 しかし、他の領域で役に立たないことを持って、単純に価値を問題視されることは普通ありません。 ネガティブな印象がある「丸投げ」という言葉を使うのはあまりよくなかったかもしれませんが、 「アプリケーション開発」においては、現実的な選択肢の一つだと思っています。 プログラム開発を受託したソフトベンダーがやるのは問題だと思いますが、 「アプリケーションを開発する」会社がプログラム開発(実装) を丸投げするのはゲーム開発等ではよく耳にすることですし、 倫理的にも、アプリ開発者の存在意義という点でも、問題があるとは思いません。 (もちろん、丸投げされるベンダーの価値にも問題があるとは思いません。) 適切でない例えかもしれませんが、スティーブジョブスはおそらく、 iOSのコードなど書いていないと思いますが、 彼を「iPhoneを作った人」と呼ぶことに異議を唱える人はいないはずです。 「便利なアプリ」の実現に本当に必要なことは、要件定義、業務分析、業務設計あたりの段階で終わっています。 この工程が腐っていたら、実装でどれだけ頑張ってもユーザにとって「便利」にはなりません。 >デスクトップアプリや業務アプリなどの便利なアプリがどのような原理で作られるのか という問題における、「アプリを開発(コンピュータプログラムとして実装する)する側の人」の役割は、 極めて限定的なものでしかありません。 現実問題としては、コンピュータプログラムは多くの問題を非常にうまく解決し、 現に、今の社会はそのおかげで大変便利になっています。 ですから、「アプリを開発する側の人」には十分な価値があります。 しかし、だからといって問題の内容にかかわらず、まずプログラムでどうするかから考えるのは、 問題解決のアプローチとしては間違っています。 全ての問題がコンピュータプログラムで解決した方がいいとは限りませんし、 問題解決したいと思った当人がプログラムを組むほうがいいとも限りません。 もっと現実的な話をするなら、顧客から最初のプレゼンを受けたときに 「それは新規開発するよりも、こうしたほうがよくないですか?」 「われわれよりも、こちらに依頼したほうがいいですよ」 と答えるべき場合もあるはずです。 その判断は十分「アプリを開発する側の人」の責任範囲の仕事です。 >「丸投げも可能なのだから、より重要な問題解決や要件定義に関する本を読まれるのがいいと思います」とおっしゃっているように見えちゃいます。 まさにそう言っています。 目的が「プログラムを開発すること」であれば別の答えもあると思いますが、 「アプリケーションを開発すること」である以上、決定的な要因で無い コンピュータプログラムの開発という手段に拘泥するのは正しくないと思います。 >極端な場合アプリを開発しなくても問題解決できることがありますが、そのようなアプリ開発に工数を投資してしまったら悲惨なことになりますし。でも、悲しいことに時々見かけちゃいますね。 まあ、下っ端はそうは思っても口出しできませんから、黙って自分の仕事するしかないですね。 悲しいことに。
Chironian

2016/01/30 09:15

こんにちは。 > 目的が「プログラムを開発すること」であれば別の答えもあると思いますが、 質問内容から、プログラム開発の技術面の話と理解しています。 アプリという用語が混乱を招いているっぽいので、以下プログラムと呼びます。 私は先のコメントでも「アプリ」はアプリケーション・プログラムの略として使っていますので主旨は変わらないです。 私もkozuchiさんと同じく、プログラム開発側もそのプログラムが解決する問題についてきちんと把握し、場合によってはプログラム開発ではない方法での解決策の提案もできるべきと思います。 そして、kozuchiさんが「プログラム開発者がプログラム開発を丸投げすることも有り」と主張されているように見えましたので、この点に異議を唱えさせて頂きました。 でも、今回のコメントから、kozuchiさんの主張は「システム・アナリストやそれに類する業務を行っている人」にとって「最も重要なのは「そのアプリがなんであるか、目的は何か」をしっかり決めることです。それさえしっかりできれば、「アプリを実装する方法」は開発力のあるベンダーに丸投げしてしまえばいいのです」ということですね。 であれば、丸っと同意です。
kozuchi

2016/01/30 10:49

Chironian さん こんにちわ わかっていただけてよかったです。 どうも誤解を招く文章だったと自分でも思いましたので、 丸投げ等の部分は書きなおしました。 おかげで前よりはマシな内容になったような気がします。 ご意見ありがとうございました。
yu-ki0

2016/02/05 13:31

回答ありがとうございます。 たしかにその考えもありですね. 実際、要求工学については少し勉強していますし、これからもしていく予定です。 ただ、将来的には要求工学をプログラミングの考えと組み合わせて、なにかの提案ができるようになりたいので、そのためにプログラミングも学んでいる途中です。 貴重な意見ありがとうございました。
guest

0

GUIアプリの場合、直接に画面描画を行っているのはOSなので、たとえばWindowsならWin32APIを呼び出す形でGUIプログラミングが作られています。

GUIライブラリやフレームワークは、それらをラップして扱いやすくしたものですので、言語の機能としてGUIが用意されていなくても、DLL呼び出しができるならGUIプログラムは作れることになります。

…が、HaskellやLISPでGUIを扱うのは今のところ茨の道ですね。
関数型で何でも良いということなら、MicrosoftのF#などは比較的簡単にGUI開発の手段があるようです。
http://qiita.com/nida_001/items/6ea321aff7f664a0e7f3

あとJava仮想マシンで動作するLISP(Clojure)という言語や、関数型とオブジェクト型のハイブリッド言語であるScalaなどは、JavaのGUIライブラリを利用できるかと思います。

また、アプリケーション本体とGUIは他の言語で作成し、関数型言語で作成したDLLを呼び出すなどのやり方も良いのではないかと思います。

副作用を極力抑える関数型のスタイルと、副作用の塊であるGUIプログラミングは相性が良いとは言えないので、やはり適材適所じゃないかなと思います。

どの言語でも得手不得手はあるけど、どんなアプリでも作れる

何でも作れるとは言っても、現実的かどうかはまた別の話ですね。たとえば、現時点で、大抵のスクリプト言語でEXEファイルは作れません。開発環境は言語ごとに大きな違いがあります。

ただ、まるっきり嘘だとは言い切れません。10年前は、JavaScriptでサーバーサイドアプリケーションは作れませんでしたが、Node.jsが登場し、現在では作成できるようになっています。何が作れるかは、言語そのものには左右されない。ただし、コンパイラやライブラリやフレームワークも含めた開発環境には大いに影響を受ける。

といったところでしょうか。

投稿2016/01/30 09:04

編集2016/01/30 09:36
thom.jp

総合スコア686

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

デスクトップアプリや業務アプリなどの便利なアプリがどのような原理で作られるのか知りたいです。

開発について調べていると,どの言語でも得手不得手はあるけど、どんなアプリでも作れるとありました。
C言語やjavaなどのメジャーな言語ならライブラリやフレームワークが用意してあって、出来そうな感じがするのですが、haskellやlispなどの言語でアプリを作りたいときはどうすれば良いのでしょうか?

Haskell や Lisp でも、C言語や Java などと考え方は同じです。デスクトップアプリや業務アプリを作る時に使えるライブラリやフレームワークをだれかが用意していて、それを使って開発します。ライブラリは、オープンソースで開発されているものもありますし、企業が開発して販売しているものもあります。

もちろん、ライブラリの品揃えとか成熟度とかは言語によって違いますが、ある程度の知名度がある言語(例えば、その言語について書籍が出ているレベル)なら、一通りのアプリは作れると考えていいでしょう。ただ、成熟度によっては、機能が足りなかったり、バグばかりあったりと、まあ、いくつかのライブラリをある程度試してみないことには、それで実用的な開発ができるかどうかは判断できないでしょう。(オープンソースのライブラリなら、機能を追加したり、バグを直したりするという参加のしかたもできます)

また、開発をするためのフレームワークはどうやって作られているのでしょうか?
(例えばhaskellでwebアプリを作れるYesodなど)
OSとやりとりしたりする命令を書いたりするんでしょうか?

どのようなプログラムでも、必ず入出力がありますので、どこかで必ず OS とやりとりをしています。でも、例えば、Yesod が、OS のシステムコールを直接呼び出しているかというと、そういうことはまずないでしょう。

まず、どのプログラミング言語でも、入出力を行うための組み込みのしくみが付いています。例えば、Haskell で putStrLn とすれば、画面に文字列を表示できますし、hPutStr とすればファイルに文字列を格納できます。これらは、言語(例:Haskell)の「処理系(例:GHC)」が、OS とやりとりをすることで実現しているわけです。

さらに、すでにご存知だと思いますが、便利なプログラムをまとめた「ライブラリ」というものがあります。ライブラリには大きく分けて2つあって、その言語(例:Haskell)で書かれたものと、共有ライブラリという、別の言語(C言語とか C++とか、その他)で書かれたものがあります。

共有ライブラリは、OS ごとにフォーマットが決まっていて、それさえ守ればどんな言語からも呼び出して使うことができます。例えば Haskell には FFI(外部関数インターフェイス)と呼ばれる仕組みがあって、これを通して、C言語などでかかれた共有ライブラリーを使うことができます。

こういうライブラリの中には、HTTP プロトコルを扱うものだったり、SSL のような暗号化を扱うものだったり、データベースとのやり取りを扱うものだったり、いろいろなものがあります。Yesod のようなフレームワークは、処理系自体の機能に加え、こうした、別の人たちが書いた、たくさんのライブラリを活用して構築されています。

デスクトップアプリを作るときには、普通は、OSの他に、ウィンドウやキーボードやマウスなどを扱うための、GUI ツールキットと呼ばれるライブラリを使います。(もちろん、FFI などを駆使すれば、それがなくても、ほとんど Haskell だけで作ることもできるでしょう。でも、さすがに何もないところから全部自分で作るのは大変すぎますよね) 例えば、Linux や BSD* などの Unixライクな OS だと、GTK+、Qt、wxWidgets という、X-Window というウインドウシステム上で動く GUI ツールキットがよく使われています。

Haskell でも、すでにだれかが、これらのライブラリを Haskell から使うためのライブラリを用意しているはずです。ですから、そのなかから良さそうなものをいくつか選んで、実際に試してみて、「よし、これで行けそう」というものが見つかったら、それを使って開発すればいいのです。

なお、フレームワークもライブラリの一種です。一般的に、ライブラリと呼ぶ時は、自分が書いたプログラムが主体になって、ライブラリにある部品(関数など)を呼び出す形で使います。

フレームワークと呼ぶ時は、フレームワーク側のプログラムが主体になって、自分の書いたプログラムはフレームワークから呼んでもらいます。Haskell でプログラムを書くとき、main という名の IO() 型の変数を用意して、そこに IO アクションを返す関数を束縛しますよね。でも、Yesod のようなフレームワークを使う時は、自分のプログラムでは、どこにも main などという変数は書きません。なのに動くわけです。

実は、Yesod のフレームワークのなかのどこかに main があって、そちらが最初に評価されるしくみになっているのです。このようなしくみなので、プロジェクトの雛形を作っただけで、ウェブサーバーを起動してデフォルトの画面を表示できるわけです。

作りたいアプリと使いたい言語が決まったら、それに必要なライブラリやフレームワークがあるか調べてみてください。そして、それを試してみてください。試した上で、うまく行かないことがあれば、また質問すればいいのです。その時は、もっと具体的な質問になっているでしょう。


(2016年1月30日 追加)

関数型言語に興味があって、それを使って、デスクトップアプリを作りたいのですね。

最初に言っておくと、私が仕事で主に使っているのは Erlang/OTP で、分散データベースの開発をしています。そのため、デスクトップアプリの開発についてはほとんどわかりません。Haskell や OCaml のような ML 系言語については、以前から趣味として学習しているというレベルです。Lisp も時々遊びで触る程度。最近は ML 系の Rust という言語を、Erlang と組み合わせて使おうとしています。(サーバー側での用途です)

なので、的確な回答ができるかはなんともいえないのですが、わかる範囲で書いてみます。

Haskel

たしかに、Haskell でデスクトップアプリを作っている人は、かなりの少数派のようです。ネットで検索してもあまり出てきませんね。手元には洋書中心で Haskell の書籍が5冊あります。が、その中で GUI について解説しているのは「Real World Haskell」ただ1冊で、しかも14ページしかありません。(英語版でのページ数です)

Real World Haskell の日本語翻訳版はオライリージャパンから出版されています。また、英語版ならオンラインで無料で読めます。

ウェブでの日本語記事ですと、こちらを見つけました。この中の「Haskellでテトリス(Part 1〜9)」が丁寧に解説されていておすすめです。なお、GUI ツールキットは GTK+ を使っています。

Lisp

Lisp に関しては、Common Lisp(CL)、Scheme(+Gauche)、Clojure といった方言がたくさんあり、さらに各方言について、処理系がいくつかある(CL なら SBCL、Clozure CL、CLisp など)という状況なので、非常に探しにくいです。

まあ、最近の日本語での情報(書籍やネット上の記事)の多さを取るなら、Java VM 上で動く Clojure がよいかと思います。Clojure なら、Java の GUI ツールキットである Swing を使ってデスクトップアプリも作れます。私は Clojure の書籍は持っていないので、ご自身で情報を探してみてください。

その他:OCaml

Haskell や Lisp 以外の関数型言語や、関数型言語の影響を強く受けた言語も紹介しましょう。

まず、OCaml ですが、「プログラミング in OCaml」(五十嵐 淳 著、技術評論社)では、2章割いて GUI アプリ開発を解説しています(GUI ツールキットは Tk)。この本は、冊子版は絶版のようですが、電子書籍版が買えます。大学の講義を元に書かれたようで、関数型プログラミングの入門から GUI 構築までが丁寧に解説されていて、おすすめです。

その他:Scala

最近では、OCaml や Haskell の他に、ML から大きな影響を受けている言語が増えてきました。Scala もそのひとつで、日本語の情報も多いです。Scala なら Clojure と同様に、Java Swing を使ったデスクトップアプリが作れます。

(2016年2月6日追記)
「Scala逆引きレシピ」(竹添直樹、島本多可子 著、翔泳社)に、数ページですが「GUIアプリケーションを作りたい」という項目があります。そこにはこのように書かれています。「もちろんScalaから直接Swingを使用することも可能ですが、scala.swingパッケージを使えば関数型言語らしい宣言的なスタイルで、SwingによるGUIアプリケーションを記述できます」
(追記終わり)

その他:Swift

Apple が開発し、オープソース化した Swift も、ML から多大な影響を受けています。iOS と(Mac)OS X 限定ですが、デスクトップアプリや iPhone のゲームを作るために生まれた言語です。iOS アプリの開発者は多いので、日本語の情報も多いです。

日本の Haskell ユーザーで Swift を使っている人は多いようで、ネット上では、Haskell の○○を Swift で再現してみる系の記事が多かったりします。

例:(デスクトップアプリの話ではありませんが)
Swiftでアプリカティブスタイル

その他:Rust

Rust も ML から多大な影響を受けています。Rust は、Mozilla が次期ウェブブラウザーの研究開発プロジェクトのために開発した言語で、マルチプラットフォーム(Windows、OS X、Linux)のデスクトップアプリやゲームなどを作るのに向いています。システムプログラミング向けの言語なので、OS を書くこともできます。ユーザーフォーラム(英語)の常連回答者たちを見ていると、Haskell ユーザーが多いように見えますね。

Rust は私のイチオシ言語なのですが、ライブラリの成熟度がまだ低いことと、日本語の情報が少ないことがあり、デスクトップアプリの開発に使うには、まだ早いかもしれません。Piston という、マルチプラットフォームのゲームエンジンの開発が活発に行われていて、Piston のホームページでは、簡単なパズルゲームや、Minecraft クローンなどのデモアプリが用意されています。また、もちろん、開発途中のウェブブラウザー もあります。

まとめ

いま紹介した中からですと、以下の順番で試すのがいいでしょうか?

  1. Haskellでテトリス
  2. プログラミング in OCaml
  3. Clojure + Swing(情報はウェブや書籍で探してみる)

このどれかの言語で、やりたいことができるようなら、とてもいいですね。

もし不十分だったら、さらに他の言語、Scala や (Mac)OS X なら Swift なども試してみてはどうでしょうか?

投稿2016/01/29 10:54

編集2016/02/06 02:03
tatsuya6502

総合スコア2035

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu-ki0

2016/01/29 14:07

回答ありがとうございます。 とても詳しく書かれていて大変参考になりました。 実はHaskellやLispなどの関数型言語でアプリを作ってみようと思っていたのですが、どうすればよいか分からなかったので、とても勉強になりました。 便利なツールを自分でも作って見たかったのですが、どのようにして作ればよいのか分からなかったので^^;(特にデスクトップアプリみたいなのを作ってみたかった) もし参考になる書籍や情報が載ったサイトがあれば、教えていただけるとありがたいです。 回答ありがとうございました。
tatsuya6502

2016/01/30 09:56

回答の方に追記しました。そちらをご覧ください。
yu-ki0

2016/02/05 13:32

情報有り難うございます。 ぜひ回答を参考にさせていただきます
tatsuya6502

2016/02/06 01:21

なにか形になるといいですね。頑張ってください。 数日前、仕事で既存の Java ライブラリーを使った簡単なコマンドラインツールが必要になり、ふと思い立って、Scala で書いてみました。といっても Scala で書くのは6年ぶりくらいだったのでほとんど忘れてしまい、急きょ書籍の電子版を2冊購入することで、なんとか形にできました。その時購入した「Scala逆引きレシピ」という書籍で、デスクトップアプリ(GUIアプリ)について簡単に紹介されていたため、回答の方に追記しました。 ちなみに購入したもう一冊の方は「Scala関数型デザイン&プログラミング」(Paul Chiusano、Rúnar Bjarnason 著、株式会社クイープ訳、インプレス)です。Scala のようなマルチパラダイムの言語(Lispもそうです)だと、関数型プログラミングのスタイルでなくてもプログラムが書けてしまうので、関数型プログラムでよく言われる利点がイマイチ活かせなかったりします。なので、こういう本で知識を整理するのも必要かなーと考えました。この本は、これからじっくり読みます。
guest

0

こんにちは。

中々簡単に説明することが難しい質問ですが、誤解を恐れつつむちゃくちゃ簡単化して説明してみます。

まず、コンピュータというハードウェアとその上で走るソフトウェアがありますね。
そのソフトウェアが全て何かのアプリだったと考えてみてください。(実際、そのようなマイコンも世の中にはあります。)
その様々なアプリを1から作っていると本当にたいへんですね。しかし、アプリが必要とする処理の中に多くのアプリが共通で必要とする処理が多数あります。そのようなソフトウェアの内、基本的な部分を集めたものがOSです。ハードウェアを制御する部分~アプリ自身を制御する部分等です。

そして、OSはある意味サブルーチンの塊と考えても良いです。(端折り過ぎですがイメージを掴むためです。)アプリを開発する時は、OSの適切なサブルーチンを呼び出して作るわけです。

ただし、1つのコンピュータで複数のアプリを走らせたり、1つのアプリが暴走してもシステム全体として動作を継続できるようにしたりするために、メモリ空間の話やカーネル・モードとかユーザ・モード等ややこしい話が多数ありますので、実際には単純なサブルーチン呼び出しではないです。
そのようなOSとのやり取りするための約束事を纏めたバッケージがSDKと呼ばれる形式でOSベンダーから提供されます。

そのSDKを直接使ってアプリを作る場合もあります。例えば、Windows SDKを直接呼び出して開発されたアプリですね。たぶん、今もそのようなアプリを開発している人は居ると思います。
また、アプリを開発するための開発ツール(例えばVisual Studioとか)や各種フレームワークもそのようなSDKを使って開発し、アプリとOS間の橋渡しも行います。


さて、具体的な部分は、yu-ki0さんがお使いのOS毎に大きく異なりますので、そのOS用に情報を集める必要があります。
Windowsはその名の通りWindowシステムもOSに含んでいますし、基本部分はあまり変わってないし、情報も多いので比較的集めやすいです。
Linuxの場合は、そのディストリビューション毎にそこそこ異なる場合がありますので、ディストリビューションまで決めた方がよいだろうと思います。

また、作りたいアプリの種類によっても集めるべき情報がかなり異なります。
例えば、WEBアプリとデスクトップアプリでは、OSとやり取りする内容がかなり異なります。
この辺も的を絞って情報収集することをお薦めします。

更に詳しい話は、OSとどんな分野のアプリか的を絞って尋ねるのが良いと思います。


【コメントへの回答です】

自分は関数型言語でデスクトップアプリのようなのを作ってみたかった
とりあえずSDKについて調べてみれば、開発の仕方がわかってくるのでしょうか?

関数型言語をサポートしたSDKを提供しているOSベンダーは事実上ないと思います。(あったとしてもマイナー過ぎて情報がなかなか見つからない。)
ですので、SDKからのアプローチは不発に終わると思います。

でも、こんなサイトがありました。「HaskellでもGUIを持ったアプリケーションを開発する事ができます.」だそうです。
「OSベンダーが提供しないなら、Haskell側で対応すればいいじゃないか」と頑張った方々がいるということです。このあたりを参考に始めてみると良いかも知れません。(Haskellについては私は名前くらいしか知らないので無責任モードですいません。)


【閑話休題】
ところで、GUIの開発はソフトウェア開発の非常に大きな部分を占めますので、そもそもGUIが必要なのかどうかは非常に重要です。
デスクトップアプリは、グラフィカルな表示を行い、マウスやキーボードで操作します。これを、GUI(Graphical User Interface)といいます。
これに対して、WEBアプリは、サーバ上で接続してくるクライアント・マシンのWEBブラウザと通信するものですので本質的にはGUIは不要です。このようなアプリはCUI(Charactor User Interface)を持っている場合が多いです。

投稿2016/01/29 10:20

編集2016/01/29 17:24
Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu-ki0

2016/01/29 14:14

回答ありがとうございます。 なんとなくですがイメージがつかめました。 自分は関数型言語でデスクトップアプリのようなのを作ってみたかったので、大変参考になります。 とりあえずSDKについて調べてみれば、開発の仕方がわかってくるのでしょうか? 回答ありがとうございました
Chironian

2016/01/29 15:16

回答文に追記しました。参照下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問