2013年9月9日月曜日

FuelPHPのクエリビルダを使いこなす

皆さん、FuelPHPしてますか?
今日はFuelPHPの多機能の中でもクエリビルダに注目してまとめます。

※下記の記載の実行環境は以下のとおりです(2013年9月9日現在
  • PHP5.5.3
  • PostgreSQL9.2.
  • FuelPHP1.6
まずクエリビルダですが公式ドキュメントはこちら

Database 使い方

基本的な使い方はこちらのブログが非常にわかりやすいです。

FuelPHPのクエリビルダを表にまとめた


さて、これだけ見れば単純なQueryについては十分使いこなせると思います。
ただ公式にも書いてなかったのですがWHERE句に関してはこれだけではありません。

$query->where('column_name_1', 'hoge');
$query->where('column_name_2', '>', 1);

//下記は同じSQLが発行される
$column_list = array(
    'column_name_1' => 'hoge',
    'column_name_2' => array('>' => 1),
);
$query->where($column_list);

//5.4以降だと配列が簡潔に
$column_list = [
    'column_name_1' => 'hoge',
    'column_name_2' => ['>' => 1],
];
$query->where($column_list);

と出来ます。
where()に直接配列を渡して実行できるわけです。
値の有無をチェックしたりループを回したりしながら何度もwhere()を呼ぶ必要はありません。
これは非常に使える場面が多いです。
それとバインディングもサポートしてます。

//公式
$query = DB::query("SELECT * FROM users WHERE username = :name")->param('name', 'value')->execute();
//param('name', 'value')→param(':name', 'value')でも動く
$query = DB::query("SELECT * FROM users WHERE username = :name")->param(':name', 'value')->execute();
//クエリビルダは':name'なら動く
>where(':name','value')->param(':name', 'value')->execute();

DB::queryを使う時はエスケープしてくれるのでこちらを使いましょう。
配列も

//公式
$query = DB::query("SELECT * FROM users WHERE username in :name")->param('name', ['hoge','fuga'])->execute();
//SELECT * FROM users WHERE username in ('hoge','fuga') ←生成Query

としてくれます。
しかしクエリビルダ自体がSQLの機能をすべて網羅しているわけではありません。
そのため難しいQueryが必要の際につまづきます。
そうなると上記のようにDB::query()とバインディングで直接SQLを記述することが多いと思います。
それだとwhere()のように柔軟にWHERE句を付け替えるのは難しくなります。
そして結果的にソースが煩雑になりがちです。
そこでこちらのブログが参考になります。

QueryBuilderで小難しいSELECT文を書くためのノウハウ #FuelPHPAdvent2012 - Dazing days

ただこちらで4.where句の右辺にMySQL関数を使いたい時のノウハウに

//  WHERE DATE(r.`rental_dttm`) >= ADDDATE( CURDATE(), INTERVAL -30 DAY ) = '1' ←生成Query
$query->where('DATE(r."rental_dttm") >= ADDDATE( CURDATE(), INTERVAL -30 DAY )', '=', true);

とあります。
これは素直に

//  WHERE DATE(r.`rental_dttm`) >= ADDDATE( CURDATE(), INTERVAL -30 DAY ) ←生成Query
$query->where('DATE(r."rental_dttm")', '>=', DB::expr("ADDDATE( CURDATE(), INTERVAL -30 DAY )"));
で問題ありません。
実際に実行されるQueryが想定通りのSimpleな形になるので運用者がクエリログを見た時も安心です。
それと生成したクエリは

$query = DB::query("SELECT * FROM users WHERE username = :name")->param(':name', 'value');
var_dump($query->compile());

で確認することが出来ます。
上記の例だと出力された:nameが'value'に置き換わって出力されます。

と以上になりますがDB接続はアプリ開発に必須です。
セキュリティと利便性を上手くとってスムーズに開発していきたいですね。

---チラシの裏---
クエリビルダのソースを含めFuelPHPのCoreのDB周りのソースを読みました。
綺麗で非常に読みやすくいい勉強になりました。
OSSはドキュメントになっていない隠し機能があることが多いので興味がある方は是非読んでみてください。

2013年8月19日月曜日

FuelPHPを仕事で使うときに知っておくべき4つのこと

こちらでもあるとおり、先月から新しい職場で働いてます。
で弊社は自分が来たことをきっかけにFuelPHPを使っています。
元々弊社はPHPならSymphonyと言うフレームワークを使ってました。
Symphonyを使ってるなら海の向こうで流行っているlaravelも考えたのですがFuelPHPを使うことにしました。
と言うことでお仕事でFuelPHPを使っているので気付いたことをまとめておきたいと思います。
個々での情報はあるのですが纏めてあるものはまだまだ少ないですしね。
またプライベートでアプリを作った時のまとめはこちら。
今からFuelPHPを触ってみたい方は下記のリンクを見るのをおすすめします。

今からFuelPHPを使う人が知るべき5つのこと+1


//2014/05/08に別記事書いたのでこちらも参考にどうぞ。

FuelPHPでセキュアな設定をする



実際に仕事でFuelPHPを使っていると「後々のことを考えるとここはキッチリしたい」って場面が沢山あると思います。
そういうところを疎かにすると負の遺産になります。
もちろん、FuelPHPはそんな時の答えをちゃんと用意してくれています。

1 環境設定による設定値の切り替え

お仕事で開発するとなると
  • テスト環境
  • 開発環境
  • ステージング環境
  • 本番環境
が用意されてますよね?
(実際はテスト環境すら無いことあるけどね...)
では実際にこれらの環境に合わせてDBであったり、特定の環境変数を切り替えたい場面は多々あります。
これらの設定をFuelPHPは分けることが出来ます。

公式ドキュメント(環境)

こちらの引用ですが
環境の設定は、サーバ変数 FUEL_ENV をセットするか、 手動で fuel/app/bootstrap.php 内の設定を変更することで設定します。 
で切り替えることができます。
つまり、Apacheのサーバ変数を設定しておけば、テスト環境で本番DBを更新するなどの問題を防ぐ事ができます。
bootstrap.phpを編集する場合は以下のとおりに

/**
 * Your environment.  Can be set to any of the following:
 *
 * Fuel::DEVELOPMENT
 * Fuel::TEST
 * Fuel::STAGING
 * Fuel::PRODUCTION
 */
Fuel::$env = (isset($_SERVER['FUEL_ENV']) ? $_SERVER['FUEL_ENV'] : Fuel::DEVELOPMENT);


DEVELOPMENTの部分を変えることで切り替わります。
読み込み先の対象ファイルは

app/config/[環境別ディレクトリ]/

となります。
また環境変数が本番環境のPRODUCTIONの時とそれ以外ではerror時(例外をcatchしてない時など)の表示が違います。
具体的にはDEVELOPMENT等では該当の箇所のソースが表示されます。
PRODUCTIONにしておけばエラーページを表示してくれます。
ですがFuelPHPのデフォルトではエラー表示はONになっています。

public/index.php

の先頭にある

error_reporting(-1);
ini_set('display_errors', 1);

を下記の通りに変更します。

error_reporting(0);
ini_set('display_errors', 0);

これで本番環境時にはPHPのエラーが表示されることはありません。
また1.6以上であればエラーが発生した場合はデフォルトで

fuel/app/logs/

にエラーが出力されます。
これは日別にログがローテートされてます。
ですのでこちらを監視することで色んな問題を解決することが出来ます。

またセキュリティのことに関しては下記のリンク先が素晴らしいです。
こちらを是非とも一読ください。

FuelPHP でのセキュリティ対策(3) - A Day in Serenity @ kenjis


2 複数DBへの接続

一つの環境で複数のDBに接続することは多々あります。
こちらの方法ですがまず

fuel/app/config/development(各自の環境変数に合わせてください)/db.php

に下記の通りhogeのグループを追加します。
※例はPostgreSQLにつなぐ場合です

return array(
    'active' => 'default',
    'default' => array(
        'identifier' => '"',
        'connection' => array(
            'dsn' => 'pgsql:host=localhost;dbname=default_db',
            'username' => 'default_user',
            'password' => 'default_password',
            'encoding' => 'utf8',
        ),
    ),
    'hoge' => array(
        'identifier' => '"',
        'connection' => array(
            'dsn' => 'pgsql:host=192.168.1.1;dbname=hogehoge',
            'username' => 'hoge',
            'password' => 'm9(^w^)',
            'encoding' => 'utf8',
        ),
    ),
);

これでdefault以外のhogeの接続情報が入りました。
あとは実際に呼び出す際に

//default
DB::query('SELECT * FROM test')->execute();
//hoge
DB::query('SELECT * FROM test')->execute('hoge');

となります。
指定しない場合はdefaultが呼ばれますが当然defaultを呼ぶことも出来ます。
ですので

DB::query('SELECT * FROM test')->execute($db_name);

として呼び出し先を動的に変えることも出来ます。

3 オリジナルのconfファイルの作成と読み込み

公式ドキュメント(configクラス)

またこちらのリンク先が丁寧に解説してあります。

FuelPHPでオリジナルconfigファイルの作成

こちらを設定することで
Config::get('hoge')
と取ってくることが出来ます。
私はalways_loadを設定して常に呼び出せるようにしています。


4 メタプログラミング

PHPでもメタプログラミングは出来ます。
特にFuelPHPではオートローダー機能の恩恵でよりシンプルに行えます。
※FuelPHPのクラスの自動読み込みについてはこちらを参考にどうぞ

例えばPHPは

//三項演算子(hogeの時にmodel_hogeを代入し、それ以外はmodel_fuga)
$class_name = ($model_name == 'hoge') ? 'model_hoge' : 'model_fuga';
//インスタンス化
$model = new $class_name();
$result = $model->method();
//静的呼び出し
$result = $class_name::method();

と出来ます。
例ではクラス名が$model_nameの中身に合わせて'model_hoge'と'model_fuga'で切り替わります。
この場合、呼び出しのクラスが読み込まれている必要があるため

require_once 'hoge.php';
require_once 'fuga.php';

と両方のファイルを読み込むコードが必要になります。
(または色んなクラスが書かれた巨大なファイルを作る必要があります。)
ですがFuelPHPはクラスの読み込み時に命名規則に合わせて動的にクラスファイルを読み込みます。
つまりrequire_once地獄や巨大なファイルと戦う必要がありません。
ですのでコードを足す度に上記のようにrequire_onceを書く必要がありません。
DBの値からクラスを動的に呼び出す場合などは新たにクラスファイルを作成するだけです。
このようにPHPの可変関数は非常にシンプルで強力です。
さらに__callなどのマジックメソッドを使えば多くの事が出来ます。
ただし、メタプログラミングはやり過ぎると作成者以外が分かりにくくなるのでケース・バイ・ケースです。


以上の4つ、いかがでしょうか。
さらにセキュリティ、バリデーションなどFuelPHPは充実しています。
「こんなことしたいな...」と思った際は一度FuelPHPのドキュメント等を見てみると大抵あります。
また機会を見つけてFuelPHPの情報をまとめていきたいと思います。

2013年8月8日木曜日

今後の参加予定な勉強会の告知

もじゃ変さんがまとめてたので自分の主催の有無問わず参加予定の勉強会を告知。
ざっと予定を纏めたけど10月初めまで結構件数あって嫁ゲージやばい。
そのための牽制の意味が含まれてます


2013/8/27 第七回 岡山Python勉強会

http://atnd.org/events/42305

毎月定例のPython勉強会です。
今回は自分はSkypeで参加しようと思います。
すっごいゆるふわ系の勉強会なのでいろいろとチャレンジしていきたいですね。
あとPythonやるやるって言いながら全然書いてませんw


2013/8/31 TDD Boot Camp 岡山 2.0

http://tddbc.doorkeeper.jp/events/4941

テスト駆動開発のハンズオンですね。
実は自分はまだどの言語でどのように参加するか決めてないので保留中。
去年参加出来なかったので今年は是非とも参加したいですね。
ただ一部から懇親会のLTを強いられているけど色々と失うものが多そうです。


2013/09/14 岡山Git勉強会

http://local.aguuu.com/events/19879

今回はGitHubのハンズオンらしいです。
地味に最近は読書会やらハンズオンが多いですね。
これは「明確な技術的な収穫が欲しい」ってニーズがあるんだと思います。
あとやっぱ最初の取っ掛かりは一人では苦しいのでハンズオンは助けになります。
てなわけでGitHubをガンガン使ってるわけではないので行ってきます。




2013/09/16 JavaEE7 ハンズオン

http://local.aguuu.com/events/21329

ついに自分もJavaを触る日が来ましたw
Javaとかマジ全然出来ないんですがだからこそハンズオンに参加してきます。
つか参加者的に自分がいちばんJava力なんで予習必須ですね…


2013/10/05 第二回 中国地方DB勉強会

http://local.aguuu.com/events/21550

第一回を岡山でしたので今度は広島で開催します。
コンテンツがまだ決まってませんが会場等は決まってます。
OSC広島の前夜祭的に出来たらいいなぁと思ってたりします。


2013/10/06 OSC広島 2013

http://www.ospn.jp/osc2013-hiroshima/

前述のとおり、連日開催です。
今回はさくらインターネットさんが来るみたいで個人的にはOpenStackとそれが楽しみです。
もちろんJPUGも参加しますので皆さんよろしくお願いします。



さらにこれに9月のPython勉強会が定例で入ってきます。
個人的には不定期開催のたけともそんを9月の何処かでやりたいなぁと思ってたりもします。
しかしこんだけスケジュールが詰まってるとお財布に優しくありませんねw
でもこの他に面白いイベントがあれば是非とも教えて下さい。

それでは皆様と会場で会えることを楽しみにしてます。

第一回 中国地方DB勉強会を開いてきた

ついに中国地方でのDB勉強会を始めました。
JPUG主催ですがPostgreSQLのみならず広くDB関連をカバーしたいと思っています。
そんな意図もあって第一回は大垣さんと奥野さんに来て頂きました。

当日のTwitterまとめはこちら。

第一回 中国地方DB勉強会 まとめ #Chugokudb


またMLとしてGoogleグループを作成しました。
当日の資料や登壇の動画はこちらにありますのでご参考までに。
次回の情報や今後のフォローアップでも活用しますので是非ともご参加ください。

・Googleグループ
  https://groups.google.com/d/forum/dbstudychugoku

  dbstudychugoku@googlegroups.com

また講師のお二人が当日の資料をブログにアップして頂いております。
こちらも合わせて御覧ください。

大垣さん
第一回 中国地方DB勉強会の資料
http://blog.ohgaki.net/db

奥野さん
第一回中国地方DB勉強会で発表したスライドをアップロードしました。
http://nippondanji.blogspot.jp/2013/08/db.html


個人的には今回は主催者としては集大成だったなと言うくらいに色々とやりました。
それでもまだまだ周囲の方に助けて頂いてなんとか開催出来たと言うのが感想です。
今後も隔月程度で中国地方で開催していきますのでどうぞよろしくお願いします。

それと第二回は広島市で行います。
コンテンツについてはまだ未定ですが場所と日時は確定しております。

日時:10月5日(土)
場所:広島県広島市中区大手町 1-5-3 サテライトキャンパスひろしま 605号室

第二回 中国地方DB勉強会

こちらはOSC広島の前日に同じ場所(サテライトキャンパスひろしま)で開催します。
コンテンツに関しては

1 初心者向けのセッション
(SQLの書き方や実行計画の見方など)

2 運用に関するセッション
(バックアップやチューニングなど)

3 その他

を検討中です。
決まり次第、申し込みサイトとMLを更新していきますのでよろしくお願いします。
ということでまだまだ忙しくなりますが支部長業を頑張っていきます。
今度は広島の皆様、よろしくお願いします!!

(いや俺も広島県民だけどなんだけどね)

2013年7月3日水曜日

PostgreSQL9.3の最新事情

先月、6/22にJPUG 2013 夏セミナー+JPUG総会に行って来ました。



でセミナーは遅刻(理由は色々あるんですっ!)したので全部聞けませんでした。
なので自分の学習的意味も含めてPostgreSQL9.3のおさらいをしたいと思います。

さらにコレもすごく参考になるのでオススメ資料です。

PostgreSQLバックアップ・リカバリ入門


ってことでおさらい。

○ PostgreSQL9.3の知っておくと嬉しいこと

・9.3のリリースは9月
・Updatable Views(更新可能ビュー)
・Materialized View(実態のあるビュー)
・JSON型の強化
・Large objectが最大→4TERAに強化
・Foreign data wrappers(外部データラッパー)

細かいことは資料を見たほうがいいですw
というか非常にクオリティが高いです。
(僕はいつも情報密度が薄くてごめんなさいごめんなさいごめんなさい)

で僕は今回、特に重要なことはFDW(外部データラッパー)とJSON型だと思ってます。
なぜかというとこれ。

Red Hat Enterprise Linux 7でもMySQLに代えてMariaDBを採用

これはこの業界には非常に大きなニュースだと思ってます。
今後もRDB自体の必要性は変わらないと思います。
となると考えれるのはどのDBに移行するか。
MariaDBが注目されてますがHerokuなどPostgreSQLを使ったサービスは日々増えています。
そうなると大事なのは既存のシステムからのマイグレーションと連携です。
正直アーキテクチャの違うRDBの移行は簡単な話ではありません。
ですのでレガシーシステムと如何に連携するかと言うのは非常に大切なことです。
FDWですべての問題が解決するわけではありませんが可能性を感じる選択肢だと思います。
過去のシステムとの連携が問題でMySQLを選択されている方は一度はPostgreSQLを検討して損はないと思います。

興味がある方は是非とも花田さんが作られた以下の資料をご覧下さい。

9.3で進化した外部テーブル

そしてJSON型。
現在、多くのWebAPIはJSONを吐きます。
また多くの言語はJSONをサポートしており、利用頻度はXmlを抜いていると言っても過言ではありません。
近年ではJQueryやAnglerJSなどのJavaScriptライブラリやフレームワークの活躍でより一層フロントエントでのデータのやり取りは リ ア ル タ イ ム にJSONでやり取りをするようになっています。
なので業務でJSONと付き合う機会は多いでしょう。
するとゆとりさんがおっしゃってるような


という危惧が出てくるのもわかります。
まさにSQLアンチパターンのジェイウォーク(信号無視)です。




実際に私もtext型にJSONを始めとする非正規化のデータをまるっと突っ込んでいるテーブルを見たことがあります。
(EC-CUBEのセッションとか苦しんだなぁ・・・)
WTMでもこの話題は取り上げました。

WEBエンジニアが知るべき3つのSQLアンチパターン


実際に非正規化データで困るのはUpdateと中に入ってるデータの検索。
これは今後も必要に迫られることが多々あると思います。
PostgreSQLはこの事に対して専用の型を用意して前向きな打開策を提示してくれます。
JSON型自体、9.2から入ってきてまだまだ機能不足ではありますがFDWと同様に将来性を感じる機能の一つです。
つまり、PostgreSQLは多くのシステムと連携する窓口を広く持っている(持つ方針で進んでいる)ということです。
現在、NOSQLを始めとした多くの技術が適材適所に使われています。
これらとのインターフェイスを柔軟に持つということは凄まじいスピードで起こるこの多様化に対して大切な答えだと僕は思っています。
ということで純粋な性能向上や安定性も重要なことですがPostgreSQLは多様化に対して面白いアプローチをしてきてると思います。


ということで今、PostgreSQLが熱い!!
(なおこの記事は二週間かけてかかれております。 )

2013年6月17日月曜日

Java Day Tokyo 2013報告会@岡山 #okajugに行ってきた

勉強会で久々?にスピーカーもしたし、すごく感じたことがあるのでブログに。
勉強会の内容についてあまり触れないのでそちらはtwitterまとめがありますのでどうぞ。

Java Day Tokyo 2013報告会@岡山 #okajug #パソコン交流会 まとめ


現在、勉強会に関しては岡山は充実していて、平日の勉強会すら日程被りがある状態です。
※2013年6月17日現在
多様性が生まれるのことはすごく良いことなんだけどではどの勉強会に参加するのがいいのか。
結論、行きたいの行きゃいいんだけど今回の参加で思ったもあるのでメモとして残します。

1 知ってると思ったことでも実は知らない
今回櫻庭さんがJava8の目玉、ラムダについてお話して頂きました。
僕は櫻庭さん信者なので実は今年になって櫻庭のラムダの話を聞くのは3回目です。
(オープンセミナー広島、CCC、#okajug)
ですのでJavaの人じゃないけどそれなりに知ってるつもりでした。
だけど毎回聞く度に理解が深まるし、その間に得た知識と急につながる事がありました。
なのでreduceやmapの話、遅延評価(Javaは評価ではないらしいですが)を毎回聞く度に視野が広がります。
これはこないだ岡山でCSS3を学ぼう会でも感じました。
知ってるつもりでも改めて聞くと眼から鱗のこともたくさんあります。
なので「知ってるわー」とか「そこ別にもういいわー」みたいな感じで学ぶチャンスを逃すのは勿体無いと感じました。
特に新しいことばかりでなく、基礎的なことを振り返る地点は定期的持ったほうが知識の定着は効率的でアイディアも湧きやすいかもしれません。
ちょっと最近は勉強会から足が遠のいていたのですが今後も積極的参加したいと思いました。

2 勇気を出して質問してみる
質問をするって言うのは僕の勉強会の毎回のノルマとしています。
その方が話の理解が深まるし、聞いてる最中もしっかりと集中して聞けます。
また質問することで記憶の中で関連付けされるので記憶の定着も進みます。
なので初歩的なことでも恥ずかしがらず質問するようにしてます。
さらに最近気付いたのがひとつ質問が出ると2つ目が出てきやすい。
シーンとなったあと「じゃあ僕が」って質問した次は「じゃあ私からも」となりやすい。
そうなるとディスカッションが生まれたりしてすごく良い循環が生まれやすいと思います。
なので勉強会では積極的に質問するのがいいなぁと。
運営側もメインのスピーカー枠なんかは質問の時間を長めに取る工夫があったほうがいいかなとも思いました。

3 ゆーるい感じの勉強会も良い
しっかりスケジュールされたハンズオンやビックスピーカーがズラリと並んだセミナーも大切です。
ただその上でちょっと座談会感覚でヤジが飛びながらするような勉強会もいいなと思いました。
人数が少ないからこそなんですがその場でQ&Aが飛び交うのは会話の幅がすごく広がるし、当事者はもちろん聴衆側もなるほどと思って知識の理解が進みます。
マサカリこわいと言いますけどもマサカリも適量な場合は大切だなと。
ただ血まみれになるのは大抵の人が慣れてないので軽いヤジや合いの手くらいがいいかもしれません。
こういう雰囲気があると質問もしやすいので2の効果がより得やすいとも思います。


ということでゆるふわ系勉強会がマイブームです。
少人数でやってる言語系の勉強会はその傾向が強いので言語の好き嫌いをせずに積極的に参加してみようかなと思いました。
ただこの戦国の大勉強会時代にさらされた岡山では弱小になりがちなゆるふわ系勉強会は存続が難しかったりもします。
ココらへんは運営側の強い意志が必要になるところでもあるのですが是非とも運営側の皆さんには頑張っていただきたいなぁと思ってます。
(そもそも一番危ういのが自分主催の岡山Python勉強会ですが...)
ということで勉強会が最近また形を変えつつあるなぁと思いました。
あと最後に発表資料置いとくんで興味がある人は見ていただけたら幸いです。




2013年6月6日木曜日

@soudai1025、仕事辞めるってよ。

俺は仕事を辞めるぞジョジョォオォォッ!!
ってことで読んで字の如く現在の職場を6月末で退職することになりました。
ついでに次の職場は福山市なので毎日通った大都会岡山には別れを告げることになります。

今の職場では名前を出しませんが素晴らしい技術者と一緒に仕事が出来ました。
これは非常に貴重な経験で今後も大きな財産になると思います。
また独特のスピード感に戸惑うことはありました。
(信じれないほどアサイン→コミット→リリースの間が短い)
ですがこれにより前職とは比べれない速さで多くの経験が出来ました。
ハッキリ言ってこの一年は前職の3年分よりも多くの技術や実務の経験が出来たと思います。

また退職すると言うとその会社にマイナスなイメージが付きまといますが誤解を解く意味でも言いますがコードが書きたいプログラマーには楽しい会社です。
サーバサイドだけでなくフロントエンドも出来るなら一人で新規案件を好きなように舵を切ることも可能です。
というかほとんど新規案件ばかりなのでコードを新しく書く経験がガンガンできます。
僕はPHPがメインでしたがこの1年半で書いたコードの量も担当した新規案件の数も結構な量でした。
こんなイケイケの会社はなかなかないと思います。
その分、プログラマーに求められる責務というか能力も高いのも事実です。
ですがそれ相応の能力があれば与えられる自由と給料がデメリット以上の魅力になる職場です。
なのでこの一年半は本当に色んな経験が出来ました。
また蛇足ですが元々人が足りない状態で私が抜けるのでPHPerが足りません。
PHPerじゃなくてもコードが「しっかり書ける」人ならPHPの技術は後からでも問題ないと思います。
あとAndroidとかiOSとかフロントエンドとか出来ると更にいいと思います。
このブログを呼んで興味がある方は応募してみては如何でしょうか。
あっ応募先は自分で探して下さい。
それぐらいは出来ないと「自由な職場」では生きていけないと思います。

そして僕の次の職場ですが我が家から半径2キロ程度の場所です。
現在の職場は片道60キロ程度だったので恐ろしいほど近場になります。
これは正直、転職の理由として大きいです。
また会社の規模は人数が1桁の会社なのでとても小さな会社です。
(僕自身のキャリアから見ても最小です)
あと僕は自称 WEBプログラマー なので今までの経験から言うと次は全く別業界です。
組み込みやネットワークがメインの会社ですから僕の得意のレイヤーからずっと下のレイヤーになります。
でもこれは僕の考える将来像から見るととてもすごく良い経験が出来ると思ってます。
先日受けた基本情報技術者の成績からも下のレイヤーの部分はやはり苦手でしたし。
(あっちゃんと受かってたよ!)
Cも読めますが実際に書いた経験は皆無です。
ネットワークなんてTCP/IPのことをちょっと知ってるかなー程度です。
そんな状態ですから多分毎日が戦いになると思ってます。
ですがそれは凄いチャンスだと思うので楽しみながら頑張りたいと思います。
またWEB系は当然の事ながら担当するのでそれはそれで仕事くださいw

さて、最大の問題は

日常的に参加している岡山の勉強会の交通費

ですねw
今まで全く気にせず岡山に行ってましたが今後はコストが僕のMPで賄うことになります。
取り急ぎは7月末まで定期があるのですが8月以降は交通手段を考えなきゃいけません。
また平日開催の勉強会も色々と難問が出てきます。
特に主催で毎月開催の岡山Python勉強会が最大の課題w
これを機にNSR250復活させたいなーとは思ってますがこれは嫁ゲージ2本使ってもカバー出来ないので難しいかなぁと思ってます(´・ω・`)

ということで そーだい=現在の職場 と一部に認識されてましたが変わることになりましたのでご周知をよろしくお願いします。
あと、こういうイベント時にはコレを置いとくと幸せになれると聞いたので干し芋リスト置いておきますね。

私は真に驚くべき​欲しい物を​見つけたが、この​余白はそれを書くには狭すぎる