またどこかでCTOっぽいことやってる人のブログ

フリーランスを経て、またどこかでCTOっぽいことをやってる人が書いてます。何か色々やってます。

新しいブログを作ってみた

福岡に移住してから6年ほど経ちました。
移住というか生まれは福岡なので「戻った」という表現が正しいのですが、それはさておき。

フリーランスは2年弱で辞めまして、今は企業勤めです。
最初から2年しかやらないと決めていたので予定通りと言えばそうなります。
昔ほどゴリゴリ書くことは少なくなりましたが、今でもソースコードは書いています。
AWS + Terraformが多いような気もしますがCakePHPも相変わらず触っています。

このブログも相当昔に作ったものなので、内容も技術も陳腐化してますし古いものになっています。
潰してしまってもよかったのですが、何故か今でもアクセスがそこそこあるのでそのままにしておきます。


自分の備忘録のようなものを兼ねて、別のブログを作ってみました。
技術ブログというには…と我ながら思うのですが、リンクを貼るだけ貼っておきます。

petit-code.hatenablog.jp


折を見てちょこちょこ記事を増やせればいいなと思っています。

技術ブログっぽいものを作ろうかと思った。

最終更新が2019年。
今は2021年。だいぶ期間が空きました。

福岡に移住というか戻ってから1年半、また福岡のIT企業でCTOっぽいことをやっています。
コードも書いてます。管理やら何やらもしています。色々何かしています。
このブログ、割と放置していたんですが今でもそこそこアクセスして頂いているようで。
CakePHPjQueryライブラリの記事に寄っているので、今だとそこそこレガシーですね。
とは思うのですが、多少のニーズはあるのかもしれません。

最近はCakePHP4触ったり、たまに気まぐれでLaravel書いたり。
使ったこともないGo言語採用してみたり、シャレでReactやってみようと提案したり。
楽しくやっております。

最初、このブログの記事をリライトしようかと思ったのですがそれはそれで微妙かなと。
なので数年ぶりにローカル環境にWordpressなどをインストールしてみたりしました。
相変わらずWordpressPHPソースコードは狂ってますね。
こんなイカレたものでPHP勉強中です!とか言ってる人がいるのはどうかと思います。
WordpressPHPは罵倒するためにあるのです。DB設計とか論外。

でもまぁ便利ですよね。何も考えずにサイトできますし。
どこかのすごい人たちが作ってくれた無料テーマもありますし。
Wordpressで何でもできると思ってる人さえいなくなればいいんですが。

というわけなので、せっかく触ってるCakePHP4の記事とか何かそういうのをボチボチ書いてます。
そのうち公開できればいいなと思っています。
アフィ貼って大儲けだー(棒読み)

まぁ元気です。
福岡はごはん美味しくて非常によいです。
娘さんは2021年1月時点で2歳半になりました。元気に育っています。

あ、そうそう。
福岡は可愛い子が多いと世間でよく言われていますが、あれは本当です。

と近況報告も兼ねて久しぶりに投稿。

福岡に移住することにしてみた。

2019年とやらももう少しで折り返しのようです。
歳をとると1年過ぎるのが非常に早いです。


昨年生まれた娘さんも11ヶ月になり、日に日にスキルが増えている気がします。
寝返り→ハイハイ→捕まり立ち→手放し立ち
そろそろ歩き始めるんじゃないかななどと思っております。
さらに目が離せなくなりそうな気配です。


そう言えば、元バーテンでイラストが趣味であるうちの奥さんがLINEスタンプを作りました。
うちの娘さんをそのままキャラ化しています。
よろしければプレビューなど見て頂けると嬉しいです(宣伝)

store.line.me


さて。
タイトルの通り、福岡に移住することにしました。
2019年7月からは福岡市民になります。
元々福岡生まれで福岡 + 埼玉育ちですので正確には移住ではなくUターンなのですが、小学校の時に埼玉に転校してからずっと埼玉にいるので移住気分です。


ただ、福岡時代の小学校同級生とは連絡をとっておりまして、飲みに行く相手もいるような状況で恵まれています。
Facebookで何となく名前検索して、小学校ぶりに突然メッセージを送りつけるスパム行動をした結果です。
割と事案レベルではないかと思ってしまいます。


そんなわけで、今は送別会ラッシュのターンです。
昔の仕事仲間や現場の方々。
地元の面々や大学の同級生などなど、色んな方々が送別会を開いてくれて嬉しい限りです。


しかし困ったことに、福岡に行って何をするか全く決まっていません。
引っ越しに全振りしていたので、仕事すら決めていません。
SESに全く抵抗がないタイプなので、どこか紹介してくれるとこないかなぁと最近ググり始めたぐらいです。


つまり、このままだと移住した瞬間詰む可能性が十分にあります。
路頭に迷う移住者なんてドキドキしますね。


エンジニア的な何かをしようとは思うのですが、コネもアテもツテもありませんのでゼロからスタートです。
また福岡で新しい出会いとか、いい縁などあればいいなぁとぼんやり考えています。
やりたいことと言うか、作りたいサービスもあるのですがマネタイズまで遠そうなのでチマチマやります。
根底にあるのは「どこかの誰かにありがとうと言ってもらえるようなサービス」です。
ここだけはブレずにやっていきたいと考えています。


とりあえず、このはてブに買いた数々の記事をリライトしたのでブログ引っ越しなどを考えています(デジャヴ)
特にCake3系の記事がだいぶ古かったりするので、一部はいいですが使い物にならないものも多々。
ちなみにアクセスが一番多いのは、datatablesとfull calendar関連の記事です。
Cake3関係ありませんね。


でも、Cake3は皆様あまり興味がないようで。
Cake4がリリース近いよ!などと流れていても、さっぱり盛り上がりません。
Laravel大人気ですね。みんなLaravel。
Laravelめんどくさいと思うんですけどね、個人的には。

という近況報告でした。

CakePHP3.7になってた。

久しぶりに記事書いた気がします。
最近は子育てばかりしています。
娘、可愛いです。
服を買うのが楽しくて仕方がありません。

最近のわたし。

さて。
今はフリーランスとして某社のお手伝いをしていますが、そこではLaravelでの開発でした。
と言っても、Vue.jsを使うわけでもなかったのでLaravelらしさがあまり感じられませんでした。
Laravelの知見がある開発者が1人もおらず、なおかつ大部分の開発者が逃g
とかいうカオスな現場でしたが、先日リリースまで辿り着きました。

ソースがすごいカオスですけどね

コーディングルールも何も決める時間もないまま見切り発進した結果かもしれません。
これだったらガチガチ規約のCakePHP3で作った方がよかったんじゃないかなと思いました。

CakePHP3のバージョンが上がってた。

というわけで、しばらくCakePHP3を触っていなかったわけですが久しぶりにプロジェクト作ってみたら割と変わっていました。
本ブログの記事もCakePHP3の初期の初期頃からチマチマ書いていたので、今となっては古い情報も多々ございます。
なのですが、CakePHP3の検索ボリュームの割には結構アクセスが多くちょっと申し訳ない気持ちにもなります。

近いうち、記事をリライトしてサイト毎引っ越してしまおうかなと考えています。
最近のLaravel大流行から考えると「CakePHP3とかwwww」かもしれませんけど。
いきなり全部引っ越しはアレなので、またチマチマやっていきます。
環境構築とかその辺も含めてリライトしたいなと思っています。

個人的なアレ

本当に個人的なアレです。
Laravelは初心者に向いてる!とかたまに見ますが、自分はそう思えませんでした。
自由度が高いとか、カスタマイズ性があるとかは確かなのですが、どこに何作ればいいかわかんなくね?的な。
「おう。ガチガチ規約で縛ってあっから、お前ら俺の言う通りに作れよな!」スタンスのCakePHP3の方が楽なんじゃ…と少々。

動けば何でもいいんですけどね

2018年を振り返ってみた。

2018年も残すところあと1日になりました。
振り返ると、今年は色々ありました。

フリーランスになりました。

これまで正社員としてエンジニア、途中で取締役CTOになったりしましたがフリーランスデビューしました。
Twitterなんかを見ていると、遅咲きもいいとこです。
フリーランスになって困ったことは、現時点では特にありません。
仕事なかったらどうしようと思わなかったわけではないのですが、まぁ何とかなるだろうと。
結果、仕事にも困らず日々お仕事できています。

フリーランスになったから、今まで相談できなかったこと(会社との兼ね合いとかだと思います)が相談できるようになったとか言われるのは割と嬉しいことです。

娘が生まれました。

若い頃、仕事ばかりしていたので結婚は遅い方だったのですが、2018年の七夕に娘さんが生まれました。
ちゃんと子育てもしています。
びっくりするほど可愛いです。

「これが親バカってやつなんだろうな」などと思っているのですが、非常に可愛いです。
子供が生まれると仕事のやり方とか考え方が変わるなんて聞いたことがありますが、あれは本当でした

Laravelで業務開発しました。

エンジニアぽいことも一応。
前々から興味があったLaravelを使ったサービス開発をしました(現在の業務です)

普通に開発はできますが、フォームバリデーションが自分には合いませんでした。
と、慣れもあるとは思いますが出来上がったソースがどうも美しくない。
色々設定を書かなければいけないようなので、ごちゃっとする印象です(知識がないだけの可能性も当然あります)
またどこかでちゃんと触ろうとは思っています。
もっと時間に余裕がある時に。

2019年にやりたいこと。

時期は未定ですが、起業するつもりです。
最終的に作りたいものは、数年前からコツコツ作って作り直してを繰り返しているサービス。
そこに到るまでに相乗効果を生み出せそうなサービスを複数考えています。
全てカタチになるかわかりませんし、口だけで終わる可能性も勿論あります。
が、こういうことをやりたいと話をして賛同してくれる方がいるのもまた事実。

しばらくは1人で好きなようにやるつもりです。
仕事自体は好きですし「ぼくのかんがえたさいきょうのさーびす」をガリガリ作るのも楽しいかなと。

それよりも重要なのは「娘に嫌われない父親になるには」を実践することです。
今のとこはまだ大丈夫そうです。

2019年もどうぞよろしくお願い致します。

CakePHP3のbeforeMarshalが便利だった。

Webエンジニアになって何年か経ちますが、Webページに表示される全角英数が嫌いです。
「半角にしてくれよおおおおおおお!!」とよく思います。
全角の方がナントカとか、全角じゃないとダメな時がナントカみたいな話もあると思いますが、嫌いなんです。
ちなみに、半角カナも嫌いです。

昔やってた手法

何も言われなければ、全角英数字は勝手に半角に変換してしまいます。
半角カナは全角カナに変換してDBにブチ込みます。

たとえ会社名だろうが名前だろうが、問答無用で変換します。
そんな時はコントローラで変換したパラメータをモデルに渡していました。
でもある時気がつきました。

なんかダサくね?

調べてみた

調べてみると、CakePHP3には「beforeMarshal」とかいうコールバックがあるそうです。

https://book.cakephp.org/3.0/ja/orm/table-objects.html#beforemarshal

「Model.beforeMarshal イベントは、リクエストデータがエンティティーに変換される前に発行されます」

これじゃね?

使ってみた

モデルかビヘイビアで実装できるようです。
一度ビヘイビアで実装してみたのですが、イマイチでした。
対象のモデルの中で使う方がわかりやすくていいんじゃないかと思います(個人的なアレ)

要は「エンティティに変換される前に変換しますよ」なので、全角から半角にしたりTrim処理したり。
文字列自体を置換したり、そんなことを勝手にやってくれるぽいです。
エンティティに変換される前なので、save処理実行前なんでしょう。

モデルの中でこんな感じに書きました。
モデルだけbakeする派なので、useしている部分は追加分以外は自動生成されたものです。

<?php
namespace App\Model\Table;

use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;
use Cake\Event\Event; // これ追加
use ArrayObject; // これ追加

class UsersTable extends Table
{
  public function initialize(array $config) {
    parent::initialize($config);

    $this->setTable('users');
    $this->setDisplayField('id');
    $this->setPrimaryKey('id');

    $this->addBehavior('Timestamp');
  }

  /**
   * データ変換
   * @param \App\Model\Table\Event $event
   * @param ArrayObject $data
   * @param ArrayObject $options
   */
  public function beforeMarshal(Event $event, ArrayObject $data, ArrayObject $options) {
    
    if (isset($data['user_address'])) {
      // 全角英数字を半角に変換 + 半角カナを全角カナに変換
      $data['user_address'] = mb_convert_kana($data['user_address'], 'Ka');
  }
  /* 以下略 */
}

こんな風に書くとsave前に上記の例だと半角英数に変換 + 全角カナに変換してエンティティに渡されます。
エンティティ生成時なので、フォームで入力されたPOSTデータが渡ってくる想定です。

きっと、もっと便利な使い方あると思いますがとりあえず満足したので十分です。
脳内ではマーシャルアーツさんと呼んでしまう、KOFではテリー派だったわたし。

CakePHP3でAuth認証エラー時のElement変更してみた。

気がついたら10月も後半に差し掛かっていました。
なんかやっと寒くなってきたんじゃない?というような感じです。

そう言えば、8月の終わりから某会社でフリーランスやっています。
開発メインのつもりだったのですが、内部調整とか客先ミーティング参加とかもしてます。
久しぶりの感覚で結構楽しいです。

と、私事なのですが7月に娘さんが生まれまして。
子育てなどもしながらフリーランスを楽しんでおります。
子供が生まれた月に会社辞めたのはご愛嬌。

やりたかったこと

本題です。
今、個人でちょっと開発しているWebサービスがありまして、その管理画面はBootstrapで作っています。
※最近になってBootstrap4使い始めました。

で。
エラー時に表示されるFlashメッセージのテンプレートを変更したいなーと思いまして。

src/Template/Element/Flash/

この辺にあるやつです。
何もしないとerror.ctpが使われます。

何で変更したかったのか

Bootstrapのテンプレートを使っているんですが、ログイン画面のレイアウトが小さめなんです。
で、error.ctpは連想配列でも配列でも、ただの文字列でもBootstrap風味に表示できるようカスタマイズしています。
そのまま使っても問題ないのですが、ログイン画面レイアウトサイズ的にフォントサイズを小さくしたかったのです。

ただそれだけなんです。

普通のAuth認証エラー時

何も設定しない、且つログイン画面にFlashメッセージをレンダリングしていた場合は「error.ctp」が問答無用でセットされます。
なので、ここを変更すればいいわけです。

Flashテンプレートを変更する

変更方法は簡単です。
Auth認証のところでFlashメッセージを変更してあげるだけです。
多分、以下のようになります。

<?php
class AppController extends Controller
{

  /**
   * Initialization hook method.
   *
   * Use this method to add common initialization code like loading components.
   *
   * e.g. `$this->loadComponent('Security');`
   *
   * @return void
   */
  public function initialize() {
    parent::initialize();

    $this->loadComponent('RequestHandler', [
      'enableBeforeRedirect' => false,
    ]);
    $this->loadComponent('Flash');
    $this->loadComponent('Security');
    
    $this->loadComponent('Auth', [
      // ログイン処理を実行するControllerとAction
      'loginAction' => [
        'controller' => 'users',
        'action' => 'login',
      ],
      // ログイン成功時にリダイレクトするControllerとAction
      'loginRedirect' => [
        'controller' => 'tops',
        'action' => 'index'
      ],
      // ログアウト処理後にリダイレクトするControllerとAction
      'logoutRedirect' => [
        'controller' => 'users',
        'action' => 'index',
      ],
      'authenticate' => [
        'Form' => [
          'userModel' => 'Users', // Auth認証時に使用するモデル(テーブル複数形)
          'fields' => [
            'username' => 'user_name', // Auth認証時にユーザ名として使用
            'password' => 'user_password'       // Auth認証時にパスワードとして使用する
          ],
          'scope' => [
            'is_deleted' => 0, // Auth認証の追加条件として使用するモデルの対象カラムと値(削除フラグなど)
            'role_type_id IN' => [1, 2, 3, 4]  // ユーザ権限とかチェックする時
          ]
        ]
      ],
      // Auth認証エラー時のエラーメッセージ
      'authError' => ['ログイン認証が切断されました。<br />恐れ入りますが再度ログインして下さい。'],
      // ここでElement設定
      'flash' => [
        'element' => 'error_login'
      ]
      // ここまで追加
    ]);
  }
}

src/Template/Element/Flash/ の配下に「error_login.ctp」というものを準備しておいて、Auth認証設定でそのファイルを指定してあげるだけです。

冗長だなーとは思うのですが、他にいい方法が思いつかなかったのでこういうやり方にしてみました。
error.ctpとerror_login.ctpを作っておいて、共通部分は別のElementを呼んでもいいと思います。


という小ネタでした。