CodeIgniter4 を 1分でインストールする

CodeIgniter4 の変更により、しばらくの間 codeigniter-composer-installer でうまく CodeIgniter4 がインストールできない状態が続いていました。

しかし、ひとまず動くようになりましたので、今日は、CodeIgniter4 を 1分でインストールしてみようと思います。

要件

  • PHP 7.1 以上、そして intl 機能拡張
  • composer コマンド

インストール

さて、composer コマンドでインストールを実行します。

$ composer create-project kenjis/codeigniter-composer-installer:4.x-dev codeigniter4
Installing kenjis/codeigniter-composer-installer (4.x-dev dc0500b2a359f0a1ea82d679cd652072ea5382f1)
  - Installing kenjis/codeigniter-composer-installer (4.x-dev dc0500b): Cloning dc0500b2a3 from cache
Created project in codeigniter4
Loading composer repositories with package information
Reading composer.json of codeigniter4/framework (revert-1105-fix/bug-where-you-cReading composer.json of codeigniter4/framework (testing)                       Updating dependencies (including require-dev)            
Package operations: 5 installs, 0 updates, 0 removals
  - Installing kint-php/kint (2.2): Loading from cache
  - Installing paragonie/random_compat (v9.99.99): Loading from cache
  - Installing paragonie/sodium_compat (v1.6.3): Loading from cache
  - Installing zendframework/zend-escaper (2.6.0): Loading from cache
  - Installing codeigniter4/framework (dev-develop 1747c01): Cloning 1747c01989 from cache
paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.)
paragonie/sodium_compat suggests installing ext-libsodium (PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.)
Writing lock file
Generating autoload files
Do you want to remove the existing VCS (.git, .svn..) history? [Y,n]? 
> Kenjis\CodeIgniter\Installer::postInstall
Loading composer repositories with package information
Reading composer.json of codeigniter4/framework (revert-1105-fix/bug-where-you-cReading composer.json of codeigniter4/framework (testing)                       Updating dependencies (including require-dev)            
Nothing to install or update
Writing lock file
Generating autoload files
==================================================
CodeIgniter4 was installed.
If you want to know about this installer, see <https://github.com/kenjis/codeigniter-composer-installer/tree/4.x>.
==================================================

はい、できました。簡単ですね。

ビルトインサーバの起動

開発用のビルトインサーバを起動してみましょう。

$ cd codeigniter4/
$ bih/server.sh
CodeIgniter CLI Tool - Version 4.0-dev - Server-Time: 2018-07-21 07:07:41am

CodeIgniter development server started on http://localhost:8080
Press Control-C to stop.

サーバが起動しました。

Welcome ページの表示

ブラウザで http://localhost:8080/ にアクセスしてみましょう。

Welcome ページが表示されました!

右下の CodeIgniter のアイコンを押して、デバッグツールバーの情報を見てみましょう。

まとめ

  1. CodeIgniter4 はコマンド一発で、1分でインストールできます。
  2. CodeIgniter4 はかなりの機能がすでに実装されており、本番環境に導入することを検討してもいい段階に来ています。
  3. CodeIgniter4 は軽いぞ。インストールするとプロジェクトフォルダの容量は 46MB (ドキュメント、テストコード込)でした(内、29MBは .git)。

参考

Tags: codeigniter4, codeigniter

モブプログラミングのやり方で私が重要だと思うこと

他のプラクティスと同じくモブプログラミングに関しても、たった1つの正しいやり方というものはないと思います。

チームの状況や目的により、やり方は変わってくるでしょう。

とはいえ、非常に重要なポイントというものも存在し、もしそれを破るなら、それ相応の理由が必要というものもあるかと思います。

今日は、1か月以上フルにモブプログラミングをしてみて、今、私が最も重要だと思っているモブプログラミングのやり方に関することを書きたいと思います。

ドライバーをタイピストにする

通常、モブプログラミングでもキーボードを持つ人は「ドライバー」と呼ばれます。

ドライバーは運転手で、これは車の運転のメタファーです。通常は、ドライバーは自分の行きたい場所に自分で運転して行くことができます。

プログラミングでも同じく、ドライバーは自分の考えたコードを自由に入力できます。

このようなモブプログラミングのスタイルもありえるとは思いますが、もっとよい方法があります。

それが、ドライバーをタイピストにする方法です。

タイピストは考えない

タイピストの役割はタイプするだけです。原稿は別の人が考えます。

モブプログラミングでは、ナビゲーターがどう実装するかを考えます。タイピストはナビゲーターの指示をコードに翻訳します。自分で勝手に考えてコードを書き進めてはいけません。

タイピストは、ナビゲーターの指示が理解できればコードをタイプします。理解できなければ、コードが入力できるようになるまで質問します。

ナビゲーターが考え指示する

ナビゲーターがどう指示するかは、タイピストの理解できるレベル(スキル)によりますが、タイピストが理解できる最も高い抽象度で指示を与えることが理想です。

高い抽象度の指示が理解できなければ、より抽象度を下げて指示をします。

タイピストのスキルが低ければ、最終的に、

「x行目の上に何々を入力して…」 「y行目をコピーして、z行目の上にペーストして…」 「どこどこを選択して、ctlキーとcキーを同時に押して…」

のような指示になるかも知れません。

何がいいのか?

この方法だと、あるアイデアがコードになるために、必ず、他人を通す必要があります。ナビゲーターがタイピストに言葉や図などで実装方法を説明しなければなりません。

タイピストを含む他のメンバーは必ず、その説明を聞くことになります。

チーム全員のコードや設計についての理解度が向上し、レビューの質も高まります。

ドライバーが勝手にコードを書いて、他のメンバーは見ているだけ。さらに見ているだけで実はよく理解できていなかったというが、モブプログラミングでのアンチパターンです。

そのようなアンチパターンを自動的に防いでくれるのがこのスタイルです。

また、タイピストはキーボードが打てさえすれば誰でもできます。例えば、使っている言語をよく知らない人でもタイピストをすることは可能です。

コードが実装された後

タイピストは基本的にナビゲーターの指示をコードにするだけですが、一区切りのコードが実装された後になっても、そのコードが理解できない場合は、ナビゲーターに質問する必要があります。

タイピストもモブの一部です。役割を交代すればナビゲーターになります。よく理解できずに言われたままにタイプすることもあるでしょうが、それは好ましいことではありません。

まして、コードが完成した後も理解できないままなら、モブプログラミングの意義は相当薄れます。そのような状態は放置すべきではありません。

タイピストだけど実装したいアイデアがある

タイピストは勝手にコードを実装してはいけません。もし、こう実装すべきだというアイデアがある場合は、次の人に交代し自分はナビゲーターになります。

まとめ

  • ナビゲーターはどう実装するかをタイピストに指示する
  • タイピストは考えない
  • タイピストは指示をコードに翻訳する

Tags: mobbing

CodeIgniter 3.xのForm validationで知っておいたほうがいいかも知れないこと

1. CallbackはControllerでしか定義できない

検証ルールをメソッドに定義するCallbackと呼ばれる方法は、Controllerでしか使えません。つまり、Modelに検証メソッドを定義する場合には使えません。

2. Callableにパラメータを渡す方法は用意されていない

Callbackではパラメータをcallback_foo[bar]のように渡すことができます。

If you need to receive an extra parameter in your callback method, just add it normally after the method name between square brackets, as in: callback_foo[bar], then it will be passed as the second argument of your callback method.
https://www.codeigniter.com/userguide3/libraries/form_validation.html#callbacks-your-own-validation-methods

しかし、Callableではパラメータを渡す方法は用意されていません。

パラメータを渡したい場合は、クロージャを使うことを検討してください。

3. Callback/Callableは最優先で検証される

検証ルールは定義した順番で実行されると思うかも知れませんが、実は違います。Callback/Callableが最優先で実行され、その後、requiredが検証されます。

"Callbacks" are given the highest priority (always called), followed by 'required' (called if callbacks didn't fail), and then every next rule depends on the previous one passing.
https://github.com/bcit-ci/CodeIgniter/blob/develop/system/libraries/Form_validation.php#L505

4. set_data()は検証ルールを定義する前に実行する必要がある

$_POST以外のデータを検証する際に使うset_data()は、set_rules()を呼び出す前に実行しなければなりません。

You have to call the set_data() method before defining any validation rules.
https://www.codeigniter.com/userguide3/libraries/form_validation.html#validating-an-array-other-than-post

まとめ

  1. CallbackはControllerでしか定義できない
  2. Callableにパラメータを渡す方法は用意されていない
  3. Callback/Callableは最優先で検証される
  4. set_data()は検証ルールを定義する前に実行する必要がある

参考

Tags: codeigniter