FuelPHP 1.6.1 の Composer での依存ライブラリを含めた Zip ファイルを作成してみた

FuelPHP 1.6.1 のインストールは、公式の Zip ファイルからする場合、Zip ファイルを展開した後に composer コマンドを実行し、依存ライブラリを追加インストールする必要があります(Git が必要)。

Packagist や GitHub が落ちているとインストールが完了できません。

そこで、composer でのライブラリも含めた Zip ファイルを作成してみました。

$ unzip fuelphp-1.6.1.zip
$ cd fuelphp-1.6.1/
$ php composer.phar update
$ cd ..
$ zip -r fuelphp-1.6.1-all.zip fuelphp-1.6.1/

作成した fuelphp-1.6.1-all.zip を以下に置いておきます。

SHA1: aebf41b2e8c180a0da7d3bb785c98cb0f9eefdf0  fuelphp-1.6.1-all.zip
f1de9c85bb7e9b7ada5114ac5b37b77b  fuelphp-1.6.1-all.zip
ファイルサイズ: 2149883

2013/6/22(土) OSC2013 Nagoya で FuelPHP の BoF が開催されます

2013年6月21日、22日に名古屋で OSC2013 Nagoya が開催されます。

その中で 6/22(土) 13:00から、FuelPHPBoF があります。

BoF とは、ある特定のトピックに興味を持つ有志やユーザの集まりを言います。

去年に引き続き 2回目の BoF になります。
FuelPHP に興味のある方は、上記の OSC のサイトより参加登録の上、是非、お越しください。

FuelPHP 1.6.1 がリリースされました

[2013/10/16 追記]FuelPHP 1.7がリリースされました — A Day in Serenity (Reloaded) — PHP, FuelPHP, Linux or something

バグ修正と機能追加を含む FuelPHP 1.6.1 が 6/9 にリリースされました。通常、FuelPHP でのバージョン番号 x.y.z の z の変更はバグ修正のみなのですが、1.6.1 では開発中の 1.7 から機能がバックポートされています。

変更点の詳細は Changelog をご覧ください。

主な変更点

Auth

FuelPHP でのデータベース接続設定 〜 root のパスワードを root にしないでください

FuelPHP の設定ファイルの仕組みを理解していないブログ記事がいくつか見られ、それが拡散しているようなので解説を書いておきます。

データベース接続設定を正しくしていないために、うまく接続できず、

とりあえずmySQLのrootパスワードをrootに変えることで動いた。

さくらVPSでFuelPHPからmySQLへDB接続 | ネットビジネスで月収100万は難しくない!

とか、

configの下にある下記dir
・development
・production
・staging
・test
を削除したら動いたらしい。

FuelPHP DB接続(さくらスタンダード) | 亀のよーにのろのろと
[FuelPHP] DB接続でちょっとハマる | suka4's memo

上記のように FuelPHP の設定ファイルを配置する app/config フォルダ内の、環境別の設定ファイルを配置するフォルダを強引に削除してしまうとか、そういう内容の記事がありました。

これらはすべて正しくない対処法です。

FuelPHP の設定ファイルの仕組み

環境 - 概要 - FuelPHP ドキュメント に書いてある通りですが、FuelPHP では複数の環境のために複数の設定ファイルを使えるようになっています。

データベース接続設定で言うと、通常、本番環境でのデータベースは開発環境でのデータベースとは異なり、サーバ名や ID/Password も違います。なので、本番環境用と開発環境用の 2つの設定ファイルは最低限必要になるはずです。これが同じで 1つしかないという場合は、その開発環境自体が間違っています。

そこで、FuelPHP では、app/config フォルダ内に、環境別のフォルダを用意して設定ファイルを作成できるようになっています。

また、設定は app/config フォルダにあるものが先に読み込まれ、環境別のフォルダ内のものが後から読み込まれ、同じ設定項目があれば上書きされます。

なので、以下のように設定を記述します。

app/
  config/
    db.php         <--- 共通するデータベース接続設定(データベースドライバの指定など)
      development/
        db.php     <--- 開発環境に固有のデータベース接続設定(ホスト名、ID/Passwordなど)
      production/
        db.php     <--- 本番環境に固有のデータベース接続設定(ホスト名、ID/Passwordなど)

(11:19 追記)FuelPHP 1.6 では、app/config/db.php は空の配列を返すようになっています。実は、設定ファイルは app/config フォルダ以外に fuel/core/config フォルダにも存在しており、app/config 以下の設定より先に core/config 以下のものが読み込まれます。core/config 以下の設定を変更したい場合は、core/config 以下にある設定ファイルを app/config 以下にコピーして変更します。

データベース接続設定のように、環境別に異なる必要性がない設定もありますが、その場合は、app/config フォルダ直下にのみその設定ファイルを配置して、環境別のフォルダ内には同名の設定ファイルが存在しなければ OK です。ほとんどの設定ファイルはデフォルトでそういう状態になっています。

環境の指定方法

環境別に設定ファイルを複数使えることはわかったと思いますが、動作している FuelPHP が、どの環境モードで動作するかは、環境変数 FUEL_ENV で指定できます。指定がない場合のデフォルトは開発環境(development)です。

通常は、Apache.htaccess で指定します。

(11:38 追記)環境変数が指定できない/したくない、という場合は、fuel/app/bootstrap.php のコードを書き換えて好きなように、例えば、$_SERVER['SERVER_NAME'] で変更するとか、設定してください。例えば、さくらのレンタルサーバでは .htaccess環境変数 FUEL_ENV を指定することはできません。

FuelPHP DB::query() の使い方 〜 SQL クエリタイプの指定

FuelPHP+MySQLでSHOWコマンドの結果を取得 - BTT's blog に DB::query() だと、SHOW PROCESSLIST や SHOW WARNINGS などの SHOW コマンドの結果が取れないという記述がありました。

これは、DB::query() の第2引数に適切な SQL クエリタイプを指定していないためです。

<?php
class Controller_Db extends Controller
{
	public function action_index()
	{
		Debug::$js_toggle_open = true;
		
		$result = DB::query('SHOW PROCESSLIST');
		Debug::dump($result);
		Debug::dump($result->execute());
		
		$result = DB::query('SHOW PROCESSLIST', DB::SELECT);
		Debug::dump($result);
		Debug::dump($result->execute());
	}
}

最初の DB::query('SHOW PROCESSLIST') の場合は、

APPPATH/classes/controller/db.php @ line: 9

Variable #1:
  (Object #20): Fuel\Core\Database_Query &#8629;

    protected _type : null
    protected _lifetime : null
    protected _cache_key : null
    protected _cache_all (Boolean): true
    protected _sql (String): "SHOW PROCESSLIST" (16 characters)
    protected _parameters (Array, 0 elements)
    protected _as_object (Boolean): false


APPPATH/classes/controller/db.php @ line: 10

Variable #1:
  (Integer): 1

_type が null となっており、結果は件数しか取得できません。

一方、次の DB::query('SHOW PROCESSLIST', DB::SELECT) の場合は、

APPPATH/classes/controller/db.php @ line: 13

Variable #1:
  (Object #27): Fuel\Core\Database_Query &#8629;

    protected _type (Integer): 1
    protected _lifetime : null
    protected _cache_key : null
    protected _cache_all (Boolean): true
    protected _sql (String): "SHOW PROCESSLIST" (16 characters)
    protected _parameters (Array, 0 elements)
    protected _as_object (Boolean): false


APPPATH/classes/controller/db.php @ line: 14

Variable #1:
  (Object #37): Fuel\Core\Database_Result_Cached &#8629;

    protected _query (String): "SHOW PROCESSLIST" (16 characters)
    protected _result (Array, 1 element) &#8629;
         0 (Array, 8 elements) &#8629;
             Id (String): "9" (1 characters)
             User (String): "root" (4 characters)
             Host (String): "localhost" (9 characters)
             db (String): "fuel_dev" (8 characters)
             Command (String): "Query" (5 characters)
             Time (String): "0" (1 characters)
             State : null
             Info (String): "SHOW PROCESSLIST" (16 characters)
    protected _total_rows (Integer): 1
    protected _current_row (Integer): 0
    protected _as_object (Boolean): false

_type が 1 となり、結果セットが取得できていることがわかります。


なお、FuelPHP 1.6 のドキュメントは、「タイプが渡されない場合、初期値は DB::SELECT となり」となっていますが、この記述は少々間違っているようです。

本家 1.7 のドキュメントを修正する PR 送信し、マージされました。

FuelPHP 1.6 の Composer での依存ライブラリを含めた Zip ファイルを作成してみた

FuelPHP 1.6 のインストールは、公式の Zip ファイルからする場合、Zip ファイルを展開した後に composer コマンドを実行し、依存ライブラリを追加インストールする必要があります(Git が必要)。

Packagist や GitHub が落ちているとインストールが完了できません。

そこで、composer でのライブラリも含めた Zip ファイルを作成してみました。

$ unzip fuelphp-1.6.zip
$ cd fuelphp-1.6/
$ php composer.phar update
$ chmod o+r public/.htaccess
$ cd ..
$ zip -r fuelphp-1.6-all.zip fuelphp-1.6/

作成した fuelphp-1.6-all.zip を以下に置いておきます。

SHA1: ff286cb03bcb5ba23c4ffaf99f257cab465f5e68  fuelphp-1.6-all.zip
MD5: c10804f0db52fe6a5a21d6485ac1cfdd  fuelphp-1.6-all.zip
ファイルサイズ: 2758780

「FuelPHP 1.6 翻訳ウィーク」を開催します

FuelPHP 1.6 がリリースされたことに伴い、この機会に「公式ドキュメント」の翻訳を進めるため、5/27 から「FuelPHP 1.6 翻訳ウィーク」を開催します。

翻訳ウィークとは何か?

翻訳ウィークは、翻訳をみんなで集中的に進める 1週間です。

FuelPHP の公式ドキュメントの翻訳は有志が任意に自発的に進めているもので、期限などもなく、ややもすると停滞してしまいます。そこでメリハリをつけ、翻訳を進めるために翻訳ウィークを新しいバージョンがリリースされるごとに行っています。

今回は、二度目の翻訳ウィークですが、全ドキュメントの翻訳を完了できる可能性があります。FuelPHP の公式ドキュメントの翻訳は、バージョン 1.2 の頃から進められていますが、未だ完了したバージョンはありません。翻訳が完了すれば歴史的な偉業です!

翻訳ウィークに参加すると何かいいことがあるのか?

私が考えるところ、参加者には以下のメリットがあると思います。

  • GitHub に慣れることができる。GitHubリポジトリに Pull Request を送るかたちで翻訳は進められますので、参加することで GitHub に慣れることができます。
  • FuelPHP 力がアップする。FuelPHP は軽量フレームワークですが、それでも知らない機能やメソッドなどは誰にでもあります。特に新機能については多くの人が知らないことが多いです。ドキュメントをじっくり見ることになるので、必ず何らかの発見があるはずです。
  • 英語力が少しはアップする。英語のドキュメントを翻訳するので、英語での言い回しなどに触れることになり、英語力も少しはアップすることでしょう。
  • CREDITS ファイル に名前を載せることができるので、もしかしてカッコいいかも (w

何故、翻訳ウィークをするのか?

翻訳に気軽に参加する人を増やすためです。

目指しているのは、100人で 1人が数行ずつ翻訳すれば翻訳が完了するというような世界です。

オープンソースプロダクトの翻訳に参加している人は非常に少ないです。恐るべき数のユーザがいるあの WordPress でさえ、10人程度と聞きました。

多くのプロジェクトでは 1人か 2人、あるいは数人ですべて翻訳しているということも珍しくありません。プロ並の翻訳力のある人がやっている間は 1人でも対応できますが、そういう人が何らかの理由で翻訳できなくなると、すぐに破綻してしまう可能性があります。いわゆるトラックナンバーが 1 とか 2 とかそういう世界です。

対して、FuelPHP のドキュメント翻訳で目指しているのは、多くの人で少しずつ翻訳することでまわっていくというモデルです。自分も少し翻訳に参加することで、ドキュメントがすべて日本語で読めるという世界です。幸い、前回の翻訳ウィークには 13人が参加しました。まだまだ少ないですが、数人という規模からは脱出しています。

ということで、FuelPHP ユーザの方、FuelPHP を今後使ってみようと考えている方は、お気軽にご参加ください。GitHub アカウントとブラウザとインターネット接続さえあれば、参加することができます。