FuelPHPを試してみる

PHP始める宣言をしてみたので手始めにFuelPHPを試してみる

FuelPHPとは

f:id:syguer:20131119235625p:plain

日本版公式

特徴として以下の様なものが挙げられている

  • An (H)MVC framework
    MVCを通り越してHMVCのフレームワークらしい
    HMVCってなにさ?と思ってぐぐってみたところ、Hierarchical Model View Controllerの略らしい
    日本語訳的には階層化されたMVCとか。日本語ドキュメント少ないから新しい概念なのかな
    ここ見た感じだと、現在の一般的なMVCフレームワークではリクエストに対してControllerを呼び出して…ってところの処理をフレームワークのルーターが担当するけど、それを自分でできる感じらしい
    「それだけじゃないぜ!俺達はそれに加えてviewmodelも提供するぜ!」とも言ってる
    この辺はよく知らんので面白そう

  • Modular and extendable to a fault
    coreパッケージのクラスのほとんどが容易に拡張可能とのこと

  • Oil: the power of the command line
    Railsでお馴染みのScaffoldが使えるとのこと
    ORMもついてるようで、もはやこの辺は用意してて当然のスタンスですね

インストール

以下のコマンドでコマンドラインツールのoilがインストールされる

$ curl get.fuelphp.com/oil | sh

createでアプリ作成

$ oil create hoge

ここから色々パッケージ落としてきて結構時間かかる

作成の最後で警告が出た

Error - date_default_timezone_get(): It is not safe to rely on the system's timezone settings. 
You are *required* to use the date.timezone setting or the date_default_timezone_set()
 function. In case you used any of those methods and you are still getting this warning, you
 most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but
 please set date.timezone to select your timezone. in COREPATH/classes/fuel.php on line 161

タイムゾーンUTCで指定してるから、自分のタイムゾーンにしてねって感じかな
ちなみにこのエラーは誰が出してるんだろう?とりあえずErrorといいつつインストールはコケないのでスルーする

動かしてみる

とりあえずMacにデフォルトでApacheが入っているようなので、設定を見てみると/private/etc/apache2/httpd.confが設定ファイルになっているようなので中を見てみる

DocumentRoot "/Library/WebServer/Documents"

となっているので、ここの下に置けばとりあえずアクセウできるはず
ほんとはここをアプリ置いてあるとことかにすればいいと思うけど、とりあえずこのままで

ブラウザでアクセスしてみると、

f:id:syguer:20131120005533p:plain

こいつはさっきインストールの時にでてたやつじゃねーか。。まんどくせ

さっきoilコマンドで作ったディレクトリは以下のようになっていると思う

.
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE.md
├── README.md
├── TESTING.md
├── composer.json
├── composer.lock
├── composer.phar
├── docs
│   ├── assets
│   ├── classes
│   ├── contribute.html
│   ├── credits.html
│   ├── favicon.ico
│   ├── favicon.png
│   ├── general
│   ├── index.html
│   ├── installation
│   ├── license.html
│   ├── packages
│   ├── requirements.html
│   ├── templates
│   ├── toc.html
│   └── vendor
├── fuel
│   ├── LICENSE
│   ├── app
│   ├── core
│   ├── packages
│   └── vendor
├── oil
└── public
    ├── assets
    ├── index.php
    └── web.config

ここのfuelの下をたどっていって、fuel/core/config/config.phpを開き、118行目を以下のように書き換える

'default_timezone'   => null, #before
'default_timezone'   => 'Asia/Tokyo', #after

これで改めてアクセスしてみる

f:id:syguer:20131120010253p:plain

うまくいったようだ

今日のまとめ

意外とデモページにアクセスするのも苦労してしまった
コンフィグいじる場所探してる過程で、Ruby慣れしてるせいで触ったとこの行末セミコロン忘れててだいぶハマったりね
次は付属ORMでもいじってみる

認定スクラムマスター(CSM)を取得した

認定スクラムマスターの資格を取得しました

認定スクラムマスター(CSM)って?

ScrumAllianceが認定してる資格の一つ
僕も勘違いしてたんだけど、スクラムにはスクラムマスターというロールがあって、そのロールをこなすための知識を認定しているのがCSM
決してあなたはスクラムをマスターしていますって認定している訳ではない
(とはいえスクラムマスターの役目を果たすにはスクラムのことを正しく理解し、説明することが必要なのだが)

どうすれば取得できる?

まず、ScrumAllianceのCSM研修を受ける
研修を受けるとオンライン試験を受ける資格がもらえるので、オンライン試験を受けてパスすれば認定してもらえる
結構割高なので、若手が実費で参加するのは結構きついかも
あとかなり人気があるらしく、早めに予約しないと埋まってしまう。僕もキャンセル待ちだった

研修について

研修は2日間で、基礎から学ぶ
どこまで買いていいのかわからんので内容については割愛
個人的には参加者の方の中で何人か仲良くなって、今後も付き合いありそうな感じで良かったなーと思ってます

研修に参加して

正しい、教科書通りのスクラムを知れば知るほど、現実世界に適応させるのは難しいと思った
なぜかというと、日本企業の制度がスクラムとは著しく剥離しているから
とはいえどんな開発プロセスだって現実世界では教科書通りとはいかず、企業ごと、あるいはプロジェクトごとに何らかの変化をさせて対応しているはず
なので、スクラムも目的や原理を失わない程度に、環境に合わせて変化させる必要がある
スクラムマスターの責務は正しいスクラムを振り回すことではなくて、どうやったら自分の環境でスクラムが目指す「自律的な組織」を実現させるかを考えて実行することであると感じた

僕が今いるチームもスクラム風味の開発をしているが、色々と問題点は多い(それが必ずしも開発プロセスの問題であるというわけではないが)
まず、目の前の今のチームで改善できることを改善するところから始めようと思う

PHPを始めてみた

PHPを始めようと思い、環境作りを色々調べてみたので備忘録

なんで今更PHP

うちのサービスでサポートしてる言語の中で、僕が一番触ったことない言語がPHPだなーとはなんとなく思っていた。
そんな中、最近色々調べ物とかしてるとPHPの話に触れている記事を目にすることがちょくちょくあり、その中でPHPの特徴として「作るまでが早いけどコードが汚い」みたいなのがあった。なんとなく自分の性格と相性がいいのでは?と思い改めて触ってみることに。

入れたもの

とはいえ大したことはしてない。
composerとvimの設定のみ

composerについて

Rubyでいうgem、Nodeでいうnpm
依存ファイルをjsonで書くからそのどちらかならnpmっぽいかな
それよりcomposerのいいとこは、composerで入れたパッケージはコード内で

require 'vendor/autoload.php';

と書いとけば使うときに勝手に読み込んでくれるってところ
requireしてなくてどうこうみたいなことにならないのはちょっぴり嬉しいね

この辺を参考にインストールした

$ curl -sS https://getcomposer.org/installer | php                                                                         [/Users/keisuke]
#!/usr/bin/env php
All settings correct for using Composer
Downloading...

Composer successfully installed to: /Users/keisuke/composer.phar
Use it: php composer.phar

$ sudo mv composer.phar /usr/local/bin/composer

homebrewも使えるみたいだけど普通にglobalインストールしちゃいました

試しにcomposerと打ってみる

$ composer                                                                                                                 [/Users/keisuke]
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version a045ab345980bfe4a1daec1a34d345f13a2810dc 2013-11-06 22:13:14

Usage:
  [options] command [arguments]

Options:
  --help           -h Display this help message.
  --quiet          -q Do not output any message.
  --verbose        -v|vv|vvv Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
  --version        -V Display this application version.
  --ansi              Force ANSI output.
  --no-ansi           Disable ANSI output.
  --no-interaction -n Do not ask any interactive question.
  --profile           Display timing and memory usage information
  --working-dir    -d If specified, use the given directory as working directory.

Available commands:
  about            Short information about Composer
  archive          Create an archive of this composer package
  config           Set config options
  create-project   Create new project from a package into given directory.
  depends          Shows which packages depend on the given package
  diagnose         Diagnoses the system to identify common errors.
  dump-autoload    Dumps the autoloader
  dumpautoload     Dumps the autoloader
  global           Allows running commands in the global composer dir ($COMPOSER_HOME).
  help             Displays help for a command
  init             Creates a basic composer.json file in current directory.
  install          Installs the project dependencies from the composer.lock file if present, or falls back on the composer.json.
  licenses         Show information about licenses of dependencies
  list             Lists commands
  require          Adds required packages to your composer.json and installs them
  run-script       Run the scripts defined in composer.json.
  search           Search for packages
  self-update      Updates composer.phar to the latest version.
  selfupdate       Updates composer.phar to the latest version.
  show             Show information about packages
  status           Show a list of locally modified packages
  update           Updates your dependencies to the latest version according to composer.json, and updates the composer.lock file.
  validate         Validates a composer.json
[keisuke@localhost]$ composer about                                                                                                           [/Users/keisuke]
Composer - Package Management for PHP
Composer is a dependency manager tracking local dependencies of your projects and libraries.
See http://getcomposer.org/ for more information.

ちゃんと動いてるね

vimの設定

ざっと調べてみたけど他の言語と違ってgithubにライブラリとか置いてる空気じゃなくて手動で辞書をどっかからもってきて、自動補完できるようにするといいよって感じっぽい
僕は手動で辞書を作る方法を選んだ。phpのコマンドで作るっぽい

$ php -r '$f=get_defined_functions();echo join("\n",$f["internal"]);'|sort > ~/.vim/dict/php.dict

これ最初にやった時~/.vim/dictがないって怒られたから、mkdirで.vim/dict作った
.vimrcに下記追加

autocmd FileType php,ctp :set dictionary=~/.vim/dict/php.dict

これでneocoplcacheとかが動いてれば自動で補完される

この後

とりあえずフレームワークが色々あるっぽいのでひと通り触ってみて良さげなのを見つけたいってのと、PHPテストフレームワークを覚えなきゃね
ぱっと見た感じ比較的新しいフレームワークであるfuelPHPがきになる。テストはPHPUnitが一番ドキュメント充実してそうだからそこからかな。spec系使いたかったけど残念

東京Node学園祭2013に参加した

昨日東京Node学泉祭2013に参加してきました
週の半ばくらいまでは台風で中止っぽい気がしてたけど、当日行く頃には雨も止んで無事開催となりました

当日聞いたセッション

基調講演 @meso さん

Node.jsの近況についてお話されてました。

nodeのMLを訳されている資料になってます。

  • Isaacがリーダーの間は後方互換性は保たれるとのこと
  • 互換性はv0.10とv0.12の間の話
  • v0.12の次はv1.0になるらしい

Track B Grunt, Yeoman, Bower @yosuke_furukawaさん

Grunt、Yeoman、Bowerについてひと通りお話されてました。

Yoはジェネレーターで、bowerはパッケージ管理、gruntはタスク管理
GruntはRubyでいうRakeみたいなやつかな
実はnode周りのこの辺の常識ツールとかも知らなかったので自分的にはすごくよかった
と同時にもっと色々勉強しないとなーと少し反省
ちなみに@yosuke_furukawaさんはyeomanのためにyeomaniaというモジュールを自作されたとのこと

yeomania -Github

僕もモジュールとか公開できるようになりたいなーとしみじみ

Track B Node.jsを選ぶとき,選ばないとき @tricknotesさん

@tricknotesさんは札幌から参加されてました
札幌でもtwitterを朝昼晩見ていると最新の情報に難なくキャッチアップできるそうですw

実際の中身はRailsとNode.jsの比較になってます

TrackB Node.jsで学生向けe-learningサイトを作った話 @teyoshさん

Nodeがプロダクションで使われる事例はあんま情報がない気がしていて、貴重な公園だったかなと思う
自分たちのPaaSとしては使える選択肢を増やすのか、あえて狭めてユーザーの迷いを断つべきなのか難しいところだったりするんだよね

TrackB WebRTCを始めよう がねこまさしさん

WebRTCって言葉は聞いたことあったものの実例をしっかり見たのは初めてで結構衝撃だった
思ったより簡単なコードで実現できるみたい
とは言え実際に作るには色々あるみたいでその辺のTipsがすごく参考になりました
フロントエンドをもっと真面目に勉強しないと行けないなーと痛感

LTについて

LTは事前の予定は5名だったものの、ピザが届くまで飛び入り参加OKということで無限にLTされてたw
今日見てみたら結果として8名が飛び入りLTしてたwこれはすごい

自分もさり気なくeXcaleの紹介してみたw
準備がなかったのでオフィシャルな資料をもとにアプリ作成のデモをやった

飛び入りなのに動画も上げて頂きました。ありがたや
準備がなかったのと酒もだいぶ入ってて頭がまったく働かずグダグダしてしまったw
助けて頂いた@mesoさんありがとうございました

参加のまとめ

今回学園祭は初参加だったのだが、内容としてマニアックなものよりも一般的なことのほうが多かったような気がしてて色々勉強になってよかったと思う
今後はセッション枠で何か話せるようになりたいなーと思います

ディレクトリがないとき作成するワンライナー

よく使いそうでなかなか思い出せないシェルスクリプトをgistに登録してgistデビューしてみた

$ if [ ! -d "DIR_NAME" ]; then mkdir "DIR_NAME";fi

運用自動化というとこういった小さなコードの積み重ねになるので、日本語をコードにするっていう慣習は地味に重要になんだよね

Gist