1. はじめに
C言語でWebアプリケーションを書く機会は、今では多くありません。実務でWebアプリを作るなら、PHP、Ruby、Python、Node.js、Go、Javaなどを選ぶ場面がほとんどです。
それでも、C言語でCGIを書くことには教材としての価値があります。Webサーバからプログラムが呼び出され、環境変数や標準入力を通じてリクエストを受け取り、標準出力にHTTPレスポンスを書き出す。この流れを自分の手で実装すると、Webアプリケーションの基本構造がかなりはっきり見えてきます。
本書は、C言語でCGIプログラムを作りながら、Webアプリケーションの下回りを理解するための入門教材です。
この本で学ぶこと
本書では、単に「動くCGI」を作るだけでなく、Webアプリケーションを構成する基本要素を段階的に扱います。
- HTTPレスポンスヘッダとHTML出力
- GET / POSTによるフォームデータの受信
- URLエンコードされた値の解析
- 入力値を扱うための構造体設計
- HTMLテンプレートと出力処理の分離
- ODBCを使ったMariaDBとの接続
- Cookieとファイルを使ったセッション管理
- 簡易CMSを題材にした小さなアプリケーション設計
- JSONレスポンスによるAPI化
- Apache、権限、文字コード、デプロイ時の注意点
これらは、普段のWebフレームワークでは便利なAPIの裏側に隠れている処理です。C言語で書くことで、どの処理がどの責任を持っているのかを分解して確認できます。
なぜC言語でCGIなのか
C言語でCGIを書くことは、現代的なWeb開発の最短ルートではありません。メモリ管理、文字列処理、エスケープ、権限設定、プロセス実行など、気にすることが多く、開発効率も高くありません。
しかし、教材としてはその不便さが役に立ちます。
- リクエスト情報が環境変数として渡されることがわかる
- POSTボディを標準入力から読む必要があることがわかる
Content-Typeを自分で出力しないとレスポンスにならないことがわかる- 入力値のデコード、検証、エスケープを省略すると危険なことがわかる
- Cookieやセッションが単なる文字列と保存領域の組み合わせであることがわかる
- DB接続やエラー処理には明確な後始末が必要なことがわかる
本書で扱うCGIは、実用の第一候補ではなく、Webの仕組みを理解するための小さな実験台です。
分解して理解するということ
プログラミングの学びには、「便利な道具を使えるようになる」こととは別に、「その道具の中で何が起きているのかを分解して見られるようになる」ことがあります。
かつて、BASICで画面に文字を出し、アセンブリでCPUの動きを意識し、C言語でメモリや関数やファイルを扱う、という進み方には、コンピュータの仕組みを少しずつ近くで見る面白さがありました。今の開発環境はずっと便利になりましたが、そのぶん、最初から多くのことが隠れています。
C言語は難しい言語です。現代のアプリケーション開発で、最初に選ぶ言語でもないかもしれません。それでも、ポインタ、文字列、標準入出力、メモリ管理、プロセス、ファイルといった要素を通じて、「中身はどうなっているのか」を考える訓練になります。
CGIも同じです。Webサーバから環境変数が渡され、POST本文を標準入力から読み、Content-Type を自分で出力し、Cookieを文字列として扱う。この素朴な仕組みは、Webアプリケーションの分解能を上げる題材になります。
本書には、そうした探究の入口としてC言語をもう一度使ってみる、という意図も込めています。
この教材は、プログラミングスクールのように効率よく職業訓練を進めるためのものではありません。むしろ、個人VPSや古いPCにLinuxを入れて、Webサーバを立て、C言語で小さなプログラムを書きながら、仕組みを楽しく確かめるための教材です。
新しい技術を追うことも大切ですが、古い仕組みを自分の手で動かしてみると、今の技術が何を便利にしてくれているのかも見えやすくなります。本書では、その寄り道を前向きな学びとして扱います。
読者対象
本書は、次のような読者を想定しています。
- C言語の基本文法、ポインタ、構造体、ファイル入出力を一通り学んだ人
- Linux上でコマンドを実行し、Cプログラムをコンパイルした経験がある人
- Webアプリケーションの裏側で何が起きているかを知りたい人
- フレームワークが隠しているHTTP、フォーム、Cookie、DB接続の仕組みを確認したい人
HTML、HTTP、SQL、Apacheの知識は、必要な範囲で本文中に補足します。ただし、すべてを網羅するリファレンスではなく、CGI教材として必要な部分に絞って扱います。
本書の構成
本書は、基礎から実践へ進む構成です。
第1章:はじめに
第2章:CGIとは何か
第3章:最初のCGIプログラム
第4章:フォームからのデータ受信
第5章:フォーム値の構造化とアクセス
第6章:HTMLテンプレート生成とレスポンスヘッダ
第7章:ODBCを使ったデータベース連携
第8章:セッション管理とユーザー認証
第9章:実践アプリ:簡易CMS(日記投稿アプリ)を作ろう
第10章:API化:JSONレスポンスをつくってみよう
第11章:Appendix:開発環境・デプロイTips集
第99章:おわりに
前半ではCGIの最小構成とフォーム処理を扱い、中盤では出力の整理とDB接続を扱います。後半ではセッション、認証、簡易CMS、JSON APIへ進みます。
実行環境
サンプルは、Ubuntu Linux、Apache、MariaDB、unixODBC、GCCを前提にしています。
環境構築の詳細は第11章のAppendixにまとめています。最初からすべてを整える必要はありません。第3章から第6章までは、ApacheとGCCがあれば多くの内容を試せます。DB連携は第7章以降で必要になります。
それでは、まずCGIとは何かを確認し、WebサーバとCプログラムがどのようにつながるのかを見ていきます。