質問: デスクトップアプリや業務アプリなどの便利なアプリがどのような原理で作られるのか知りたいです。 開発について調べていると,どの言語でも得手不得手はあるけど、どんなアプリでも作れるとありました。 C言語やjavaなどのメジャーな言語ならライブラリやフレームワークが用意してあって、出来そうな感じがするのですが、haskellやlispなどの言語でアプリを作りたいときはどうすれば良いのでしょうか? また、開発をするためのフレームワークはどうやって作られているのでしょうか? (例えばhaskellでwebアプリを作れるYesodなど) OSとやりとりしたりする命令を書いたりするんでしょうか? 回答よろしくおねがいします。 知識に乏しいため、言っていることがわからなかったら申し訳ありません。 その点を指摘してくだされば、補足します。 補足 アプリを作ってみたいのですが、プログラミングの書籍では、開発の仕方がいまいち分からなかったので質問させていただきました。 プログラミングの基礎を開発につなげるための知識がなく、どのようなキーワードを調べればよいかもわからなかったので... もしよろしければ参考になる書籍やサイト、キーワードなどを教えていただけるとありがたいです。 よろしくお願いします。
回答: こんにちは。 中々簡単に説明することが難しい質問ですが、誤解を恐れつつむちゃくちゃ簡単化して説明してみます。 まず、コンピュータというハードウェアとその上で走るソフトウェアがありますね。 そのソフトウェアが全て何かのアプリだったと考えてみてください。(実際、そのようなマイコンも世の中にはあります。) その様々なアプリを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)を持っている場合が多いです。