gorogoroyasu

福岡の開発会社で働いている。

PHP BLT に参加してきた話

PHP BLT

PHPBLT とは、簡単に言うと、PHPネタについてLT をしようという企画のようです!
fukuokaphp みたいな感じですね。

今回は、メルカリさんのオフィスを会場にして行われました。

六本木ヒルズ
f:id:adiboy:20170820153958j:plain

ビルの中に入るのが難しいww

会場に入ると、こんな感じで飲み物と食事が準備されていました。
とても美味しかったです!!
f:id:adiboy:20170820154325p:plain
ちなみに、こちらのお食事、一人の方が作られていて、スケールアウトできないのだとか。
いいTシャツ有るんですけどね。

早速、LT!

koyhoge さん

PSR12 についての発表でした。
なんと、PSR は誰でも提案できるらしいです!(英語)
実際に発行済み 8つ 提案中 15個なのだとか。

PSR2 は、2012 年の規約で若干古くなってきたので、
PSR2 を内包するような形でPSR-12 が策定されようとしているそうです。

登壇資料はこちら!
https://speakerdeck.com/koyhoge/psr-12

まみーさん

ちなみに、まみーさんは、闇のエンジニアらしいです。
まみーさんの呼びかけにより、闇のエンジニアが挙手しましたが、けっこう多かったです。
(※ 闇のエンジニア: DB に画像を保存したことがあるエンジニア)

本LTのまとめ
画像の保存にDBは使わないほうがいいよ
楽だからDBに画像保存はよくない
パフォーマンス・コストとのトレードオフ (覚悟が必要)
しっかり計画しておく (あとで困らないように)
RDB の責務を考えましょう

資料はこちら
https://speakerdeck.com/mamy1326/put-the-image-in-the-rdb-advantages-and-disadvantages

hanhan1978 さん

キャッシュの話。
ISUCON も迫ってきたので、キャッシュ速度の話をしよう という発表でした。
目標は、キャッシュすることにより、1万レコード全件取得する時間が MySQL より速くなること。
MySQL にindex を貼ってたかどうか聴き逃しました。
たぶん、発表資料に書いてあるはず。

結論は、
mysql は偉大です。
Redis に頼りっきりはよくない
IOはコストがかかる
とのことでした。

ちなみに、

  • 大量データを低コストで華麗に読み込む方法
  • Cache にすべきかどうかは要検討らしい

を募集しているそうです。
これ! という解決策をお持ちの方はぜひお知らせください!

なお、議論が分かれるところだったらしく、
memcache は? とか、 全件Select するならCache の意味ないじゃん みたいな質問が飛び交いました。

rela1470 さん

API 仕様書が気づいたらExcel になってた話

資料はこちら

speakerdeck.com

API 仕様書がなぜExcel になってしまったのかが、
時系列で書かれていました。
大事なところですが、正確には、Excel ではなくSpread sheetに落ち着いたそうです。
最低限の人権は保証されている と主張されていました。

ちなみに、Insomnia Teams が、便利らしいです。
(詳しくは発表資料をご参照ください!)
あ、あとこちらもよい案があれば教えてほしいとのことでした!

LEE さん

残念ながら、資料が見つかりませんでした。
上げてください!そして、上げたら @gorogoroyasu までメンション飛ばしてくださいw

韓国の、Leeさんの発表でした。
デザインパターンの話が勉強会で言及されにくいのはなぜか?という話に対する問題提起でした。

なぜあまり論点にならないかの考察は、主に以下の3点でした。

  • 実コードを見ながらやる必要があるから?
  • 他人にどうこう言われる必要はない?
  • 宗教戦争になる?

ちなみに、LEE さんは、ドリフト仲間募集中らしいです。
命知らずの方 興味有る方はぜひ!

KazuakiM さん

vim for php
PHP を書くのに vim を使いましょうという話でした。
この手の話で必ず挙がるのがPhpStorm の使用者の話ですが、
今回もご多分に漏れずPhpStorm 愛用者の挙手イベントが発生しました。
およそ半分ぐらいが使ってる印象でした。
想像以上におおかった。
あ、ちなみに僕もついにJetBrains AllProducts に課金したので、PhpStorm ユーザーです!
Atom 好きなんだけどなー。
ということで、突然ですが、Atom のいいところを発表しようと思います(以下略)

tenkoma さん

社内のSVN を全部GitLab に移行しました!!
だそうです。

又、CakePHP3 x Circle CI の環境を構築されたそうです!

この話超面白かったので、
ブログでまとめてほしいと思ってたら、ポストが出てました!
ほんと、ブログ枠で参加しといて登壇者より出すの遅いとか申し訳ありません。。。

tenkoma.hatenablog.com

Circle CIの話、参考にさせていただきます!

chiroruxx さん

phpDoc のおさらい

初PHPBLT && 初LT だそうです!
素晴らしいですね!

仕様を書く場所は
- phpDoc
- phpspec
- 仕様書
- ユニットテスト
- コード
のように色々ありますが、その中でPHPDoc を使うとこんなにいいことがあるよ という話でした。
自分もけっこうPHPDoc 育てる派ですw

休憩!

ここから、魔の休憩時間が始まりました。
何が “魔” か?

それは、ビルの構造が複雑なこと。
トイレを探して、色々歩き回った結果、ビルの中で迷ってしまいました。
休憩時間5分だったのですが、
戻ってきたのは10分後。

ということで、

Hirakuさん

さんの発表を聞けませんでした。
大変申し訳ありません。
PHPの現場、拝聴しました!

p さん

テスト時のモックライブラリの話。

スプラトゥーンやってるそうです!
テスト大事ですよね?
最近レガシーなプロダクトをバージョンアップしつつ、
テストも鋭意追加されているそうです。

Prophecy というものがおすすめだそうです。
もちろん、新規開発とレガシーコードの保守という役割の違いによるステージの違いもありそうですが。

ちなみに、考えた話なので、これから実践されるそうです。

実践して困った話についてもお聞きしたいですね!

資料はこちら!

speakerdeck.com

きのこたけのこ さん

たけのこのほうが好きらしいです。
言い切っちゃう辺り、すごいですね!

koemu さん

外部API は、いつか切り替えなきゃいけないですよね。
僕は、その準備ができてませんでした。

ドメインクラスを使うとよさそう らしいです。
やっぱ、密結合は辛い。

という話でした。

ぶっちー さん

PHP機械学習をしようという話で、
PHP-ML というライブラリの紹介でした。
PHP のなんでもあるところが大好き とのことでした!
素晴らしい!

ちなみに、自分も最近機械学習に足を突っ込んでるので、
とてもおもしろい話でした。
できることはpython製ライブラリ に比べると少ないそうですが、
PHP で書かれているというところがワクワクします。

YuichiKishimoto

PHP Beginner がぶち当たった壁の話!でした。

ざっと説明すると、
- Fat Controller になるよねー
- Fat Model になるよねー
-> MVC固執せず、自由にクラス分割しましょう!
という話でした。
また、

phpunit でテスト書いてます。
no test no life 

だそうです!

書いたほうがコスパ高いとおっしゃっていました。
まあ、後々のこととか考えるとそうかも と思いました。

きりん さん いいレビュイーになるには? という話でした。
基本みんな忙しい(暇な人は会社やばいかも?)
そこで考えたのが、
“厳正な抽選を hubot で行う"という方法。
これについては、昨年PHPConference のLT で発表しました!

この時の話は、レビュアーに強制的に仕事を振っていくのが解決策だ というのが結論だったそうです。

しかし、レビュイーもけっこうデキることが多いのでは?と感じられたとのこと。

具体的には、
- github テンプレートはいいぞ!
- todo の洗い出しもデキるぞ!
- GFM 記法で書くといいぞー

という話でした。
tips がいっぱい詰まってるので、スライドを是非御覧ください!

scrapbox.io

最後に、@cocoitiban さんによる、飛び込みLT がありました。
昔の話 ということで、聴衆の大半を置いてきぼりにするガラケーの話がありました。
自分が PHPカンファレンス福岡のLT で発表したガラケーの話にも少し触れて頂きました。
PHPの現場podcast でも言及されておりますので、よろしければ!

php-genba.shin1x1.com

福岡から東京に進出してきて2ヶ月、
東京は、色々な勉強会があるなーと感心しています。

もう少しおりますので、色々参加させていただきます!
よろしくどうぞ!

複数のGPUを積んだマシンで、未使用のGPU を選ぶやつ作った。

タイトルが難しい。

とりあえず、作りました。
github.com

作り方はとっても簡単。

nvidia-smi

コマンドたたいて、結果をCSV で受け取るだけ。

使い方はもっと簡単。

使い方

from get_unused_gpu.main import get_unused_gpu


os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = str(get_unused_gpu())

python のお作法は知らないので、git clone して、適当に使ってください。

PyPI 一応登録はしたものの、ちょっと怖くて使えてません。
気が向いたら登録します。

とりあえず、自分用です。
なんか、こんなブログですいません。。。

あ、ちなみに、

gpu temp: under 40°C
utilization.gpu: 0 %
utilization.memory: 0 %

が未使用と判定する条件です。
時系列情報とかとってないし、同時に処理が実行されたときのこととか関係ないのであしからず。
あと、現状使用可能なGPU がない場合 exit() してるので、止まります。
PiPY 登録するときは、最低限この辺きちんと作らなきゃなー

ギガの大切さを考える。その画像、必要ですか?

1月ほど前まで、自分はWeb 開発をしていました。今は、pythonista になるために、日々精進しています。
閑話休題
そんな話をしたかったのではありません。今日は、ギガの大切さの話をしたいのです。(自戒の念をコメて)
そもそも、なぜこんな気持ちになっているか。それは、現在の仮の住まいに、インターネットが通っていないからです。つまり、何をするにもギガを気にしなきゃいけないわけです。
そんな中、一番困るのは広告。よっぴーさんの記事にて一時期議論になった話に似ています。広告記事には [PR] を入れろ云々という話です。 (ギガの関係上リンクは割愛させていただきます。)
でも、少し論点は違います。上記の記事で言われてた話は、

広告記事なんか見たくないからそもそも見せるな

という話です。が、僕が言いたいのはそんなことではなく、

無駄に画像をボコボコ貼って、ギガを消耗させるな!!

という話です。

皆さん、知ってました?画像って、重いんですよ?
キャッシュされるからいい? 後ろにクエリストリングを追加するだけで毎回ダウンロードするんですよ?

まあ、画像のダウンロードでギガが減るのは一部しょうがない部分もあります。非常に有益な画像が落ちてくることだってある。(難しいアルゴリズムを図にして説明してくれてたりとか)

でも、落ちてくるのがそんな画像なことって、めったにないんです。AB◯ Mart の広告だったり、スマホの下の方でピコピコ動く画像だったり(この場合、無駄なJS もダウンロードしてることになる)

その画像、ほんとにギガがない人にとって重要ですか?  
そんな高画質な画像を送ってくる必要ありますか?  
テキストじゃだめですか?  

一番むかつくのは、 facebook にプロモーションで上がってくるリンク。あいつら、クリックすると、画像だらけの 記事のタイトル一覧のページに遷移させやがる。。その記事みたいからクリックしたのに、なぜその記事に遷移させないのか。。。
ついつい言葉が汚くなってしまった。
そんな記事あったら、基本的に見ないようにしてます。が!!それでもギガは減るのです!!!

先月まで自分は、ギガは水よりも安いと思っていました(自宅マンションはネット無料)。
でも、そんな人ばかりじゃないんです!!!

あと、ギガに比例して、通信速度の問題もあります。先月まで自分は、ネット?それ光の速度が上限でしょ? と思ってました(自宅も職場も光回線)。でも、今は違います。128kbpsです。もう少し、ギガが貴重な人向けの仕事をしませんか??

ということで、なんか便利なやつ作ろうかなと思います。画像をダウンロードしないブラウザとか(Feedly のアプリ内ブラウザで実現できてるなら技術的には可能なはず)、画像を圧縮してくれるサーバーを経由したWeb アクセスとか(お金かかりそう)。
このままではダメだ!(rebuild.fm かなにかのpodcast で、新興国向けにそんなサービスがあるという話を効いたことが有る気がする。SSLが問題とか言ってた気がする。。。まあ、そこは追って考えよう。) 皆様のギガを考慮して、改行をなるだけ減らしましたので、多少読みづらさはあるでしょうがご勘弁ください。。 あと、追加30GB(5000円)買いましたことも申し添えておきます。

PHPカンファレンス福岡2017 行ってきました

大変遅くなり申し訳ありません。
ブログを書くまでがPHPカンファレンス
ということで、今日で僕のPHPカンファレンスが終わります。

2017 年 6 月 10 日に、福岡ファッションビルにて、PHPカンファレンス福岡が開催されました。
その、感想などを書いていきます。

前夜祭
PHP カンファレンス福岡では、例年前夜祭が行われているらしいです。
今年は登壇する予定もあったため、正式にオファーを頂き、参加させて頂きました!

よく名前を聞く人や勝手にTwitter フォローしてる人がすぐ側にいたりして、
異様な光景が広がっていました。
(写真なし。)

前夜祭 2次回
赤坂辺りにある、エールズというお店で二次会が行われました。

retty.me

ビールが美味しかったです。
ここでは、最近流行りの開発手法について、色々とお話させて頂きました。
非常にためになる話を聞けて良かったです。
(写真なし)

前夜祭 3次回 うまいラーメン屋があるということで、前夜祭3次回を行いました。
僭越ながら、私がお店を勝手に決め、先導させて頂きました。
食後の写真で恐縮ですが、写真はこちら。(替え玉したあと)
f:id:adiboy:20170615083538j:plain

ちなみに、道中にあった一心亭も、福岡の有名なラーメン屋さんです。

麺物語|一心亭|こだわり

元祖長浜屋の参考記事を貼っておきます。
福岡出身の人に「元祖(もしくは「がんなが」)言ったよー」というと、伝わると思います。
伝わらなかったら、その人は似非福岡人です。(言い過ぎ)
menmusubi.com

こんな感じで、福岡の夜はふけていったのでした。

当日

早朝

朝早くから前夜祭でお会いした方々がスタッフをされていました。
本当に頭が上がりません。
いつもありがとうございます。

開会式

スポンサー紹介で、弊社 Fusic のロゴが全面的に表示されました!

(イメージ図)
http://realid-inc.com/column/assets_c/2014/09/8cfa0ba8402f3b67686f0744b7e58dc7a67ae9c9_large_2x-thumb-560xauto-2098.jpg
(写真引用元: http://norirow.com/archives/17511)

(本物)
f:id:adiboy:20170615084154j:plain

ほぼ一緒ですね!

スポンサーセッション

なななんと、スポンサーセッションに登壇させて頂きました。
数百人の前で話すのも始めてなら、技術の話をするのも初めてでした。

[プラチナスポンサーセッション] speakerdeck.com

こちらでは、自社サービスを題材に、若手が何を考えてサービスを作っているかなどについて発表させていただきました。 そして、ありがたいことに幾つかのブログで言及して頂きました。
スポンサーセッション、裏番組がないところで、我慢して聞いてくださっていた方も多いと思いますが、
少しでも得られるものがあれば嬉しいなと、心から思っています。

次回はもっといい発表をすることをここに誓います。

Ask The Speaker

発表から少し時間をあけて、Ask The Speaker がありました。
誰も来ませんでした。。
(スライド2枚しか見てない方は来てくださいましたがw)
少し反省しました。
確かに、目新しいことは何も言っていなかったな。。。 と。
次回からはいっぱい質問していただけるよう頑張ります!

LT

LT では、ガラケーの世界の話をしました。
speakerdeck.com

Twitter 上で意外と反応してくださっている方々がいて嬉しかったです。

参加させていただいたセッション

多くのセッションに参加させていただきました。

既に多くの方のブログで紹介されているので個々の感想は割愛させていただきますが、
1つだけ書かせて頂きたいと思います。

Hack/HHVMの最新事情とメイン言語に採用した理由

参加者がそこまで多くなかった点だけが残念なところでしたが、
今回参加したセッションの中で一番興味深い発表でした。

なぜ Hack を使ったのか。
Hack を使う上での注意点は何か
など、初心者にも分かりやすくHack の魅力を伝えてくださいました。

実際、PHP7 になって実行速度も変わらないし、
型を利用することができるようになった世界でどのようにHack が生き残っていくのか疑問に思っていたのですが、
そのヒントが散りばめられた発表でした。

僕も、こんな発表ができるようになりたいと、切実に思いました。
自分はPHP 使ってますが、 Nuclide はじめました。(リモートへの接続とかは使ってないですが。。。)

お知らせ

今月末から東京にいることになったので、
東京にいらっしゃる方とか気軽にお声がけいただけると幸いです!!
ご連絡はこちらまで。
twitter.com

ということで

来年もあるとかないとか噂がありますね!!
自分はスタッフをやっていないので何も言えないですが、
できれば開催していただきたいです!
そして、もし来年開催されるなら、
スタッフとして緑色のTシャツをゲットしたいです!!!<- 宣言の力

今年も、ありがとうございました!

タブ区切りのファイルからPHP の配列を作り出すためにやったこと。

タブ区切りのファイルからPHP の配列を作り出すためにやったことを書いていきます。

やりたかったこと。

[
    ['hoge' => 'name1', 'fuga' => 'namae1'],
    ['hoge' => 'name2', 'fuga' => 'namae2'],
    ['hoge' => 'name3', 'fuga' => 'namae3'],
    ・
    ・
    ・
];

みたいな配列を作りたかった。

元データは、

hoge fuga
name1 namae1
name2 namae2
name3 namae3
name4 namae4
name5 namae5
name6 namae6

みたいなの(読み込むやつ.csv)。これがTSV になってた。

とりあえずググった。見つけたのはこれ。

qiita.com

なるほど。CSV ならうまいこと変換できるのか。

ということで、おもむろにatom を開き、 tab を全部 カンマに置換した。
これで、CSVの完成(たぶん)

書いたコードはこんだけ。

readCSV.php

<?php

$file = new SplFileObject('./読み込むやつ.csv');
$file->setFlags(SplFileObject::READ_CSV);
$array = [];
foreach ($file as $line) {
    $array[] = [
        "'hoge'" => "'".$line[0]."',",
        "'fuga'" => "'".$line[1]."',",
    ];
}
print_r($array);

そして、
php readCSV.php > text.txt

を実行。
できた配列の書き出しとか作るとめんどくさいからね!

そして、text.txt をエディタで開く。
ARRAY が含まれている行を全部削除
-> ([に全置換
-> )],に全置換

これで、全部配列に変換された。

一件落着。

全部変換してくれるプログラムが理想だけど、
別に何度も使うものじゃなかったら、これぐらい手動のオペレーションがあってもいいよね?

後日談

頑張ったのに、こんなのあった。 このスクリプト使えば、 TSV -> 配列の変換簡単じゃん!
tab をカンマに置き換える とかしなくてよかったじゃん!

qiita.com

とおもったけど、後の祭り。
ということで、皆さんご自由にお使いください(ほとんど丸コピだけど。。。)

なにはともあれ、出来る限り簡単にデキるようにつくったから、ダメージはほとんどない。
よかった。

空のフィールドに独自のバリデーションをかける方法

CakePHP3 を使っていて、少し特殊なバリデーションを書く機会に遭遇した。

例)

add.ctp

$this->Form->create($entity);
$this->Form->input('hoge');
$this->Form->input('fuga');
$this->Form->submit('submit');
$this->Form->end();

ExamplesController.php

public function add()
{
    $entity = $this->Examples->newEntity();
    if ($this->request->is('post') {
        $tmp = $this->Examples->patchEntity($entity, $this->request->data);
        if ($this->Examples->save($tmp) {
            // something
        }
        $this->set(compact('entity'));
    }
}

という状況で、

fuga に値が入っている場合は、hoge は何か入力されている必要がある。
hoge に値が入っていても、fugaに値が入っている必要はない。

という仕様を考える。

一番簡単なのは、

ExamplesTable.php

public function validationDefault(Validator $validator)
{
    $validator
    ->allowEmpty('hoge');
    $validator
    ->allowEmpty('fuga')
    ->add('fuga', 'custom', [
    'rule' => function ($value, $context) {
        if (!empty($context['data']['fuga'] && empty($context['data']['hoge']) {
            return false;
        }
        return true;
    },
    ['message' => 'fuga を入力する際は、hogeも入力して下さい']
    ]);
}

を使って書いていく方法だろう。

ただ、この方法には問題がある。
それは、
「fuga を入力する際は、hogeも入力して下さい」というメッセージが
fuga に対して出現することだ。

本当に指摘したいのは、"hoge" が空欄であることなのに。。。

そして、そのための方法として考えられるのが、

$entity->errors();

を利用してエラーをセットすること。

しかし、残念ながら、 ‘fuga'につけられたエラーを unset する方法を見つけることができなかった。

とうことで、あえなく断念。
たぶん何か方法があるので、ご存じの方は教えてください。

次に考えつく方法は、

public function validationDefault(Validator $validator)
{
    $validator
    ->add('hoge', 'custom', [
    'rule' => function ($value, $context) {
        if (!empty($context['data']['fuga'] && empty($context['data']['hoge']) {
            return false;
        }
        return true;
    },
    ['message' => 'fuga を入力する際は、hogeも入力して下さい']
    ]);

    $validator
    ->allowEmpty('fuga');
}

だ。
しかし、この方法はうまく機能しなかった。

$this->request->data['hoge']が空文字の場合、
Validation をすり抜けてしまうからだ。

ということで、最終的に見つけたのがこちら。

public function validationDefault(Validator $validator)
{
    $validator
    ->allowEmpty('hoge', function ($context) {
        $hoge = $context['data']['hoge'];
        $fuga = $context['data']['fuga'];
        if (!empty($fuga) && empty($hoge)) {
            return false;
        }

        return true;
    },
     ['fuga を入力する際は、hogeも入力して下さい'']
    );

    $validator
    ->allowEmpty('fuga');
}

という書き方だ。

https://api.cakephp.org/3.3/class-Cake.Validation.Validator.html#_allowEmpty
に書いてある。

この方法を使えば、上記の例の要な場合も簡単に対応できる!
いやー、便利ー!

CakePHP3 on Atom

Advent Calendar 2日目です。

本当は、"新卒がCakePHP3を半年ぐらい勉強した話 など" を書こうかと思っていましたが、
Atom の Advent Calendar も空いてたのでAtomCakePHP 開発する時にこうやってるよ的な記事が見当たらなかったので、
俺のAtom プラグイン達をそっと公開することにした。(公開してくださってる方々、本当に日々感謝しております。)
俺、実はこれ使ってるよ! 的なやつがあればぜひ教えてください!!!

言い訳

新卒未経験で入社したくせに
PHP書く人が誰も使っていたいエディタを使って開発しているはぐれもののブログです。
間違ってるところ、こうした方がいいよというところは、 優しく 教えてください!

開発環境

vagrant の var/www/html/hoge を、 mac の ~/sshfs/hoge にマウントしています。
wadap.hatenablog.com
sshfs の使い方は割愛させて頂きます。

俺のAtom プラグイン

  • atom-beautify
    atom-beautify
    php-cs-fixer を使ってコードを綺麗に成形してくれるやつ。
    動作は多少重いが、GitHub 上にあるコードが全部綺麗になってるから嬉しい!
    (あと、プロジェクトで git の pre-commit でphp-cs-fixer が強制的に動くからその対策も兼ねてる。)

  • cakephp3-snippets
    cakephp3-snippets
    CakePHP3 のコードをいい感じに手助けしてくれるツール。
    ただ、完全ではないので、github にプルリクを送りたい。
    いや、送る!
    もう一回、Advent Calendar かいてやる!!!

  • atom-autocomplete-php

  • autocomplete-php
    atom-autocomplete-php
    autocomplete-php
    PHP を補完してくれるやつ。
    よく分からず2つとも入れてる。
    競合していないか心配だが、今のところ問題なさそうなのでOK
    美味しいもの × 美味しいもの = 超美味しいもの
    という理論。

  • color-picker
    color-picker
    色馬鹿な人には必須!
    これを使えば、 #cacaca が灰色だってすぐ分かる(当たり前)

  • editorconfig
    editorconfig
    複数人で開発するなら必須だと思う!
    ちなみに使ってる.editorconfig ファイルはこんな感じ!

; This file is for unifying the coding style for different editors and IDEs.
; More information at http://editorconfig.org

root = true

[*]
indent_style = space
indent_size = 4
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
char_set = utf-8  

[*.{html,css,js,ctp}]
indent_size = 2

[*.yml]
indent_style = space
indent_size = 2
/**
  * [hoge description]
  * @return [bool]
  */
public function hoge ()  
{
  return true;
}

みたいな、PHP doc を生成してくれるやつ!
使い方は非常に簡単!
public function hoge()の上の行で
/** って書いてエンター押すだけ!

  • file-icons
    file-icons
    なんとなく入れてる。

  • goto-definition
    goto-definition
    関数とかクラスとかの上にマウスをホバーさせると、PHP doc の内容を表示してくれる。
    また、カーソルを当てて Alt-Cmd-Return を押すと、
    宣言元に飛んでくれる。
    超便利!
    (Alt-Cmd-Returnは、この記事書いてて知った。書いてよかった!)

  • highlight-column
    highlight-column

縦線入れてくれるやつ。
HTML の対応とか見るのに便利!
あと、トイレとか行って戻ってきた時自分がどこにいるのか見失いにくい!

  • japanese-wrap
    japanese-wrap
    これは一番はじめに入れたプラグインの一つ。最古参。
    ないと日本語書くのが辛いらしい。

  • todo-show
    todo-show
    TODO とか FIXME とか NOTE とかをハイライトしてくれるやつ。

  • minimap
    minimap

自分がどこにいるのかがひと目で分かるminimapを表示してくれるプラグイン
でかいファイルになると、自分がどこにいるか分からず絶望的な気持ちになる。

と、こんな感じです。

逆に、入れてる人が多いようだけど入れていないのは、

  • emmet
    emmet
    入れたら、めちゃくちゃキーバインドが衝突したので外した。
    Ctrl+F とか Ctrl+B とかが使えなくなるのは致命的。

  • cakephp-snippets
    cakephp-snippets
    あまり補完してくれなかったから使うのをやめた。
    わがまま。

と、こんな感じです。

ついでなので、よく使うショートカットも書いておきます。

  • Ctrl + P, Ctrl + N, Ctrl + F , Ctrl + B
    前後左右のコマンド。
    これがないと死ぬ。

  • Ctrl + A , Ctrl + K, Ctrl + E
    行頭に戻る
    行末へ行く
    カーソルより後ろを削除 (切り取り)
    特に Ctrl + A は、スペースやタブを無視して行頭へ行ってくれるのがありがたい!

  • Cmd + D
    同じ変数を選択してくれるやつ。
    変数名を帰る時に便利!

  • Cmd + Alt + Return
    上述の、関数やクラスの宣言元を探してくれるやつ!
    今日から一軍の仲間入り!

  • Cmd + Shift + F
    プロジェクト全体検索 わりと時間かかるし、mac が 「ういーーーん」って言い出すけどよく使う。

  • Ctrl + Shift + ]
    どなたかのブログを拝見して、このキーにオートインデントを割り当てた。
    超便利!!!

  • Ctrl + Shift + M
    マークダウンのプレビュー 地味に便利!

  • Cmd + Shift + P
    プラグイン入れよう! と思ったらここ!

  • Cmd + L
    一度押すと、一行選択してくれる。
    二回以上押すと、順次下の行を選択していく

  • Cmd + T
    大事なの忘れてた!
    プロジェクト内のファイルを探すやつ!
    途中文字を抜かしてもいい感じに探してきてくれて便利!

すごくよくまとまっていて、よく参考にさせていただいてます!
http://qiita.com/YusukeHosonuma/items/0f687b16f0d5eeb0c18f

という感じです。
今後、変わっていくかもしれないけど、現時点では! という感じで書きました!
逆に CakePHP 書いてる人で、いいプラグイン知ってるよ?とか、こんなの作ったよ? って言う方がいらっしゃいましたら、
コメントなりなんなりでお知らせ下さい!
喜びます!

一言

頑張ってプルリク送ります!
あと、この記事が、Atom 使おうかな? とか、使ってる とかいう CakePHP3 ユーザーの目に止まり、お役に立てるとうれしいです!!!

twitter => @gorogoroyasu
フォローとかしてもいいんですよ!!!

[補足] これ、CakePHP3 関係なくね? というご指摘をいただきました。
もしかしたらCakePHP3 は、書き直すかも。。。