C言語によるCGIプログラミングの設計入門

C言語の基本文法を学び終えたあと、「次は何を作ればいいんだろう」と感じた人に向けて、コンソールアプリの外に一歩出る題材としてCGIを扱います。
この教材は、C言語とCGI(Common Gateway Interface)を使って、Webアプリケーションの仕組みを低レイヤから理解するための教材です。
CGIは現代のWebアプリ開発で主流の方式ではありません。だからこそ、HTTPレスポンス、環境変数、標準入力、フォーム送信、Cookie、データベース接続といったWebの基本要素が、フレームワークに隠れずそのまま見えます。
本教材では、C言語で小さなCGIプログラムを実装しながら、Webサーバとプログラムの境界、入力値の扱い、HTML生成、ODBCによるDB接続、セッション管理、JSONレスポンスまでを段階的に学びます。
プログラミングスクールのように「短期間で実務スキルを身につける」ことを目的にした教材ではありません。個人VPSや古いPCでも試せる環境で、C言語が好きな学習者が「中身はどう動いているんだろう?」を掘っていくための、少しレガシーで実験的な教材です。
この教材の位置づけ
- C言語で本格的なWebサービスを作ることが目的ではありません。
- フレームワークが普段隠している処理を、自分の手で確かめることを目的にしています。
- 動くサンプルを通じて、HTTPとWebアプリケーションの基本構造を理解します。
- 実用コードを書く前提として、入力処理、メモリ管理、エスケープ、権限、セッションなどの注意点も扱います。
想定読者
- C言語の基礎を学び終え、次の題材を探している人
- Webアプリケーションの裏側で何が起きているかを知りたい人
- PHP、Python、Ruby、Node.jsなどのフレームワークが担っている処理を分解して理解したい人
- Linux、Apache、MariaDBなどを使った小さな実験環境を作ってみたい人
始める前に
この教材では、C言語の基本文法、ポインタ、構造体、ファイル入出力を一通り学んでいることを前提にします。HTML、HTTP、SQL、Apacheは必要な範囲で補足します。
第3章から第6章までは、ApacheとGCCがあれば多くの内容を試せます。MariaDBとODBCは第7章以降で使います。
内容構成
- はじめに
- CGIとは何か?
- 最初のCGIプログラム
- フォームからのデータ受信(GET/POST)
- フォーム値の構造化とアクセス
- HTMLテンプレート生成とレスポンスヘッダ
- ODBCを使ったデータベース連携
- セッション管理と認証処理
- 実践アプリ:簡易CMS(日記投稿アプリを作ってみよう)
- API化:JSONレスポンスをつくってみよう
- Appendix:開発環境・デプロイTips集
- おわりに
サンプルコード
本文のコード片を実際に試すためのサンプルを examples に分離しています。
make core: ODBCなしで動く基本CGIサンプルmake diary: ODBCを使う日記CMS/APIサンプル
最初は make core だけで十分です。ODBCを使う make diary は、第7章以降を読むときに試してください。
日記CMS/APIサンプルのビルドには unixodbc-dev が必要です。
実行環境
本文中のサンプルは、Ubuntu Linux、Apache、MariaDB、unixODBC、GCCを前提にしています。環境構築やデプロイ時の注意点はAppendixにまとめています。
ライセンス
本教材の著作権は Shintaro Suzuki に帰属します。詳細は LICENSE を参照してください。