CodeIgniterのライセンスがMITに変更されました!

こんばんわNEKOGETです。
CodeIgniterのライセンスがMITになったというニュースが飛び込んできました。
https://github.com/bcit-ci/CodeIgniter/blob/develop/user_guide_src/source/license.rst

これは本当に本当に嬉しいニュースです。
2013年(つまりは去年)ライセンス問題と戦うべく弁護士さんに相談し、真剣にライセンスについて調べ学んだのは本当に良い思い出です。
参考記事 : CodeIgniter3のライセンス問題に対する意見書公開

プロジェクトのオーナーが、エリスラボ社から、ブリティッシュコロンビア工科大学に変更となり、企業から大学へと変わりました。
ここしばらく、エリスラボ社のサイト内にあったCodeigniterのサイトへ転送されていたcodeigniter.comは、あたらしいサイトへと生まれ変わっています。

あとはもう、CodeIgniter3がリリースされるのを待つだけ!
期待待ちです♡

PHPカンファレンス関西 2014に行ってきました!

PHPカンファレンス関西 2014に行ってきました!
今回の目当ては郡山さんの基調講演だったわけですが、他のプログラムも非常に面白く興味深いものがたくさん有りました。
時間が経ってしまうとあれなので、とりあえず雑感を…..

基調講演の中で特に興味深かったものは、海外でのお話
会場に来ていない人からも声がかかるほどの、海外での技術に熱い人の存在。
また、地域コミュニティの勉強会がパブで行われていてそれがまたとてもかっこいい!
Dis is itのお話は、初回 PHP勉強会の後の飛び込みLT(ロングでしたw)で初めて聞いたのが最初だったことを思い出しました。
PHPは面白いよね。もっともっと面白くなるよね。

OSSを維持しつづけるには…. のCMSコミュニティの話。
Drupalの規模運営については全く知らず、またその規模の大きさに驚きました。
Symfony2への乗り換えの話など、コードとか開発そのものじゃなくて、運営の部分でのきつさ難しさが聞けたのは大きな収穫でした。考えさせられました。

フレームワーク4本勝負 FuelPHP
FuelPHPの良いところ。構造についてこんなにきちんと紹介してくれたプレゼンって無かったように思います。この講演どこかで再演やりたいです!

ライトニングトーク(LT) 市川さんの 継続的WEBセキュリティ診断サービス

もう開発している最中から、セキュリティチェックもCIしようぜってのは心に刺さりました。
テストコードは書いてるけど、それではセキュリティ的に問題ないかどうかを知る事は出来ないしと思っていたところだったので、丁度気になっていたところに気になっていた話が聞けました。
http://vaddy.net

非常に楽しい時間を過ごす事ができました。
公開された資料を見直したり等して、もうすこし昇華できたらまたもう一度感想を書いてみたいと思います。

git filter-branchを使ってレポジトリの中の一部だけを追いかけたい願いを叶える

こんにちはNEKOGETです。
githubにあがっているもので、特定のフォルダの中だけコードを追従したい場合とかありますよね。
具体的に言うと…..

フレームワーク(CodeIgniter)のgitレポジトリの中にドキュメントが入っていて、これの日本語化をしたい。
ソースコードはいらん。ドキュメントだけの変更を追いたい!
こういう場合です。

しばらく方法を悩んでいたんですが、できました。
方法としては次の通りです。

{フォルダ名}のところは適当に置き換えてください。

(1) gitレポジトリを cloneします。
(2)cloneしたフォルダを{フォルダ名}という名前でコピーします。
(2)のコピーしたフォルダの中でフォルダを指定してgitの情報をフィルターをかけます。

$ git filter-branch -f --subdirectory-filter {フォルダ名} HEAD

そうすると、指定したフォルダの履歴だけがフィルタリングされ、そのフォルダだけのレポジトリができます。
そうやってできた抽出レポジトリをcloneして、(3)作業用のレポジトリを作ります。

(3)の作業用レポジトリをリモート(今回試したのはgithub)にpushします。

ここまでで、取り込むための環境ができました。
追従元の変更の取り込み

(2)のgit filter branchを実行した{フォルダ名}を削除します。
(1)の最初に作った追従元からつくったcloneで、git pullを実行し、変更を取り込みます。
それをコピーし、{フォルダ名}を作り直します。git filter-branchを実行し、抽出したレポジトリを作成します。
つまりは(2)を作り直します。

(3)作業用レポジトリは、抽出後の(2){フォルダ名}から変更をmergeします。

つまり抽出されたgit レポジトリからmergeをすることによって、全部入りのオリジナルの変更をとりこむわけです。
(2)は取り込む作業をする都度削除します。した図のピンクのレポジトリがそのフォルダになります。

日1回程度取り込めれば良いので、
shを用意しcronで定期実行することにしました。
これで追従したいレポジトリから変更を取り込めます。

参考にさせてしただいたサイト : http://subtech.g.hatena.ne.jp/secondlife/20101108/1289221814
git filter-branchをここで初めて知りました。

CodeIgniter本家のレポジトリから、ユーザーガイドだけを抽出したレポジトリです。
3.0以降のユーザガイドの翻訳に利用しようと思います。
https://github.com/NEKOGET/ci_user_guide_src
(注 : 2014.1.1 レポジトリ名を変更しました)
もっとスマートでうまいやり方があればぜひ教えてください(=人=)

FuelPHP&CodeIgniterユーザの集い2を開催しました。

FuelPHP & CodeIgniter ユーザの集いを開催しました。
CodeIgniter talk #03とFuelPHP勉強会 東京#6となります。
今回2回目です。

当日のつぶやきのまとめ
“http://togetter.com/li/599883

【新卒課題】フレームワークを用いた開発とそのサンプル例

 ブリッジドット株式会社 佐藤雄大( @q2e2d2 ) さん

新人教育の話がとても興味深い発表でした。メンター制度の話など。
人数によって、コンテスト風にするか、協力して作る課題にするかを決めた話。
新卒にちょうど良い課題に悩むといった話など。
丁度2日間程度のボリュームで課題設定をしてみると良いといった話は、新しいフレームワークに挑戦する自分用課題にも参考になる良い話だなと思いました。

自己紹介TIME

今回の勉強会では、CodeIgniterな人が多く参加いただきました。
また、自己紹介TIMEでのCodeIgniter押しっぷりな発言が多かった結果飛び込みでFuelPHPの発表が増えるなど、とてもよい刺激になったように思います。

「UnitTestとリファクタリング」

@NEKOGET
発表をさせていただきました。
デモではぐだぐだになってしまいました。実際にコードを書いてデモをするというのは難しいですねorz



話の中で、データベースのリファクタリングがしたくなった場合は?という話題があり、この本をご紹介させていただきました。
デモで使用したコードは近日公開します。
セッション中、アンケートをとったのですが、PHPUnitでテストコードを書くチュートリアルをした事がある人は勉強会参加している人のほぼ100%が実践していました。
実際にCodeIgniterやFuelPHPでテストコードを書いている人は1割もいないようです。
CodeIgniterについてはもう少し資料をつくったり公開したりできるようにしたいと思います。
もくもく会的な事をしてもいいのかもしれないですね。

 

CodeIgniterでXMLを処理してみる

php-XML_Builderを紹介いただきました。MITライセンスで使いやすそうです。

CodeIgniterをCLIで使った時の事例

@hiroshitoda さん
CGIモード+pcntlモジュールで、PHPでマルチプロセスできるお話でした。
リソースの問題や保守を考えると、デーモンやcronでの定期実行するものをサービスを作成したフレームワークで作る事は確かに、良い事のように思いました。
PHP5になってPHPネイティブに、マルチプロセス実行するための関数が用意されています。
http://www.php.net/manual/ja/class.thread.php
これ、初めて知りました。自分用ツールに試してみたいです。

FuelPHPの2013年を振り返る

@Tukimikage さん

開催されたfuelphp関連の勉強会の多さに、びっくりしました。(羨ましいです!)
やはり開催されるという事はそれだけ利用者が増えているという事なのでしょうね。

次回勉強会は2014年2月15日の予定です。
今からとても楽しみです。

FuelPHP ♡ CodeIgniter ユーザの集いを開催しました

FuelPHP ♡ CodeIgniter ユーザの集いを開催しました。
今回は、コワーキングスペース茅場町 Co-Edoを会場にお借りし、@Tukimikageさんと開催させていただくことができました。
募集を上回る応募をいただき、また当日はたくさんの方にご参加いただき、感激です。
勉強会も非常に盛り上がり、楽しい時間を過ごさせていただきました。
開催中のつぶやきをtoggetterでまとめました。

開催のキッカケはPHPカンファレンス2013での、フレームワークアップデートでの登壇で、登壇後勉強会やりたいですよねっていうことで意気投合し開催となりました。FuelPHP勉強会#5 CodeIgniter talk#2としての開催でもあります。

今回は私はライセンス問題について登壇させていただきました。
そもそもわかりにくい内容の発表だったのですが、ツイートを見ていた感じだと、よくわからなかったという意見の方が数名いらっしゃいました。
もうすこしわかりやすい表現でお話をしなければいけなかったと思います。資料を改善せねばですね。
そもそもライセンスとは?から話をするべきだったのかもしれません。

codeigniter2系から3へのアップデートについて
発表された方 : 株式会社サイバーエージェント 北浦 智大さま

CodeIgniter3の開発の現状と、実際にアップデートした経験についての発表でした。
私自身はまだ2系からのバージョンアップは行っておらず、興味深い発表でした。2系から3系の差はそれほど劇的ではなく、わりとすんなり移行できますよとのこと。CodeIgniter3は確実に品質が上がる方向で開発されている事から、バージョンアップのしやすさというのはとてもありがたい情報です。

FuelPHP x Ratchet で WebSocket
発表者 @madmamor さま

今回 Ratchet の発表をされた方が2名いらっしゃり、どちらもとても興味深い発表でした。 Ratchetそのものを今回初めて知ったのですがとても面白そうです。

FuelPHPでDynamoDB
発表者 @koyhoge さま

DynamoDBという存在を始めてしりました。とても面白そうです。
AWSのKVSだそうです。AWSに関しては私は不勉強で知識が薄いのですがこれはとても気になりました。これは使ってみたいです。
codeIgniterでもきっとだれか使っているはずと検索してみると、いくつか見つけることができました。
試してみたいです♡

【LT】CI用の自作CRUD Isoldeについて
発表者 : 斎藤 健太 さま
[資料発見次第追記予定]
デモがとてもすばらしく、資料を心待ちしています。
設定を書き換える事での機能変更(機能のフィルタリングと言うべきかしら?)はとても面白くまた、便利に感じました。
私もこれはぜひに使ってみたいです!

【LT】ブリッジドット株式会社のFuelPHPの事例
発表者 : ブリッジドット株式会社 佐藤雄大さま

実際の導入事例についてお話いただきました。
まずは使ってみるという取り組みが良いですね。静的ホームページをFuelPHP化。必要に応じて動的な実装をしていくことって使い始めとしてはとてもやりやすいです。私の仕事用のサイト works.nekoget.netも同じようにCodeIgniterにしてから、動的にしたい部分を順次機能実装してみたりしました。親近感満載でした!

【LT】FuelPHPを本気でcomposerに対応させた時の話
発表者 : 株式会社ガラパゴス 細羽啓司さま

興味深い発表でした。ライブラリの構成管理は確かにとても面倒で、それがフレームワークのバージョンごとにバラバラな管理というのは、ちょっと目眩がしそうです。それをcomposerで解決とういのはとてもわかりやすいなと感じました。
以前開催したCodeIgniter talk #1でも、「CI + composer で 名前空間を使った話」な発表がありました。

【LT】omoon.org の裏側(FuelPHP の task 活用例)
発表者 : @omoon さま

大阪から参加いただきました。FuelPHPがガテン系フレームワークであると知らしめた関西のFuelPHP使いさん!
flickerとEye-Fiを使って、長期運用中の自分サービスの自動化のお話でした。ここでもcomposer対応をしたい旨の話がありました。
もうcomposer 対応はあたりまえの世界がやってきているんだなぁ….

【LT】CodeIgniterを初めて使うときにハマった4つのポイント
発表者 : @noldorinfo さま

Production環境 でエラーログは悩ましいなぁと思っていました。これ本家に取り込まれてほしいです。index.phpもしくは設定ファイルで変更できるとさらに嬉しいです。E-MAILの文字化け問題の対応コードすばらしいです。私はそこはもう追いかけずにqdmailで対応してしまってそのまんまにしてしまっていました。https://gist.github.com/takekoshi/6931872 を私も試してみます!!!

【LT】FuelPHP+Ratchet+WebRTC
発表者 : @Tukimikageさま
[資料発見次第追記予定]
Ratchetの発表2人目となりました。Ratchetは本当に本当に面白そうです。
WebRTCを初めて知りました。実行できるブラウザは限定されそうですが、WindowsでもmacでもLinuxなデスクトップ環境でも動くらしく、興味津々です。

セッション4本 LT6本という、とても濃く熱いイベントとなりました。
懇親会でもたくさんの面白いお話が聞けて大満足です♡

次回は12/7(仮)にやりましょうということで、懇親会中に@Tukimikageさまと相談させていただいています。次回も合同開催でイベントを開催したいなと思います。
今からとても楽しみです!!!

PHPカンファレンス2013 フレームワークアップデートに登壇させていただきました

フレームワークアップデートにCodeIgniterのお話をさせていただくべく登壇させていただきました。

8フレームワークとモデレータでのパネルディスカッションでしたが、不勉強な部分もあり、十分に話せたかどうか自信はありませんが、内容はとても濃かったように思います。

仕事をする上で、いろんなコードと出会います。
OSSなライセンスで公開されているフレームワークを使う場合と、社内フレームワークを使っている場合とがあります。
きちんと作られているコードであれば、どちらも遜色は無いし、どちらが優れているというものでもありません。

OSSなフレームワークを採用する場合、それが大勢の人にメンテナンスされているということと、ドキュメントが整備され更新されている事が最大のメリットです。
そして、多くの人が同じコードを見ている、使っている事が大きいと感じています。
あらたな人材を外部に求める場合、そのフレームワークを使った事があるというところで、何の話をするにしても、共通のコトバで共通の事をベースにすることができる事かなと思います。
それは情報を共有する上で、
コードの話をする上で、
敷居の1つをすばやく下げてくれます。
早くコードが書ける以上のメリットがそこにあるように私には思えます。

PHPカンファレンス2013 フレームワークアップデート 集合写真

こんなすごい人たちと同じ壇上に立ち、お話させていただいたことはとても光栄です。
また皆様にお話を聞いていただけた事、とてもとても嬉しいです。

ありがとうございました。

CodeIgniter3のライセンス問題に対する意見書公開

ハミングバード法律事務所 白木先生に作成いただいた意見書を公開します。

☆意見書 (pdf)

受託開発、自社サービスでの開発を前提として、意見書を作成いただきました。
私が仕事をする上での懸念材料は全て払拭することができました。

2013年9月14日に開催されました、PHPカンファレンス2013 LT発表で登壇させていただきました発表資料については少し修正をした上で、改めて公開をさせていただきます。

ライセンス問題についてはCodeIgniter のライセンス変更問題のタイムラインにkenji_sさんが時系列で詳しくまとめてくださっています。
2011年 CodeIgniter カンファレンスにて、CodeIgniter3からOSL-3.0ライセンスへライセンスが変更になる旨が発表されました。2011年当時の日本CodeIgniterユーザ会のMLでも、ライセンスの話題について多く話し合われました。ユーザ会としての公式な見解は未だに出されていないままです。
この「ライセンス問題」があったためにフレームワーク採用の検討の際に検討の候補にあがる手前で候補からはずされてしまう状況はあまりにも深刻でした。またすでに運用フェーズに入ったCodeIgniter2系で作られているアプリケーションについて、バージョンアップをするかどうかの検討時にも、「ライセンス問題」があるために身動きがとれない状況にありました。

この意見書により、私は自信を持ってCodeIgniterを提案し、またバージョンアップの検討をすることができるようになりました。

ぜひ意見書をご覧いただき、皆様の意見をいただければと思います。

CIUnit-for-CI2のメンテをさせていただく事になりました

CodeIgniter
CIUnit-for-CI2のメンテをさせていただくことになりました。

http://fukata.org/2013/08/01/nekoget-join-ciunit-for-ci2/

GitHubで公開されているCIUnit-for-CI2は、1系で開発の止まったCIUnitをCodeIgniter 2.x環境で動かすべく@fukataさんが修正をしてくださったものになります。

現在仕事ではCodeIgniter2系を使う事が多く、またCIUnitがなければ生活していけないぐらいCIUnitに依存した生活をしています。
少しでも貢献できれば、嬉しいなぁと思います。

@fukataさんとは、まだ直接会ったことがありません。
会った事が無いのが不思議なぐらいに、twitter上でお見かけしたり、話をさせていただく事もありました。

できるかぎりこまめにメンテしていけるよう頑張りたいと思います!

BEAR.Sunday meet up #2 に参加しました

BEAR.Sunday

BEAR.Sunday meet up #2に参加しました。
会場はHUB Tokyo ラウンジスペース。
すごく秘密基地な雰囲気漂うおしゃれな会場での開催です。

togetterでまとめを作成しました。
http://togetter.com/li/540698
2013.07.30追記 : まとめを作成後1日で1000view越え!!!

今回のmeetupでは、全員3分間LTをということで、自己紹介LTをさせていただきました。
興味深いおもしろいLTが続く中で、かなりはずかしい…..ただの自己紹介LTをしてきました

http://www.slideshare.net/NEKOGET/bearsunday-meetup-2

自己紹介あり、技術の話あり、ダイエットの話ありと、とてもとても濃いLTをたくさん聞く事ができました。
TOMさんの発表されていたTDDフレームワーク Waltz
github : https://github.com/stellaqua/Waltz.Band
Maple4 Docテストを使いたいが使えない状況。なので自分で作ってみたとのこと。
Maple4と当時を思い出し、感慨深い発表でした。

@rskyさんのiOS上で動く、PHP環境 iPHPのお話
github : https://github.com/rsky/iphp
ネイティブアプリをPHPで書けそうな予感がするコレは、すごくすごく気になりました。

@hidenorigotoさんの武術における型修行の話
武術の型とプログラミングの型。心と身体を鍛える。コードを書く力を鍛える。
http://phpmentors.jp/post/56608584357/bear-sunday-meetup
すごく興味深い話でした。
twitterで教えていただきましたが、子供向けのプログラミング教室で、KATAを共有する試みがされているそうです。http://blog.yasulab.jp/2012/05/coderdojo.html

メインセッション @jinguさんの実践BEAR.Sundayの発表では、実際に実装しているコードを見せていただきました。
見たくてなかなか見れない UnitTestコードを見れたのはとても大きな収穫でした。
テストコードが(本体コードそのものもですが)それが本当にドキュメントになりえるのが見てわかるコードでした。テストコードの美しさに憧れる…. そんなのBEAR.Sundayがはじめてです。

@koriymさんによるメインセッションでは、
ずっと、つまづいていた部分ですっきりとした部分がありました。
まだ資料が上がっていないようですが、そこで書かれていた図がとても参考になりました。
概念を説明するコトバよりも図のほうがしっくりと腑に落ちるあたりが、私自身のコードやコトバに対する力のなさだなと、絵図や色から得る情報量が多い性質なのだなということを自覚しました。
(短所でもあり長所でもあり…. コトバは苦手です)

相変わらず、BEAR.Sundayは面白いです。
それに触れるだけでワクワクします。未来の可能性にドキドキします。

今回は、予定があり途中離脱でした。
見れなかったセッションが本当に悔しいです。
@mackstarさんのセッションが聞けなかった事、NateさんのLithium&AngularJSのお話が聞けなかった事は残念無念です….. orz

BEAR.Sunday はじめてのテストをやってみる。

BEAR.Sunday meet up #1に参加し、自習TIME中、おそらく私にとって8回目ぐらいのインストールをしました。
(^-^;) .o( 仮想Fedoraの作業フォルダにbear1からbear8までフォルダが並んでいたのを目撃…… たぶん8回目 )

少しずつ少しずつ理解を深めたいと思うので、今日は、はじめてのテストに取り組んでみたいと思います。

リソースファイル
apps/Sandbox/Resource/App/First/Greeting.php

テストクラスファイル
apps/Sandbox/tests/Resource/App/First/GreetingTest.php

まずはテストファイルの作成
リソースファイルと、テストファイルがあることを確認。

〆(。。)テストを実行

OKでました!

PHP Warning:  Module 'apc' already loaded in Unknown on line 0

がでていたので、/etc/php.d/apc.iniのほうに設定を寄せて/etc/php.iniのapcの記述をコメントアウトしました。

〆(。。)カバレッジレポートの確認

〆(。。)テストコードを見てみる
vi apps/Sandbox/tests/Resource/App/First/GreetingTest.php

namespace Sandbox\tests\Resource\App\Blog;

use Sandbox\Module\TestModule;
use Ray\Di\Injector;

class GreetingTest extends \PHPUnit_Framework_TestCase
{
    /**
     * Resource client
     *
     * @var \BEAR\Resource\Resource
     */
    private $resource;

    protected function setUp()
    {
        static $app;
        parent::setUp();
        if (! $app) {
            $app = Injector::create([new TestModule])->getInstance('BEAR\Sunday\Extension\Application\AppInterface');
        }
        $this->resource = $app->resource;
    }
.....

setUp()で、テストが実行される前にやっとかないといけないことが記述されています。

wikiから抜粋
http://code.google.com/p/bearsunday/wiki/my_first_test#setup()

テスト用のモジュール(設定)でインジェクターを作成し、そのインジェクターでアプリケーションオブジェクトを取得しています。テストではアプリケーションオブジェクトはプロパティにあるリソースクライアントを利用します。

resource()

public function resource()
    {
        // resource request
        $resource = $this->resource->get->uri('app://self/first/greeting')->withQuery(['name' => 'BEAR'])->eager->request();
        $this->assertSame(200, $resource->code);

        return $resource;
    }

$this->resource->get->uri(‘app://self/first/greeting’)->withQuery([‘name’ => ‘BEAR’])->eager->request();

は、apps/Sandbox/publicの中で、

php api.php get 'app://self/first/greeting?name=BEAR'

を実行したのと同じ事で、

$this->assertSame(200, $resource->code);
で、200 OKだってことを確認しているテスト。

〆(。。)その他のテストメソッドを見る

その他の@testとアノテートされたメソッドではresource()で得られた結果をチェックしています。

/**
     * Type ?
     *
     * @depends resource
     * @test
     */
    public function type($resource)
    {
        $this->assertInternalType('string', $resource->body);
    }

@depends resourceと書かれていて、
resource()が実行した結果、
$resource->bodyには”Hello, BEAR”が格納されていて、
‘string’だってことを確認するテスト。

今日は、最新ではなく、前回参加した BEAR.Sunday meet up #1でインストールした状態で見たり試したりしました。
最新のものとはずれている部分もあるかと思います。
2013年2月22日からほったらかしとか、自分自身のダメさを自覚する日でもありました(><)