yak shaving life

遠回りこそが最短の道

「初めてのJavaScript 第3版」を読んだ

タイトル

初めてのJavaScript 第3版 ―ES2015以降の最新ウェブ開発

初めてのJavaScript 第3版 ―ES2015以降の最新ウェブ開発

  • 作者:Ethan Brown
  • 発売日: 2017/01/20
  • メディア: 単行本(ソフトカバー)


初めてのJavaScript 第3版 ―ES2015以降の最新ウェブ開発


なぜ読もうと思ったか

JSについては大概ネット上の情報とプロダクトやライブラリのコード読んで身につけてきており、そういえばJSの本って読んだことないな〜と思っていた。オライリーからES6完全対応の本が出たら買おうと思っていて、発売してすぐに購入した。

以前に一度読んではいたが、復習のためにもう一度読もうと思った。


書評というか感想

一言で言うと

良い本。Webサイトに動きをつけるツールとしてではなく、一つのプログラミング言語としてしっかり解説されている。ES6(ES2015)についても丁寧に書かれていてタメになった。

感想箇条書き

  • 言語としてのJavaScript(ES6)入門にオススメしたい良本
  • 逆にブラウザ操作についてはあまり載っておらず、一章分の解説があるのみ。あとjQueryの章もある
  • Node.jsについての章もあるが、若干内容が古いので注意(import/exportとか載ってない)
  • ES2016, 2017については付録のみ。ただ付録にasync/awaitの使い方とかは載っている

実はよく分かっていないところ

Promise。難しい。ライブラリとかでPromise返してくるメソッドを利用することは問題ないけど、自分で実装できるかというと微妙。理解が怪しい。経験上async/awaitとPromise.allが使えればなんとかなるのだが、もう少し内部構造を正しく理解したい。14章を繰り返し読む必要がある。


読んだ後どうするか

自分用にたくさんメモを取ったので、フロントエンド開発時に役立ちそう。
あとはMDNのJSリファレンス(JavaScript | MDN)を改めて読もうと思った。
あともう一冊くらい適当な技術書を読んでみたい。なんとなく。

 

「PHPはどう動くのか」を読んだ

まえがき

積ん読消化の手引きが書かれた素晴らしい記事を読んだので、実践してみようと思う。
note.mu

自身の備忘録&読書のモチベーション向上、あとは自分の感想を見て参考にしてくれる人が世の中に1人でもいたら嬉しいという心持ちです。


タイトル

PHPはどのように動くのか ~PHPコアから読み解く仕組みと定石

PHPはどのように動くのか ~PHPコアから読み解く仕組みと定石

  • 作者:蒋池 東龍
  • 発売日: 2015/09/17
  • メディア: 単行本(ソフトカバー)

PHPはどう動くのか 〜PHPコアから読み解く仕組みと定石


なぜ読もうと思ったか

職場の先輩がオススメしていたし、前から気になっていたから。
Kindle版を買って、通勤時間とかで読んだ。


読了した感想など

一言で言うと

PHPの言語処理系についての入門書的立ち位置と思われる。良い。すごく良い。ただし、より深く追うためには自分でソースを読んだりPHPマニュアルを見る必要がある。当たり前か。

感想箇条書き

  • PHP内部のことについて色々知れる。面白いしみんな読むべき
  • オペコードそのものの解説とかはないので詳しいことは自分で調べる必要がある
  • PHP7はなぜはやいのか、の章が一番良かった。
  • 文字列構造体とかが持っているコピーオンライト判定用のzend_refcounted構造体の変数名がgcなのがいいなと思ってにやっとしてしまった(気持ち悪い)
  • メモリを富豪的に使うことでパフォーマンスを向上させるアプローチが随所に見られた。ソフトウェアもハードウェアとともに進化していくといういい例だと思った
  • 自分の無知を噛みしめる良い機会になった

実はよく分かっていないところ

PHP7のHashTableの構造が微妙によく分からなかった。Bucketのリストはどう持ってるのやら。
あと、「第7章 Zend Engineをハックする」はほぼ流し読みしかできていない。いつかもう一度読みたい。というか、この章は読むだけだと眠すぎる。ちゃんと写経して動かした方が良さげ。


読んだ後どうするか

第1〜3章および第5章の内容を心に留めて、なるべくパフォーマンスの良いプログラムを書けるよう意識する。内容忘れそうなので1章と2章は繰り返し読みたい。
また、PHP7へのバージョンアップを推進するときの材料が増えた。
あとはhttp://php.net/manual/ja/internals2.phpを読んでみようという気持ちになった。

CakePHPでComponentディレクトリ直下以外に置いたComponentを読み込む方法

タイトルの通り、src/Controller/Component/ 直下以外の場所にComponentを置いてControllerからloadしたい場合。なぜか公式にやり方が書いていなかったのでメモ。

バージョン

CakePHP 3.x

書き方

例えばsrc/Controller/Component/SubDir/AbcdComponentをloadしたい場合は以下のように書けば良い

// In Your Controller
$this->loadComponent('Abcd', [
    'className'=> '\App\Controller\Component\SubDir/AbcdComponent'
]);

備考

上記でちゃんと動きますが表記が冗長な感じですし、公式に載っていないということはおそらく推奨されていないということなので、大人しくComponent/直下に置きましょう。Componentの数が増えたりNamespaceを切りたいということであればPluginにしてしまうのが良さそうです。

JSでモジュール化するならとりあえずこれ、ってやつ

普段書かないNode.jsをたまに書くと、モジュール化のやり方を思い出せなくて困る。

ググると詳細な解説記事がたくさん出て来るが、やり方がいくつかあって結局どれか悩むので、自分用にメモっておく。

基本的には既存コードやライブラリに合わせて書くのがよいが、選択肢は二つ。ES6で追加されたimport/export(ES Modules)か、module.exports/require(CommonJS)のどちらか。2018年時点ではCommonJSで書かれたコードが結構多い気がするので、とりあえずこちらを使うことにする。

// module_sample.js
function hello() {
  return "Hello, Module!";
}

module.exports = hello;
// require_sample.js
function hello() {
  return 'Hello, World!';
}

const module_hello = require('./module_sample.js');

console.log(hello());
console.log(module_hello());
$ node require_sample.js

#=> Hello, World!
#=> Hello, Module!

複数の関数をエクスポートしたいときはオブジェクトのプロパティに突っ込む感じで。

// module_object.js
module.exports = {
  hello() {
    return "Hello, Module Object!";
  },
  bye() {
    return "Bye, Module Object.";
  },
};
// require_sample2.js
function hello() {
  return 'Hello, World!';
}

const module_object = require('./module_object.js');

console.log(hello());
console.log(module_object.hello());
console.log(module_object.bye());
$ node require_sample2.js

#=> Hello, World!
#=> Hello, Module Object!
#=> Bye, Module Object.

その他メモ。

  • オブジェクトのエクスポート時はexports.hello = function(){...} とも書けるけど別にmodule.exportsでいい気がする

  • ブラウザ上のJSでこの構文を使いたい場合はwebpack等が必要

  • ES6ネイティブのES Modulesが近いうち主流になる。すでに有名ライブラリ等はこちらになってきている

  • その他の方法(AMDとか)を使うメリットはおそらくないので使わない

ブログ作った

技術っぽいことやぽくないことなどをアウトプットしたいと思い、ブログを作ることにした。しかし、選択肢が複数ありずいぶん悩んだ。具体的には下記のようなフローで意思決定をした。

  • 勉強を兼ねて、なんか新しい技術を(無駄に)ふんだんに使ってブログを構築しよう!無駄にSPAにしてPWAにしてdev.to並みの爆速サイトにしよう!Reactかな…裏はBFF…API Aggregation…SSR…ワクワク…
  • いや待て、そんなのやったことないしいつ出来上がるか分かったんもんじゃない、とりあえずRailsとかの慣れた技術スタックでサクッと作ったほうがいいのでは
  • いやいや、よく考えたら動的である必要すらないのだから静的サイトジェネレーターでええやん。Jekyllとかいうのがあった気がするぞ
  • てかWordPressにすれば一瞬で構築できるやん。AWSWordPress入ってるイメージみたいなのあった気がするし
  • と色々考えたけど、目的は「ブログを書くこと」であって同時に色々やろうというのは良くない。純度が低い。純度が大切。純度を高めよう。手間を最低限におさめるには…普通に適当なブログサービス使うよね普通に。ええ。

てな訳でこんにちははてなブログ。これからよろしく。

今の所、決まっているのはブログタイトルのみ。ブログのコンセプトとかどんなカテゴリの記事書くとかなーんにも考えてないけど、とりあえず自分と誰かもう一人くらいが読んでくれたらいいやという思考で何かしらアウトプットしていく所存。最近アウトプット筋が大分落ちている気がするので、徐々に取り戻していかねば…。