SlideShare ist ein Scribd-Unternehmen logo
1 von 15
Downloaden Sie, um offline zu lesen
CIをもっと小さく!
pieniというFWを作ってみる。
CodeIgniter Night 3
2017年05月16日(火) 浅草文化観光センター
サジテリアス・システムズ 斎藤 健太
1
斎藤 健太(サジテリアス・システムズ)
西東京市出身。西東京市在住。妻と娘と3人暮らし。
2014年8月に個人事業主として開業。もうすぐ丸3年。
ずっとLAMP。Linux Mint推し。Thinkpad信者。
マイクロマウス競技(2002年)完走経験あり。今でもはんだごてを握ります。
Heavy Metal好き。今週末はZepp DiverCityでMegadethを観てきます。
今日はオレオレフレームワークpieni(ピエニ)について話します。
2
http://pieni.sagittar.org/
(空のディレクトリの中で)全てのパッケージをまとめてインストール。
curl https://raw.githubusercontent.com/sagittar-org/pieni/master/misc/install.sh |
/bin/sh
デモ用データベースを作成。
mysql < vendor/sagittar-org/pieni-crud/misc/pieni_crud.sql
mysql < vendor/sagittar-org/pieni-classicmodels/misc/classicmodels.sql
よければ、ご一緒に。
3
<?php
// Definition of package list
define('FCPATH', __DIR__.'/');
define('BASEPATH', FCPATH.'vendor/sagittar-org/pieni-base/');
define('APPPATH', FCPATH);
$package_list = [
APPPATH,
FCPATH.'vendor/sagittar-org/pieni-docs/',
FCPATH.'vendor/sagittar-org/pieni-crud/',
FCPATH.'vendor/sagittar-org/pieni-auth/',
FCPATH.'vendor/sagittar-org/pieni-mail/',
FCPATH.'vendor/sagittar-org/pieni-misc/',
BASEPATH,
];
index.php
これらのパッケージを使うよ、と
指示。
上から順にコメントアウトしていく
とわかるかも。
4
// Inclusion of Core helpers
foreach ($package_list as $package)
{
@include_once $package.'/helpers/core.php';
}
// Election of Core library
require_once elect('libraries', 'Core_library');
$core = new Core_library();
$core->initialize();
index.php(続き)
全てのパッケージの coreヘルパーは
(存在すれば)取り込む。
各パッケージで存在確認し、一番優先
度の高いパスを返す。
Loadライブラリのメソッドは全て elect
を使用する。
やりたかったこと その1
elect
5
<?php
$config = (object) [
'language_list' => ['ja', 'en'],
'actor_list' => ['g', 'm', 'a'],
'page_target_list' => [
],
'crud_target_list' => [
'category',
'item',
],
'default_target' => 'welcome',
];
pieni-crud/config/core.php
CRUDの対象となるエンティティ
を支持する。
やりたかったこと その2
URIに言語とアクター
6
<?php
// メタ
// $target->display = "`{$target->name}_id`";
// フィールド
$target->field_hash = (object) [
'category_id' => NULL,
'category_name' => NULL,
];
pieni-crud/targets/category.php
CRUDに認識させるフィールド
やりたかったこと その3
MVCなしで
スカッフォールディング
7
// リレーション
$target->has_hash = (object) [
'category_item' => (object) [
'name' => 'item',
'key' => 'item_category_id',
'value_key' => 'category_id',
],
];
$target->join_list = [
];
pieni-crud/targets/category.php(続き 1)
アソシエーションや結合を記述。
8
// アクション
switch ($target->action)
{
case 'add':
unset($target->field_hash->category_id);
break;
case 'edit':
unset($target->field_hash->category_id);
break;
}
pieni-crud/targets/category.php(続き 2)
アクターやアクションなどで
挙動をカスタマイズ。
9
<?php
// メタ
// $target->display = "`{$target->name}_id`";
$target->where_hash->item_name = '`item_name` LIKE "%{$1}%"';
// フィールド
$target->field_hash = (object) [
'item_id' => NULL,
'category_name' => NULL,
'item_name' => NULL,
];
pieni-crud/targets/item.php
検索も記述。
ビューではフォーム部品が
動的に生成される。
10
// リレーション
$target->has_hash = (object) [
];
$target->join_list = [
(object) [
'table' => '`category`',
'cond' => '`category_id` = `item_category_id`',
]
];
pieni-crud/targets/item.php(続き 1)
カテゴリ名を取得するための結合。
11
// エイリアス
switch ($target->alias)
{
case 'item':
$target->add_list = [];
break;
case 'category_item':
unset($target->field_hash->category_name);
$target->fixed_hash->item_category_id = $instance->uri->param_list[0];
break;
}
pieni-crud/targets/item.php(続き 2)
カテゴリの子としてのアイテムは、
カテゴリ名の表示は不要。
(追加時の)親カテゴリは固定。
アイテムの一覧からは追加は禁止。
12
MySQL Sample Database
http://www.mysqltutorial.org/mysql-sample-database.aspx
index.phpへ1行追加。
$package_list = [
FCPATH.'vendor/sagittar-org/pieni-classicmodels/',
...
];
既存のスキーマでも結構いける?
このパッケージの中は configと
targetsだけ。MVCなし。
13
ご意見・質問など
いただけると
喜びます。
14
ご清聴ありがとうございました。
15

Weitere ähnliche Inhalte

Was ist angesagt?

エディタこだわってますか?
エディタこだわってますか?エディタこだわってますか?
エディタこだわってますか?Tetsuya Chiba
 
OSC 2016 Nagoya - MineOSのすすめ -
OSC 2016 Nagoya - MineOSのすすめ -OSC 2016 Nagoya - MineOSのすすめ -
OSC 2016 Nagoya - MineOSのすすめ -roamer7038
 
第23回東京ブロガーミートアップ「動画について」
第23回東京ブロガーミートアップ「動画について」第23回東京ブロガーミートアップ「動画について」
第23回東京ブロガーミートアップ「動画について」Tanaka Yuji
 
soracomとわたしの一年
soracomとわたしの一年soracomとわたしの一年
soracomとわたしの一年K K
 
いづれはIoTと連携させたいウェブサービスをつくっている
いづれはIoTと連携させたいウェブサービスをつくっているいづれはIoTと連携させたいウェブサービスをつくっている
いづれはIoTと連携させたいウェブサービスをつくっているK K
 
lazy var の特徴を知る #cocoa_kansai #cswift
lazy var の特徴を知る #cocoa_kansai #cswiftlazy var の特徴を知る #cocoa_kansai #cswift
lazy var の特徴を知る #cocoa_kansai #cswiftTomohiro Kumagai
 
MMySQL Router を監視しちゃうぞ! MySQL Casual Talks #12y sql casual talks #12 (1)
MMySQL Router を監視しちゃうぞ! MySQL Casual Talks #12y sql casual talks #12 (1)MMySQL Router を監視しちゃうぞ! MySQL Casual Talks #12y sql casual talks #12 (1)
MMySQL Router を監視しちゃうぞ! MySQL Casual Talks #12y sql casual talks #12 (1)Takuya Hasegawa
 
秘伝:クラウドに開発環境をえいっ!と構築する方法
秘伝:クラウドに開発環境をえいっ!と構築する方法秘伝:クラウドに開発環境をえいっ!と構築する方法
秘伝:クラウドに開発環境をえいっ!と構築する方法Masahiko Hashimoto
 
Linuxデスクトップのお手軽セミナー 〜クラウドとかも使いこなしちゃえ〜
Linuxデスクトップのお手軽セミナー 〜クラウドとかも使いこなしちゃえ〜Linuxデスクトップのお手軽セミナー 〜クラウドとかも使いこなしちゃえ〜
Linuxデスクトップのお手軽セミナー 〜クラウドとかも使いこなしちゃえ〜Masahiko Hashimoto
 
oh-my-zshを使うのは止めよう
oh-my-zshを使うのは止めようoh-my-zshを使うのは止めよう
oh-my-zshを使うのは止めようHideaki Miyake
 
電通大でgentooinstallbattleをやろう
電通大でgentooinstallbattleをやろう電通大でgentooinstallbattleをやろう
電通大でgentooinstallbattleをやろうTakuma Nakajima
 
Rubyでオリジナルプログラムをつくろう
RubyでオリジナルプログラムをつくろうRubyでオリジナルプログラムをつくろう
RubyでオリジナルプログラムをつくろうK K
 
本格的に始めるzsh
本格的に始めるzsh本格的に始めるzsh
本格的に始めるzshHideaki Miyake
 
世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015Takayuki Shimizukawa
 
私がRubyを学んでから個人開発をやっていくまでの道のり
私がRubyを学んでから個人開発をやっていくまでの道のり私がRubyを学んでから個人開発をやっていくまでの道のり
私がRubyを学んでから個人開発をやっていくまでの道のりK K
 
Oscの沼にはまった
Oscの沼にはまったOscの沼にはまった
Oscの沼にはまったmattenn
 
InstallingOpenIndiana (Tokyo OpenSolaris 勉強会 2020.06)
InstallingOpenIndiana (Tokyo OpenSolaris 勉強会 2020.06)InstallingOpenIndiana (Tokyo OpenSolaris 勉強会 2020.06)
InstallingOpenIndiana (Tokyo OpenSolaris 勉強会 2020.06)Yozo Toda
 
Mruby and microcomputer_board
Mruby and microcomputer_boardMruby and microcomputer_board
Mruby and microcomputer_boardHara Yoshihiko
 

Was ist angesagt? (20)

エディタこだわってますか?
エディタこだわってますか?エディタこだわってますか?
エディタこだわってますか?
 
OSC 2016 Nagoya - MineOSのすすめ -
OSC 2016 Nagoya - MineOSのすすめ -OSC 2016 Nagoya - MineOSのすすめ -
OSC 2016 Nagoya - MineOSのすすめ -
 
第23回東京ブロガーミートアップ「動画について」
第23回東京ブロガーミートアップ「動画について」第23回東京ブロガーミートアップ「動画について」
第23回東京ブロガーミートアップ「動画について」
 
soracomとわたしの一年
soracomとわたしの一年soracomとわたしの一年
soracomとわたしの一年
 
いづれはIoTと連携させたいウェブサービスをつくっている
いづれはIoTと連携させたいウェブサービスをつくっているいづれはIoTと連携させたいウェブサービスをつくっている
いづれはIoTと連携させたいウェブサービスをつくっている
 
lazy var の特徴を知る #cocoa_kansai #cswift
lazy var の特徴を知る #cocoa_kansai #cswiftlazy var の特徴を知る #cocoa_kansai #cswift
lazy var の特徴を知る #cocoa_kansai #cswift
 
MMySQL Router を監視しちゃうぞ! MySQL Casual Talks #12y sql casual talks #12 (1)
MMySQL Router を監視しちゃうぞ! MySQL Casual Talks #12y sql casual talks #12 (1)MMySQL Router を監視しちゃうぞ! MySQL Casual Talks #12y sql casual talks #12 (1)
MMySQL Router を監視しちゃうぞ! MySQL Casual Talks #12y sql casual talks #12 (1)
 
秘伝:クラウドに開発環境をえいっ!と構築する方法
秘伝:クラウドに開発環境をえいっ!と構築する方法秘伝:クラウドに開発環境をえいっ!と構築する方法
秘伝:クラウドに開発環境をえいっ!と構築する方法
 
Linuxデスクトップのお手軽セミナー 〜クラウドとかも使いこなしちゃえ〜
Linuxデスクトップのお手軽セミナー 〜クラウドとかも使いこなしちゃえ〜Linuxデスクトップのお手軽セミナー 〜クラウドとかも使いこなしちゃえ〜
Linuxデスクトップのお手軽セミナー 〜クラウドとかも使いこなしちゃえ〜
 
oh-my-zshを使うのは止めよう
oh-my-zshを使うのは止めようoh-my-zshを使うのは止めよう
oh-my-zshを使うのは止めよう
 
電通大でgentooinstallbattleをやろう
電通大でgentooinstallbattleをやろう電通大でgentooinstallbattleをやろう
電通大でgentooinstallbattleをやろう
 
Rubyでオリジナルプログラムをつくろう
RubyでオリジナルプログラムをつくろうRubyでオリジナルプログラムをつくろう
Rubyでオリジナルプログラムをつくろう
 
本格的に始めるzsh
本格的に始めるzsh本格的に始めるzsh
本格的に始めるzsh
 
世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015
 
私がRubyを学んでから個人開発をやっていくまでの道のり
私がRubyを学んでから個人開発をやっていくまでの道のり私がRubyを学んでから個人開発をやっていくまでの道のり
私がRubyを学んでから個人開発をやっていくまでの道のり
 
Kernelvm8
Kernelvm8Kernelvm8
Kernelvm8
 
Oscの沼にはまった
Oscの沼にはまったOscの沼にはまった
Oscの沼にはまった
 
InstallingOpenIndiana (Tokyo OpenSolaris 勉強会 2020.06)
InstallingOpenIndiana (Tokyo OpenSolaris 勉強会 2020.06)InstallingOpenIndiana (Tokyo OpenSolaris 勉強会 2020.06)
InstallingOpenIndiana (Tokyo OpenSolaris 勉強会 2020.06)
 
宇宙zsh #2
宇宙zsh #2宇宙zsh #2
宇宙zsh #2
 
Mruby and microcomputer_board
Mruby and microcomputer_boardMruby and microcomputer_board
Mruby and microcomputer_board
 

Ähnlich wie pieniというFWを作ってみる。

2018 0807 nefry bt_usermeetup1
2018 0807 nefry bt_usermeetup12018 0807 nefry bt_usermeetup1
2018 0807 nefry bt_usermeetup1yasuyuki_suzuki
 
WordCamp Yokohama2010 プレゼン
WordCamp Yokohama2010 プレゼンWordCamp Yokohama2010 プレゼン
WordCamp Yokohama2010 プレゼンmiccweb
 
M5Stack & Enebular
M5Stack & EnebularM5Stack & Enebular
M5Stack & Enebularrina0521
 
大阪版Io tlt#1 IoTあるじゃん関西支部 ラズパイ2でデュアルブート
大阪版Io tlt#1 IoTあるじゃん関西支部 ラズパイ2でデュアルブート大阪版Io tlt#1 IoTあるじゃん関西支部 ラズパイ2でデュアルブート
大阪版Io tlt#1 IoTあるじゃん関西支部 ラズパイ2でデュアルブートKenichi Yoshida
 
松本Linux勉強会 vagrant入門
松本Linux勉強会 vagrant入門松本Linux勉強会 vagrant入門
松本Linux勉強会 vagrant入門Shiojiri Ohhara
 
第三回デジタルガジェット祭り! LT「ペットとセンサー編」
第三回デジタルガジェット祭り! LT「ペットとセンサー編」第三回デジタルガジェット祭り! LT「ペットとセンサー編」
第三回デジタルガジェット祭り! LT「ペットとセンサー編」Yasuyuki Sugai
 

Ähnlich wie pieniというFWを作ってみる。 (6)

2018 0807 nefry bt_usermeetup1
2018 0807 nefry bt_usermeetup12018 0807 nefry bt_usermeetup1
2018 0807 nefry bt_usermeetup1
 
WordCamp Yokohama2010 プレゼン
WordCamp Yokohama2010 プレゼンWordCamp Yokohama2010 プレゼン
WordCamp Yokohama2010 プレゼン
 
M5Stack & Enebular
M5Stack & EnebularM5Stack & Enebular
M5Stack & Enebular
 
大阪版Io tlt#1 IoTあるじゃん関西支部 ラズパイ2でデュアルブート
大阪版Io tlt#1 IoTあるじゃん関西支部 ラズパイ2でデュアルブート大阪版Io tlt#1 IoTあるじゃん関西支部 ラズパイ2でデュアルブート
大阪版Io tlt#1 IoTあるじゃん関西支部 ラズパイ2でデュアルブート
 
松本Linux勉強会 vagrant入門
松本Linux勉強会 vagrant入門松本Linux勉強会 vagrant入門
松本Linux勉強会 vagrant入門
 
第三回デジタルガジェット祭り! LT「ペットとセンサー編」
第三回デジタルガジェット祭り! LT「ペットとセンサー編」第三回デジタルガジェット祭り! LT「ペットとセンサー編」
第三回デジタルガジェット祭り! LT「ペットとセンサー編」
 

pieniというFWを作ってみる。