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

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

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

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Q&A

解決済

6回答

14245閲覧

C言語でのWebアプリ開発について

hitotose

総合スコア6

C

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

0グッド

0クリップ

投稿2015/03/21 01:12

C言語でWordpressのようなWebアプリを開発する方法はありますか?

CGIを使用して出来るとは聞いたことがあるのですが、CGIは「セキュリティ面での不安」や「サーバーへの負荷が大きい」といったことを聞いたので、あまり使わないほうがいいのかなと、現在迷っています。。

CGI以外にWebアプリを開発する方法はあるのでしょうか?
よろしくお願いいたします。
※すみませんが、C言語のみでお願いいたします。

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

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

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

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

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

guest

回答6

0

ベストアンサー

Webサーバとプログラムの結合法としては、

  • サーバに直接プログラムを組み込む
  • CGI、FastCGIといった汎用のインターフェースを使う
  • PSGI、WSGIといった、言語ごとに決まったインターフェースを作る

というパターンが考えられます。

1つ目は、サーバ自体がC言語で書かれたものであれば拡張もC言語とすることで親和性は高いですが、CGIのような汎用のインターフェースと比べて考慮することは増えて、高度な技術が必要になることでしょうし、当然ながらサーバ固有のものになってしまいます。

2つ目でCGIを外すと、FastCGIという選択肢があります。これは実行されるプログラムもサーバとして待ち受けて、プロセスをいちいち立ち上げずに済むという形態です。C言語用のFastCGIライブラリがあれば実装は比較的容易かもしれません(参考)。

3つ目のような、言語ごとにサーバとの通信を標準化した仕様は、C言語にはありません。

とはいえ、メモリ管理や文字列処理など、C言語ではコードを書く人間の側で考慮しなければいけないことも多く、脆弱性を残してしまいやすいので、「どうしてもC言語で書きたい」という強い意志、あるいは相応な理由がある状況でなければ、他の言語の処理系を入れるほうが楽なことは間違いないでしょう。

投稿2015/03/23 02:23

maisumakun

総合スコア145121

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

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

hitotose

2015/03/28 00:06

ご回答ありがとうございます。 なるほど、CGI以外にもFastCGIというのがあるのですね。 参考のサイトも載せていただきありがとうございました。 参考にさせていただきます。
guest

0

CGIの代わりになる……しかも広く使われているスクリプト言語のフレームワークに相当する仕組み……となるとC言語では存在しないと思います。

PHPが、C言語ユーザをターゲットにした文法になっているので、PHPの採用を検討してみてはどうでしょうか。

投稿2015/03/21 03:26

lichten

総合スコア133

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

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

lichten

2015/03/23 02:02

質問の中に「CGI以外にWebアプリを開発する方法はあるのでしょうか?(C言語で)」と書いてあるのに、自分以外の回答はそれを無視、しかも私の解答だけマイナス評価というのは残念なことです
munyaX

2015/03/23 02:14

マイナスはさすがにあんまりですね。 +しておきましたw
lichten

2015/03/23 03:58

私が嘆いているのはあんまりとかそういう事ではなくて、「ありますか?」という質問に対して「ある意味存在します」「作れば存在します」「(質問を無視して)難しいです」といった質の低い回答で埋め尽くされた事ですよ。
hitotose

2015/03/28 00:33

ご回答ありがとうございます。 >CGIの代わりになる……しかも広く使われているスクリプト言語のフレームワークに相当する仕組み……となるとC言語では存在しないと思います。 作る方法はあると聞いていたので、フレームワーク相当のものがあるとは思っていたのですが、存在しないんですね。 ご回答にも書いてあるとおり、PHPなどのWebに最適化された言語を使うほうが一般的ですしね。 ありがとうございました。 もう少し考えてみたいと思います。
guest

0

以前(10数年前)は速度的なメリットを傍受するためにC言語でCGIの開発してましたが、今やるのであればApacheのモジュールとして開発するのが良いかと思います。

■ApacheModuleでWebアプリケーションをつくろう
http://codezine.jp/article/detail/2502

■Apacheモジュール プログラミングガイド
http://www.amazon.co.jp/dp/4774117994/
※Apacheモジュールの書籍はほとんど出版されておらず、情報的に新しくはありませんが
貴重な一冊です。Apacheの内部処理を知ることもできるのでおすすめです。

MySQLのC言語用のAPIももちろん提供されていますので、それを利用すればWordpress同様にデータも扱えます。書き方によってはPHPで作られたWordpressより高速に動作すると思います。
(PHP自体がCで書かれていますので、途中のPHP自体の処理を端折れる分、理屈的には高速化が望めます)

C言語によるWeb開発用のフレームワークは存在しないのでは?という書込みがありますが、ある意味Apacheが提供しているAPI郡がそれにあたるのではと思います。
http://www.slideshare.net/shebang/apache-module-presentation

仕事の場合の話ですが、
とはいえ、Cを使うメリットはやはり高速性=インフラ費用の低減なんですが、
開発工数考えると、最近はインフラよりも人件費の方が高くつく場合が多くてPHPとかのLL使うことの方が多いです。相当なリクエスト数がある場合は、もちろんこの限りではありませんし、実際にその手法で高速化(サーバ台数の縮小)を図った例もあります。

話がずれますが、PHPのフレームワークのPhalconも、PHP自体の速度の解消を図るためにCで最適化をするといった手法を取っていますので、今現在もCの需要は場所によってはまだまだありますね。
http://phalconphp.com/ja/

投稿2015/03/21 07:31

編集2015/03/21 07:53
munyaX

総合スコア783

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

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

chokojori

2015/03/22 06:58

Javaで書けば、C言語に肉薄する速度が出て、しかもC言語より圧倒的に安全なのに、C言語を使うべきなんですかね。PHPの、随所にC言語で速度を確保するやり方は、結果的に無数のセキュリティホールを生んでいると思いますが...
munyaX

2015/03/22 07:16

このスレで言えば、それは質問者さんが判断することですかね。 ここは是非を議論する場ではなく、情報交換の場だと思いますよ。あまりに目に余る場合はそれとなく指摘しますが。例えば40代中盤で、Cのエキスパートのエンジニアさんの集団使って開発してくれと頼まれたら、Cを選択する可能性は高いですねw 何事もケースバイケースですかね。 あとセキュリティーホール云々はCだから発生すると結論づけるのはナンセンスではないかと。開発プロセスの問題が多分にありますよね。 まぁここまでCを押しているように見えますが、私個人は速度求めるならそれこそGoとかnode使いたい思考の人ですw
chokojori

2015/03/22 12:10

そうですか? C言語以外でBuffer Overrun脆弱性を突かれて任意のコードを実行される危険は、C言語の場合より、圧倒的に低いと思いますが。PHPで過去に露呈してきた脆弱性の非常に多くがC言語で書かれたライブラリに由来していますよね。Webアプリケーションのように、悪意のユーザからアクセスされる可能性の高い分野で、しかもWordPressのような、PHPで書いても脆弱性を連発しているようなジャンルのアプリケーションをC言語で書くことは、はっきり危険なので、危険であることは伝えておくべきだと思います。 私は、このようなケースでC言語を選択する理由は事実上皆無であると思います。ケースバイケースとは思いません。
munyaX

2015/03/22 12:55

端的に言うと大人の会話をしようw 相手のいうことにいちいち食って掛かる生き方は大変ですよ。 おっしゃられていることが(文章的に)支離滅裂なのですが、 Cで書かれたものにバグの温床が潜んでいて使えないという文意であれば、Cで書かれたPHPはもとよりRubyなど多くのスクリプト言語や、ApacheなどのWebサーバ、そもそもLinux自体使えなくなってしまいませんか? > 私は、このようなケースでC言語を選択する理由は事実上皆無であると思います。ケースバイケースとは思いません。 それは自分の回答でお伝えになられるのが良いのではないですかね。 自分の意見をここで主張されるのは違うんじゃないかなぁと思いますよ。 特に私はあなたの意見を真っ向から否定しているわけではないですよ。 時と場合によって、様々な選択肢がある。場合によってはあなたの選択が最適である場合もあれば、状況によってはそれが異なる場合もある。自分から可能性を狭めるような考え方は損をしているかと思います。 まぁそう顔を真っ赤にせず、お茶でも飲んで落ち着いてください。
munyaX

2015/03/22 12:57

そういえば、JVMもC(というかC++)での実装じゃなかったでしたっけ?
chokojori

2015/03/22 13:36

C言語で書かれているために脆弱性が見つかっていOSや言語処理系やミドルウェアやアプリケーションはたくさんあります。 それでも、C言語の高速性と実用性のために、リスクを負いながらも、C言語を選択するケースがあるということです。なぜって、OSが遅くて効率が悪いことは致命的だし、言語処理系が遅くて効率が悪いことは致命的だし、ミドルウェアが遅くて効率が悪いことは致命的ですから。でも、たとえば最近でもOpenSSLが致命的な脆弱性が発見されてトラブルになりましたね。 それらは、そうした脆弱性を探して、潰していくために時間と労力をかけても、結果的にリターンが見合うから、そうしているわけです。 で、WordPressのようなWebアプリケーションでC言語を選択するメリットがあると本当にお考えなのですか。私は、ほとんどまったく非現実的だと思います。C言語で書かれた、ある程度以上のWebアプリケーションは皆無であるという現実が、そのことを裏打ちしていると思います。 時と場合によって、様々な選択肢がある。もちろんそうです。しかし、WordPressのようなWebアプリケーションを書くような場合には、C言語は現実的な選択肢ではありません。そうですね。極端に非力なハードウェア上で、WordPressのようなWebアプリケーションを実装する必要が生じたら、現実的な選択肢になるかも知れませんがね。 現実に、Apacheモジュールとして書かれたBlogシステムがあって、広範に利用されている実績でもあるのですか? http://codezine.jp/article/detail/2502 この記事でも「通常、ApacheのモジュールでWebアプリケーションを作成することはほぼありません」と述べられています。この記事の末尾でC言語で書いたWebアプリケーションとJavaで書いたものの速度を比較しています。この性能差をどう見ますか。
chokojori

2015/03/22 13:44

可能・不可能で言えば、たとえばアセンブラでもWordPressのようなWebアプリケーションを書くことは可能ですが、それを選ぶかどうかはその人次第とお考えですか。
munyaX

2015/03/22 13:54

この人めんどくさいなwww 私が悪かったです、すべてあなたのおっしゃる通りです。 これでよろしいですか?
munyaX

2015/03/22 13:55

人の話しというか、何を言おうとしてるかを理解するようにした方が あなたの人生がハッピーになりますよ。 相手を言い負かすことで、あなたが得られる物はなんですか?
chokojori

2015/03/22 14:02

別にあなたを言い負かしたいわけではありません。 あなたの意見が非現実的なので、質問者が勘違いすると悲劇だと思って、現実的な意見を述べています。 あなたのアドバイスを真に受けて、質問者がApacheモジュールとしてWordPressのようなWebアプリにチャレンジしたとして、有益な結果になると思いますか? 私は思いません。
munyaX

2015/03/22 14:07

やだ、この人本当にめんどくさいw > あなたの意見が非現実的なので、質問者が勘違いすると悲劇だと思って、現実的な意見を述べています。 それは自分の解答欄で述べればいいんじゃないですかね? > あなたのアドバイスを真に受けて、質問者がApacheモジュールとしてWordPressのようなWebアプリにチャレンジしたとして、有益な結果になると思いますか? 私は思いません。 それはあくまであなたに取っての話ですよね? ここでいう「有益」の定義ってなんですか?
chokojori

2015/03/22 14:19

> それは自分の解答欄で述べればいいんじゃないですかね? はい。通常はそうだと思いますし、私もいつでもこういうかたちで反論を書いているわけではありません。 あなたの回答に「不穏なもの」を感じたので、あえて書きました。 > それはあくまであなたに取っての話ですよね? > ここでいう「有益」の定義ってなんですか? 有益の定義は、ここでは設計、実装、保守、バージョンアップにかかる費用と、実際のサービスに必要なリソースのバランスの良さです。 たとえば、数千のサーバですでに実行中のサービスをC言語で書き直すことによってサーバの台数を1/10に削減できるなどの事情があれば、C言語で書くメリットはあるでしょう。 しかし、WordPressのようなWebアプリケーションは、流行に合わせてどんどんバージョンアップを迫られるわけで、設計、実装、保守、バージョンアップにかかる費用は無視できません。 あなたも、C言語でApacheモジュールとしてWordPressのようなWebアプリケーションを書くことの実用性は疑わしく思っているのではないのですか? 質問者がC言語にこだわっているようなので、あえてApacheモジュールとして書く方法がある、と提示しただけで、現実にはそのようなチャレンジは報われないとわかっているのでは?
munyaX

2015/03/22 14:35

まずこの質問の大前提は > CGI以外にWebアプリを開発する方法はあるのでしょうか? > ※すみませんが、C言語のみでお願いいたします。 これです。 回答者が示すべきは情報であって、そこから何を取捨選択しどう判断するかは質問者さんでしょう(と私は思っています)。ですので、情報を得てからの道のりは質問者さんが自分で気がついて行動に移すべきところです。もちろんそれに対し「大変だよ」とアドバイスするのはかまわないと思います。 あなたは質問者さんが与えられた情報から、それに気が付かないと思っていませんか? 恐らくあなた自身が質問者さんを下に見ているのではないかと感じます。私は質問者さんがご自身でそれに気が付き、それでも前進するのか、それとも別の手段を取るのか選択すれば良いと思うのです。我々回答者が口をはさむべきことではありません(と私は思います) > あなたも、C言語でApacheモジュールとしてWordPressのようなWebアプリケーションを書くことの実用性は疑わしく思っているのではないのですか? 質問者がC言語にこだわっているようなので、あえてApacheモジュールとして書く方法がある、と提示しただけで、現実にはそのようなチャレンジは報われないとわかっているのでは? 報われないとは思っていませんよ。 そもそも、何のためにこれを作るのか、この質問では目的や動機が明かされていません。 仮にこれが学生さんや新人エンジニアさんの学習であれば、無茶なチャレンジも勉強のうちです。 そういう意味でいえば > 有益の定義は、ここでは設計、実装、保守、バージョンアップにかかる費用と、実際のサービスに必要なリソースのバランスの良さです。 この「有益」の定義とは相反するものですよね? "何のために"の情報が質問文にない以上、私達は聞き返すか、予測して答えるしかありませんので、安易に「ダメだ」と決めつけて返すのは不幸の始まりです。 例えばLinux作ったリーナスさんも、最初は一人でOS作って、これほど世の中に認知されたわけですし、何がどう転ぶかはわかりません。もちろん最初はかなり小さいシステムだったみたいですけどね。それでも個人で学生がOS作るとかは当時でも狂気だったと思います。  ※その後あの人は引きこもってgitも作っちゃいますし、   まぁ彼が特別だって話もありますけどね。
chokojori

2015/03/22 15:05

> "何のために"の情報が質問文にない以上、私達は聞き返すか、予測して答えるしかありませんので、安易に「ダメだ」と決めつけて返すのは不幸の始まりです。 なるほど、それは同意です。 ただ、私は私なりに「予測して」意見しているつもりです。 学生であったLinusがOSを書くチャレンジをしたのは、困難な道ではあっても、本質的に価値のあるチャレンジだったと思います。 WordPressのようなWebアプリケーションをApacheモジュールとしてC言語で書くのは本質的に価値のあるチャレンジだとは、私には、どうしても思えません。困難であるだけでなく、もっと良い選択肢がいくらでもあるからです。
munyaX

2015/03/22 15:32

> ただ、私は私なりに「予測して」意見しているつもりです。 それを思い描くのは自由です。 しかしそれを強要してはいけません。 なぜなら、 > 学生であったLinusがOSを書くチャレンジをしたのは、困難な道ではあっても、本質的に価値のあるチャレンジだったと思います。 > WordPressのようなWebアプリケーションをApacheモジュールとしてC言語で書くのは本質的に価値のあるチャレンジだとは、私には、どうしても思えません。 繰返しになりますが、それは質問者さんが判断すべきことだからです。 最初はCMSとして作っていたものが、全く別のものになったといったことになるかもしれません。回答者がその可能性を塞ぐべきではありません(と個人的に思います)。 もしかしたら、nginxを超える超軽量Webサーバにつながるかもしれませんよ? ルーティングに革命をもたらすかもしれません。データの内部構造で画期的な発見の可能性も考えられます。新しいスクリプト言語を生み出すきっかけになるやもしれません。 何をするにしても、「動機」「モチベーション」というのは非常に大切で、与えられて得られる物ではありません。質問者さんはどうもCにこだわりがあるか、そうせざるを得ない環境にいらっしゃるようなので、そこを塞ぐようなことをすべきではないでしょう。
hitotose

2015/03/28 00:23

ご回答ありがとうございます。 コメント欄がすごいことになってますね。 質問が抽象的かつ無知的になってしまい、申し訳ありませんでした。 >今やるのであればApacheのモジュールとして開発するのが良いかと思います。 C言語でやる方法はあるのですね。 ただ、コメント等にある通り、かなり難しいかつ相当な知識・技術がなければ危険性もあるのですね。 やるのはいいとしても、公開レベルのものは考えものですね。 参考サイトや書籍等の紹介もありがとうございました。 もう少し考えてみたいと思います。
guest

0

C言語を使ってWebアプリを書くことは可能ですが、あまり現実的だとは思いません。
CGIを使う方法がありますが、ご心配のようにサーバへの負荷が大きいです。
ApacheならApacheモジュールをC言語で書いてApacheモジュールによってWebアプリを実現することが可能ですが、ハッキリ言って、非常に難易度が高い上に、C言語で書くかぎり、セキュリティ面の不安が常につきまといます。(C言語は文字列の扱いが難しく、ささいなミスでBuffer Overrun脆弱性等の深刻な脆弱性を作り込んでしまいます。)

なぜC言語にこだわるのでしょうか。

投稿2015/03/21 02:03

chokojori

総合スコア971

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

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

hitotose

2015/03/28 00:38

ご回答ありがとうございます。 >CGIを使う方法がありますが、ご心配のようにサーバへの負荷が大きいです。 やはりそうなんですね。サーバーに高負荷を掛けるのは危険ですね。 >非常に難易度が高い上に、C言語で書くかぎり、セキュリティ面の不安が常につきまといます。 出来ると書いてあるサイトはいくつかあったのですが、詳細な方法等が書いてなかったので、難易度の高さ故に書けないのではないかと思っていましたが、想像以上に難易度が高そうですね。高難易度の分、セキュリティホールも生み出しやすそうです。 ありがとうございました。 もう少し考えてみたいと思います。
guest

0

不可能ではないと思いますがかなり険しい道だと思います。

Webサーバー上で動く形式の実行モジュールを作成して拡張子を.cgiに変更してcgi-binに設置し、ブラウザとの情報の受け渡しは。。。確か標準入出力で可能だったかと。

CGIで受け取った情報を元に設定ファイルを読み込んでテンプレートや設定ファイル内で指定された各種処理を実行し。。。みたいなことを作っていけばそれっぽいものが作れるのではないかと思います。
必要な処理などかなり多そうですし、セキュリティや想定外の入力に対する処理なども相当作りこまないといけなさそうです。

考えて作っていくのはかなりおもしろそうだと思いますが、他人に使わせられるレベルの物を作るのは大変でしょうね。。。
自作な分、拡張などはしやすいと思います(しやすいように作れば、ですが^^;)。

投稿2015/03/22 06:51

HachiyaKouya

総合スコア85

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

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

hitotose

2015/03/28 00:08

ご回答ありがとうございます。 >必要な処理などかなり多そうですし、セキュリティや想定外の入力に対する処理なども相当作りこまないといけなさそうです。 やはりそうなんですね。 公開レベルのものとなると、長期間の勉強が必要となってきますね。 ありがとうございました。少し考えてみます。
guest

0

可能か不可能かというお話だけなら、ほぼどのような言語でもWebアプリを作ることはできます。
※大昔、シェルスクリプトで実装されたWebアプリ(CGI)も見たことがあります。

C言語として実装されたWebアプリとしては、某大手掲示板のread.cgiと呼ばれるモノが有名?ですね。当初はCGIとして。その後高速化のためにDSOという仕組みに変わったそうです。

しかしながら、C言語は一般にWebアプリには向きません。恐らく、C言語用のWebアプリフレームワークも無いと思います。そこまでして特定の言語に拘るか? というお話になるかと思います。
※なので大抵の人は複数の言語を身に着けて、場面に応じて使い分けているというのが私の感覚。

投稿2015/03/21 02:33

angel_p_57

総合スコア1672

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問