アプリケーションの実行

CodeIgniter 4 アプリケーションは、Web サーバーでのホスティング、仮想化の使用、CodeIgniter のコマンドラインツールを使用したテストなど、さまざまな方法で実行できます。このセクションでは、各手法の使用方法と、それぞれの長所と短所について説明します。

重要

ファイル名の大文字と小文字には常に注意してください。多くの開発者は、Windows や macOS の大文字と小文字を区別しないファイルシステムで開発を行っています。ただし、ほとんどのサーバー環境では、大文字と小文字を区別するファイルシステムが使用されています。ファイル名の大文字と小文字が正しくない場合、ローカルで動作するコードがサーバーで動作しません。

CodeIgniter を初めて使用する場合は、ユーザーガイドの はじめに セクションを読んで、動的な PHP アプリケーションの作成方法を学習してください。楽しんでください!

初期設定

サイト URI の設定

テキストエディタで **app/Config/App.php** ファイルを開きます。

  1. $baseURL

    ベース URL を $baseURL に設定します。より柔軟性が必要な場合は、.env ファイル内で app.baseURL = 'http://example.com/' として baseURL を設定できます。 **ベース URL には常に末尾にスラッシュを使用してください!**

    注記

    baseURL を正しく設定しないと、開発モードではデバッグツールバーが正しく読み込まれず、Web ページの表示にかなり時間がかかる場合があります。

  2. $indexPage

    サイト URI に **index.php** を含めたくない場合は、$indexPage'' に設定します。この設定は、フレームワークがサイト URI を生成するときに使用されます。

    注記

    **index.php** を含まない URL でサイトにアクセスするには、Web サーバーを設定する必要がある場合があります。 CodeIgniter の URL を参照してください。

データベース接続設定

データベースを使用する場合は、テキストエディタで **app/Config/Database.php** ファイルを開き、データベース設定を行います。または、**env** ファイルで設定することもできます。

開発モードの設定

本番サーバーでない場合は、提供されているデバッグツールを利用するために、**.env** ファイルで CI_ENVIRONMENTdevelopment に設定します。 詳細は、開発モードの設定 を参照してください。

重要

本番環境では、エラー表示やその他の開発専用の機能を無効にする必要があります。 CodeIgniter では、環境を「production」に設定することでこれを行うことができます。デフォルトでは、アプリケーションは「production」環境を使用して実行されます。 ENVIRONMENT 定数 も参照してください。

書き込み可能フォルダのパーミッション設定

Web サーバー (例:Apache または nginx) を使用してサイトを実行する場合は、プロジェクト内の **writable** フォルダのパーミッションを変更して、Web サーバーが使用するユーザーまたはアカウントが書き込みできるようにする必要があります。

ローカル開発サーバー

CodeIgniter 4 には、PHP の組み込み Web サーバーと CodeIgniter ルーティングを活用したローカル開発サーバーが付属しています。 メインディレクトリで次のコマンドラインを使用して起動できます

php spark serve

これによりサーバーが起動し、ブラウザで https://:8080 にアクセスしてアプリケーションを表示できるようになります。

注記

組み込み開発サーバーは、ローカル開発マシンでのみ使用する必要があります。 本番サーバーでは使用しないでください。

単なる localhost 以外のホストでサイトを実行する必要がある場合は、最初に **hosts** ファイルにホストを追加する必要があります。 ファイルの正確な場所は、主要なオペレーティングシステムごとに異なりますが、すべての Unix タイプのシステム (macOS を含む) では、通常、ファイルは **etc/hosts** に保存されます。

ローカル開発サーバーは、3 つのコマンドラインオプションでカスタマイズできます

  • --host CLI オプションを使用して、アプリケーションを実行する別のホストを指定できます

    php spark serve --host example.dev
    
  • デフォルトでは、サーバーはポート 8080 で実行されますが、複数のサイトを実行している場合や、既に別のアプリケーションがそのポートを使用している場合があります。 --port CLI オプションを使用して、別のポートを指定できます

    php spark serve --port 8081
    
  • --php CLI オプションを使用して、使用する PHP の特定のバージョンを指定することもできます。その値は、使用する PHP 実行可能ファイルのパスに設定します

    php spark serve --php /usr/bin/php7.6.5.4
    

Apache でのホスティング

CodeIgniter4 Web アプリは、通常、Web サーバーでホストされます。 Apache HTTP Server は「標準」プラットフォームであり、ドキュメントの多くで想定されています。

Apache は多くのプラットフォームにバンドルされていますが、Bitnami からデータベースエンジンと PHP を含むバンドルとしてダウンロードすることもできます。

メイン設定ファイルの設定

mod_rewrite の有効化

「mod_rewrite」モジュールは、URL から「index.php」を省略することを可能にし、このユーザーガイドでは有効化されていることを前提としています。

メイン設定ファイル(例:apache2/conf/httpd.conf)で、rewrite モジュールが有効になっている(コメントアウトされていない)ことを確認してください。

LoadModule rewrite_module modules/mod_rewrite.so

ドキュメントルートの設定

また、デフォルトのドキュメントルートの <Directory> 要素でも、AllowOverride 設定でこれが有効になっていることを確認してください。

<Directory "/opt/lamp/apache2/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

VirtualHost を使用したホスティング

アプリを実行するには、「バーチャルホスティング」を使用することをお勧めします。作業するアプリごとに異なるエイリアスを設定できます。

vhost_alias_module の有効化

メイン設定ファイル(例:apache2/conf/httpd.conf)で、バーチャルホスティングモジュールが有効になっている(コメントアウトされていない)ことを確認してください。

LoadModule vhost_alias_module modules/mod_vhost_alias.so

ホストエイリアスの追加

通常、Unix 系プラットフォームでは /etc/hosts、Windows では c:WindowsSystem32driversetchosts にある「hosts」ファイルにホストエイリアスを追加します。

ファイルに1行追加します。たとえば、myproject.local または myproject.test などです。

127.0.0.1 myproject.local

VirtualHost の設定

バーチャルホスティング設定ファイル(例:apache2/conf/extra/httpd-vhost.conf)内に、Web アプリ用の <VirtualHost> 要素を追加します。

<VirtualHost *:80>
    DocumentRoot "/opt/lamp/apache2/myproject/public"
    ServerName   myproject.local
    ErrorLog     "logs/myproject-error_log"
    CustomLog    "logs/myproject-access_log" common

    <Directory "/opt/lamp/apache2/myproject/public">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

上記の設定は、プロジェクトフォルダが以下のように配置されていることを前提としています。

apache2/
   ├── myproject/      (Project Folder)
   │      └── public/  (DocumentRoot for myproject.local)
   └── htdocs/

Apache を再起動します。

テスト

上記の設定では、Web アプリにはブラウザで URL http://myproject.local/ を使用してアクセスできます。

Apache の設定を変更するたびに、Apache を再起動する必要があります。

サブフォルダを使用したホスティング

サブフォルダを使用して https:///myproject/ のような baseURL を使用したい場合は、3 つの方法があります。

エイリアスの使用

htdocs が Apache のドキュメントルートである場合、プロジェクトフォルダを以下のように配置します。

├── myproject/ (project folder)
      └── public/
└── htdocs/

メイン設定ファイル(例: **apache2/conf/httpd.conf**)に以下を追加します。

Alias /myproject /opt/lamp/apache2/myproject/public
<Directory "/opt/lamp/apache2/myproject/public">
    AllowOverride All
    Require all granted
</Directory>

Apache を再起動します。

.htaccess の追加

最後の手段は、プロジェクトルートに **.htaccess** を追加することです。

プロジェクトフォルダをドキュメントルートに配置することはお勧めしません。ただし、共有サーバー上など、他に選択肢がない場合は、これを使用できます。

**htdocs** が Apache のドキュメントルートである場合、プロジェクトフォルダを以下のように配置し、**.htaccess** ファイルを作成します。

└── htdocs/
    └── myproject/ (project folder)
        ├── .htaccess
        └── public/

そして、**.htaccess** を以下のように編集します。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

<FilesMatch "^\.">
    Require all denied
    Satisfy All
</FilesMatch>

mod_userdir を使用したホスティング(共有ホスト)

共有ホスティング環境では、Apache モジュール「mod_userdir」を使用して、ユーザーごとのバーチャルホストを自動的に有効にするのが一般的です。これらのユーザーディレクトリから CodeIgniter4 を実行するには、追加の設定が必要です。

以下は、サーバーが既に mod_userdir 用に設定されていることを前提としています。このモジュールを有効にするためのガイドは、Apache のドキュメントにあります。

CodeIgniter4 は、デフォルトでサーバーが public/index.php にフレームワークのフロントコントローラーを見つけられることを想定しているため、(CodeIgniter4 がユーザーごとの Web ディレクトリ内にインストールされている場合でも)リクエストを検索するための代替手段としてこの場所を指定する必要があります。

デフォルトのユーザー Web ディレクトリ **~/public_html** は、通常 **apache2/mods-available/userdir.conf** または **apache2/conf/extra/httpd-userdir.conf** にある UserDir ディレクティブで指定されます。

UserDir public_html

そのため、デフォルトを提供する前に、CodeIgniter のパブリックディレクトリを最初に検索するように Apache を設定する必要があります。

UserDir "public_html/public" "public_html"

CodeIgniter パブリックディレクトリのオプションとパーミッションも必ず指定してください。 **userdir.conf** は次のようになります。

<IfModule mod_userdir.c>
    UserDir "public_html/public" "public_html"
    UserDir disabled root

    <Directory /home/*/public_html>
        AllowOverride All
        Options MultiViews Indexes FollowSymLinks
        <Limit GET POST OPTIONS>
            # Apache <= 2.2:
            # Order allow,deny
            # Allow from all

            # Apache >= 2.4:
            Require all granted
        </Limit>
        <LimitExcept GET POST OPTIONS>
            # Apache <= 2.2:
            # Order deny,allow
            # Deny from all

            # Apache >= 2.4:
            Require all denied
        </LimitExcept>
    </Directory>

    <Directory /home/*/public_html/public>
        AllowOverride All
        Options MultiViews Indexes FollowSymLinks
        <Limit GET POST OPTIONS>
            # Apache <= 2.2:
            # Order allow,deny
            # Allow from all

            # Apache >= 2.4:
            Require all granted
        </Limit>
        <LimitExcept GET POST OPTIONS>
            # Apache <= 2.2:
            # Order deny,allow
            # Deny from all

            # Apache >= 2.4:
            Require all denied
        </LimitExcept>
    </Directory>
</IfModule>

index.php の削除

CodeIgniter の URL を参照してください。

環境の設定

複数環境の取り扱い を参照してください。

nginx を使用したホスティング

nginx は、Web ホスティングで 2 番目に広く使用されている HTTP サーバーです。ここでは、Ubuntu Server で PHP 8.1 FPM (Unix ソケット) を使用した設定例を示します。

default.conf

この設定では、URL に「index.php」を含めずに、 「.php」で終わる URL に対しては CodeIgniter の「404 - File Not Found」を使用することが可能になります。

server {
    listen 80;
    listen [::]:80;

    server_name example.com;

    root  /var/www/example.com/public;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;

        # With php-fpm:
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        # With php-cgi:
        # fastcgi_pass 127.0.0.1:9000;
    }

    error_page 404 /index.php;

    # deny access to hidden files such as .htaccess
    location ~ /\. {
        deny all;
    }
}

環境の設定

複数環境の取り扱い を参照してください。

アプリのブートストラップ

アプリケーション全体を実行せずにフレームワークを読み込みたい場合があります。これは、プロジェクトのユニットテストに特に役立ちますが、サードパーティツールを使用してコードを分析および変更する場合にも役立ちます。フレームワークには、このシナリオ専用のブートストラップスクリプト system/Test/bootstrap.php が付属しています。

プロジェクトへのパスのほとんどは、ブートストラッププロセス中に定義されます。定義済みの定数を使用してこれらをオーバーライドできますが、デフォルトを使用する場合は、パスがインストール方法の予期されるディレクトリ構造と一致していることを確認してください。