後期第01回 - oddmutou/jugyo-2026kyototech GitHub Wiki

AWS Academyのクラスについて、後期で新しく作る予定でしたが、うまくいってないので今回に限り前のを使いましょう…。

環境再構築

AWS Academy class リセット & EC2インスタンス作り直し

AWS Academyの仕様で、クラスの最長期間が半年になっています。 したがって、新しいクラスに招待します!

環境構築

アカウントが新しくなったので、AWS上の各種データはリセットされます。

EC2インスタンス作り直して、環境構築等を行ってください。

前期最終課題を正しく実施していた人は、手順書があるはずです。手順書通りにやれば問題ない、はずです。

やるべきこと

  1. vimのインストールおよび設定
  2. screenのインストールおよび設定
  3. dockerとdocker composeのインストール
  4. gitのインストール ( sudo yum install -y git )
  5. 前期最終課題でgithub上に公開しているソースコードを、git cloneして持ってきて、起動

Redis

今回は,Redisというものを使ってみましょう。

Redisとは、KVSのひとつです。


KVS(Key-Valueストア)とは - IT用語辞典 e-Words

KVSとは、データ管理システムの種類の一つで、保存したいデータ(value:値)に対し、対応する一意の標識(key:キー)を設定し、これらをペアで格納する方式。


MySQLやPostgreSQLといったRDBMS(関係データベース)は,たくさん列を増やせる表のような内容を保存できます。一方で,KVSは,keyとvalueのセットでしか保存できません。列が2つかない表をイメージしてみてください。

また,Redisは 揮発性 のあるものとして使うことが多いです。 (不揮発性をもたせることも可能。)

Redisの導入

まずRedisサーバーをインストール&起動します。

もちろんEC2インスタンスに直接インストールすることもできますが,これまでどおりコンテナ上で立ち上げます。

そしてこれもいつもどおりDocker Composeを使って,あたらしくDockerコンテナを立ち上げます。

compose.ymlのservicesディレクティブに以下の行を追記してみてください。

  redis:
    container_name: redis
    image: redis:latest
    ports:
      - 6379:6379

全体像はこんなかんじ https://github.com/oddmutou/jugyo-2026kyototech/blob/ee2b3c2c4249fcc1f6cb99f52c6ceed0c5da99c5/koki_01/compose.yml

追記できたら、Docker Composeを再起動して(docker compose up しなおして)ください。

すると、redis というコンテナが立ち上がっているはずです。 docker compose ps コマンドで確認してみましょう。

redis-cliで直接操作

redis-cliというツールでCLIで直接操作することができます。

redisコンテナ内のredis-cliを使うには

docker compose exec redis redis-cli

↑このコマンドは、 redis というコンテナ内で、 redis-cli というコマンドを実行する、という意味ですね。

ではさっそく、値の保存、取得、キーの一覧の取得、削除をやってみましょう。

redis-cliの使い方

値の保存
SET key value

例

127.0.0.1:6379> SET hoge huga
OK
値の取得
GET key

例

127.0.0.1:6379> GET hoge
"huga"
キーの一覧

キーの一覧をとることで、いまどのようなデータが保存されているか確認できます。

KEYS pattern

例

127.0.0.1:6379> SET hoge huga
OK
127.0.0.1:6379> SET hoge2 huga2
OK
127.0.0.1:6379> KEYS *
1) "hoge2"
2) "hoge"
キー&値の削除
DEL key
127.0.0.1:6379> SET hoge huga
OK
127.0.0.1:6379> DEL hoge
(integer) 1
終了
exit

ほかにも

http://redis.shibu.jp/commandreference/

PHPのプログラムからRedisを操作する

PHPのRedis用の拡張 phpredis を導入します。

Dockerfileに以下の3行を追記します。

RUN apk add --no-cache autoconf build-base \
    && yes '' | pecl install redis \
    && docker-php-ext-enable redis

追記後の全体像はこんなかんじ https://github.com/oddmutou/jugyo-2026kyototech/blob/c55231eb9380a51beea6d84ce33d9062eb477c85/koki_01/Dockerfile

追記できたら、ビルド(docker compose build)のあと,再起動(docker compose upしなおす)してください。

ビルド&再起動できたら、PHPプログラムのなかで Redis クラスを使えるようになります。

https://github.com/phpredis/phpredis のREADMEを読んだり、自分で調べたりして、触ってみましょう。

演習1

redisを使ってアクセスカウンタを作ってみましょう。

(既存の.phpとは別のファイルにしましょう。)

動作例: http://44.220.166.232/enshu1.php

実装例: https://github.com/oddmutou/jugyo-2026kyototech/blob/4aaf4f7e0bfb7334b82553d8b9de8cf77c91d784/koki_01/public/enshu1.php

演習2

Redisで簡単な掲示板を作ってみましょう。

まずは、投稿がひとつだけしか保存されない(上書きされてしまうので古いものは消えてしまう)掲示板を作ってみましょう。

簡単なフォームを作って、POSTされてきた内容をRedisに保存すればよいです。

動作例: http://44.220.166.232/enshu2.php

実装例: https://github.com/oddmutou/jugyo-2026kyototech/blob/645458287742e27e27b43c904db9b5addfc60145/koki_01/public/enshu2.php

演習3

複数の投稿を保存できる掲示板を作ってみましょう。

ヒント: 複数の投稿内容を配列で持つようにして,保存時は配列をJSONに変換(エンコード)してからRedisに保存するとよいです。逆にRedisから読み込むときはJSONから変換(デコード)しましょう。

動作例: http://44.220.166.232/enshu3.php

実装例: https://github.com/oddmutou/jugyo-2026kyototech/blob/f0efbccf1cf94fb55fb058b05c9f3ed7e8048daf/koki_01/public/enshu3.php

追加演習

追加の演習です。物足りないひとはやってください。全体で説明は行いません。助言、解説が必要な人は授業中に個別に聞いてください。

追加演習1

演習3の掲示板に、名前欄を追加してみましょう。

追加演習2

演習3の掲示板で、投稿日時が保存、表示されるようにしてみましょう。

追加演習3

演習3の掲示板で、10件ごとのページングを実装してみましょう。

追加演習4

演習3の掲示板を、同じIPからは10秒に1回しか投稿できないようにしてみましょう。

⚠️ **GitHub.com Fallback** ⚠️