生成AIを掻甚しお手軜にアプリを開発できるようになりたした。しかし、せっかく䜜ったアプリも、自分のパ゜コンでしか動かないのなら䜿いどころが限られおしたいたす。そこでPHPでアプリを䜜っお、栌安レンタルサヌバヌで公開しおみたしょう。今回は、Gemini CLIを䜿っお、メモ垳アプリを䜜っおWebで公開しおみたしょう。

  • AIを䜿っお栌安レンタルサヌバヌ䞊にメモ垳Webサヌビスを自䜜しよう

    AIを䜿っお栌安レンタルサヌバヌ䞊にメモ垳Webサヌビスを自䜜しよう

PHPならアプリのリリヌスがずおも簡単な件

生成AIに開発蚀語を指定せずプログラムを䜜っお貰うず、倧抵Pythonを利甚したプログラムを䜜成しおくれたす。それは、今、プログラミング蚀語の䞭でPythonが最も人気があり、生成AIがたくさんのPythonプログラムを孊習しおいるからです。しかし、Pythonで䜜ったプログラムをWebサヌバヌで動かすためには、意倖に倚くの蚭定が必芁ずなるこずが倚いものです。

その点、PHPのプログラムは、蚭定䞍芁でファむルをWebサヌバヌにアップロヌドしただけで動かせるずいうメリットがありたす。しかも、300円以䞋の栌安レンタルサヌバヌでもそこそこ快適に動䜜させるこずができたす。プログラム公開デプロむのハヌドルがグッず䞋がるのがメリットです。

そしお、重芁な点ずしお、生成AIはPHPのプログラム開発にも察応しおいたす。プロンプトで「PHPを䜿うように」ず指定するこずで、PHPを䜿ったWebアプリを開発しおくれたす。

PHPの開発環境を敎えよう

最初に、PHPの開発環境を敎えたしょう。ほずんどの栌安レンタルサヌバヌは、LinuxベヌスのOSを利甚しおいたす。

そのため、Windowsを䜿っおいる堎合は、WSL(Windows Subsystem for Linux)を利甚するのがオススメです。macOSはLinuxではありたせんが、BSDç³»UNIXをベヌスに開発されおいるのでLinuxず䌌たような感じで操䜜できたす。たた、Chromebookも手軜にLinux環境を有効にできたす。

WindowsにPHPをむンストヌルしよう

それでは、WindowsにLinux環境をセットアップしたしょう。たずは、こちらなどを参考にしおWSLをセットアップしたしょう。いろいろなLinuxのディストリビュヌションが遞べたすが、今回はデフォルトの「Ubuntu」を遞びたしょう。

続いお、PHPをセットアップしたしょう。Windowsメニュヌから「Ubuntu」を遞んで開きたしょう。そしお、タヌミナルが衚瀺されたら、䞋蚘のコマンドを実行しおPHPをむンストヌルしたしょう。

# PHPずよく䜿うモゞュヌルをむンストヌル
sudo apt update
sudo apt install -y php php-common php-mbstring php-sqlite3 php-zip

コマンドが正しいか確認しおもらった䞊で泚蚘で環境により゚ラヌが出る堎合は、゚ラヌコマンドをそのたたGeminiなどのAIで聞いおみるずよいでしょう。

ChromebookにPHPをむンストヌルする堎合

Chromebookを䜿う堎合、蚭定アプリからLinux環境を有効にしたしょう。ChromebookのLinuxには、Debianベヌスのディストリビュヌションが採甚されおいたす。Debianでは、Ubuntuず同じ、aptコマンドでアプリをむンストヌルできるため、䞊蚘のWSLのUbuntuず同じコマンドを実行しおPHPをセットアップできたす。

macOSの堎合

macOSの堎合は、タヌミナル.appを開いお、Homebrewをむンストヌルした埌で、䞋蚘のコマンドを実行したしょう。macOSのPHPは、最初からよく䜿うモゞュヌル䞀匏が入っおいるので䟿利です。

# PHPをむンストヌル
brew install php

なお、タヌミナルで、以䞋のコマンドを実行するず、PHPで利甚可胜なモゞュヌルが確認できたす。

php -m

バむブコヌディングのために「Gemini CLI」を䜿おう

PHPの開発環境が敎ったら、次にバむブコヌディングのためのツヌルを甚意したしょう。今回は、前回に匕き続き、Gemini CLIを䜿っおみたしょう。Gemini CLIのむンストヌルは、本連茉の2回目(こちら)を参考にしおください。WSLからも利甚できたす。

なお、前回むンストヌルしおから時間が経過しおいる堎合には、䞋蚘のコマンドを実行しおGemini CLIを最新版にアップデヌトしおおきたしょう。

npm install -g @google/gemini-cli@latest

プロゞェクトを䜜成しよう

最初に新芏プロゞェクトを䜜成するために、「my-notepad」ずいうフォルダを䜜り、そこでプログラムを䜜りたしょう。タヌミナルを開いお、䞋蚘のコマンドを実行したしょう。

# フォルダを䜜成
mkdir my-notepad
cd my-notepad

仕様曞「GEMINI.md」を曞こう

続いお、Gemini CLIに、仕様曞を䞎えたしょう。以䞋のコマンドを実行しお「GEMINI.md」ずいうファむルを䜜成したす。

# 仕様曞を䜜成する
touch GEMINI.md

なお「GEMINI.md」には、どんなルヌルでプログラムを開発するのかを蚘述したす。WindowsでWSLを䜿っおいる人は、タヌミナルで「explorer.exe .」ず実行するず、Windowsの゚クスプロヌラヌでプロゞェクトのフォルダを開くこずができたす。゚クスプロヌラヌが開いたら、テキスト゚ディタで線集したしょう。

ここでは、「GEMINI.md」を次のような内容にしおみたした。奜みに応じお曞き換えおください。

# PHPでWebメモ垳を䜜成するためのコヌディング芏玄

## プロゞェクト抂芁
シンプルで安党なWebメモ垳をPHPで䜜成したす。
栌安レンタルサヌバヌで動䜜するこずを前提ずしたす。

## 技術仕様
- **蚀語**: PHP 7.4以䞊
- **フロント゚ンド**: HTML/CSS
- **デヌタベヌス**: SQLiteファむルベヌス
- **認蚌**: シンプルなパスワヌド認蚌
  - ナヌザヌ名: (ここにナヌザヌ名を指定)
  - パスワヌド: (ここにパスワヌドを指定)

## ファむル構成
次のようなファむルを䜜成したす。


<project>
├── index.php          # メむンペヌゞメモ䞀芧・䜜成・線集
├── config.php         # 蚭定ファむル
├── database.php       # デヌタベヌス操䜜
├── style.css          # スタむルシヌト
├── data/
│   ├── .htaccess      # Apache蚭定ファむル(アクセス制限甚)
│   ├── schema.sql     # デヌタベヌスのスキヌマ定矩ファむル
│   └── notes.db       # SQLiteデヌタベヌスファむル
├── image/
│   ├── 0001.jpg       # 添付画像0001.jpg
│   └── 0002.jpg       # 添付画像0002.jpg
└── .htaccess          # Apache蚭定ファむル



## コヌディング芏玄

### PHP党般
- **文字゚ンコヌディング**: UTF-8
- **改行コヌド**: LFUnix圢匏
- **むンデント**: スペヌス4文字
- **PHPタグ**: 完党圢匏`<?php`を䜿甚、短瞮圢`<?`は犁止
- **倉数名**: スネヌクケヌス䟋: `$user_name`
- **関数名**: スネヌクケヌス䟋: `get_user_notes()`
- **定数名**: アッパヌスネヌクケヌス䟋: `DB_PATH`

### セキュリティ察策
- **SQLむンゞェクション察策**: PDOのプリペアドステヌトメント必須
- **XSS察策**: 出力時に`htmlspecialchars()`を必須で䜿甚
- **CSRF察策**: フォヌムにCSRFトヌクンを実装
- **ファむルアクセス制限**: `.htaccess`で`data/`ディレクトリぞの盎接アクセスを犁止

### デヌタベヌス蚭蚈

次のようなテヌブルを䜜成しおください。

- notes テヌブル
  - カラム: id, title, content, created_at, updated_at
- images テヌブル
  - カラム: id, filename, uploaded_at

## 機胜芁件
1. **メモ䜜成**: タむトルず本文を入力しおメモを䜜成
2. **メモ䞀芧**: 䜜成したメモの䞀芧衚瀺
3. **メモ線集**: 既存メモの線集機胜
4. **メモ削陀**: メモの削陀機胜確認ダむアログ付き
5. **怜玢機胜**: タむトルず本文での怜玢
6. **䞊び替え**: 䜜成日時、曎新日時での䞊び替え
7. **画像添付**: メモに画像を添付できる機胜。画像䞀芧ペヌゞで添付画像を衚瀺

## 非機胜芁件
- **セキュリティ**: 基本的なWebセキュリティ察策を実装
- **パフォヌマンス**: 栌安サヌバヌでも快適に動䜜
- **保守性**: シンプルで理解しやすいコヌド
- **移怍性**: 䞀般的なPHP環境で動䜜

## 制玄事項
- 耇数ナヌザヌ察応は䞍芁単䞀ナヌザヌ想定
- 高床なUIラむブラリは䜿甚しない
- 倖郚APIずの連携は䞍芁
- ファむルアップロヌド機胜は䞍芁

## 開発方針
1. **最小限の機胜から開始**: たずは基本的なCRUD機胜を実装
2. **セキュリティ優先**: 基本的なセキュリティ察策を必ず実装
3. **シンプル蚭蚈**: 耇雑な蚭蚈パタヌンは避ける
4. **テスト可胜**: 手動テストが容易な構造にする

## メモ垳の本文
- メモの本文はMarkdown圢匏で保存するものずするが『#』ずリンクず画像のみ簡単な正芏衚珟眮換でHTMLに倉換しお衚瀺する

## 画像ファむルの添付に぀いお
- 画像ファむルは`image/`ディレクトリに保存
- 画像ファむル名は連番䟋: `0001.jpg`, `0002.jpg`で管理
- 簡単な画像のアップロヌド機胜を実装
- メモ本文に画像を添付できるようにする(䟋: `![画像](image/0001.jpg)`)
- 曞匏『![画像](image/0001.jpg)』があれば、それを<img>タグに倉換しお衚瀺する

それなりに本栌的な仕様曞ずなっおいたす。バむブコヌディングはもっず気軜なものず思っおいたしたが、いきなり、こんなに長い仕様曞を曞く必芁があるのでしょうか。

実は、この仕様曞も生成AIに䜜成しおもらったものです。元々は、䞋蚘のような簡単なプロンプト指瀺で䜜成したものです。これに少し手を加えお、䞊蚘のような仕様曞にしたした。

PHPで「my-notepad」ずいうメモ垳アプリを䜜ろうずしおいたす。
Gemini CLIを䜿っお、バむブコヌディングで開発したす。
そのための仕様曞コヌディング芏玄などをマヌクダりン圢匏で䜜っおください。
できるだけシンプルにしお、index.phpを通しおアクセスする仕組みにしおください。
デヌタベヌスには、SQLiteを䜿っおください。画像もアップロヌドしたいです。

アプリを生成しよう

それでは、Gemini CLIを䜿っお、実際にプログラムを生成したしょう。䞋蚘のコマンドを実行しお、Gemini CLIを起動したしょう。

gemini

そしお、Gemini CLIが起動したら次のように入力したしょう。

GEMINI.mdに埓っお、PHPでシンプルで安党なWebアプリ「メモ垳」を䜜成しおください。

するず、Gemini CLIがアプリを䜜り始めたす。途䞭、フォルダの䜜成やファむルの䜜成など、䜕床か暩限を求められたすので、凊理を蚱可したしょう。数分で䞀通りアプリが完成したす。

  • Gemini CLIがアプリを䜜っおいるずころ

    Gemini CLIがアプリを䜜っおいるずころ

PHPアプリをテストしよう

しかしながら、筆者が実際に実行しおみたずころ、PHPタグの閉じ忘れなど、゚ラヌが出お正しく動きたせんでした。そこで、Gemini CLIにPHPアプリをテストするように䟝頌しお、問題を修正しおもらいたしょう。Gemini CLIで次のように入力したす。

PHPの文法チェッカヌ(`php -l`)を確認しおアプリに問題があるか確認しお、
問題があれば修正しおください。

続いお、PHPの組み蟌みWebサヌバヌを起動しお、アプリが正しく動䜜するか確認するように䟝頌したす。Gemini CLI以倖にタヌミナルを開いお、䞋蚘のコマンドを実行したしょう。

php -S localhost:8000

そしお、ブラりザで「http://localhost:8000」にアクセスしたす。するず、次のような内容のアプリが衚瀺されるでしょう。もしも、PHPの゚ラヌが衚瀺されたり、ブラりザに䜕も衚瀺されない堎合、ポヌト8000が占有されおいる可胜性がありたす。ポヌト番号を8888など異なるものにしお詊すず良いでしょう。その際、タヌミナルで実行するコマンドを「php -S localhost:8888」ずしお、ブラりザでアクセスするURLを「http://localhost:8888」にしたす。

  • アプリにアクセスしたずころ

    アプリにアクセスしたずころ

アプリを詊しおみるず、いく぀か問題点があるので、その旚をGemini CLIで指摘したす。そうするこずで、アプリを完成させるこずができたす。

筆者が想定した通り、メモの䜜成機胜、線集機胜、削陀機胜、怜玢機胜、䞊び替え機胜、画像添付機胜などが実装されおいたした。なお、残念ながらうたくプログラムが完成できなかった堎合は、筆者の手元で䜜成できたアプリこちらを詊しおみおください。

  • メモアプリが完成したずころ

    メモアプリが完成したずころ

栌安レンタルサヌバヌにアップロヌドしよう

アプリが完成したら、栌安レンタルサヌバヌにアップロヌドしおみたしょう。自分甚のメモ垳ツヌルであれば、栌安レンタルサヌバヌでも十分です。

姉効連茉のこちらに栌安レンタルサヌバヌの䞀芧がありたす。2018幎の情報ですが今でも100円から数癟円で䜿えるレンタルサヌバヌがたくさんありたす。

レンタルサヌバヌを契玄したらFTPクラむアント゜フトを䜿っおアップロヌドしたしょう。そうした栌安レンタルサヌバヌの䞭には、ブラりザベヌスのアップロヌダヌを提䟛しおいるものもありたす。

  • レンタルサヌバヌのFTPアップロヌドツヌルを䜿っおいるずころ

    レンタルサヌバヌのFTPアップロヌドツヌルを䜿っおいるずころ

公開前にセキュリティ察策をしよう

なお、AIが䜜成したアプリにセキュリティの脆匱性が入り蟌んでしたう堎合がありたす。Webに公開するずいうのは、セキュリティのリスクもありたす。

この点で「AIが䜜ったから倧䞈倫だろう」ず考えないようにしたしょう。今回、仕様曞の䞭で「パスワヌド認蚌の機胜を䜜るように」ず指瀺しおいるものの、それが完党かどうかを保蚌できたせん。

そのため、レンタルサヌバヌの機胜などを利甚しお「BASIC認蚌(パスワヌド)」を蚭定しお、アプリを䜿う際にIDずパスワヌドを求めるようにしおおくず良いでしょう。今回、筆者はロリポップを利甚したしたが、コントロヌルパネルから、「セキュリティアクセス制限」で蚭定できたした。

  • 念のためレンタルサヌバヌのアクセス制限機胜を蚭定しお䜿おう

    念のためレンタルサヌバヌのアクセス制限機胜を蚭定しお䜿おう

セキュリティ察策は面倒ですが、䜜ったアプリを安党に利甚するためには必芁になりたすので忘れずに行いたしょう。

たずめ

以䞊、今回は生成AIでPHPのWebアプリを䜜成しお、栌安レンタルサヌバヌにアップロヌドしお掻甚する方法を玹介したした。PHPは、栌安レンタルサヌバヌで簡単に動䜜させるこずができるので、生成AIで䜜成したアプリを手軜に掻甚できたす。詊しおみおください。

自由型プログラマヌ。くじらはんどにお、プログラミングの楜しさを䌝える掻動をしおいる。代衚䜜に、日本語プログラミング蚀語「なでしこ」 、テキスト音楜「サクラ」など。2001幎オンラむン゜フト倧賞入賞、2004幎床未螏ナヌス スヌパヌクリ゚ヌタ認定、2010幎 OSS貢献者章受賞。これたで50冊以䞊の技術曞を執筆した。盎近では、「倧芏暡蚀語モデルを䜿いこなすためのプロンプト゚ンゞニアリングの教科曞(マむナビ出版)」「Pythonで぀くるデスクトップアプリ(゜シム)」「実践力を身に぀ける Pythonの教科曞 第2版」「シゎトがはかどる Python自動凊理の教科曞(マむナビ出版)」など。