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

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

ただいまの
回答率

88.33%

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

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 7
  • VIEW 3,873

yu-ki0

score 72

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

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

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

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

回答 4

+3

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

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

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

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 18:15

    こんにちは。

    > 目的が「プログラムを開発すること」であれば別の答えもあると思いますが、

    質問内容から、プログラム開発の技術面の話と理解しています。

    アプリという用語が混乱を招いているっぽいので、以下プログラムと呼びます。
    私は先のコメントでも「アプリ」はアプリケーション・プログラムの略として使っていますので主旨は変わらないです。

    私もkozuchiさんと同じく、プログラム開発側もそのプログラムが解決する問題についてきちんと把握し、場合によってはプログラム開発ではない方法での解決策の提案もできるべきと思います。
    そして、kozuchiさんが「プログラム開発者がプログラム開発を丸投げすることも有り」と主張されているように見えましたので、この点に異議を唱えさせて頂きました。

    でも、今回のコメントから、kozuchiさんの主張は「システム・アナリストやそれに類する業務を行っている人」にとって「最も重要なのは「そのアプリがなんであるか、目的は何か」をしっかり決めることです。それさえしっかりできれば、「アプリを実装する方法」は開発力のあるベンダーに丸投げしてしまえばいいのです」ということですね。

    であれば、丸っと同意です。

    キャンセル

  • 2016/01/30 19:49

    Chironian さん こんにちわ

    わかっていただけてよかったです。

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

    キャンセル

  • 2016/02/05 22:31

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

    キャンセル

+2

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が登場し、現在では作成できるようになっています。何が作れるかは、言語そのものには左右されない。ただし、コンパイラやライブラリやフレームワークも含めた開発環境には大いに影響を受ける。

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

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 23:07

    回答ありがとうございます。
    とても詳しく書かれていて大変参考になりました。

    実はHaskellやLispなどの関数型言語でアプリを作ってみようと思っていたのですが、どうすればよいか分からなかったので、とても勉強になりました。
    便利なツールを自分でも作って見たかったのですが、どのようにして作ればよいのか分からなかったので^^;(特にデスクトップアプリみたいなのを作ってみたかった)

    もし参考になる書籍や情報が載ったサイトがあれば、教えていただけるとありがたいです。
    回答ありがとうございました。

    キャンセル

  • 2016/01/30 18:56

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

    キャンセル

  • 2016/02/05 22:32

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

    キャンセル

  • 2016/02/06 10:21

    なにか形になるといいですね。頑張ってください。

    数日前、仕事で既存の Java ライブラリーを使った簡単なコマンドラインツールが必要になり、ふと思い立って、Scala で書いてみました。といっても Scala で書くのは6年ぶりくらいだったのでほとんど忘れてしまい、急きょ書籍の電子版を2冊購入することで、なんとか形にできました。その時購入した「Scala逆引きレシピ」という書籍で、デスクトップアプリ(GUIアプリ)について簡単に紹介されていたため、回答の方に追記しました。

    ちなみに購入したもう一冊の方は「Scala関数型デザイン&プログラミング」(Paul Chiusano、Rúnar Bjarnason 著、株式会社クイープ訳、インプレス)です。Scala のようなマルチパラダイムの言語(Lispもそうです)だと、関数型プログラミングのスタイルでなくてもプログラムが書けてしまうので、関数型プログラムでよく言われる利点がイマイチ活かせなかったりします。なので、こういう本で知識を整理するのも必要かなーと考えました。この本は、これからじっくり読みます。

    キャンセル

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 23:14

    回答ありがとうございます。
    なんとなくですがイメージがつかめました。
    自分は関数型言語でデスクトップアプリのようなのを作ってみたかったので、大変参考になります。

    とりあえずSDKについて調べてみれば、開発の仕方がわかってくるのでしょうか?
    回答ありがとうございました

    キャンセル

  • 2016/01/30 00:16

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

    キャンセル

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

  • ただいまの回答率 88.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る